Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
TRIG9.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
2 #========================================================================
3 # TRIG9.py
4 # This defines DAOD_TRIG9, a DAOD format for Run 3.
5 # It contains the variables and objects needed for TauTrigger performance
6 # such as online and offline tracks, RoIs, and offline objects.
7 # Only events passing single lepton or tau trigger chains are kept.
8 # It requires the flag TRIG9 in Derivation_tf.py
9 #========================================================================
10 
11 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
12 from AthenaConfiguration.ComponentFactory import CompFactory
13 from AthenaConfiguration.Enums import MetadataCategory
14 
15 # Main algorithm config
16 def TRIG9KernelCfg(flags, name='TRIG9Kernel', **kwargs):
17  """Configure the derivation framework driving algorithm (kernel) for TRIG9"""
18  acc = ComponentAccumulator()
19 
20  # Augmentations
21  augmentationTools = [ ]
22 
23  # Common augmentations
24  from DerivationFrameworkPhys.PhysCommonConfig import PhysCommonAugmentationsCfg
25  acc.merge(PhysCommonAugmentationsCfg(flags, TriggerListsHelper = kwargs['TriggerListsHelper']))
26 
27  from TriggerMenuMT.TriggerAPI.TriggerAPI import TriggerAPI
28  from TriggerMenuMT.TriggerAPI.TriggerEnums import TriggerPeriod
29 
30  #allperiods = TriggerPeriod.y2015 | TriggerPeriod.y2016 | TriggerPeriod.y2017 | TriggerPeriod.y2018 | TriggerPeriod.future2e34
31  allperiods = TriggerPeriod.future2e34
32  TriggerAPI.setConfigFlags(flags)
33  trig_all = list(TriggerAPI.getAllHLT(allperiods).keys())
34 
35  # Add in Run 3 triggers
36  TriggerListsHelper = kwargs['TriggerListsHelper']
37  trig_all += TriggerListsHelper.Run3TriggerNames
38 
39  # Thinning tools...
40  # track thinning
41  from DerivationFrameworkInDet.InDetToolsConfig import TrackParticleThinningCfg
42  tp_thinning_expression = "InDetTrackParticles.DFCommonTightPrimary && abs(DFCommonInDetTrackZ0AtPV)*sin(InDetTrackParticles.theta) < 3.0*mm && InDetTrackParticles.pt > 10*GeV"
43  TRIG9TrackParticleThinningTool = acc.getPrimaryAndMerge(TrackParticleThinningCfg(
44  flags,
45  name = 'TRIG9TrackParticleThinningTool',
46  StreamName = kwargs['StreamName'],
47  SelectionString = tp_thinning_expression,
48  InDetTrackParticlesKey = "InDetTrackParticles"))
49 
50  # Include inner detector tracks associated with muons
51  from DerivationFrameworkInDet.InDetToolsConfig import MuonTrackParticleThinningCfg
52  TRIG9MuonTrackParticleThinningTool = acc.getPrimaryAndMerge(MuonTrackParticleThinningCfg(
53  flags,
54  name = 'TRIG9MuonTrackParticleThinningTool',
55  StreamName = kwargs['StreamName'],
56  MuonKey = "Muons",
57  InDetTrackParticlesKey = "InDetTrackParticles"))
58 
59  # tau thinning
60  from DerivationFrameworkTau.TauCommonConfig import TauThinningCfg
61  #tau_thinning_expression = "TauJets.pt >= 20*GeV"
62  tau_thinning_expression = "( TauJets.pt >= 20*GeV && abs(TauJets.eta) < 2.5 && abs(TauJets.charge)==1.0 && (TauJets.nTracks == 1 || TauJets.nTracks == 3) )"
63 
64  TRIG9TauJetThinningTool = acc.getPrimaryAndMerge(TauThinningCfg(
65  flags,
66  name = 'TRIG9TauJetThinningTool',
67  StreamName = kwargs['StreamName'],
68  Taus = "TauJets",
69  TauTracks = "TauTracks",
70  TrackParticles = "InDetTrackParticles",
71  TauNeutralPFOs = "TauNeutralParticleFlowObjects",
72  TauSecondaryVertices = "TauSecondaryVertices",
73  SelectionString = tau_thinning_expression))
74 
75  # Finally the kernel itself
76  thinningTools = [
77  TRIG9TrackParticleThinningTool,
78  TRIG9MuonTrackParticleThinningTool,
79  TRIG9TauJetThinningTool,
80  ]
81 
82  # Skimming
83  skimmingTools = []
84 
85  # skimming events based on electron/muon + tau counting
86  tauProngs13 = "( abs(TauJets.charge)==1.0 && (TauJets.nTracks == 1 || TauJets.nTracks == 3) )"
87  #MuTrig: (pT(mu)>18 && pT(tau)>18), EleTrig: (pT(el)>22 && pT(tau)>18)
88  e22 = '(count( Electrons.pt > 22.0*GeV && abs(Electrons.eta) < 2.5 && Electrons.DFCommonElectronsLHLoose) >= 1)'
89  mu18 = '(count( Muons.pt > 18.0*GeV && abs(Muons.eta) < 2.5 && Muons.DFCommonMuonPassPreselection) >= 1)'
90  tau20 = '(count( TauJets.pt > 20.0*GeV && abs(TauJets.eta) < 2.5 && '+tauProngs13+' && TauJets.DFTauRNNLoose ) >= 1)'
91  mutau = '('+mu18+' && '+tau20+')'
92  etau = '('+e22+' && '+tau20+')'
93  skim_expression = '('+mutau+') || ('+etau+')'
94 
95  EventSkimmingTool = CompFactory.DerivationFramework.xAODStringSkimmingTool(
96  name="EventSkimmingTool", expression=skim_expression,
97  )
98  acc.addPublicTool(EventSkimmingTool)
99  skimmingTools.append(EventSkimmingTool)
100 
101  # Pieces of trigger names to keep
102  trig_keys = ['mediumRNN',]
103  # Add specific triggers
104  additional_triggers = [
105  "HLT_mu24_ivarmedium_L1MU14FCH",
106  "HLT_mu26_ivarmedium_L1MU14FCH",
107  "HLT_e26_lhtight_ivarloose_L1EM22VHI",
108  "HLT_e26_lhtight_ivarloose_L1eEM26M",
109  ]
110  trig_keys += additional_triggers
111  triggers = [t for t in trig_all for k in trig_keys if k in t]
112 
113  # remove not used triggers
114  trig_veto = ['HLT_g','HLT_e17_','HLT_e24_','HLT_mu14_',]
115  final_triggers = [t for t in triggers for k in trig_veto if k not in t]
116 
117  #remove duplicates
118  final_triggers = sorted(list(set(final_triggers)))
119  print('TRIG9 list of triggers used for skimming:')
120  for trig in final_triggers: print(trig)
121 
122  TriggerSkimmingTool = CompFactory.DerivationFramework.TriggerSkimmingTool
123  TRIG9TriggerSkimmingTool = TriggerSkimmingTool(name = "TRIG9TriggerPreSkimmingTool",
124  TriggerListAND = [],
125  TriggerListOR = final_triggers)
126  acc.addPublicTool(TRIG9TriggerSkimmingTool)
127 
128  skimmingTools.append(TRIG9TriggerSkimmingTool)
129 
130  DerivationKernel = CompFactory.DerivationFramework.DerivationKernel
131  acc.addEventAlgo(DerivationKernel(name,
132  SkimmingTools = skimmingTools,
133  ThinningTools = thinningTools,
134  AugmentationTools = augmentationTools))
135 
136  return acc
137 
138 
139 def TRIG9Cfg(flags):
140 
141  acc = ComponentAccumulator()
142 
143  # Get the lists of triggers needed for trigger matching.
144  # This is needed at this scope (for the slimming) and further down in the config chain
145  # for actually configuring the matching, so we create it here and pass it down
146  # TODO: this should ideally be called higher up to avoid it being run multiple times in a train
147  from DerivationFrameworkPhys.TriggerListsHelper import TriggerListsHelper
148  TRIG9TriggerListsHelper = TriggerListsHelper(flags)
149 
150  # Common augmentations
151  acc.merge(TRIG9KernelCfg(flags, name="TRIG9Kernel", StreamName = 'StreamDAOD_TRIG9', TriggerListsHelper = TRIG9TriggerListsHelper))
152 
153 
154  # ============================
155  # Define contents of the format
156  # =============================
157  from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
158  from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
159  from DerivationFrameworkCore.SlimmingHelper import SlimmingHelper
160 
161  TRIG9SlimmingHelper = SlimmingHelper("TRIG9SlimmingHelper", NamesAndTypes = flags.Input.TypedCollections, flags = flags)
162 
163  TRIG9SlimmingHelper.SmartCollections = ["EventInfo",
164  "Electrons",
165  "Photons",
166  "Muons",
167  "PrimaryVertices",
168  "InDetTrackParticles",
169  "AntiKt4EMPFlowJets",
170  "MET_Baseline_AntiKt4EMPFlow",
171  "BTagging_AntiKt4EMPFlow",
172  "TauJets",
173  ]
174 
175  TRIG9SlimmingHelper.StaticContent = [
176  "TrigRoiDescriptorCollection#HLT_eTAURoIs",
177  "TrigRoiDescriptorCollection#HLT_jTAURoIs",
178  "TrigRoiDescriptorCollection#HLT_cTAURoIs",
179  "TrigRoiDescriptorCollection#HLT_TAURoI",
180  "TrigRoiDescriptorCollection#HLT_Roi_Tau",
181  "TrigRoiDescriptorCollection#HLT_Roi_Tau_probe",
182  "TrigRoiDescriptorCollection#HLT_Roi_TauCore",
183  "TrigRoiDescriptorCollection#HLT_Roi_TauCore_probe",
184  "TrigRoiDescriptorCollection#HLT_Roi_TauIso",
185  "TrigRoiDescriptorCollection#HLT_Roi_TauIso_probe",
186  ]
187 
188  TRIG9SlimmingHelper.ExtraVariables += [
189  "TruthPrimaryVertices.t.x.y.z",
190  "PrimaryVertices.t.x.y.z.numberDoF.chiSquared.covariance.trackParticleLinks",
191  "EventInfo.hardScatterVertexLink.timeStampNSOffset",
192  ]
193 
194  TRIG9SlimmingHelper.AllVariables += ['HLT_TrigTauRecMerged_MVA','HLT_tautrack_MVA']
195 
196  # Truth containers
197  if flags.Input.isMC:
198  from DerivationFrameworkMCTruth.MCTruthCommonConfig import addTruth3ContentToSlimmerTool
199  addTruth3ContentToSlimmerTool(TRIG9SlimmingHelper)
200  TRIG9SlimmingHelper.AllVariables += ['InTimeAntiKt4TruthJets','OutOfTimeAntiKt4TruthJets']
201  TRIG9SlimmingHelper.ExtraVariables += ["Electrons.TruthLink",
202  "Muons.TruthLink",
203  "Photons.TruthLink"]
204 
205  from DerivationFrameworkMCTruth.MCTruthCommonConfig import AddTauAndDownstreamParticlesCfg
206  acc.merge(AddTauAndDownstreamParticlesCfg(flags))
207  TRIG9SlimmingHelper.AllVariables += ['TruthTausWithDecayParticles','TruthTausWithDecayVertices']
208 
209 
210 
211 
212  # Trigger content
213  TRIG9SlimmingHelper.IncludeTriggerNavigation = True
214  TRIG9SlimmingHelper.IncludeAdditionalTriggerContent = True
215  TRIG9SlimmingHelper.IncludeJetTriggerContent = False
216  TRIG9SlimmingHelper.IncludeMuonTriggerContent = False
217  TRIG9SlimmingHelper.IncludeEGammaTriggerContent = False
218  TRIG9SlimmingHelper.IncludeTauTriggerContent = False
219  TRIG9SlimmingHelper.IncludeEtMissTriggerContent = False
220  TRIG9SlimmingHelper.IncludeBJetTriggerContent = False
221  TRIG9SlimmingHelper.IncludeBPhysTriggerContent = False
222  TRIG9SlimmingHelper.IncludeMinBiasTriggerContent = False
223 
224  # Trigger matching
225  # Run 2
226  if flags.Trigger.EDMVersion == 2:
227  from DerivationFrameworkPhys.TriggerMatchingCommonConfig import AddRun2TriggerMatchingToSlimmingHelper
228  AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = TRIG9SlimmingHelper,
229  OutputContainerPrefix = "TrigMatch_",
230  TriggerList = TRIG9TriggerListsHelper.Run2TriggerNamesTau)
231  AddRun2TriggerMatchingToSlimmingHelper(SlimmingHelper = TRIG9SlimmingHelper,
232  OutputContainerPrefix = "TrigMatch_",
233  TriggerList = TRIG9TriggerListsHelper.Run2TriggerNamesNoTau)
234  # Run 3, or Run 2 with navigation conversion
235  if flags.Trigger.EDMVersion == 3 or (flags.Trigger.EDMVersion == 2 and flags.Trigger.doEDMVersionConversion):
236  from TrigNavSlimmingMT.TrigNavSlimmingMTConfig import AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
238 
239  # Output stream
240  TRIG9ItemList = TRIG9SlimmingHelper.GetItemList()
241  acc.merge(OutputStreamCfg(flags, "DAOD_TRIG9", ItemList=TRIG9ItemList, AcceptAlgs=["TRIG9Kernel"]))
242  acc.merge(SetupMetaDataForStreamCfg(flags, "DAOD_TRIG9", AcceptAlgs=["TRIG9Kernel"], createMetadata=[MetadataCategory.CutFlowMetaData,MetadataCategory.TruthMetaData]))
243 
244  return acc
245 
DerivationFramework::TriggerMatchingUtils::sorted
std::vector< typename R::value_type > sorted(const R &r, PROJ proj={})
Helper function to create a sorted vector from an unsorted range.
TrigNavSlimmingMTConfig.AddRun3TrigNavSlimmingCollectionsToSlimmingHelper
def AddRun3TrigNavSlimmingCollectionsToSlimmingHelper(slimmingHelper)
Definition: TrigNavSlimmingMTConfig.py:98
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
python.MCTruthCommonConfig.AddTauAndDownstreamParticlesCfg
def AddTauAndDownstreamParticlesCfg(flags, generations=-1, rejectHadronChildren=False)
Definition: MCTruthCommonConfig.py:267
python.OutputStreamConfig.OutputStreamCfg
def OutputStreamCfg(flags, streamName, ItemList=[], MetadataItemList=[], disableEventTag=False, trigNavThinningSvc=None, takeItemsFromInput=False, extendProvenanceRecord=True, keepProvenanceTagsRegEx=None, AcceptAlgs=[], HelperTools=[])
Definition: OutputStreamConfig.py:16
TRIG9.TRIG9KernelCfg
def TRIG9KernelCfg(flags, name='TRIG9Kernel', **kwargs)
Definition: TRIG9.py:16
python.InDetToolsConfig.TrackParticleThinningCfg
def TrackParticleThinningCfg(flags, name, **kwargs)
Definition: InDetToolsConfig.py:458
python.TriggerMatchingCommonConfig.AddRun2TriggerMatchingToSlimmingHelper
def AddRun2TriggerMatchingToSlimmingHelper(**kwargs)
Definition: TriggerMatchingCommonConfig.py:49
TRIG9.TRIG9Cfg
def TRIG9Cfg(flags)
Definition: TRIG9.py:139
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
python.InDetToolsConfig.MuonTrackParticleThinningCfg
def MuonTrackParticleThinningCfg(flags, name, **kwargs)
Definition: InDetToolsConfig.py:542
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:232
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
python.MCTruthCommonConfig.addTruth3ContentToSlimmerTool
def addTruth3ContentToSlimmerTool(slimmer)
Definition: MCTruthCommonConfig.py:466
python.TauCommonConfig.TauThinningCfg
def TauThinningCfg(flags, name, **kwargs)
Definition: TauCommonConfig.py:258
python.PhysCommonConfig.PhysCommonAugmentationsCfg
def PhysCommonAugmentationsCfg(flags, **kwargs)
Definition: PhysCommonConfig.py:14
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:798
InfileMetaDataConfig.SetupMetaDataForStreamCfg
def SetupMetaDataForStreamCfg(flags, streamName="", AcceptAlgs=None, createMetadata=None, propagateMetadataFromInput=True, *args, **kwargs)
Definition: InfileMetaDataConfig.py:222
SlimmingHelper
Definition: SlimmingHelper.py:1
python.HION12.DerivationKernel
DerivationKernel
Definition: HION12.py:66