741 def makeAlgs (self, config) :
747 jetCollectionName=self.jetCollection
748 if(self.jetCollection==
"AnalysisJets") :
749 jetCollectionName=
"AntiKt4EMPFlowJets"
750 if(self.jetCollection==
"AnalysisLargeRJets") :
751 jetCollectionName=
"AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"
753 if self.largeRMass
not in [
"Comb",
"Calo",
"TA"]:
754 raise ValueError(
"Invalid large-R mass defintion {0}!".
format(self.largeRMass) )
756 if self.jetInput
not in [
"LCTopo",
"TrackCaloCluster",
"UFO"]:
757 raise ValueError(
"Invalid input type '{0}' for large-R jets!".
format(self.jetInput) )
759 if self.jetInput ==
"TrackCaloCluster":
761 if self.largeRMass !=
"Calo":
762 raise ValueError(
"Invalid large-R TCC jet mass '{0}'!".
format(self.largeRMass) )
763 configFile =
"JES_MC16recommendation_FatJet_TCC_JMS_calo_30Oct2018.config"
764 if self.jetInput ==
"LCTopo":
766 if self.jetInput ==
"UFO":
767 configFile =
"JES_MC20PreRecommendation_R10_UFO_CSSK_SoftDrop_JMS_R21Insitu_26Nov2024.config"
768 calibArea =
"00-04-83"
769 if self.calibToolConfigFile
is not None:
770 configFile = self.calibToolConfigFile
772 if self.jetInput ==
"TrackCaloCluster" or self.jetInput ==
"UFO" or config.dataType()
is DataType.FullSim:
773 calibSeq =
"EtaJES_JMS"
774 elif config.dataType()
is DataType.Data:
775 calibSeq =
"EtaJES_JMS_Insitu"
776 if self.calibToolCalibSeq
is not None:
777 calibSeq = self.calibToolCalibSeq
779 if self.calibToolCalibArea
is not None:
780 calibArea = self.calibToolCalibArea
782 if not config.isPhyslite()
or self.recalibratePhyslite:
784 alg = config.createAlgorithm(
'CP::JetCalibrationAlg',
'JetCalibrationAlg' )
785 config.addPrivateTool(
'calibrationTool',
'JetCalibrationTool' )
787 alg.calibrationTool.JetCollection = jetCollectionName[:-4]
789 if configFile
is None:
790 raise ValueError(f
'Unsupported: {self.jetInput=}, {config.dataType()=}')
791 alg.calibrationTool.ConfigFile = configFile
794 raise ValueError(f
'Unsupported: {self.jetInput=}, {config.dataType()=}')
795 alg.calibrationTool.CalibSequence = calibSeq
797 if calibArea
is not None:
798 alg.calibrationTool.CalibArea = calibArea
800 alg.calibrationTool.IsData = (config.dataType()
is DataType.Data)
801 alg.jets = config.readName(self.containerName)
804 if self.jetInput ==
"UFO" and config.dataType()
in [DataType.FullSim, DataType.FastSim]:
805 alg = config.createAlgorithm(
'CP::JetUncertaintiesAlg',
'JetUncertaintiesAlg' )
806 self.createUncertaintyTool(alg, config, jetCollectionName, doPseudoData=( self.systematicsModelJER
in [
"Full",
"All"] ))
808 alg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
811 alg.outOfValidity = 2
812 alg.outOfValidityDeco =
'outOfValidity'
814 alg.jets = config.readName (self.containerName)
815 alg.jetsOut = config.copyName (self.containerName)
816 alg.preselection = config.getPreselection (self.containerName,
'')
818 if self.jetInput !=
"UFO":
819 alg = config.createAlgorithm(
'CP::JetUncertaintiesAlg',
'JetUncertaintiesAlg' )
822 alg.outOfValidity = 2
823 alg.outOfValidityDeco =
'outOfValidity'
824 config.addPrivateTool(
'uncertaintiesTool',
'JetUncertaintiesTool' )
826 alg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
827 alg.uncertaintiesTool.ConfigFile = \
828 "rel21/Moriond2018/R10_{0}Mass_all.config".
format(self.largeRMass)
829 alg.uncertaintiesTool.MCType =
"MC16a"
830 alg.uncertaintiesTool.IsData = (config.dataType()
is DataType.Data)
832 alg.jets = config.readName (self.containerName)
833 alg.jetsOut = config.copyName (self.containerName)
834 alg.preselection = config.getPreselection (self.containerName,
'')
835 config.addSelection (self.containerName,
'',
'outOfValidity')
837 if self.jetInput ==
"UFO" and config.dataType()
is not DataType.Data:
839 alg = config.createAlgorithm(
'CP::JetFFSmearingAlg',
'JetFFSmearingAlg' )
840 self.createFFSmearingTool(alg, config)
841 alg.outOfValidity = 2
842 alg.outOfValidityDeco =
'outOfValidityJMR'
843 alg.jets = config.readName (self.containerName)
844 alg.jetsOut = config.copyName (self.containerName)
845 alg.preselection = config.getPreselection (self.containerName,
'')
847 if self.minPt > 0
or self.maxPt > 0
or self.maxEta > 0
or self.maxRapidity > 0:
849 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'JetPtEtaCutAlg' )
850 alg.selectionDecoration =
'selectPtEta,as_bits'
851 config.addPrivateTool(
'selectionTool',
'CP::AsgPtEtaSelectionTool' )
852 alg.selectionTool.minPt = self.minPt
853 alg.selectionTool.maxPt = self.maxPt
854 alg.selectionTool.maxEta = self.maxEta
855 alg.selectionTool.maxRapidity = self.maxRapidity
856 alg.particles = config.readName (self.containerName)
857 alg.preselection = config.getPreselection (self.containerName,
'')
858 config.addSelection (self.containerName,
'', alg.selectionDecoration,
861 if self.minMass > 0
or self.maxMass > 0:
863 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'JetMassCutAlg' )
864 alg.selectionDecoration =
'selectMass,as_bits'
865 config.addPrivateTool(
'selectionTool',
'CP::AsgMassSelectionTool' )
866 alg.selectionTool.minM = self.minMass
867 alg.selectionTool.maxM = self.maxMass
868 alg.particles = config.readName (self.containerName)
869 alg.preselection = config.getPreselection (self.containerName,
'')
870 config.addSelection (self.containerName,
'', alg.selectionDecoration,
873 config.addOutputVar (self.containerName,
'm',
'm')