740 def makeAlgs (self, config) :
746 jetCollectionName=self.jetCollection
747 if(self.jetCollection==
"AnalysisJets") :
748 jetCollectionName=
"AntiKt4EMPFlowJets"
749 if(self.jetCollection==
"AnalysisLargeRJets") :
750 jetCollectionName=
"AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"
752 if self.largeRMass
not in [
"Comb",
"Calo",
"TA"]:
753 raise ValueError(
"Invalid large-R mass defintion {0}!".
format(self.largeRMass) )
755 if self.jetInput
not in [
"LCTopo",
"TrackCaloCluster",
"UFO"]:
756 raise ValueError(
"Invalid input type '{0}' for large-R jets!".
format(self.jetInput) )
758 if self.jetInput ==
"TrackCaloCluster":
760 if self.largeRMass !=
"Calo":
761 raise ValueError(
"Invalid large-R TCC jet mass '{0}'!".
format(self.largeRMass) )
762 configFile =
"JES_MC16recommendation_FatJet_TCC_JMS_calo_30Oct2018.config"
763 if self.jetInput ==
"LCTopo":
765 if self.jetInput ==
"UFO":
766 configFile =
"JES_MC20PreRecommendation_R10_UFO_CSSK_SoftDrop_JMS_R21Insitu_26Nov2024.config"
767 calibArea =
"00-04-83"
768 if self.calibToolConfigFile
is not None:
769 configFile = self.calibToolConfigFile
771 if self.jetInput ==
"TrackCaloCluster" or self.jetInput ==
"UFO" or config.dataType()
is DataType.FullSim:
772 calibSeq =
"EtaJES_JMS"
773 elif config.dataType()
is DataType.Data:
774 calibSeq =
"EtaJES_JMS_Insitu"
775 if self.calibToolCalibSeq
is not None:
776 calibSeq = self.calibToolCalibSeq
778 if self.calibToolCalibArea
is not None:
779 calibArea = self.calibToolCalibArea
781 if not config.isPhyslite()
or self.recalibratePhyslite:
783 alg = config.createAlgorithm(
'CP::JetCalibrationAlg',
'JetCalibrationAlg' )
784 config.addPrivateTool(
'calibrationTool',
'JetCalibrationTool' )
786 alg.calibrationTool.JetCollection = jetCollectionName[:-4]
788 if configFile
is None:
789 raise ValueError(f
'Unsupported: {self.jetInput=}, {config.dataType()=}')
790 alg.calibrationTool.ConfigFile = configFile
793 raise ValueError(f
'Unsupported: {self.jetInput=}, {config.dataType()=}')
794 alg.calibrationTool.CalibSequence = calibSeq
796 if calibArea
is not None:
797 alg.calibrationTool.CalibArea = calibArea
799 alg.calibrationTool.IsData = (config.dataType()
is DataType.Data)
800 alg.jets = config.readName(self.containerName)
803 if self.jetInput ==
"UFO" and config.dataType()
in [DataType.FullSim, DataType.FastSim]:
804 alg = config.createAlgorithm(
'CP::JetUncertaintiesAlg',
'JetUncertaintiesAlg' )
805 self.createUncertaintyTool(alg, config, jetCollectionName, doPseudoData=( self.systematicsModelJER
in [
"Full",
"All"] ))
807 alg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
810 alg.outOfValidity = 2
811 alg.outOfValidityDeco =
'outOfValidity'
813 alg.jets = config.readName (self.containerName)
814 alg.jetsOut = config.copyName (self.containerName)
815 alg.preselection = config.getPreselection (self.containerName,
'')
817 if self.jetInput !=
"UFO":
818 alg = config.createAlgorithm(
'CP::JetUncertaintiesAlg',
'JetUncertaintiesAlg' )
821 alg.outOfValidity = 2
822 alg.outOfValidityDeco =
'outOfValidity'
823 config.addPrivateTool(
'uncertaintiesTool',
'JetUncertaintiesTool' )
825 alg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
826 alg.uncertaintiesTool.ConfigFile = \
827 "rel21/Moriond2018/R10_{0}Mass_all.config".
format(self.largeRMass)
828 alg.uncertaintiesTool.MCType =
"MC16a"
829 alg.uncertaintiesTool.IsData = (config.dataType()
is DataType.Data)
831 alg.jets = config.readName (self.containerName)
832 alg.jetsOut = config.copyName (self.containerName)
833 alg.preselection = config.getPreselection (self.containerName,
'')
834 config.addSelection (self.containerName,
'',
'outOfValidity')
836 if self.jetInput ==
"UFO" and config.dataType()
is not DataType.Data:
838 alg = config.createAlgorithm(
'CP::JetFFSmearingAlg',
'JetFFSmearingAlg' )
839 self.createFFSmearingTool(alg, config)
840 alg.outOfValidity = 2
841 alg.outOfValidityDeco =
'outOfValidityJMR'
842 alg.jets = config.readName (self.containerName)
843 alg.jetsOut = config.copyName (self.containerName)
844 alg.preselection = config.getPreselection (self.containerName,
'')
846 if self.minPt > 0
or self.maxPt > 0
or self.maxEta > 0
or self.maxRapidity > 0:
848 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'JetPtEtaCutAlg' )
849 alg.selectionDecoration =
'selectPtEta,as_bits'
850 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
851 alg.selectionTool.minPt = self.minPt
852 alg.selectionTool.maxPt = self.maxPt
853 alg.selectionTool.maxEta = self.maxEta
854 alg.selectionTool.maxRapidity = self.maxRapidity
855 alg.particles = config.readName (self.containerName)
856 alg.preselection = config.getPreselection (self.containerName,
'')
857 config.addSelection (self.containerName,
'', alg.selectionDecoration,
860 if self.minMass > 0
or self.maxMass > 0:
862 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'JetMassCutAlg' )
863 alg.selectionDecoration =
'selectMass,as_bits'
864 config.addPrivateTool(
'selectionTool',
'CP::AsgMassSelectionTool' )
865 alg.selectionTool.minM = self.minMass
866 alg.selectionTool.maxM = self.maxMass
867 alg.particles = config.readName (self.containerName)
868 alg.preselection = config.getPreselection (self.containerName,
'')
869 config.addSelection (self.containerName,
'', alg.selectionDecoration,
872 config.addOutputVar (self.containerName,
'm',
'm')