818 def makeAlgs (self, config) :
819
820
821 if config.getContainerMeta(self.containerName, 'jetRadius', failOnMiss=True) != 10:
822 return
823
824 configFile = None
825 calibSeq = None
826 calibArea = None
827
828 jetCollectionName=self.jetCollection
829 if(self.jetCollection==
"AnalysisJets") :
830 jetCollectionName="AntiKt4EMPFlowJets"
831 if(self.jetCollection==
"AnalysisLargeRJets") :
832 jetCollectionName="AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"
833
834 jetInput = config.getContainerMeta(self.containerName, 'jetInput', failOnMiss=True)
835 trim = config.getContainerMeta(self.containerName, 'jetTrim', failOnMiss=True)
836
837 if jetInput not in ["UFO"]:
838 raise ValueError("Invalid input type '{0}' for large-R jets!".format(jetInput) )
839
840 if not trim:
841 raise ValueError("Untrimmed large-R jets are not supported!")
842
843 configFile = "JES_MC20PreRecommendation_R10_UFO_CSSK_SoftDrop_JMS_R21Insitu_26Nov2024.config"
844 calibArea = "00-04-83"
845 if self.calibToolConfigFile is not None:
846 configFile = self.calibToolConfigFile
847
848 if config.dataType() is not DataType.Data:
849 calibSeq = "EtaJES_JMS"
850 elif config.dataType() is DataType.Data:
851 calibSeq = "EtaJES_JMS_Insitu"
852 if self.calibToolCalibSeq is not None:
853 calibSeq = self.calibToolCalibSeq
854
855 if self.calibToolCalibArea is not None:
856 calibArea = self.calibToolCalibArea
857
858 if not config.isPhyslite() or self.recalibratePhyslite:
859
860 calibToolName = 'JetCalibTool_' + jetCollectionName[:-4]
861 calibTool = config.createPublicTool( 'JetCalibrationTool', calibToolName )
862
863 calibTool.JetCollection = jetCollectionName[:-4]
864
865 if configFile is None:
866 raise ValueError(f'Unsupported: {jetInput=}, {config.dataType()=}')
867 calibTool.ConfigFile = configFile
868
869 if calibSeq is None:
870 raise ValueError(f'Unsupported: {jetInput=}, {config.dataType()=}')
871 calibTool.CalibSequence = calibSeq
872
873 if calibArea is not None:
874 calibTool.CalibArea = calibArea
875
876 calibTool.IsData = (config.dataType() is DataType.Data)
877
878 alg = config.createAlgorithm( 'CP::JetCalibrationAlg', 'JetCalibrationAlg' )
879 alg.calibrationTool = f'{calibTool.getType()}/{calibTool.getName()}'
880 alg.jets = config.readName(self.containerName)
881 alg.jetsOut = config.copyName(self.containerName)
882
883
884 if jetInput == "UFO" and config.dataType() in [DataType.FullSim, DataType.FastSim] and self.runUncertainties:
885 alg = config.createAlgorithm( 'CP::JetUncertaintiesAlg', 'JetUncertaintiesAlg' )
886 self.createUncertaintyTool(alg, config, jetCollectionName, doPseudoData=( self.systematicsModelJER in ["Full","All"] ))
887
888 alg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
889
890
891 alg.outOfValidity = 2
892 alg.outOfValidityDeco = 'outOfValidity'
893
894 alg.jets = config.readName (self.containerName)
895 alg.jetsOut = config.copyName (self.containerName)
896 alg.preselection = config.getPreselection (self.containerName, '')
897
898 if jetInput != "UFO" and self.runUncertainties:
899 alg = config.createAlgorithm( 'CP::JetUncertaintiesAlg', 'JetUncertaintiesAlg' )
900
901
902 alg.outOfValidity = 2
903 alg.outOfValidityDeco = 'outOfValidity'
904 config.addPrivateTool( 'uncertaintiesTool', 'JetUncertaintiesTool' )
905
906 alg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
907 alg.uncertaintiesTool.ConfigFile = \
908 "rel21/Moriond2018/R10_{0}Mass_all.config".format(self.largeRMass)
909 alg.uncertaintiesTool.MCType = "MC16a"
910 alg.uncertaintiesTool.IsData = (config.dataType() is DataType.Data)
911
912 alg.jets = config.readName (self.containerName)
913 alg.jetsOut = config.copyName (self.containerName)
914 alg.preselection = config.getPreselection (self.containerName, '')
915 config.addSelection (self.containerName, '', 'outOfValidity')
916
917 if jetInput == "UFO" and config.dataType() is not DataType.Data:
918
919 alg = config.createAlgorithm( 'CP::JetFFSmearingAlg', 'JetFFSmearingAlg' )
920 self.createFFSmearingTool(alg, config)
921 alg.outOfValidity = 2
922 alg.outOfValidityDeco = 'outOfValidityJMR'
923 alg.jets = config.readName (self.containerName)
924 alg.jetsOut = config.copyName (self.containerName)
925 alg.preselection = config.getPreselection (self.containerName, '')
926
927 if self.minPt > 0 or self.maxPt > 0 or self.maxEta > 0 or self.maxRapidity > 0:
928
929 alg = config.createAlgorithm( 'CP::AsgSelectionAlg', 'JetPtEtaCutAlg' )
930 alg.selectionDecoration = 'selectPtEta,as_bits'
931 config.addPrivateTool( 'selectionTool', 'CP::AsgPtEtaSelectionTool' )
932 alg.selectionTool.minPt = self.minPt
933 alg.selectionTool.maxPt = self.maxPt
934 alg.selectionTool.maxEta = self.maxEta
935 alg.selectionTool.maxRapidity = self.maxRapidity
936 alg.particles = config.readName (self.containerName)
937 alg.preselection = config.getPreselection (self.containerName, '')
938 config.addSelection (self.containerName, '', alg.selectionDecoration,
939 preselection=True)
940
941 if self.minMass > 0 or self.maxMass > 0:
942
943 alg = config.createAlgorithm( 'CP::AsgSelectionAlg', 'JetMassCutAlg' )
944 alg.selectionDecoration = 'selectMass,as_bits'
945 config.addPrivateTool( 'selectionTool', 'CP::AsgMassSelectionTool' )
946 alg.selectionTool.minM = self.minMass
947 alg.selectionTool.maxM = self.maxMass
948 alg.particles = config.readName (self.containerName)
949 alg.preselection = config.getPreselection (self.containerName, '')
950 config.addSelection (self.containerName, '', alg.selectionDecoration,
951 preselection=True)
952
953 config.addOutputVar (self.containerName, 'm', 'm')
954