ATLAS Offline Software
LeptonTaggersConfig.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
2 
3 from AthenaCommon.Logging import logging
4 lep_tag_log = logging.getLogger('LeptonTaggersConfig')
5 
6 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
7 from AthenaConfiguration.ComponentFactory import CompFactory
8 
9 # TO DELETE:
10 #
11 # How LeptonTagger was called in MUON5:
12 #
13 # import LeptonTaggers.LeptonTaggersConfig as LepTagConfig
14 # if not hasattr(MUON5Seq,"Muons_decoratePromptLepton"):
15 # LepTagConfig.ConfigureAntiKt4PV0TrackJets(MUON5Seq,"MUON1")
16 # MUON5Seq += LepTagConfig.GetDecoratePromptLeptonAlgs()
17 # MUON5Seq += LepTagConfig.GetDecorateImprovedPromptLeptonAlgs()
18 #
19 # MUON5SlimmingHelper.ExtraVariables += LepTagConfig.GetExtraPromptVariablesForDxAOD(onlyBDT=False)
20 # MUON5SlimmingHelper.ExtraVariables += LepTagConfig.GetExtraImprovedPromptVariablesForDxAOD()
21 # MUON5SlimmingHelper.ExtraVariables += ElectronsCPDetailedContent
22 
23 
24 def VtxFittingToolCfg(ConfigFlags, **kwargs) -> ComponentAccumulator:
25  """
26  Generate a vertex fitting tool.
27  """
28  acc = ComponentAccumulator()
29  lep_tag_log.info("creating VtxFittingTool")
30 
31  kwargs.setdefault("doSeedVertexFit", False)
32 
33  kwargs.setdefault("DistToPriVtxName", "distToPriVtx")
34  kwargs.setdefault("NormDistToPriVtxName", "normDistToPriVtx")
35  kwargs.setdefault("DistToRefittedPriVtxName", "distToRefittedPriVtx")
36  kwargs.setdefault("NormDistToRefittedPriVtxName", "normDistToRefittedPriVtx")
37  kwargs.setdefault("DistToRefittedRmLepPriVtxName", "distToRefittedRmLepPriVtx")
38  kwargs.setdefault("NormDistToRefittedRmLepPriVtxName",
39  "normDistToRefittedRmLepPriVtx")
40 
41  from TrkConfig.TrkVertexBilloirToolsConfig import FastVertexFitterCfg
42  fast_vtx_fitter = acc.popToolsAndMerge(FastVertexFitterCfg(ConfigFlags))
43 
44  kwargs.setdefault("vertexFitterTool", fast_vtx_fitter)
45  kwargs.setdefault("seedVertexFitterTool", fast_vtx_fitter)
46 
47  vertex_fitting_tool = CompFactory.Prompt.VertexFittingTool(
48  name="VertexFittingTool", **kwargs
49  )
50 
51  acc.setPrivateTools(vertex_fitting_tool)
52  lep_tag_log.info("end of VtxFittingTool creation")
53  return acc
54 
55 
57  ConfigFlags, name="PrimaryVertexReFitter",
58  lepton_type="", **kwargs
59 ) -> ComponentAccumulator:
60  """
61  CA to run the PrimaryVertexReFitter algorithm.
62  """
63 
64  if lepton_type not in ['Electrons', 'Muons']:
65  raise ValueError(f'DecorateReFitPrimaryVertex - unknown lepton type: "{lepton_type}"')
66 
67  acc = ComponentAccumulator()
68 
69  kwargs.setdefault("ReFitPriVtxName", f"RefittedPriVtx_{lepton_type}")
70  kwargs.setdefault("LeptonContainerName", lepton_type)
71 
72  kwargs.setdefault("DistToRefittedPriVtxName", "distToRefittedPriVtx")
73  kwargs.setdefault("NormDistToRefittedPriVtxName", "normDistToRefittedPriVtx")
74  kwargs.setdefault("RefittedVtxLinkName", "RefittedPriVtxLink")
75  kwargs.setdefault("RefittedVtxWithoutLeptonLinkName",
76  f"RefittedPriVtxWithoutLepton_{lepton_type}")
77 
78  alg_name = f'PrimaryVertexReFitter_{lepton_type}_decoratePriVtx'
79 
80  kwargs.setdefault("VertexFittingTool", acc.popToolsAndMerge(
81  VtxFittingToolCfg(ConfigFlags)
82  ))
83 
84  the_alg = CompFactory.Prompt.PrimaryVertexReFitter(alg_name, **kwargs)
85 
86  acc.addEventAlgo(the_alg, primary = True)
87  lep_tag_log.info("end of DecorateReFitPrimaryVertexCfg")
88  return acc
89 
90 
91 def VtxItrMergingToolCfg(flags, name="VertexIterativeMergingTool",
92  lepton_name="", **kwargs) -> ComponentAccumulator:
93  """
94  Generate a VtxItrMergingTool configuration.
95  """
96  lep_tag_log.info("creating VtxItrMergingToolCfg configuration")
97 
98  acc = ComponentAccumulator()
99 
100  kwargs.setdefault("minFitProb", 0.03)
101 
102  tool_name = f'VtxIterFitMergingTool_{lepton_name}'
103 
104  vtxItrMergingTool = CompFactory.Prompt.VertexIterativeFitMergingTool(
105  name=tool_name, **kwargs
106  )
107 
108  acc.setPrivateTools(vtxItrMergingTool)
109 
110  return acc
111 
112 
113 def DecorateNonPromptVertexCfg(flags, name="DecorateNonPromptVertex",
114  lepton_name="", **kwargs) -> ComponentAccumulator:
115  """
116  Configure the non-prompt vertex decorator.
117  """
118  if lepton_name not in ['Electrons', 'Muons']:
119  raise ValueError(f'DecorateNonPromptVertex - unknown lepton type: "{lepton_name}"')
120 
121  acc = ComponentAccumulator()
122 
123  vertex_fitting_tool = acc.popToolsAndMerge(VtxFittingToolCfg(flags))
124 
125  kwargs.setdefault("VertexFittingTool",vertex_fitting_tool)
126 
127  kwargs.setdefault(
128  "VertexMergingTool",
129  acc.popToolsAndMerge(VtxItrMergingToolCfg(
130  flags, lepton_name=lepton_name,
131  VertexFittingTool=vertex_fitting_tool
132  ))
133  )
134 
135  kwargs.setdefault("LeptonContainerName", lepton_name)
136  kwargs.setdefault("ReFitPriVtxContainerName", f"RefittedPriVtx_{lepton_name}")
137  kwargs.setdefault("SVContainerName", f"SecVtxContainer_{lepton_name}")
138 
139  kwargs.setdefault("SecVtxLinksName", "SecVtxLinks")
140  kwargs.setdefault("DeepMergedSecVtxLinksName", "DeepMergedSecVtxLinks")
141  kwargs.setdefault("NoLeptonPriVtxLinkName", f"RefittedPriVtxWithoutLepton_{lepton_name}")
142  kwargs.setdefault("IndexVectorName", "PromptLeptonInput_SecondaryVertexIndexVector")
143 
144  alg = CompFactory.Prompt.NonPromptLeptonVertexingAlg(
145  name=f'NonPromptVtx_decorate_{lepton_name}',
146  **kwargs
147  )
148 
149  acc.addEventAlgo(alg, primary=True)
150 
151  return acc
152 
153 
154 def RNNToolCfg(flags, name="RNNTool",
155  RNN_name="RNN_name", lepton_name="",
156  **kwargs) -> ComponentAccumulator:
157  """
158  Configure the RNN tool.
159  """
160  lep_tag_log.info("calling RNNToolCfg with name"+RNN_name+" with lepton_name="+lepton_name)
161 
162  if lepton_name not in ["Electrons", "Muons"]:
163  raise ValueError(f'RNNTool - unknown lepton type: "{lepton_name}"')
164 
165  acc = ComponentAccumulator()
166 
167  #
168  # Read configuration from AFS for this initial merge request, will switch to cvmfs with second request
169  #
170  if lepton_name == 'Electrons':
171  kwargs.setdefault("configRNNVersion", 'InputData-2020-02-25/RNN/Electron')
172  kwargs.setdefault("configRNNJsonFile",
173  'elecs_feb20_fullrun2_linear_ptraw_ntk5_model_ndense10_nhidden50_nepoch10_nbatch256_use_weights_nn-config.json')
174 
175  elif lepton_name == 'Muons':
176  kwargs.setdefault("configRNNVersion", 'InputData-2020-02-25/RNN/Muon')
177  kwargs.setdefault("configRNNJsonFile",
178  'muons_feb19_fullrun2_linear_ptraw_ntk5_model_ndense10_nhidden50_nepoch10_nbatch256_use_weights_nn-config.json')
179 
180  tool_rnn = CompFactory.Prompt.RNNTool(
181  name=f'{RNN_name}_{lepton_name}_RNNTool', **kwargs
182  )
183  acc.setPrivateTools(tool_rnn)
184 
185  return acc
186 
187 
188 def DecoratePromptLeptonRNNCfg(flags, RNN_name="RNN_name", lepton_name="",
189  name="DecoratePromptLeptonRNN",
190  **kwargs) -> ComponentAccumulator:
191  """
192  Configure the prompt lepton RNN decorator.
193  """
194  lep_tag_log.info("calling DecoratePromptLeptonRNNCfg with name"+RNN_name+" with lepton_name="+lepton_name)
195  if lepton_name not in ["Electrons", "Muons"]:
196  raise ValueError(f'DecorateNonPromptVertex - unknown lepton type: "{lepton_name}"')
197 
198  acc = ComponentAccumulator()
199 
200  #
201  # Prepare DecoratePromptLepton alg
202  #
203  kwargs.setdefault("inputContainerLepton", lepton_name)
204  kwargs.setdefault("inputContainerTrack", 'InDetTrackParticles')
205  kwargs.setdefault("inputContainerTrackJet", 'AntiKtVR30Rmax4Rmin02PV0TrackJets')
206  kwargs.setdefault("inputContainerPrimaryVertices", 'PrimaryVertices')
207 
208  kwargs.setdefault("decorationPrefixRNN", 'PromptLeptonRNN_')
209 
210  kwargs.setdefault("debug", False)
211  kwargs.setdefault("outputStream", 'out')
212 
213  kwargs.setdefault("toolRNN", acc.popToolsAndMerge(
214  RNNToolCfg(flags, RNN_name=RNN_name, lepton_name=lepton_name)
215  ))
216 
217  alg = CompFactory.Prompt.DecoratePromptLeptonRNN(
218  name=f'{lepton_name}_decorate_RNN_{RNN_name}', **kwargs
219  )
220  acc.addEventAlgo(alg, primary=True)
221 
222  lep_tag_log.info('Decorate%s - prepared %s algorithm for: %s',
223  RNN_name, RNN_name, lepton_name)
224 
225  return acc
226 
227 
228 def getStringIntVars(BDT_name):
229  """
230  Get the integer variables for the BDT (I think)
231  """
232  int_vars = []
233 
234  if BDT_name == 'PromptLeptonImprovedVeto':
235  int_vars += ['MVAXBin']
236  elif (BDT_name == 'PromptLeptonImprovedVetoBARR'
237  or BDT_name == 'PromptLeptonImprovedVetoECAP'):
238  int_vars += ['MVAXBin', 'TrackJetNTrack']
239  else:
240  raise ValueError(f'getStringIntVars - unknown alg: "{BDT_name}"')
241 
242  return int_vars
243 
244 
245 def getStringFloatVars(BDT_name, part_type=''):
246  """
247  Get the float variables for the BDT (I think)
248  """
249  float_vars = []
250 
251  if BDT_name == 'PromptLeptonImprovedVeto':
252  float_vars += ['topoetcone30rel',
253  'ptvarcone30_TightTTVA_pt500rel',
254  'PromptLeptonRNN_prompt',
255  'PtFrac',
256  'DRlj',
257  'CaloClusterERel',
258  'CandVertex_normDistToPriVtxLongitudinalBest']
259  elif (BDT_name == 'PromptLeptonImprovedVetoBARR'
260  or BDT_name == 'PromptLeptonImprovedVetoECAP'):
261  float_vars += ['topoetcone30rel',
262  'ptvarcone30rel',
263  'PromptLeptonRNN_prompt',
264  'PtFrac',
265  'DRlj',
266  'CaloClusterSumEtRel',
267  'PtRel',
268  'CandVertex_normDistToPriVtxLongitudinalBest_ThetaCutVtx']
269  else:
270  raise ValueError(f'getStringFloatVars - unknown alg: "{BDT_name}"')
271 
272  return float_vars
273 
274 
276  flags, BDT_name="", lepton_name="", track_jet_name="AntiKtVR30Rmax4Rmin02PV0TrackJets",
277  **kwargs
278 ) -> ComponentAccumulator:
279  """
280  Configure the PromptLeptonImproved decorator.
281  """
282  lep_tag_log.info("calling DecoratePromptLeptonImprovedCfg with BDT_name="+BDT_name+" lepton_name="+lepton_name+" track_jet_name="+track_jet_name)
283  #
284  # Check track jet container is correct
285  #
286  if track_jet_name != 'AntiKtVR30Rmax4Rmin02PV0TrackJets':
287  raise ValueError(f'Decorate{BDT_name} - unknown track jet collection: "{track_jet_name}"')
288 
289  acc = ComponentAccumulator()
290 
291  #
292  # Prepare DecoratePromptLepton alg
293  #
294  kwargs.setdefault("LeptonContainerName", lepton_name)
295 
296  kwargs.setdefault("TrackJetContainerName", track_jet_name)
297  kwargs.setdefault("PrimaryVertexContainerName", 'PrimaryVertices')
298  kwargs.setdefault("ClusterContainerName", 'CaloCalTopoClusters')
299 
300  kwargs.setdefault("BDTName", BDT_name)
301  kwargs.setdefault("InputVarDecoratePrefix", 'PromptLeptonImprovedInput_')
302  kwargs.setdefault("PrintTime", False)
303  kwargs.setdefault("OutputLevel", 10)
304 
305  #
306  # Read configuration from AFS for this initial merge request, will switch to cvmfs with second request
307  #
308  if lepton_name == 'Electrons':
309  kwargs.setdefault("MethodTitleMVA", f'BDT_Electron_{BDT_name}')
310  kwargs.setdefault("ConfigFileVersion", 'InputData-2020-02-25/BDT/Electron/' + BDT_name)
311  kwargs.setdefault("accessorRNNVars", ['PromptLeptonRNN_prompt'])
312  elif lepton_name == 'Muons':
313  kwargs.setdefault("MethodTitleMVA", f'BDT_Muon_{BDT_name}')
314  kwargs.setdefault("ConfigFileVersion", 'InputData-2020-02-25/BDT/Muon/' + BDT_name)
315  kwargs.setdefault("accessorRNNVars", ['PromptLeptonRNN_prompt'])
316  else:
317  raise ValueError(f'Decorate{BDT_name} - unknown lepton type: "{lepton_name}"')
318 
319  kwargs.setdefault("stringIntVars", getStringIntVars(BDT_name))
320  kwargs.setdefault("stringFloatVars", getStringFloatVars(BDT_name))
321  kwargs.setdefault("extraDecoratorFloatVars", ['RawPt'])
322  kwargs.setdefault("extraDecoratorShortVars", ['CandVertex_NPassVtx'])
323  kwargs.setdefault("vetoDecoratorFloatVars", ['PromptLeptonRNN_prompt'])
324  kwargs.setdefault("vetoDecoratorShortVars", [])
325 
326  kwargs.setdefault("leptonPtBinsVector", [10.0e3, 15.0e3, 20.0e3, 25.0e3, 32.0e3, 43.0e3, 100.0e3])
327 
328 
329  #
330  # Secondary vertex selection for the PromptLeptonImproved
331  #
332  kwargs.setdefault("VertexLinkName", 'DeepMergedSecVtxLinks')
333 
334  alg = CompFactory.Prompt.DecoratePromptLeptonImproved(
335  f'{lepton_name}_decorate{BDT_name}', **kwargs
336  )
337  acc.addEventAlgo(alg, primary=True)
338 
339  lep_tag_log.info(
340  'Decorate%s - prepared %s algorithm for: %s, %s',
341  BDT_name, BDT_name, lepton_name, track_jet_name
342  )
343 
344  return acc
345 
346 
348  ConfigFlags, name="DecorateImprovedPromptLeptonAlgs",
349  lepton_type="", **kwargs
350 ) -> ComponentAccumulator:
351  """
352  CA to decorate with PLIV input algorithms
353  """
354  valid_lepton_types = ["", "Electrons", "Muons"]
355  if lepton_type not in valid_lepton_types:
356  lep_tag_log.error("Requested lepton type: %s", lepton_type)
357  lep_tag_log.error("Allowed lepton types: %s", valid_lepton_types)
358  raise ValueError('DecorateImprovedPromptLeptonAlgsCfg - '
359  + f'unknown lepton type: "{lepton_type}"')
360 
361  acc = ComponentAccumulator()
362 
363  if lepton_type in ["", "Electrons"]:
364  acc.merge(DecorateReFitPrimaryVertexCfg(ConfigFlags, lepton_type="Electrons"))
365  acc.merge(DecorateNonPromptVertexCfg(ConfigFlags, lepton_name="Electrons"))
366  acc.merge(DecoratePromptLeptonRNNCfg(ConfigFlags,
367  RNN_name='PromptLeptonRNN',
368  lepton_name='Electrons'))
370  ConfigFlags, BDT_name="PromptLeptonImprovedVetoBARR",
371  lepton_name="Electrons", track_jet_name="AntiKtVR30Rmax4Rmin02PV0TrackJets"
372  ))
374  ConfigFlags, BDT_name="PromptLeptonImprovedVetoECAP",
375  lepton_name="Electrons", track_jet_name="AntiKtVR30Rmax4Rmin02PV0TrackJets"
376  ))
377 
378  if lepton_type in ["", "Muons"]:
379  acc.merge(DecorateReFitPrimaryVertexCfg(ConfigFlags, lepton_type="Muons"))
380  acc.merge(DecorateNonPromptVertexCfg(ConfigFlags, lepton_name="Muons"))
381  acc.merge(DecoratePromptLeptonRNNCfg(ConfigFlags,
382  RNN_name='PromptLeptonRNN',
383  lepton_name='Muons'))
385  ConfigFlags, BDT_name="PromptLeptonImprovedVeto",
386  lepton_name="Muons", track_jet_name="AntiKtVR30Rmax4Rmin02PV0TrackJets"
387  ))
388 
389  return acc
390 
391 #------------------------------------------------------------------------------
392 def GetExtraPromptVariablesForDxAOD(name='', addSpectators=False, onlyBDT=True):
393 
394  prompt_lep_vars = []
395 
396  #
397  # Decorate lepton only with the BDT outputs when the onlyBDT flag is true.
398  #
399  # NOTE: The output score name for BDTname=LowPtPromptLeptonVeto is "LowPtPLV" instead "LowPtPromptLeptonVeto".
400  # This is to harmonize with the variable augmented in CP::IsolationLowPtPLVTool
401  #
402  if onlyBDT:
403  if name == "" or name == "Electrons":
404  prompt_lep_vars += ["Electrons.PromptLeptonVeto.PromptLeptonIso.LowPtPLV."]
405 
406  if name == "" or name == "Muons":
407  prompt_lep_vars += ["Muons.PromptLeptonVeto.PromptLeptonIso.LowPtPLV."]
408 
409  return prompt_lep_vars
410 
411 
412  prompt_vars = "PromptLeptonVeto.PromptLeptonIso.LowPtPLV."
413  prompt_vars += "PromptLeptonInput_TrackJetNTrack.PromptLeptonInput_sv1_jf_ntrkv."
414  prompt_vars += "PromptLeptonInput_ip2.PromptLeptonInput_ip3."
415  prompt_vars += "PromptLeptonInput_LepJetPtFrac.PromptLeptonInput_DRlj."
416  prompt_vars += "PromptLeptonInput_PtFrac.PromptLeptonInput_PtRel."
417  prompt_vars += "PromptLeptonInput_DL1mu.PromptLeptonInput_rnnip."
418  prompt_vars += "PromptLeptonInput_topoetcone20rel.PromptLeptonInput_ptvarcone20rel."
419  prompt_vars += "PromptLeptonInput_topoetcone30rel.PromptLeptonInput_ptvarcone30rel."
420 
421  prompt_vars += "PromptLeptonInput_SecondaryVertexIndexVector.PromptLeptonInput_SecondaryVertexIndexVectorInDet.PromptLeptonInput_SecondaryVertexIndexVectorMerge.PromptLeptonInput_SecondaryVertexIndexVectorDeepMerge."
422  prompt_vars += "rhocen.rhofor.SecVtxLinks.RefittedPriVtxLink.RefittedPriVtxWithoutLeptonLink."
423 
424 
425  secondaryvertex_vars = "SVType.trackParticleLinks.trackWeights.neutralParticleLinks.neutralWeights.SecondaryVertexIndex.SecondaryVertexIndexVectorInput.chiSquared.numberDoF.x.y.z.covariance.vertexType.energyFraction.mass.normDist.ntrk.distToPriVtx.normDistToPriVtx.distToRefittedPriVtx.normDistToRefittedPriVtx.distToRefittedRmLepPriVtx.normDistToRefittedRmLepPriVtx"
426 
427  if addSpectators :
428  prompt_vars += "PromptLeptonInput_JetPt.PromptLeptonInput_JetEta.PromptLeptonInput_JetPhi.PromptLeptonInput_JetM."
429 
430  if name == "" or name == "Electrons":
431  prompt_el_vars = "ptvarcone40.topoetcone20.topoetcone20ptCorrection.ptcone20_TightTTVA_pt500.ptcone20_TightTTVA_pt1000.ptvarcone20_TightTTVA_pt1000.ptvarcone30_TightTTVA_pt500.ptvarcone30_TightTTVA_pt1000.ptvarcone40_TightTTVALooseCone_pt500"
432 
433  prompt_lep_vars += ["Electrons." + prompt_vars + prompt_el_vars]
434  prompt_lep_vars += ["SecVtxContainer_Electrons.%s" %secondaryvertex_vars]
435  prompt_lep_vars += ["SecVtx_ConvVtxContainer_Electrons.%s" %secondaryvertex_vars]
436 
437  if name == "" or name == "Muons":
438  prompt_mu_vars = "ET_Core.ET_EMCore.ET_HECCore.ET_TileCore.EnergyLoss.EnergyLossSigma.MeasEnergyLoss.MeasEnergyLossSigma.ParamEnergyLoss.ParamEnergyLossSigmaMinus.ParamEnergyLossSigmaPlus.neflowisol20.neflowisol30.neflowisol40.ptvarcone20_TightTTVA_pt500.ptvarcone30_TightTTVA_pt500.ptvarcone40_TightTTVA_pt500.ptvarcone20_TightTTVA_pt1000.ptvarcone30_TightTTVA_pt1000.ptvarcone40_TightTTVA_pt1000.caloExt_Decorated.caloExt_eta.caloExt_phi"
439 
440  prompt_lep_vars += ["Muons." + prompt_vars + prompt_mu_vars]
441  prompt_lep_vars += ["SecVtxContainer_Muons.%s" %secondaryvertex_vars]
442 
443  return prompt_lep_vars
444 
445 #------------------------------------------------------------------------------
446 def GetExtraImprovedPromptVariablesForDxAOD(name='', onlyBDT=False):
447 
448  prompt_lep_vars = []
449 
450  #
451  # Decorate lepton only with the BDT outputs when the onlyBDT flag is true.
452  #
453  if onlyBDT:
454  # Add lepton raw pT and pTBin as default which is needed for the PLIV working points.
455  rawpt_vars ="PromptLeptonImprovedInput_MVAXBin.PromptLeptonImprovedInput_RawPt"
456 
457  if name == "" or name == "Electrons":
458  prompt_lep_vars += ["Electrons.PromptLeptonImprovedVetoBARR.PromptLeptonImprovedVetoECAP.%s"%rawpt_vars]
459 
460  if name == "" or name == "Muons":
461  prompt_lep_vars += ["Muons.PromptLeptonImprovedVeto.%s"%rawpt_vars]
462 
463  return prompt_lep_vars
464 
465  prompt_vars = "PromptLeptonImprovedInput_MVAXBin.PromptLeptonImprovedInput_RawPt."
466  prompt_vars += "PromptLeptonImprovedInput_PtFrac.PromptLeptonImprovedInput_DRlj."
467  prompt_vars += "PromptLeptonImprovedInput_topoetcone30rel.PromptLeptonImprovedInput_ptvarcone30rel."
468 
469  if name == "" or name == "Electrons":
470  # Add PromptLeptonTagger electron RNN and new inputs for PromptLeptonImprovedVetoBARR/PromptLeptonImprovedVetoECAP
471  prompt_el_vars = "PromptLeptonRNN_prompt.PromptLeptonRNN_non_prompt_b.PromptLeptonRNN_non_prompt_c.PromptLeptonRNN_conversion."
472  prompt_el_vars += "PromptLeptonImprovedVetoBARR.PromptLeptonImprovedVetoECAP.PromptLeptonImprovedInput_TrackJetNTrack.PromptLeptonImprovedInput_PtRel.PromptLeptonImprovedInput_CaloClusterSumEtRel.PromptLeptonImprovedInput_CandVertex_normDistToPriVtxLongitudinalBest_ThetaCutVtx"
473 
474  prompt_lep_vars += ["Electrons." + prompt_vars + prompt_el_vars]
475 
476  if name == "" or name == "Muons":
477  # Add PromptLeptonTagger muon RNN and new inputs for PromptLeptonImprovedVeto
478  prompt_mu_vars = "PromptLeptonRNN_prompt.PromptLeptonRNN_non_prompt_b.PromptLeptonRNN_non_prompt_c."
479  prompt_mu_vars += "PromptLeptonImprovedVeto.PromptLeptonImprovedInput_ptvarcone30_TightTTVA_pt500rel.PromptLeptonImprovedInput_CaloClusterERel.PromptLeptonImprovedInput_CandVertex_normDistToPriVtxLongitudinalBest"
480 
481  prompt_lep_vars += ["Muons." + prompt_vars + prompt_mu_vars]
482 
483  return prompt_lep_vars
484 
485 
486 # Script to run for testing the config
487 # from https://atlassoftwaredocs.web.cern.ch/guides/ca_configuration/ca/
488 if __name__ == "__main__":
489  # import the flags and set them
490  from AthenaConfiguration.AllConfigFlags import initConfigFlags
491  FLAGS = initConfigFlags()
492 
493  from AthenaConfiguration.Enums import ProductionStep
494  FLAGS.Common.ProductionStep = ProductionStep.Derivation
495 
496  FLAGS.Exec.MaxEvents = 10
497 
498  # use one of the predefined files
499  from AthenaConfiguration.TestDefaults import defaultTestFiles
500  FLAGS.Input.Files = defaultTestFiles.AOD_RUN3_MC
501  FLAGS.fillFromArgs() # make the job understand command line options
502  # lock the flags
503  FLAGS.lock()
504 
505  # create basic infrastructure
506  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
507  ACC = MainServicesCfg(FLAGS)
508 
509  # Pool file reading
510  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
511  ACC.merge(PoolReadCfg(FLAGS))
512 
513  # --------------------
514  # Common augmentations (needed for PLIV inputs)
515  # --------------------
516  from DerivationFrameworkPhys.TriggerListsHelper import TriggerListsHelper
517  trigger_lists_helper = TriggerListsHelper(FLAGS)
518 
519  from DerivationFrameworkPhys.PhysCommonConfig import PhysCommonAugmentationsCfg
520  ACC.merge(PhysCommonAugmentationsCfg(FLAGS, TriggerListsHelper=trigger_lists_helper))
521 
522  # from DerivationFrameworkFlavourTag.FtagDerivationConfig import FtagJetCollectionsCfg
523  # FTagJetColl = ['AntiKtVR30Rmax4Rmin02TrackJets']
524  # ACC.merge(FtagJetCollectionsCfg(FLAGS,FTagJetColl))
525  # ACC.merge(METCommonCfg(FLAGS))
526 
527  # add the algorithm to the configuration
528  ACC.merge(DecorateImprovedPromptLeptonAlgsCfg(FLAGS))
529 
530  # debug printout
531  ACC.printConfig(withDetails=True, summariseProps=True)
532 
533  # run the job
534  status = ACC.run()
535 
536  # report the execution status (0 ok, else error)
537  import sys
538  sys.exit(not status.isSuccess())
LeptonTaggersConfig.DecoratePromptLeptonImprovedCfg
ComponentAccumulator DecoratePromptLeptonImprovedCfg(flags, BDT_name="", lepton_name="", track_jet_name="AntiKtVR30Rmax4Rmin02PV0TrackJets", **kwargs)
Definition: LeptonTaggersConfig.py:275
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
LeptonTaggersConfig.DecorateNonPromptVertexCfg
ComponentAccumulator DecorateNonPromptVertexCfg(flags, name="DecorateNonPromptVertex", lepton_name="", **kwargs)
Definition: LeptonTaggersConfig.py:113
LeptonTaggersConfig.getStringIntVars
def getStringIntVars(BDT_name)
Definition: LeptonTaggersConfig.py:228
LeptonTaggersConfig.VtxItrMergingToolCfg
ComponentAccumulator VtxItrMergingToolCfg(flags, name="VertexIterativeMergingTool", lepton_name="", **kwargs)
Definition: LeptonTaggersConfig.py:91
LeptonTaggersConfig.GetExtraImprovedPromptVariablesForDxAOD
def GetExtraImprovedPromptVariablesForDxAOD(name='', onlyBDT=False)
Definition: LeptonTaggersConfig.py:446
LeptonTaggersConfig.VtxFittingToolCfg
ComponentAccumulator VtxFittingToolCfg(ConfigFlags, **kwargs)
Definition: LeptonTaggersConfig.py:24
LeptonTaggersConfig.DecorateReFitPrimaryVertexCfg
ComponentAccumulator DecorateReFitPrimaryVertexCfg(ConfigFlags, name="PrimaryVertexReFitter", lepton_type="", **kwargs)
Definition: LeptonTaggersConfig.py:56
python.TrkVertexBilloirToolsConfig.FastVertexFitterCfg
def FastVertexFitterCfg(flags, name="FastVertexFitterTool", **kwargs)
Definition: TrkVertexBilloirToolsConfig.py:6
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:256
LeptonTaggersConfig.DecorateImprovedPromptLeptonAlgsCfg
ComponentAccumulator DecorateImprovedPromptLeptonAlgsCfg(ConfigFlags, name="DecorateImprovedPromptLeptonAlgs", lepton_type="", **kwargs)
Definition: LeptonTaggersConfig.py:347
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
python.PhysCommonConfig.PhysCommonAugmentationsCfg
def PhysCommonAugmentationsCfg(flags, **kwargs)
Definition: PhysCommonConfig.py:14
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:69
LeptonTaggersConfig.getStringFloatVars
def getStringFloatVars(BDT_name, part_type='')
Definition: LeptonTaggersConfig.py:245
LeptonTaggersConfig.GetExtraPromptVariablesForDxAOD
def GetExtraPromptVariablesForDxAOD(name='', addSpectators=False, onlyBDT=True)
Definition: LeptonTaggersConfig.py:392
LeptonTaggersConfig.DecoratePromptLeptonRNNCfg
ComponentAccumulator DecoratePromptLeptonRNNCfg(flags, RNN_name="RNN_name", lepton_name="", name="DecoratePromptLeptonRNN", **kwargs)
Definition: LeptonTaggersConfig.py:188
LeptonTaggersConfig.RNNToolCfg
ComponentAccumulator RNNToolCfg(flags, name="RNNTool", RNN_name="RNN_name", lepton_name="", **kwargs)
Definition: LeptonTaggersConfig.py:154