ATLAS Offline Software
BTaggingContent.py
Go to the documentation of this file.
1 """
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 
4 Define sets of standard variables to save in output files.
5 The variable lists returned by these functions are used by the smart slimming
6 service to determine which variables to save in derivations.
7 """
8 
9 from AthenaConfiguration.Enums import LHCPeriod
10 
11 
12 # ---------------------------------------------------------------------
13 # Convenience functions
14 # ---------------------------------------------------------------------
15 def _getBtagging(jetcol):
16  """Convenience function for getting btagging names"""
17  btaggingtmp = "BTagging_" + jetcol.split('Jets')[0]
18  if 'BTagging' in jetcol:
19  stamp = jetcol.split('BTagging')[1]
20  btaggingtmp += '_'+stamp
21  # deal with name mismatch between PV0TrackJets and BTagging_Track
22  btagging = btaggingtmp.replace("PV0Track", "Track")
23  return btagging
24 
25 def _isRun4(ConfigFlags):
26  """Convenience function for checking if we are in Run4"""
27  return ConfigFlags is not None and ConfigFlags.GeoModel.Run >= LHCPeriod.Run4
28 
29 def _getVariableList(collection, aux_list):
30  """Convenience function for getting variable list"""
31  return [collection] + [".".join( [ collection + "Aux" ] + aux_list )]
32 
33 def _getVars(name, extra_flavours=None, flip_modes=None):
34  """Convenience function for getting output variable names"""
35  if extra_flavours is None:
36  extra_flavours = []
37  if flip_modes is None:
38  flip_modes = [""]
39  flavors = list("cub") + extra_flavours
40  variants = [""] + flip_modes
41  return [f'{name}{v}_p{f}' for v in variants for f in flavors]
42 
44  vals = ['ID', 'Pt', 'Lxy', 'DR', 'PdgId', 'Barcode']
45  algs = ['HadronConeExcl', 'HadronGhost']
46  base = [f'{a}TruthLabel{v}' for v in vals for a in algs + ['PartonTruthLabel'] ]
47  extended = [f'{a}ExtendedTruthLabelID' for a in algs]
48  return base + extended
49 
50 # ---------------------------------------------------------------------
51 # Variable lists
52 # ---------------------------------------------------------------------
53 # some jet variables we always want to save
54 fold_hashes = ['jetFoldHash', 'jetFoldHash_noHits']
55 JetStandardAux = fold_hashes + [
56  "pt",
57  "eta",
58  "btaggingLink",
59  "GhostTrack",
60  "jetRank",
61  "ConeExclBHadronsFinal",
62  "ConeExclCHadronsFinal",
63  "PartonTruthLabelID",
64  *_getTruthVars(),
65 ]
66 
67 JetExtendedAux = [
68  "GhostBHadronsFinalCount",
69  "GhostBHadronsFinalPt",
70  "GhostCHadronsFinalCount",
71  "GhostCHadronsFinalPt",
72  "GhostTausFinalCount",
73  "GhostTausFinalPt",
74  "PartonTruthLabelEnergy",
75 ]
76 
77 # standard outputs for Run 3
78 BTaggingRun3Aux = ["SV1_NGTinSvx", "SV1_masssvx",]
79 BTaggingRun3Aux += _getVars("DL1dv01", flip_modes=['Flip']) # 202 r22 pre-rec tagger
80 BTaggingRun3Aux += _getVars("GN2v01", extra_flavours=['tau'], flip_modes=['SimpleFlip']) # planned GN2 tagger for 2024 recommendations
81 
82 # standard outputs for Run 4
83 BTaggingRun4Aux = [
84  "SV1_NGTinSvx",
85  "SV1_masssvx",
86  "dipsrun420221008_pu",
87  "dipsrun420221008_pc",
88  "dipsrun420221008_pb",
89  "DL1drun420221017_pu",
90  "DL1drun420221017_pc",
91  "DL1drun420221017_pb",
92  "GN1run420221010_pu",
93  "GN1run420221010_pc",
94  "GN1run420221010_pb"
95 ]
96 
97 # more involved outputs we might not want to save (ExpertContent)
98 BTaggingHighLevelAux = [
99  "softMuon_dR",
100  "softMuon_pTrel",
101  "softMuon_scatteringNeighbourSignificance",
102  "softMuon_momentumBalanceSignificance",
103  "softMuon_qOverPratio",
104  "softMuon_ip3dD0",
105  "softMuon_ip3dD0Significance",
106  "softMuon_ip3dZ0",
107  "softMuon_ip3dZ0Significance",
108  "JetFitter_mass",
109  "JetFitter_isDefaults",
110  "JetFitter_energyFraction",
111  "JetFitter_significance3d",
112  "JetFitter_nVTX",
113  "JetFitter_nSingleTracks",
114  "JetFitter_nTracksAtVtx",
115  "JetFitter_N2Tpair",
116  "JetFitter_deltaR",
117  "SV1_isDefaults",
118  "SV1_N2Tpair",
119  "SV1_efracsvx",
120  "SV1_deltaR",
121  "SV1_Lxy",
122  "SV1_L3d",
123  "SV1_significance3d",
124  "IP3D_bu",
125  "IP3D_isDefaults",
126  "IP3D_bc",
127  "IP3D_cu",
128  "JetFitterSecondaryVertex_nTracks",
129  "JetFitterSecondaryVertex_isDefaults",
130  "JetFitterSecondaryVertex_mass",
131  "JetFitterSecondaryVertex_energy",
132  "JetFitterSecondaryVertex_energyFraction",
133  "JetFitterSecondaryVertex_displacement3d",
134  "JetFitterSecondaryVertex_displacement2d",
135  "JetFitterSecondaryVertex_maximumTrackRelativeEta",
136  "JetFitterSecondaryVertex_minimumTrackRelativeEta",
137  "JetFitterSecondaryVertex_averageTrackRelativeEta",
138  "JetFitterDMeson_mass",
139  "JetFitterDMeson_isDefaults",
140  "maximumTrackRelativeEta",
141  "minimumTrackRelativeEta",
142  "averageTrackRelativeEta",
143  "softMuon_pb",
144  "softMuon_pc",
145  "softMuon_pu",
146  "softMuon_isDefaults",
147  "BTagTrackToJetAssociator"
148 ]
149 
150 # ---------------------------------------------------------------------
151 # Functions which define smart slimming content for different use cases
152 # ---------------------------------------------------------------------
153 def BTaggingExpertContent(jetcol, ConfigFlags = None):
154  btagging = _getBtagging(jetcol)
155 
156  # jet variables
157  jetcontent = _getVariableList(jetcol, JetStandardAux + JetExtendedAux)
158 
159  # b-tagging variables
160  isRun4 = _isRun4(ConfigFlags)
161  aux = BTaggingRun4Aux if isRun4 else BTaggingRun3Aux
162  aux += BTaggingHighLevelAux
163  btagcontent = _getVariableList(btagging, aux)
164 
165  return jetcontent + btagcontent
166 
167 
168 def BTaggingStandardContent(jetcol, ConfigFlags = None):
169  btagging = _getBtagging(jetcol)
170 
171  # jet variables
172  jetcontent = _getVariableList(jetcol, JetStandardAux)
173 
174  # b-tagging variables
175  isRun4 = _isRun4(ConfigFlags)
176  aux = BTaggingRun4Aux if isRun4 else BTaggingRun3Aux
177  btagcontent = _getVariableList(btagging, aux)
178 
179  return jetcontent + btagcontent
180 
181 
182 def BTaggingXbbContent(jetcol, ConfigFlags = None):
183  btagging = _getBtagging(jetcol)
184 
185  # jet variables
186  jetAllAux = JetStandardAux + JetExtendedAux
187  jetcontent = _getVariableList(jetcol, jetAllAux)
188 
189  # b-tagging variables
190  isRun4 = _isRun4(ConfigFlags)
191  aux = BTaggingRun4Aux if isRun4 else BTaggingRun3Aux
192  aux += BTaggingHighLevelAux
193  btagcontent = _getVariableList(btagging, aux)
194 
195  return jetcontent + btagcontent
python.BTaggingContent._getVars
def _getVars(name, extra_flavours=None, flip_modes=None)
Definition: BTaggingContent.py:33
python.BTaggingContent._getVariableList
def _getVariableList(collection, aux_list)
Definition: BTaggingContent.py:29
python.BTaggingContent._getBtagging
def _getBtagging(jetcol)
Definition: BTaggingContent.py:15
python.BTaggingContent.BTaggingXbbContent
def BTaggingXbbContent(jetcol, ConfigFlags=None)
Definition: BTaggingContent.py:182
python.BTaggingContent.BTaggingExpertContent
def BTaggingExpertContent(jetcol, ConfigFlags=None)
Definition: BTaggingContent.py:153
python.BTaggingContent.BTaggingStandardContent
def BTaggingStandardContent(jetcol, ConfigFlags=None)
Definition: BTaggingContent.py:168
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.BTaggingContent._isRun4
def _isRun4(ConfigFlags)
Definition: BTaggingContent.py:25
python.BTaggingContent._getTruthVars
def _getTruthVars()
Definition: BTaggingContent.py:43