ATLAS Offline Software
DiTauAnalysisConfig.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 
3 # AnaAlgorithm import(s):
4 from AnalysisAlgorithmsConfig.ConfigBlock import ConfigBlock
5 from AnalysisAlgorithmsConfig.ConfigAccumulator import DataType
6 
7 
8 class DiTauCalibrationConfig (ConfigBlock):
9  """the ConfigBlock for the tau four-momentum correction"""
10 
11  def __init__ (self, containerName, postfix) :
12  super (DiTauCalibrationConfig, self).__init__ ()
13  self.containerName = containerName
14  self.postfix = postfix
15  self.rerunTruthMatching = True
16 
17 
18  def makeAlgs (self, config) :
19 
20  postfix = self.postfix
21  if postfix != '' and postfix[0] != '_' :
22  postfix = '_' + postfix
23 
24  # Set up the tau 4-momentum smearing algorithm:
25  alg = config.createAlgorithm( 'CP::DiTauSmearingAlg', 'DiTauSmearingAlg' + postfix )
26  config.addPrivateTool( 'smearingTool', 'TauAnalysisTools::DiTauSmearingTool' )
27  alg.taus = config.readName (self.containerName, "DiTauJets")
28  alg.tausOut = config.copyName (self.containerName)
29  alg.preselection = config.getPreselection (self.containerName, '')
30 
31  # Set up the tau truth matching algorithm:
32  if self.rerunTruthMatching and config.dataType() is not DataType.Data:
33  alg = config.createAlgorithm( 'CP::DiTauTruthMatchingAlg',
34  'DiTauTruthMatchingAlg' + postfix )
35  config.addPrivateTool( 'matchingTool',
36  'TauAnalysisTools::DiTauTruthMatchingTool' )
37  alg.taus = self.readName (self.containerName)
38  alg.preselection = config.getPreselection (self.containerName, '')
39 
40 
41 
42 
43 
44 class DiTauWorkingPointConfig (ConfigBlock) :
45  """the ConfigBlock for the tau working point
46 
47  This may at some point be split into multiple blocks (16 Mar 22)."""
48 
49  def __init__ (self, containerName, postfix, quality) :
50  super (DiTauWorkingPointConfig, self).__init__ ()
51  self.containerName = containerName
52  self.selectionName = postfix
53  self.postfix = postfix
54  self.quality = quality
55  self.legacyRecommendations = False
56 
57 
58  def makeAlgs (self, config) :
59 
60  postfix = self.postfix
61  if postfix != '' and postfix[0] != '_' :
62  postfix = '_' + postfix
63 
64  # using enum value from: https://gitlab.cern.ch/atlas/athena/blob/21.2/PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h
65  # the dictionary is missing in Athena, so hard-coding values here
66  if self.quality == 'Tight' :
67  IDLevel = 4 # ROOT.TauAnalysisTools.JETIDBDTTIGHT
68  elif self.quality == 'Medium' :
69  IDLevel = 3 # ROOT.TauAnalysisTools.JETIDBDTMEDIUM
70  elif self.quality == 'Loose' :
71  IDLevel = 2 # ROOT.TauAnalysisTools.JETIDBDTLOOSE
72  else :
73  raise ValueError ("invalid tau quality: \"" + self.quality +
74  "\", allowed values are Tight, Medium, Loose")
75 
76 
77  # Set up the algorithm calculating the efficiency scale factors for the
78  # taus:
79  if config.dataType() is not DataType.Data:
80  alg = config.createAlgorithm( 'CP::DiTauEfficiencyCorrectionsAlg',
81  'DiTauEfficiencyCorrectionsAlg' + postfix )
82  config.addPrivateTool( 'efficiencyCorrectionsTool',
83  'TauAnalysisTools::DiTauEfficiencyCorrectionsTool' )
84  alg.efficiencyCorrectionsTool.IDLevel = IDLevel
85  alg.scaleFactorDecoration = 'tau_effSF' + postfix
86  # alg.outOfValidity = 2 #silent
87  # alg.outOfValidityDeco = "bad_eff"
88  alg.taus = config.readName (self.containerName)
89  alg.preselection = config.getPreselection (self.containerName, self.selectionName)
90 
91 
92 
93 
94 
95 def makeDiTauCalibrationConfig( seq, containerName, postfix = '',
96  rerunTruthMatching = True):
97  """Create tau calibration analysis algorithms
98 
99  This makes all the algorithms that need to be run first befor
100  all working point specific algorithms and that can be shared
101  between the working points.
102 
103  Keyword arguments:
104  postfix -- a postfix to apply to decorations and algorithm
105  names. this is mostly used/needed when using this
106  sequence with multiple working points to ensure all
107  names are unique.
108  rerunTruthMatching -- Whether or not to rerun truth matching
109  """
110 
111  config = DiTauCalibrationConfig (containerName, postfix)
112  config.rerunTruthMatching = rerunTruthMatching
113  seq.append (config)
114 
115 
116 
117 
118 
119 def makeDiTauWorkingPointConfig( seq, containerName, workingPoint, postfix,
120  legacyRecommendations = False):
121  """Create tau analysis algorithms for a single working point
122 
123  Keyword arguments:
124  legacyRecommendations -- use legacy tau BDT and electron veto recommendations
125  postfix -- a postfix to apply to decorations and algorithm
126  names. this is mostly used/needed when using this
127  sequence with multiple working points to ensure all
128  names are unique.
129  """
130 
131  splitWP = workingPoint.split ('.')
132  if len (splitWP) != 1 :
133  raise ValueError ('working point should be of format "quality", not ' + workingPoint)
134 
135  config = DiTauWorkingPointConfig (containerName, postfix, splitWP[0])
136  config.legacyRecommendations = legacyRecommendations
137  seq.append (config)
python.DiTauAnalysisConfig.DiTauWorkingPointConfig.quality
quality
Definition: DiTauAnalysisConfig.py:54
python.DiTauAnalysisConfig.DiTauWorkingPointConfig.containerName
containerName
Definition: DiTauAnalysisConfig.py:51
python.DiTauAnalysisConfig.DiTauWorkingPointConfig.postfix
postfix
Definition: DiTauAnalysisConfig.py:53
python.DiTauAnalysisConfig.DiTauCalibrationConfig.rerunTruthMatching
rerunTruthMatching
Definition: DiTauAnalysisConfig.py:15
python.DiTauAnalysisConfig.DiTauCalibrationConfig.containerName
containerName
Definition: DiTauAnalysisConfig.py:13
python.DiTauAnalysisConfig.DiTauWorkingPointConfig.__init__
def __init__(self, containerName, postfix, quality)
Definition: DiTauAnalysisConfig.py:49
python.DiTauAnalysisConfig.DiTauWorkingPointConfig.makeAlgs
def makeAlgs(self, config)
Definition: DiTauAnalysisConfig.py:58
python.DiTauAnalysisConfig.DiTauWorkingPointConfig
Definition: DiTauAnalysisConfig.py:44
python.DiTauAnalysisConfig.DiTauCalibrationConfig.__init__
def __init__(self, containerName, postfix)
Definition: DiTauAnalysisConfig.py:11
python.DiTauAnalysisConfig.DiTauCalibrationConfig.makeAlgs
def makeAlgs(self, config)
Definition: DiTauAnalysisConfig.py:18
python.DiTauAnalysisConfig.DiTauCalibrationConfig
Definition: DiTauAnalysisConfig.py:8
python.DiTauAnalysisConfig.DiTauWorkingPointConfig.selectionName
selectionName
Definition: DiTauAnalysisConfig.py:52
python.DiTauAnalysisConfig.DiTauWorkingPointConfig.legacyRecommendations
legacyRecommendations
Definition: DiTauAnalysisConfig.py:55
python.DiTauAnalysisConfig.makeDiTauWorkingPointConfig
def makeDiTauWorkingPointConfig(seq, containerName, workingPoint, postfix, legacyRecommendations=False)
Definition: DiTauAnalysisConfig.py:119
python.DiTauAnalysisConfig.DiTauCalibrationConfig.postfix
postfix
Definition: DiTauAnalysisConfig.py:14
python.DiTauAnalysisConfig.makeDiTauCalibrationConfig
def makeDiTauCalibrationConfig(seq, containerName, postfix='', rerunTruthMatching=True)
Definition: DiTauAnalysisConfig.py:95