165 def makeAlgs (self, config) :
167 jetCollectionName=self.jetCollection
168 if(self.jetCollection==
"AnalysisJets") :
169 jetCollectionName=
"AntiKt4EMPFlowJets"
170 if(self.jetCollection==
"AnalysisLargeRJets") :
171 jetCollectionName=
"AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"
173 if self.jetInput
not in [
"EMTopo",
"EMPFlow",
"HI"]:
175 "Unsupported input type '{0}' for R=0.4 jets!".
format(self.jetInput) )
177 if self.jvtWP
not in [
"FixedEffPt"]:
179 "Unsupported NNJvt WP '{0}'".
format(self.jvtWP) )
181 if self.fJvtWP
not in [
"Loose",
"Tight",
"Tighter"]:
183 "Unsupported fJvt WP '{0}'".
format(self.fJvtWP) )
185 if not config.isPhyslite()
or self.recalibratePhyslite:
187 alg = config.createAlgorithm(
'CP::JetCalibrationAlg',
'JetCalibrationAlg' )
188 config.addPrivateTool(
'calibrationTool',
'JetCalibrationTool' )
189 alg.calibrationTool.JetCollection = jetCollectionName[:-4]
191 if self.jetInput ==
"EMPFlow":
192 if config.geometry()
is LHCPeriod.Run2:
193 configFile =
"PreRec_R22_PFlow_ResPU_EtaJES_GSC_February23_230215.config"
194 alg.calibrationTool.CalibArea =
"00-04-82"
195 elif config.geometry() >= LHCPeriod.Run3:
196 configFile =
"AntiKt4EMPFlow_MC23a_PreRecR22_Phase2_CalibConfig_ResPU_EtaJES_GSC_241208_InSitu.config"
197 alg.calibrationTool.CalibArea =
"00-04-83"
198 elif self.jetInput ==
"HI":
199 if config.geometry()
is LHCPeriod.Run2:
200 configFile =
"JES_MC16_HI_Jan2021_5TeV.config"
201 if config.geometry()
is LHCPeriod.Run3:
202 configFile =
"AntiKt4HI_JES_constants_11-05-2024_13p6TeVFinalConfiguration.config"
203 alg.calibrationTool.CalibArea =
"00-04-83"
205 if config.dataType()
is DataType.FastSim:
206 configFile =
"JES_MC16Recommendation_AFII_{0}_Apr2019_Rel21.config"
208 configFile =
"JES_MC16Recommendation_Consolidated_{0}_Apr2019_Rel21.config"
209 configFile = configFile.format(self.jetInput)
210 if self.calibToolCalibArea
is not None:
211 alg.calibrationTool.CalibArea = self.calibToolCalibArea
212 if self.calibToolConfigFile
is not None:
213 configFile = self.calibToolConfigFile
214 alg.calibrationTool.ConfigFile = configFile
215 if config.dataType()
is DataType.Data:
216 if self.jetInput ==
"HI":
217 if config.geometry()
is LHCPeriod.Run2:
218 alg.calibrationTool.CalibSequence =
'EtaJES_Insitu'
219 if config.geometry()
is LHCPeriod.Run3:
220 alg.calibrationTool.CalibSequence =
'EtaJES'
222 alg.calibrationTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC_Insitu'
224 if self.jetInput ==
"EMPFlow":
225 alg.calibrationTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC'
226 elif self.jetInput ==
"HI":
227 alg.calibrationTool.CalibSequence =
'EtaJES'
229 alg.calibrationTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC_Smear'
230 if self.calibToolCalibSeq
is not None:
231 alg.calibrationTool.CalibSequence = self.calibToolCalibSeq
232 alg.calibrationTool.IsData = (config.dataType()
is DataType.Data)
233 alg.jets = config.readName (self.containerName)
234 alg.jetsOut = config.copyName (self.containerName)
237 if self.runJvtUpdate :
238 alg = config.createAlgorithm(
'CP::JvtUpdateAlg',
'JvtUpdateAlg' )
239 config.addPrivateTool(
'jvtTool',
'JetVertexTaggerTool' )
240 alg.jvtTool.JetContainer = self.jetCollection
241 alg.jvtTool.SuppressInputDependence=
True
242 alg.jets = config.readName (self.containerName)
243 alg.jetsOut = config.copyName (self.containerName)
244 alg.preselection = config.getPreselection (self.containerName,
'')
246 if self.runNNJvtUpdate:
247 assert self.jetInput==
"EMPFlow",
"NN JVT only defined for PFlow jets"
248 alg = config.createAlgorithm(
'CP::JetDecoratorAlg',
'NNJvtUpdateAlg' )
249 config.addPrivateTool(
'decorator',
'JetPileupTag::JetVertexNNTagger' )
251 alg.jets = config.readName (self.containerName)
252 alg.jetsOut = config.copyName (self.containerName)
253 alg.decorator.JetContainer = alg.jetsOut.replace (
'%SYS%',
'NOSYS')
254 alg.decorator.SuppressInputDependence=
True
255 alg.decorator.SuppressOutputDependence=
True
259 if self.runJvtSelection :
260 assert self.jetInput==
"EMPFlow",
"NNJvt WPs and SFs only valid for PFlow jets"
261 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'JvtSelectionAlg')
262 config.addPrivateTool(
'selectionTool',
'CP::NNJvtSelectionTool')
263 alg.selectionTool.JetContainer = config.readName(self.containerName)
264 alg.selectionTool.WorkingPoint = self.jvtWP
265 alg.selectionTool.MaxPtForJvt = 60*GeV
266 alg.selectionDecoration =
"jvt_selection,as_char"
267 alg.particles = config.readName(self.containerName)
269 if self.runJvtEfficiency
and config.dataType()
is not DataType.Data:
270 alg = config.createAlgorithm(
'CP::JvtEfficiencyAlg',
'JvtEfficiencyAlg' )
271 config.addPrivateTool(
'efficiencyTool',
'CP::NNJvtEfficiencyTool' )
272 alg.efficiencyTool.JetContainer = config.readName(self.containerName)
273 alg.efficiencyTool.MaxPtForJvt = 60*GeV
274 alg.efficiencyTool.WorkingPoint = self.jvtWP
275 if config.geometry()
is LHCPeriod.Run2:
276 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/NNJvtSFFile_Run2_EMPFlow.root"
278 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/NNJvtSFFile_Run3_EMPFlow.root"
279 alg.selection =
'jvt_selection,as_char'
280 alg.scaleFactorDecoration =
'jvt_effSF_%SYS%'
281 alg.outOfValidity = 2
282 alg.outOfValidityDeco =
'no_jvt'
283 alg.skipBadEfficiency =
False
284 alg.jets = config.readName (self.containerName)
285 alg.preselection = config.getPreselection (self.containerName,
'')
286 config.addOutputVar (self.containerName, alg.scaleFactorDecoration,
'jvtEfficiency')
287 config.addSelection (self.containerName,
'baselineJvt',
'jvt_selection,as_char', preselection=
False)
289 if self.runFJvtSelection :
290 assert self.jetInput==
"EMPFlow",
"fJvt WPs and SFs only valid for PFlow jets"
291 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'FJvtSelectionAlg')
292 config.addPrivateTool(
'selectionTool',
'CP::FJvtSelectionTool')
293 alg.selectionTool.JetContainer = config.readName(self.containerName)
294 alg.selectionTool.WorkingPoint = self.fJvtWP
295 alg.selectionDecoration =
"fjvt_selection,as_char"
296 alg.particles = config.readName(self.containerName)
298 if self.runFJvtEfficiency
and config.dataType()
is not DataType.Data:
299 alg = config.createAlgorithm(
'CP::JvtEfficiencyAlg',
'FJvtEfficiencyAlg' )
300 config.addPrivateTool(
'efficiencyTool',
'CP::FJvtEfficiencyTool' )
301 alg.efficiencyTool.JetContainer = config.readName(self.containerName)
302 alg.efficiencyTool.WorkingPoint = self.fJvtWP
303 if config.geometry()
is LHCPeriod.Run2:
304 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/fJvtSFFile_Run2_EMPFlow.root"
306 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/fJvtSFFile_Run3_EMPFlow.root"
307 alg.selection =
'fjvt_selection,as_char'
308 alg.scaleFactorDecoration =
'fjvt_effSF_%SYS%'
309 alg.outOfValidity = 2
310 alg.outOfValidityDeco =
'no_fjvt'
311 alg.skipBadEfficiency =
False
312 alg.jets = config.readName (self.containerName)
313 alg.preselection = config.getPreselection (self.containerName,
'')
314 config.addOutputVar (self.containerName, alg.scaleFactorDecoration,
'fjvtEfficiency')
315 config.addSelection (self.containerName,
'baselineFJvt',
'fjvt_selection,as_char', preselection=
False)
318 alg = config.createAlgorithm(
'CP::AsgEnergyDecoratorAlg',
'AsgEnergyDecoratorAlg' )
319 alg.particles = config.readName (self.containerName)
321 config.addOutputVar (self.containerName,
'e_%SYS%',
'e')