84 def makeAlgs (self, config) :
86 if config.isPhyslite() :
87 metSuffix =
'AnalysisMET'
89 jetContainer = config.originalName (self.jets)
90 metSuffix = jetContainer[:-4]
95 btIndex = metSuffix.find(
'_BTagging')
97 metSuffix = metSuffix[:btIndex]
100 alg = config.createAlgorithm(
'CP::MetMakerAlg',
'MetMakerAlg' )
101 config.addPrivateTool(
'makerTool',
'met::METMaker' )
102 alg.makerTool.skipSystematicJetSelection = self.skipSystematicJetSelection
104 alg.doJetJVT = self.useJVT
106 config.addPrivateTool(
'makerTool.JvtSelTool',
'CP::NNJvtSelectionTool' )
107 alg.makerTool.JvtSelTool.JetContainer = config.readName (self.jets)
109 alg.makerTool.JetRejectionDec =
'fjvt_selection'
111 alg.makerTool.JetSelection = self.metWP
112 alg.makerTool.DoPFlow =
'PFlow' in metSuffix
or metSuffix==
"AnalysisMET"
113 alg.makerTool.DoSetMuonJetEMScale = self.setMuonJetEMScale
if self.muons
else False
115 if config.dataType()
is not DataType.Data :
116 config.addPrivateTool(
'systematicsTool',
'met::METSystematicsTool' )
118 alg.metCore =
'MET_Core_' + metSuffix
119 alg.metAssociation =
'METAssoc_' + metSuffix
120 alg.jets = config.readName (self.jets)
121 alg.softTermKey =
"PVSoftTrk" if not self.useCaloSoftTerm
else "SoftClus"
122 if self.muons !=
"" :
123 alg.muons, alg.muonsSelection = config.readNameAndSelection (self.muons, excludeFrom={
'or'})
124 if self.electrons !=
"" :
125 alg.electrons, alg.electronsSelection = config.readNameAndSelection (self.electrons, excludeFrom={
'or'})
126 if self.photons !=
"" :
127 alg.photons, alg.photonsSelection = config.readNameAndSelection (self.photons, excludeFrom={
'or'})
129 alg.taus, alg.tausSelection = config.readNameAndSelection (self.taus, excludeFrom={
'or'})
131 if isinstance(self.invisible, str):
132 self.invisible = [self.invisible]
133 invisibleContainers, invisibleSelections = zip(*[config.readNameAndSelection (container, excludeFrom={
'or'})
for container
in self.invisible])
134 alg.invisible =
list(invisibleContainers)
135 alg.invisibleSelection =
list(invisibleSelections)
136 alg.met = config.writeName (self.containerName, isMet =
True)
140 alg = config.createAlgorithm(
'CP::MetBuilderAlg',
'MetBuilderAlg' )
141 alg.softTerm =
"PVSoftTrk" if not self.useCaloSoftTerm
else "SoftClus"
142 alg.met = config.readName (self.containerName)
146 if self.saveSignificance:
147 alg = config.createAlgorithm(
'CP::MetSignificanceAlg',
'MetSignificanceAlg' )
148 config.addPrivateTool(
'significanceTool',
'met::METSignificance' )
149 if self.muons !=
"" :
150 config.addPrivateTool(
'significanceTool.MuonCalibTool',
'CP::MuonCalibTool' )
152 alg.significanceTool.MuonCalibTool.calibMode = (
153 config.getContainerMeta(self.muons.
split(
".")[0],
'calibMode', failOnMiss=
True))
156 if self.jetCalibConfig ==
"":
157 if config.geometry()
is LHCPeriod.Run2:
158 self.jetCalibConfig =
"PreRec_R22_PFlow_ResPU_EtaJES_GSC_February23_230215.config"
159 self.jetCalibArea =
"00-04-82"
160 elif config.geometry() >= LHCPeriod.Run3:
161 self.jetCalibConfig =
"AntiKt4EMPFlow_MC23a_PreRecR22_Phase2_CalibConfig_ResPU_EtaJES_GSC_241208_InSitu.config"
162 self.jetCalibArea =
"00-04-83"
164 if self.jetCalibSequence ==
"":
167 self.jetCalibSequence =
'JetArea_Residual_EtaJES_GSC'
170 if self.egammaESModel ==
"":
171 if config.geometry()
is LHCPeriod.Run2:
172 self.egammaESModel =
'es2023_R22_Run2_v1'
173 elif config.geometry()
is LHCPeriod.Run3:
174 self.egammaESModel =
'es2024_Run3_v0'
176 alg.significanceTool.SoftTermParam = 0
177 if self.softTermResolution > 0:
178 alg.significanceTool.SoftTermReso = self.softTermResolution
179 alg.significanceTool.TreatPUJets = self.treatPUJets
180 alg.significanceTool.JetCalibConfig = self.jetCalibConfig
181 alg.significanceTool.JetCalibSequence = self.jetCalibSequence
182 alg.significanceTool.JetCalibArea = self.jetCalibArea
183 alg.significanceTool.EgammaESModel = self.egammaESModel
184 alg.significanceTool.EgammaDecorrelationModel = self.egammaDecorrelationModel
185 alg.significanceTool.EgammaUseFastsim = (config.dataType()
is DataType.FastSim)
186 alg.significanceTool.TauTESConfig = self.tauTESConfig
187 alg.significanceTool.TauUseMVAResolution = self.tauUseMVAResolution
188 alg.met = config.readName (self.containerName)
189 config.addOutputVar (self.containerName,
'significance_%SYS%',
'significance')
190 if self.addExtraSignificanceVars:
191 alg.sigDirectionalDecoration =
"sigDirectional_%SYS%"
192 alg.METOverSqrtSumETDecoration =
"METOverSqrtSumET_%SYS%"
193 alg.METOverSqrtHTDecoration =
"METOverSqrtHT_%SYS%"
194 config.addOutputVar (self.containerName,
'sigDirectional_%SYS%',
'sigDirectional')
195 config.addOutputVar (self.containerName,
'METOverSqrtSumET_%SYS%',
'METOverSqrtSumET')
196 config.addOutputVar (self.containerName,
'METOverSqrtHT_%SYS%',
'METOverSqrtHT')
198 config.addOutputVar (self.containerName,
'met',
'met')
199 config.addOutputVar (self.containerName,
'phi',
'phi')
200 config.addOutputVar (self.containerName,
'sumet',
'sumet')
201 config.addOutputVar (self.containerName,
'name',
'name', noSys=
True, enabled=
False)