713 def makeAlgs (self, config) :
719 jetCollectionName=self.jetCollection
720 if(self.jetCollection==
"AnalysisJets") :
721 jetCollectionName=
"AntiKt4EMPFlowJets"
722 if(self.jetCollection==
"AnalysisLargeRJets") :
723 jetCollectionName=
"AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"
725 if self.largeRMass
not in [
"Comb",
"Calo",
"TA"]:
726 raise ValueError(
"Invalid large-R mass defintion {0}!".
format(self.largeRMass) )
728 if self.jetInput
not in [
"LCTopo",
"TrackCaloCluster",
"UFO"]:
729 raise ValueError(
"Invalid input type '{0}' for large-R jets!".
format(self.jetInput) )
731 if self.jetInput ==
"TrackCaloCluster":
733 if self.largeRMass !=
"Calo":
734 raise ValueError(
"Invalid large-R TCC jet mass '{0}'!".
format(self.largeRMass) )
735 configFile =
"JES_MC16recommendation_FatJet_TCC_JMS_calo_30Oct2018.config"
736 if self.jetInput ==
"LCTopo":
738 if self.jetInput ==
"UFO":
739 configFile =
"JES_MC20PreRecommendation_R10_UFO_CSSK_SoftDrop_JMS_R21Insitu_02Aug2024.config"
740 if self.calibToolConfigFile
is not None:
741 configFile = self.calibToolConfigFile
743 if self.jetInput ==
"TrackCaloCluster" or self.jetInput ==
"UFO" or config.dataType()
is DataType.FullSim:
744 calibSeq =
"EtaJES_JMS"
745 elif config.dataType()
is DataType.Data:
746 calibSeq =
"EtaJES_JMS_Insitu"
747 if self.calibToolCalibSeq
is not None:
748 calibSeq = self.calibToolCalibSeq
750 if self.calibToolCalibArea
is not None:
751 calibArea = self.calibToolCalibArea
753 if not config.isPhyslite()
or self.recalibratePhyslite:
755 alg = config.createAlgorithm(
'CP::JetCalibrationAlg',
'JetCalibrationAlg'+self.containerName )
756 config.addPrivateTool(
'calibrationTool',
'JetCalibrationTool' )
758 alg.calibrationTool.JetCollection = jetCollectionName[:-4]
760 if configFile
is None:
761 raise ValueError(f
'Unsupported: {self.jetInput=}, {config.dataType()=}')
762 alg.calibrationTool.ConfigFile = configFile
765 raise ValueError(f
'Unsupported: {self.jetInput=}, {config.dataType()=}')
766 alg.calibrationTool.CalibSequence = calibSeq
768 if calibArea
is not None:
769 alg.calibrationTool.CalibArea = calibArea
771 alg.calibrationTool.IsData = (config.dataType()
is DataType.Data)
772 alg.jets = config.readName(self.containerName)
775 if self.jetInput ==
"UFO" and config.dataType()
in [DataType.FullSim, DataType.FastSim]:
776 alg = config.createAlgorithm(
'CP::JetUncertaintiesAlg',
'JetUncertaintiesAlg'+self.containerName )
777 self.createUncertaintyTool(alg, config, jetCollectionName, doPseudoData=( self.systematicsModelJER
in [
"Full",
"All"] ))
779 alg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
782 alg.outOfValidity = 2
783 alg.outOfValidityDeco =
'outOfValidity'
785 alg.jets = config.readName (self.containerName)
786 alg.jetsOut = config.copyName (self.containerName)
787 alg.preselection = config.getPreselection (self.containerName,
'')
789 if self.jetInput !=
"UFO":
790 alg = config.createAlgorithm(
'CP::JetUncertaintiesAlg',
'JetUncertaintiesAlg'+self.containerName )
793 alg.outOfValidity = 2
794 alg.outOfValidityDeco =
'outOfValidity'
795 config.addPrivateTool(
'uncertaintiesTool',
'JetUncertaintiesTool' )
797 alg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
798 alg.uncertaintiesTool.ConfigFile = \
799 "rel21/Moriond2018/R10_{0}Mass_all.config".
format(self.largeRMass)
800 alg.uncertaintiesTool.MCType =
"MC16a"
801 alg.uncertaintiesTool.IsData = (config.dataType()
is DataType.Data)
803 alg.jets = config.readName (self.containerName)
804 alg.jetsOut = config.copyName (self.containerName)
805 alg.preselection = config.getPreselection (self.containerName,
'')
806 config.addSelection (self.containerName,
'',
'outOfValidity')
808 if self.jetInput ==
"UFO" and config.dataType()
is not DataType.Data:
810 alg = config.createAlgorithm(
'CP::JetFFSmearingAlg',
'JetFFSmearingAlg'+self.containerName )
811 self.createFFSmearingTool(alg, config)
812 alg.outOfValidity = 2
813 alg.outOfValidityDeco =
'outOfValidityJMR'
814 alg.jets = config.readName (self.containerName)
815 alg.jetsOut = config.copyName (self.containerName)
816 alg.preselection = config.getPreselection (self.containerName,
'')
818 if self.minPt > 0
or self.maxPt > 0
or self.maxEta > 0:
820 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'JetPtEtaCutAlg'+self.containerName )
821 alg.selectionDecoration =
'selectPtEta,as_bits'
822 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
823 alg.selectionTool.minPt = self.minPt
824 alg.selectionTool.maxPt = self.maxPt
825 alg.selectionTool.maxEta = self.maxEta
826 alg.particles = config.readName (self.containerName)
827 alg.preselection = config.getPreselection (self.containerName,
'')
828 config.addSelection (self.containerName,
'', alg.selectionDecoration,
831 if self.minMass > 0
or self.maxMass > 0:
833 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'JetMassCutAlg'+self.containerName )
834 alg.selectionDecoration =
'selectMass,as_bits'
835 config.addPrivateTool(
'selectionTool',
'CP::AsgMassSelectionTool' )
836 alg.selectionTool.minM = self.minMass
837 alg.selectionTool.maxM = self.maxMass
838 alg.particles = config.readName (self.containerName)
839 alg.preselection = config.getPreselection (self.containerName,
'')
840 config.addSelection (self.containerName,
'', alg.selectionDecoration,
843 config.addOutputVar (self.containerName,
'm',
'm')