217 if config.getContainerMeta(self.
containerName,
'jetRadius', failOnMiss=
True) != 4:
223 jetCollectionName=
"AntiKt4EMPFlowJets"
225 jetCollectionName=
"AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"
227 jetInput = config.getContainerMeta(self.
containerName,
'jetInput', failOnMiss=
True)
229 if jetInput
not in [
"EMTopo",
"EMPFlow",
"HI"]:
231 "Unsupported input type '{0}' for R=0.4 jets!".format(jetInput) )
233 if self.
jvtWP not in [
"FixedEffPt"]:
235 "Unsupported NNJvt WP '{0}'".format(self.
jvtWP) )
237 if self.
fJvtWP not in [
"Loose",
"Tight",
"Tighter"]:
239 "Unsupported fJvt WP '{0}'".format(self.
fJvtWP) )
246 calibToolName =
'JetCalibTool_' + jetCollectionName[:-4]
247 calibTool = config.createPublicTool(
'JetCalibrationTool', calibToolName )
248 calibTool.JetCollection = jetCollectionName[:-4]
250 if jetInput ==
"EMPFlow":
251 if config.geometry()
is LHCPeriod.Run2:
252 configFile =
"PreRec_R22_PFlow_ResPU_EtaJES_GSC_February23_230215.config"
253 calibTool.CalibArea =
"00-04-82"
254 elif config.geometry() >= LHCPeriod.Run3:
255 configFile =
"AntiKt4EMPFlow_MC23a_PreRecR22_Phase2_CalibConfig_ResPU_EtaJES_GSC_241208_InSitu.config"
256 calibTool.CalibArea =
"00-04-83"
257 elif jetInput ==
"HI":
258 if config.geometry()
is LHCPeriod.Run2:
259 configFile =
"JES_MC16_HI_Jan2021_5TeV.config"
260 if config.geometry()
is LHCPeriod.Run3:
261 configFile =
"AntiKt4HI_MC23_EtaJES_Run3PreRec_Run2VJet_Run3EtaInt_5p36TeV.config"
262 calibTool.CalibArea =
"00-04-83"
264 if config.dataType()
is DataType.FastSim:
265 configFile =
"JES_MC16Recommendation_AFII_{0}_Apr2019_Rel21.config"
267 configFile =
"JES_MC16Recommendation_Consolidated_{0}_Apr2019_Rel21.config"
268 configFile = configFile.format(jetInput)
269 if self.calibToolCalibArea
is not None:
270 calibTool.CalibArea = self.calibToolCalibArea
271 if self.calibToolConfigFile
is not None:
272 configFile = self.calibToolConfigFile
273 calibTool.ConfigFile = configFile
274 if config.dataType()
is DataType.Data:
276 calibTool.CalibSequence =
'EtaJES_Insitu'
278 calibTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC_Insitu'
280 if jetInput ==
"EMPFlow":
281 calibTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC'
282 elif jetInput ==
"HI":
283 calibTool.CalibSequence =
'EtaJES'
285 calibTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC_Smear'
286 if self.calibToolCalibSeq
is not None:
287 calibTool.CalibSequence = self.calibToolCalibSeq
288 calibTool.IsData = (config.dataType()
is DataType.Data)
290 alg = config.createAlgorithm(
'CP::JetCalibrationAlg',
'JetCalibrationAlg' )
291 alg.HIsetup = jetInput ==
"HI"
292 alg.calibrationTool = f
'{calibTool.getType()}/{calibTool.getName()}'
298 alg = config.createAlgorithm(
'CP::JvtUpdateAlg',
'JvtUpdateAlg' )
299 config.addPrivateTool(
'jvtTool',
'JetVertexTaggerTool' )
301 alg.jvtTool.SuppressInputDependence=
True
304 alg.preselection = config.getPreselection (self.
containerName,
'')
307 assert jetInput==
"EMPFlow",
"NN JVT only defined for PFlow jets"
308 alg = config.createAlgorithm(
'CP::JetDecoratorAlg',
'NNJvtUpdateAlg' )
309 config.addPrivateTool(
'decorator',
'JetPileupTag::JetVertexNNTagger' )
313 alg.decorator.JetContainer = alg.jetsOut.replace (
'%SYS%',
'NOSYS')
314 alg.decorator.SuppressInputDependence=
True
315 alg.decorator.SuppressOutputDependence=
True
320 assert jetInput==
"EMPFlow",
"NNJvt WPs and SFs only valid for PFlow jets"
321 warnings.warn_explicit(
322 "jvtWP, runJvtSelection and runJvtEfficiency"
323 " are deprecated - please use a"
324 " JVTWorkingPoint block instead.",
325 ConfigDeprecationWarning, filename=
'', lineno=0)
327 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'JvtSelectionAlg')
328 config.addPrivateTool(
'selectionTool',
'CP::NNJvtSelectionTool')
329 alg.selectionTool.JetContainer = config.readName(self.
containerName)
330 alg.selectionTool.JvtMomentName =
"NNJvt"
331 alg.selectionTool.WorkingPoint = self.
jvtWP
332 alg.selectionTool.MaxPtForJvt = 60*GeV
333 alg.selectionDecoration =
"jvt_selection,as_char"
336 if self.runJvtEfficiency
and config.dataType()
is not DataType.Data:
337 alg = config.createAlgorithm(
'CP::JvtEfficiencyAlg',
'JvtEfficiencyAlg' )
338 config.addPrivateTool(
'efficiencyTool',
'CP::NNJvtEfficiencyTool' )
339 alg.efficiencyTool.JetContainer = config.readName(self.
containerName)
340 alg.efficiencyTool.MaxPtForJvt = 60*GeV
341 alg.efficiencyTool.WorkingPoint = self.
jvtWP
342 if config.geometry()
is LHCPeriod.Run2:
343 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/NNJvtSFFile_Run2_EMPFlow.root"
345 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/NNJvtSFFile_Run3_EMPFlow.root"
346 alg.selection =
'jvt_selection,as_char'
347 alg.scaleFactorDecoration =
'jvt_effSF_%SYS%'
348 alg.outOfValidity = 2
349 alg.outOfValidityDeco =
'no_jvt'
350 alg.skipBadEfficiency =
False
352 alg.preselection = config.getPreselection (self.
containerName,
'')
353 config.addOutputVar (self.
containerName, alg.scaleFactorDecoration,
'jvtEfficiency')
354 config.addSelection (self.
containerName,
'baselineJvt',
'jvt_selection,as_char', preselection=
False)
357 assert jetInput==
"EMPFlow",
"fJvt WPs and SFs only valid for PFlow jets"
358 warnings.warn_explicit(
359 "fJvtWP, runFJvtSelection and runFJvtEfficiency"
360 " are deprecated - please use a"
361 " FJVTWorkingPoint block instead.",
362 ConfigDeprecationWarning, filename=
'', lineno=0)
364 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'FJvtSelectionAlg')
365 config.addPrivateTool(
'selectionTool',
'CP::FJvtSelectionTool')
366 alg.selectionTool.JetContainer = config.readName(self.
containerName)
367 alg.selectionTool.JvtMomentName =
"DFCommonJets_fJvt"
368 alg.selectionTool.WorkingPoint = self.
fJvtWP
369 alg.selectionDecoration =
"fjvt_selection,as_char"
372 if self.runFJvtEfficiency
and config.dataType()
is not DataType.Data:
373 alg = config.createAlgorithm(
'CP::JvtEfficiencyAlg',
'FJvtEfficiencyAlg' )
374 config.addPrivateTool(
'efficiencyTool',
'CP::FJvtEfficiencyTool' )
375 alg.efficiencyTool.JetContainer = config.readName(self.
containerName)
376 alg.efficiencyTool.WorkingPoint = self.
fJvtWP
377 if config.geometry()
is LHCPeriod.Run2:
378 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/fJvtSFFile_Run2_EMPFlow.root"
380 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/fJvtSFFile_Run3_EMPFlow.root"
381 alg.selection =
'fjvt_selection,as_char'
382 alg.scaleFactorDecoration =
'fjvt_effSF_%SYS%'
383 alg.outOfValidity = 2
384 alg.outOfValidityDeco =
'no_fjvt'
385 alg.skipBadEfficiency =
False
387 alg.preselection = config.getPreselection (self.
containerName,
'')
388 config.addOutputVar (self.
containerName, alg.scaleFactorDecoration,
'fjvtEfficiency')
389 config.addSelection (self.
containerName,
'baselineFJvt',
'fjvt_selection,as_char', preselection=
False)