326 config.addPrivateTool(
'uncertaintiesTool',
'JetUncertaintiesTool' )
327 jetUncertaintiesAlg.uncertaintiesTool.JetDefinition = jetCollectionName[:-4]
328 jetUncertaintiesAlg.uncertaintiesTool.ConfigFile = configFile
329 if calibArea
is not None:
330 jetUncertaintiesAlg.uncertaintiesTool.CalibArea = calibArea
331 jetUncertaintiesAlg.uncertaintiesTool.MCType = mcType
332 jetUncertaintiesAlg.uncertaintiesTool.IsData = (config.dataType()
is DataType.Data)
333 jetUncertaintiesAlg.uncertaintiesTool.PseudoDataJERsmearingMode =
False
337 jetUncertaintiesAlg.affectingSystematicsFilter =
'.*'
340 config.addPrivateTool(
'uncertaintiesToolPD',
'JetUncertaintiesTool' )
341 jetUncertaintiesAlg.uncertaintiesToolPD.JetDefinition = jetCollectionName[:-4]
342 jetUncertaintiesAlg.uncertaintiesToolPD.ConfigFile = configFile
343 if calibArea
is not None:
344 jetUncertaintiesAlg.uncertaintiesToolPD.CalibArea = calibArea
345 jetUncertaintiesAlg.uncertaintiesToolPD.MCType = mcType
348 jetUncertaintiesAlg.uncertaintiesToolPD.IsData =
True
349 jetUncertaintiesAlg.uncertaintiesToolPD.PseudoDataJERsmearingMode =
True
355 if config.getContainerMeta(self.
containerName,
'jetRadius', failOnMiss=
True) != 4:
361 jetCollectionName=
"AntiKt4EMPFlowJets"
363 jetCollectionName=
"AntiKt10UFOCSSKSoftDropBeta100Zcut10Jets"
365 jetInput = config.getContainerMeta(self.
containerName,
'jetInput', failOnMiss=
True)
367 if jetInput
not in [
"EMTopo",
"EMPFlow",
"HI"]:
369 "Unsupported input type '{0}' for R=0.4 jets!".format(jetInput) )
371 if self.
jvtWP not in [
"FixedEffPt"]:
373 "Unsupported NNJvt WP '{0}'".format(self.
jvtWP) )
375 if self.
fJvtWP not in [
"Loose",
"Tight",
"Tighter"]:
377 "Unsupported fJvt WP '{0}'".format(self.
fJvtWP) )
384 calibToolName =
'JetCalibTool_' + jetCollectionName[:-4]
385 calibTool = config.createPublicTool(
'JetCalibrationTool', calibToolName )
386 calibTool.JetCollection = jetCollectionName[:-4]
388 if jetInput ==
"EMPFlow":
389 if config.geometry()
is LHCPeriod.Run2:
390 configFile =
"PreRec_R22_PFlow_ResPU_EtaJES_GSC_February23_230215.config"
391 calibTool.CalibArea =
"00-04-82"
392 elif config.geometry() >= LHCPeriod.Run3:
393 configFile =
"AntiKt4EMPFlow_MC23a_PreRecR22_Phase2_CalibConfig_ResPU_EtaJES_GSC_241208_InSitu.config"
394 calibTool.CalibArea =
"00-04-83"
395 elif jetInput ==
"HI":
396 if config.geometry()
is LHCPeriod.Run2:
397 configFile =
"JES_MC16_HI_Jan2021_5TeV.config"
398 if config.geometry()
is LHCPeriod.Run3:
399 configFile =
"AntiKt4HI_MC23_EtaJES_Run3PreRec_Run2VJet_Run3EtaInt_5p36TeV.config"
400 calibTool.CalibArea =
"00-04-83"
402 if config.dataType()
is DataType.FastSim:
403 configFile =
"JES_MC16Recommendation_AFII_{0}_Apr2019_Rel21.config"
405 configFile =
"JES_MC16Recommendation_Consolidated_{0}_Apr2019_Rel21.config"
406 configFile = configFile.format(jetInput)
407 if self.calibToolCalibArea
is not None:
408 calibTool.CalibArea = self.calibToolCalibArea
409 if self.calibToolConfigFile
is not None:
410 configFile = self.calibToolConfigFile
411 calibTool.ConfigFile = configFile
412 if config.dataType()
is DataType.Data:
414 calibTool.CalibSequence =
'EtaJES_Insitu'
416 calibTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC_Insitu'
418 if jetInput ==
"EMPFlow":
419 calibTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC'
420 elif jetInput ==
"HI":
421 calibTool.CalibSequence =
'EtaJES'
423 calibTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC_Smear'
424 if self.calibToolCalibSeq
is not None:
425 calibTool.CalibSequence = self.calibToolCalibSeq
426 calibTool.IsData = (config.dataType()
is DataType.Data)
428 alg = config.createAlgorithm(
'CP::JetCalibrationAlg',
'JetCalibrationAlg' )
429 alg.HIsetup = jetInput ==
"HI"
430 alg.calibrationTool = f
'{calibTool.getType()}/{calibTool.getName()}'
435 if (config.dataType()
is not DataType.Data):
436 alg = config.createAlgorithm(
'CP::JetPartonTruthLabelAlg',
437 'JetPartonTruthLabelAlg' )
438 config.addPrivateTool(
'LabelTool',
'Analysis::JetPartonTruthLabel' )
443 alg = config.createAlgorithm(
'CP::JetUncertaintiesAlg',
'JetUncertaintiesAlg' )
447 alg.preselection = config.getPreselection (self.
containerName,
'')
451 alg = config.createAlgorithm(
'CP::JvtUpdateAlg',
'JvtUpdateAlg' )
452 config.addPrivateTool(
'jvtTool',
'JetVertexTaggerTool' )
454 alg.jvtTool.SuppressInputDependence=
True
457 alg.preselection = config.getPreselection (self.
containerName,
'')
460 assert jetInput==
"EMPFlow",
"NN JVT only defined for PFlow jets"
461 alg = config.createAlgorithm(
'CP::JetDecoratorAlg',
'NNJvtUpdateAlg' )
462 config.addPrivateTool(
'decorator',
'JetPileupTag::JetVertexNNTagger' )
466 alg.decorator.JetContainer = alg.jetsOut.replace (
'%SYS%',
'NOSYS')
467 alg.decorator.SuppressInputDependence=
True
468 alg.decorator.SuppressOutputDependence=
True
473 assert jetInput==
"EMPFlow",
"NNJvt WPs and SFs only valid for PFlow jets"
474 warnings.warn_explicit(
475 "jvtWP, runJvtSelection and runJvtEfficiency"
476 " are deprecated - please use a"
477 " JVTWorkingPoint block instead.",
478 ConfigDeprecationWarning, filename=
'', lineno=0)
480 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'JvtSelectionAlg')
481 config.addPrivateTool(
'selectionTool',
'CP::NNJvtSelectionTool')
482 alg.selectionTool.JetContainer = config.readName(self.
containerName)
483 alg.selectionTool.JvtMomentName =
"NNJvt"
484 alg.selectionTool.WorkingPoint = self.
jvtWP
485 alg.selectionTool.MaxPtForJvt = 60*GeV
486 alg.selectionDecoration =
"jvt_selection,as_char"
489 if self.runJvtEfficiency
and config.dataType()
is not DataType.Data:
490 alg = config.createAlgorithm(
'CP::JvtEfficiencyAlg',
'JvtEfficiencyAlg' )
491 config.addPrivateTool(
'efficiencyTool',
'CP::NNJvtEfficiencyTool' )
492 alg.efficiencyTool.JetContainer = config.readName(self.
containerName)
493 alg.efficiencyTool.MaxPtForJvt = 60*GeV
494 alg.efficiencyTool.WorkingPoint = self.
jvtWP
495 if config.geometry()
is LHCPeriod.Run2:
496 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/NNJvtSFFile_Run2_EMPFlow.root"
498 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/NNJvtSFFile_Run3_EMPFlow.root"
499 alg.selection =
'jvt_selection,as_char'
500 alg.scaleFactorDecoration =
'jvt_effSF_%SYS%'
501 alg.outOfValidity = 2
502 alg.outOfValidityDeco =
'no_jvt'
503 alg.skipBadEfficiency =
False
505 alg.preselection = config.getPreselection (self.
containerName,
'')
506 config.addOutputVar (self.
containerName, alg.scaleFactorDecoration,
'jvtEfficiency')
507 config.addSelection (self.
containerName,
'baselineJvt',
'jvt_selection,as_char', preselection=
False)
510 assert jetInput==
"EMPFlow",
"fJvt WPs and SFs only valid for PFlow jets"
511 warnings.warn_explicit(
512 "fJvtWP, runFJvtSelection and runFJvtEfficiency"
513 " are deprecated - please use a"
514 " FJVTWorkingPoint block instead.",
515 ConfigDeprecationWarning, filename=
'', lineno=0)
517 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'FJvtSelectionAlg')
518 config.addPrivateTool(
'selectionTool',
'CP::FJvtSelectionTool')
519 alg.selectionTool.JetContainer = config.readName(self.
containerName)
520 alg.selectionTool.JvtMomentName =
"DFCommonJets_fJvt"
521 alg.selectionTool.WorkingPoint = self.
fJvtWP
522 alg.selectionDecoration =
"fjvt_selection,as_char"
525 if self.runFJvtEfficiency
and config.dataType()
is not DataType.Data:
526 alg = config.createAlgorithm(
'CP::JvtEfficiencyAlg',
'FJvtEfficiencyAlg' )
527 config.addPrivateTool(
'efficiencyTool',
'CP::FJvtEfficiencyTool' )
528 alg.efficiencyTool.JetContainer = config.readName(self.
containerName)
529 alg.efficiencyTool.WorkingPoint = self.
fJvtWP
530 if config.geometry()
is LHCPeriod.Run2:
531 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/fJvtSFFile_Run2_EMPFlow.root"
533 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/fJvtSFFile_Run3_EMPFlow.root"
534 alg.selection =
'fjvt_selection,as_char'
535 alg.scaleFactorDecoration =
'fjvt_effSF_%SYS%'
536 alg.outOfValidity = 2
537 alg.outOfValidityDeco =
'no_fjvt'
538 alg.skipBadEfficiency =
False
540 alg.preselection = config.getPreselection (self.
containerName,
'')
541 config.addOutputVar (self.
containerName, alg.scaleFactorDecoration,
'fjvtEfficiency')
542 config.addSelection (self.
containerName,
'baselineFJvt',
'fjvt_selection,as_char', preselection=
False)
545 alg = config.createAlgorithm(
'CP::AsgEnergyDecoratorAlg',
'AsgEnergyDecoratorAlg' )