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