379 if config.getContainerMeta(self.
containerName,
'jetRadius', failOnMiss=
True) != 4:
383 jetCollectionName = config.getContainerMeta(self.
containerName,
'jetCollectionName', failOnMiss=
True)
385 jetInput = config.getContainerMeta(self.
containerName,
'jetInput', failOnMiss=
True)
387 if jetInput
not in [
"EMTopo",
"EMPFlow",
"HI"]:
389 f
"Unsupported input type '{jetInput}' for R=0.4 jets!" )
391 if self.jvtWP
not in [
"FixedEffPt"]:
393 f
"Unsupported NNJvt WP '{self.jvtWP}'" )
395 if self.fJvtWP
not in [
"Loose",
"Tight",
"Tighter"]:
397 f
"Unsupported fJvt WP '{self.fJvtWP}'" )
404 calibToolName =
'JetCalibTool_' + jetCollectionName[:-4]
405 calibTool = config.createPublicTool(
'JetCalibrationTool', calibToolName )
406 calibTool.JetCollection = jetCollectionName[:-4]
408 if jetInput ==
"EMPFlow":
409 if config.geometry()
is LHCPeriod.Run2:
410 configFile =
"PreRec_R22_PFlow_ResPU_EtaJES_GSC_February23_230215.config"
411 calibTool.CalibArea =
"00-04-82"
412 elif config.geometry() >= LHCPeriod.Run3:
413 configFile =
"AntiKt4EMPFlow_MC23a_PreRecR22_Phase2_CalibConfig_ResPU_EtaJES_GSC_241208_InSitu.config"
414 calibTool.CalibArea =
"00-04-83"
415 elif jetInput ==
"HI":
416 if config.geometry()
is LHCPeriod.Run2:
417 configFile =
"JES_MC16_HI_Jan2021_5TeV.config"
418 elif config.geometry()
is LHCPeriod.Run3:
419 configFile =
"AntiKt4HI_MC23_EtaJES_Run3PreRec_Run2VJet_Run3EtaInt_5p36TeV.config"
420 calibTool.CalibArea =
"00-04-83"
423 f
"Unsupported geometry '{config.geometry()}' for HI jet calibration!")
425 if config.dataType()
is DataType.FastSim:
426 configFile = f
"JES_MC16Recommendation_AFII_{jetInput}_Apr2019_Rel21.config"
428 configFile = f
"JES_MC16Recommendation_Consolidated_{jetInput}_Apr2019_Rel21.config"
429 if self.calibToolCalibArea
is not None:
430 calibTool.CalibArea = self.calibToolCalibArea
431 if self.calibToolConfigFile
is not None:
432 configFile = self.calibToolConfigFile
433 calibTool.ConfigFile = configFile
434 if config.dataType()
is DataType.Data:
436 calibTool.CalibSequence =
'EtaJES_Insitu'
438 calibTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC_Insitu'
440 if jetInput ==
"EMPFlow":
441 calibTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC'
442 elif jetInput ==
"HI":
443 calibTool.CalibSequence =
'EtaJES'
445 calibTool.CalibSequence =
'JetArea_Residual_EtaJES_GSC_Smear'
446 if self.calibToolCalibSeq
is not None:
447 calibTool.CalibSequence = self.calibToolCalibSeq
448 calibTool.IsData = (config.dataType()
is DataType.Data)
450 alg = config.createAlgorithm(
'CP::JetCalibrationAlg',
'JetCalibrationAlg' )
451 alg.HIsetup = jetInput ==
"HI"
452 alg.calibrationTool = f
'{calibTool.getType()}/{calibTool.getName()}'
458 alg = config.createAlgorithm(
'CP::JetUncertaintiesAlg',
'JetUncertaintiesAlg' )
459 self.
createUncertaintyTool(alg, config, jetCollectionName, doPseudoData=( self.systematicsModelJER
in [
"Full",
"All"] ))
462 alg.preselection = config.getPreselection (self.
containerName,
'')
466 alg = config.createAlgorithm(
'CP::JvtUpdateAlg',
'JvtUpdateAlg' )
467 config.addPrivateTool(
'jvtTool',
'JetVertexTaggerTool' )
468 alg.jvtTool.JetContainer = self.jetCollection
469 alg.jvtTool.SuppressInputDependence=
True
472 alg.preselection = config.getPreselection (self.
containerName,
'')
475 assert jetInput==
"EMPFlow",
"NN JVT only defined for PFlow jets"
476 alg = config.createAlgorithm(
'CP::JetDecoratorAlg',
'NNJvtUpdateAlg' )
477 config.addPrivateTool(
'decorator',
'JetPileupTag::JetVertexNNTagger' )
481 alg.decorator.JetContainer = alg.jetsOut.replace (
'%SYS%',
'NOSYS')
482 alg.decorator.SuppressInputDependence=
True
483 alg.decorator.SuppressOutputDependence=
True
488 assert jetInput==
"EMPFlow",
"NNJvt WPs and SFs only valid for PFlow jets"
489 warnings.warn_explicit(
490 "jvtWP, runJvtSelection and runJvtEfficiency"
491 " are deprecated - please use a"
492 " JVTWorkingPoint block instead.",
493 ConfigDeprecationWarning, filename=
'', lineno=0)
495 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'JvtSelectionAlg')
496 config.addPrivateTool(
'selectionTool',
'CP::NNJvtSelectionTool')
497 alg.selectionTool.JetContainer = config.readName(self.
containerName)
498 alg.selectionTool.JvtMomentName =
"NNJvt"
499 alg.selectionTool.WorkingPoint = self.jvtWP
500 alg.selectionTool.MaxPtForJvt = 60*GeV
501 alg.selectionDecoration =
"jvt_selection,as_char"
504 if self.runJvtEfficiency
and config.dataType()
is not DataType.Data:
505 alg = config.createAlgorithm(
'CP::JvtEfficiencyAlg',
'JvtEfficiencyAlg' )
506 config.addPrivateTool(
'efficiencyTool',
'CP::NNJvtEfficiencyTool' )
507 alg.efficiencyTool.JetContainer = config.readName(self.
containerName)
508 alg.efficiencyTool.MaxPtForJvt = 60*GeV
509 alg.efficiencyTool.WorkingPoint = self.jvtWP
510 if config.geometry()
is LHCPeriod.Run2:
511 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/NNJvtSFFile_Run2_EMPFlow.root"
513 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/NNJvtSFFile_Run3_EMPFlow.root"
514 alg.selection =
'jvt_selection,as_char'
515 alg.scaleFactorDecoration =
'jvt_effSF_%SYS%'
516 alg.outOfValidity = 2
517 alg.outOfValidityDeco =
'no_jvt'
518 alg.skipBadEfficiency =
False
520 alg.preselection = config.getPreselection (self.
containerName,
'')
521 config.addOutputVar (self.
containerName, alg.scaleFactorDecoration,
'jvtEfficiency')
522 config.addSelection (self.
containerName,
'baselineJvt',
'jvt_selection,as_char', preselection=
False)
525 assert jetInput==
"EMPFlow",
"fJvt WPs and SFs only valid for PFlow jets"
526 warnings.warn_explicit(
527 "fJvtWP, runFJvtSelection and runFJvtEfficiency"
528 " are deprecated - please use a"
529 " FJVTWorkingPoint block instead.",
530 ConfigDeprecationWarning, filename=
'', lineno=0)
532 alg = config.createAlgorithm(
'CP::AsgSelectionAlg',
'FJvtSelectionAlg')
533 config.addPrivateTool(
'selectionTool',
'CP::FJvtSelectionTool')
534 alg.selectionTool.JetContainer = config.readName(self.
containerName)
535 alg.selectionTool.JvtMomentName =
"DFCommonJets_fJvt"
536 alg.selectionTool.WorkingPoint = self.fJvtWP
537 alg.selectionDecoration =
"fjvt_selection,as_char"
540 if self.runFJvtEfficiency
and config.dataType()
is not DataType.Data:
541 alg = config.createAlgorithm(
'CP::JvtEfficiencyAlg',
'FJvtEfficiencyAlg' )
542 config.addPrivateTool(
'efficiencyTool',
'CP::FJvtEfficiencyTool' )
543 alg.efficiencyTool.JetContainer = config.readName(self.
containerName)
544 alg.efficiencyTool.WorkingPoint = self.fJvtWP
545 if config.geometry()
is LHCPeriod.Run2:
546 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/fJvtSFFile_Run2_EMPFlow.root"
548 alg.efficiencyTool.SFFile =
"JetJvtEfficiency/May2024/fJvtSFFile_Run3_EMPFlow.root"
549 alg.selection =
'fjvt_selection,as_char'
550 alg.scaleFactorDecoration =
'fjvt_effSF_%SYS%'
551 alg.outOfValidity = 2
552 alg.outOfValidityDeco =
'no_fjvt'
553 alg.skipBadEfficiency =
False
555 alg.preselection = config.getPreselection (self.
containerName,
'')
556 config.addOutputVar (self.
containerName, alg.scaleFactorDecoration,
'fjvtEfficiency')
557 config.addSelection (self.
containerName,
'baselineFJvt',
'fjvt_selection,as_char', preselection=
False)
560 alg = config.createAlgorithm(
'CP::AsgEnergyDecoratorAlg',
'AsgEnergyDecoratorAlg' )