ATLAS Offline Software
Loading...
Searching...
No Matches
IDTIDE.py
Go to the documentation of this file.
1# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2#!/usr/bin/env python
3# ====================================================================
4# IDTIDE.py
5# Contact: atlas-cp-tracking-denseenvironments@cern.ch
6# Component accumulator version - replaces IDTIDE1
7# IMPORTANT: this is NOT an AOD based derived data type but one built
8# during reconstruction from HITS or RAW. It consequently has to be
9# run from Reco_tf
10# ====================================================================
11
12from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
13from AthenaConfiguration.ComponentFactory import CompFactory
14from AthenaConfiguration.Enums import MetadataCategory
15from AthenaCommon.CFElements import seqAND, parAND
16
17# IDTIDE Variables to be excluded from AOD
18IDTIDE_AOD_EXCLUDED_AUXDATA = [
19 'TrkBLX', 'TrkBLY', 'TrkBLZ', 'TrkIBLX', 'TrkIBLY', 'TrkIBLZ',
20 'TrkL1X', 'TrkL1Y', 'TrkL1Z', 'TrkL2X', 'TrkL2Y', 'TrkL2Z',
21 'IDTIDE_biased_PVd0Sigma', 'IDTIDE_biased_PVz0Sigma',
22 'IDTIDE_biased_PVz0SigmaSinTheta',
23 'IDTIDE_biased_d0', 'IDTIDE_biased_d0Sigma',
24 'IDTIDE_biased_z0', 'IDTIDE_biased_z0Sigma',
25 'IDTIDE_biased_z0SigmaSinTheta', 'IDTIDE_biased_z0SinTheta',
26 'IDTIDE_unbiased_PVd0Sigma', 'IDTIDE_unbiased_PVz0Sigma',
27 'IDTIDE_unbiased_PVz0SigmaSinTheta',
28 'IDTIDE_unbiased_d0', 'IDTIDE_unbiased_d0Sigma',
29 'IDTIDE_unbiased_z0', 'IDTIDE_unbiased_z0Sigma',
30 'IDTIDE_unbiased_z0SigmaSinTheta', 'IDTIDE_unbiased_z0SinTheta'
31 ]
32IDTIDE_AOD_EXCLUDED_AUXDATA_TRUTH = [
33 'd0', 'z0', 'phi', 'theta', 'z0st', 'qOverP', 'prodR', 'prodZ', 'nSilHits', 'time'
34 ]
35
36def IDTIDEKernelCommonCfg(flags, name='IDTIDEKernel'):
37 acc = ComponentAccumulator()
38
39 # ====================================================================
40 # AUGMENTATION TOOLS
41 # ====================================================================
42 augmentationTools = []
43
44 # Add unbiased track parameters to track particles
45 from DerivationFrameworkInDet.InDetToolsConfig import (
46 TrackToVertexWrapperCfg)
47 IDTIDETrackToVertexWrapper = acc.getPrimaryAndMerge(
48 TrackToVertexWrapperCfg(
49 flags, name="IDTIDETrackToVertexWrapper",
50 DecorationPrefix="IDTIDE")
51 )
52 augmentationTools.append(IDTIDETrackToVertexWrapper)
53
54 from DerivationFrameworkInDet.InDetToolsConfig import (
55 UsedInVertexFitTrackDecoratorCfg)
56 IDTIDEUsedInFitDecorator = acc.getPrimaryAndMerge(
57 UsedInVertexFitTrackDecoratorCfg(flags))
58 augmentationTools.append(IDTIDEUsedInFitDecorator)
59
60 # @TODO eventually computed for other extra outputs. Possible to come up with a solution to use a common Z0AtPV if there is more than one client ?
61 from DerivationFrameworkInDet.InDetToolsConfig import (
62 TrackParametersAtPVCfg)
63 DFCommonZ0AtPV = acc.getPrimaryAndMerge(TrackParametersAtPVCfg(
64 flags, name="IDTIDE_DFCommonZ0AtPV",
65 Z0SGEntryName="IDTIDEInDetTrackZ0AtPV")
66 )
67 augmentationTools.append(DFCommonZ0AtPV)
68
69 # ====================================================================
70 # SKIMMING TOOLS
71 #
72 # the list of active triggers for a particular release & menu can be found in the
73 # menu file for example
74 # https://gitlab.cern.ch/atlas/athena/-/blob/24.0/Trigger/TriggerCommon/TriggerMenuMT/python/HLT/Menu/Physics_pp_run3_v1.py
75 # ====================================================================
76 skimmingTools = []
77 if not flags.Input.isMC:
78
79 sel_jet600 = 'AntiKt4EMPFlowJets.JetConstitScaleMomentum_pt >= 600.*GeV'
80 sel_jet800 = 'AntiKt4EMPFlowJets.JetConstitScaleMomentum_pt >= 800.*GeV'
81 sel_jet1000 = 'AntiKt4EMPFlowJets.JetConstitScaleMomentum_pt >= 1000.*GeV'
82
83 #Phase1 Calo version of Jet triggers
84 jetA_ph1 = '( HLT_j110_pf_ftf_preselj80_L1jJ60 || HLT_j175_pf_ftf_preselj140_L1jJ90 || HLT_j260_pf_ftf_preselj200_L1jJ125 )'
85 jetC_ph1 = '( HLT_j360_pf_ftf_preselj225_L1jJ160 )'
86 jetD_ph1 = '( HLT_j400_pf_ftf_preselj225_L1jJ160 && !HLT_j460_pf_ftf_preselj225_L1jJ160 )'
87 jetE_ph1 = '( HLT_j460_pf_ftf_preselj225_L1jJ160 )'
88 jetF_ph1 = ' HLT_j460_pf_ftf_preselj225_L1jJ160 '
89 jetG_ph1 = ' HLT_j460_pf_ftf_preselj225_L1jJ160 '
90 jetH_ph1 = ' HLT_j460_pf_ftf_preselj225_L1jJ160 '
91
92
93 desd_jetA = f'( HLT_j110_pf_ftf_preselj80_L1J30 || HLT_j175_pf_ftf_preselj140_L1J50 || HLT_j260_pf_ftf_preselj200_L1J75 ) || {jetA_ph1} '
94 desd_jetC = f'( HLT_j360_pf_ftf_preselj225_L1J100 ) || {jetC_ph1} '
95 desd_jetD = f'( HLT_j420_pf_ftf_preselj225_L1J100 && !HLT_j460_pf_ftf_preselj225_L1J100 ) || {jetD_ph1} '
96 desd_jetE = f'( HLT_j460_pf_ftf_preselj225_L1J100 ) || {jetE_ph1} '
97 desd_jetF = \
98 f'(( HLT_j460_pf_ftf_preselj225_L1J100 || {jetF_ph1} ) && count({sel_jet600})>0 && count({sel_jet800})==0 )'
99 desd_jetG = \
100 f'(( HLT_j460_pf_ftf_preselj225_L1J100 || {jetG_ph1} ) && count({sel_jet800})>0 && count({sel_jet1000})==0 )'
101 desd_jetH = f'(( HLT_j460_pf_ftf_preselj225_L1J100 || {jetH_ph1} ) && count({sel_jet1000})>0 )'
102
103
104 prescaleA = 20
105 prescaleC = 40
106 prescaleD = 30
107 prescaleE = 20
108 prescaleF = 10
109 prescaleG = 5
110 # prescaleH = 1 Unused
111
112 from DerivationFrameworkTools.DerivationFrameworkToolsConfig import (
113 xAODStringSkimmingToolCfg,
114 PrescaleToolCfg,
115 FilterCombinationANDCfg,
116 FilterCombinationORCfg)
117
118 IDTIDE_SkimmingToolA = acc.getPrimaryAndMerge(
119 xAODStringSkimmingToolCfg(flags, name="IDTIDE_SkimmingToolA",
120 expression=desd_jetA))
121 IDTIDE_PrescaleToolA = acc.getPrimaryAndMerge(PrescaleToolCfg(
122 flags, name="IDTIDE_PrescaleToolA", Prescale=prescaleA))
123 IDTIDE_ANDToolA = acc.getPrimaryAndMerge(FilterCombinationANDCfg(
124 flags, name="IDTIDE_ANDToolA",
125 FilterList=[IDTIDE_SkimmingToolA, IDTIDE_PrescaleToolA]))
126
127 IDTIDE_SkimmingToolC = acc.getPrimaryAndMerge(
128 xAODStringSkimmingToolCfg(flags, name="IDTIDE_SkimmingToolC",
129 expression=desd_jetC))
130 IDTIDE_PrescaleToolC = acc.getPrimaryAndMerge(PrescaleToolCfg(
131 flags, name="IDTIDE_PrescaleToolC", Prescale=prescaleC))
132 IDTIDE_ANDToolC = acc.getPrimaryAndMerge(FilterCombinationANDCfg(
133 flags, name="IDTIDE_ANDToolC",
134 FilterList=[IDTIDE_SkimmingToolC, IDTIDE_PrescaleToolC]))
135
136 IDTIDE_SkimmingToolD = acc.getPrimaryAndMerge(
137 xAODStringSkimmingToolCfg(flags, name="IDTIDE_SkimmingToolD",
138 expression=desd_jetD))
139 IDTIDE_PrescaleToolD = acc.getPrimaryAndMerge(PrescaleToolCfg(
140 flags, name="IDTIDE_PrescaleToolD", Prescale=prescaleD))
141 IDTIDE_ANDToolD = acc.getPrimaryAndMerge(FilterCombinationANDCfg(
142 flags, name="IDTIDE_ANDToolD",
143 FilterList=[IDTIDE_SkimmingToolD, IDTIDE_PrescaleToolD]))
144
145 IDTIDE_SkimmingToolE = acc.getPrimaryAndMerge(
146 xAODStringSkimmingToolCfg(flags, name="IDTIDE_SkimmingToolE",
147 expression=desd_jetE))
148 IDTIDE_PrescaleToolE = acc.getPrimaryAndMerge(PrescaleToolCfg(
149 flags, name="IDTIDE_PrescaleToolE", Prescale=prescaleE))
150 IDTIDE_ANDToolE = acc.getPrimaryAndMerge(FilterCombinationANDCfg(
151 flags, name="IDTIDE_ANDToolE",
152 FilterList=[IDTIDE_SkimmingToolE, IDTIDE_PrescaleToolE]))
153
154 IDTIDE_SkimmingToolF = acc.getPrimaryAndMerge(
155 xAODStringSkimmingToolCfg(flags, name="IDTIDE_SkimmingToolF",
156 expression=desd_jetF))
157 IDTIDE_PrescaleToolF = acc.getPrimaryAndMerge(PrescaleToolCfg(
158 flags, name="IDTIDE_PrescaleToolF", Prescale=prescaleF))
159 IDTIDE_ANDToolF = acc.getPrimaryAndMerge(FilterCombinationANDCfg(
160 flags, name="IDTIDE_ANDToolF",
161 FilterList=[IDTIDE_SkimmingToolF, IDTIDE_PrescaleToolF]))
162
163 IDTIDE_SkimmingToolG = acc.getPrimaryAndMerge(
164 xAODStringSkimmingToolCfg(flags, name="IDTIDE_SkimmingToolG",
165 expression=desd_jetG))
166 IDTIDE_PrescaleToolG = acc.getPrimaryAndMerge(PrescaleToolCfg(
167 flags, name="IDTIDE_PrescaleToolG", Prescale=prescaleG))
168 IDTIDE_ANDToolG = acc.getPrimaryAndMerge(FilterCombinationANDCfg(
169 flags, name="IDTIDE_ANDToolG",
170 FilterList=[IDTIDE_SkimmingToolG, IDTIDE_PrescaleToolG]))
171
172 IDTIDE_SkimmingToolH = acc.getPrimaryAndMerge(
173 xAODStringSkimmingToolCfg(flags, name="IDTIDE_SkimmingToolH",
174 expression=desd_jetH))
175
176 IDTIDE_ORTool = acc.getPrimaryAndMerge(FilterCombinationORCfg(
177 flags, name="IDTIDELogicalCombination",
178 FilterList=[IDTIDE_ANDToolA, IDTIDE_ANDToolC, IDTIDE_ANDToolD,
179 IDTIDE_ANDToolE, IDTIDE_ANDToolF,
180 IDTIDE_ANDToolG, IDTIDE_SkimmingToolH]))
181
182 skimmingTools.append(IDTIDE_ORTool)
183 # End of: if not flags.Input.isMC
184
185 acc.addEventAlgo(
186 CompFactory.DerivationFramework.DerivationKernel(
187 "IDTIDEKernelPresel",
188 SkimmingTools=skimmingTools,
189 doChronoStat=(flags.Concurrency.NumThreads <= 1)))
190
191 # ====================================================================
192 # CREATE THE DERIVATION KERNEL ALGORITHM AND PASS THE ABOVE TOOLS
193 # ====================================================================
194 acc.addEventAlgo(CompFactory.DerivationFramework.DerivationKernel(
195 name,
196 AugmentationTools=augmentationTools,
197 SkimmingTools=skimmingTools,
198 ThinningTools=[],
199 RunSkimmingFirst=True,
200 doChronoStat=(flags.Concurrency.NumThreads <= 1)))
201
202 return acc
203
204
205def IDTIDEThinningKernelCfg(flags, name="IDTIDEThinningKernel", StreamName=""):
206 acc = ComponentAccumulator()
207
208 # ====================================================================
209 # THINNING TOOLS
210 # ====================================================================
211 thinningTools = []
212
213 # TrackParticles directly
214 if flags.Detector.GeometryID:
215 from DerivationFrameworkInDet.InDetToolsConfig import (
216 IDTIDEThinningToolCfg)
217 thinningTools.append(acc.getPrimaryAndMerge(
218 IDTIDEThinningToolCfg(flags, StreamName=StreamName)))
219 if flags.Detector.GeometryITk:
220 from DerivationFrameworkInDet.InDetToolsConfig import (
221 ITkTIDEThinningToolCfg)
222 thinningTools.append(acc.getPrimaryAndMerge(
223 ITkTIDEThinningToolCfg(flags, StreamName=StreamName)))
224
225 # MC truth thinning
226 if flags.Input.isMC:
227 from DerivationFrameworkInDet.InDetToolsConfig import (
228 IDTIDETruthThinningToolCfg)
229 thinningTools.append(acc.getPrimaryAndMerge(
230 IDTIDETruthThinningToolCfg(flags, StreamName=StreamName)))
231
232 acc.addEventAlgo(CompFactory.DerivationFramework.DerivationKernel(
233 name,
234 AugmentationTools=[],
235 ThinningTools=thinningTools,
236 doChronoStat=(flags.Concurrency.NumThreads <= 1)))
237 return acc
238
239def IDTIDEKernelCfg(flags, StreamName=""):
240 """Configure the derivation framework driving algorithm (kernel) for IDTIDE"""
241 acc = ComponentAccumulator()
242
243 # Sequence for skimming kernel (if running on data) -> PrepDataToxAOD -> IDTIDE kernel
244 # sequence to be used for algorithm which should run before the IDTIDEPresel
245 # Disabled as currently blocks decoration of Z0 and thus crashes thinning
246 IDTIDEPreselSequenceName='IDTIDEPreselSequence'
247 acc.addSequence(seqAND(IDTIDEPreselSequenceName))
248
249 acc.merge(IDTIDEKernelCommonCfg(flags), sequenceName=IDTIDEPreselSequenceName)
250
251 # Add decoration with truth parameters if running on simulation
252 # No idea what to do with this
253 # if flags.Input.isMC:
254 # # add track parameter decorations to truth particles but only if the decorations have not been applied already
255 # import InDetPhysValMonitoring.InDetPhysValDecoration
256 # meta_data = InDetPhysValMonitoring.InDetPhysValDecoration.getMetaData()
257 # from AthenaCommon.Logging import logging
258 # logger = logging.getLogger( "DerivationFramework" )
259 # if len(meta_data) == 0 :
260 # truth_track_param_decor_alg = InDetPhysValMonitoring.InDetPhysValDecoration.getInDetPhysValTruthDecoratorAlg()
261 # if InDetPhysValMonitoring.InDetPhysValDecoration.findAlg([truth_track_param_decor_alg.getName()]) == None :
262 # IDTIDESequencePre += truth_track_param_decor_alg
263 # else :
264 # logger.info('Decorator %s already present not adding again.' % (truth_track_param_decor_alg.getName() ))
265 # else :
266 # logger.info('IDPVM decorations to track particles already applied to input file not adding again.')
267
268 IDTIDEPreselAlgSequenceName='IDTIDEPreselAlgSequence'
269 acc.addSequence(parAND(IDTIDEPreselAlgSequenceName),
270 parentName=IDTIDEPreselSequenceName)
271
272 from InDetConfig.InDetPrepRawDataToxAODConfig import InDetPrepDataToxAODCfg
273 acc.merge(InDetPrepDataToxAODCfg(flags),
274 sequenceName=IDTIDEPreselAlgSequenceName)
275
276 IDTIDEPostProcSequenceName='IDTIDEPostProcSequence'
277 acc.addSequence(parAND(IDTIDEPostProcSequenceName),
278 parentName=IDTIDEPreselSequenceName)
279
280 if flags.Input.isMC:
281 from InDetPhysValMonitoring.InDetPhysValDecorationConfig import (
282 InDetPhysValTruthDecoratorAlgCfg)
283 acc.merge(InDetPhysValTruthDecoratorAlgCfg(flags),
284 sequenceName=IDTIDEPostProcSequenceName)
285
286 from DerivationFrameworkInDet.InDetToolsConfig import (
287 DFInDetTSOSKernelCfg)
288 acc.merge(DFInDetTSOSKernelCfg(flags),
289 sequenceName=IDTIDEPostProcSequenceName)
290 acc.merge(IDTIDEThinningKernelCfg(flags, StreamName=StreamName),
291 sequenceName=IDTIDEPostProcSequenceName)
292 return acc
293
294def ITkTIDEKernelCfg(flags, StreamName=""):
295 """Configure the derivation framework driving algorithm (kernel) for IDTIDE"""
296 acc = ComponentAccumulator()
297
298 IDTIDEPreselSequenceName='IDTIDEPreselSequence'
299 acc.addSequence(seqAND(IDTIDEPreselSequenceName))
300
301 acc.merge(IDTIDEKernelCommonCfg(flags), sequenceName=IDTIDEPreselSequenceName)
302
303 IDTIDEPreselAlgSequenceName='IDTIDEPreselAlgSequence'
304 acc.addSequence(parAND(IDTIDEPreselAlgSequenceName),
305 parentName=IDTIDEPreselSequenceName)
306
307 from InDetConfig.InDetPrepRawDataToxAODConfig import ITkPrepDataToxAODCfg
308 acc.merge(ITkPrepDataToxAODCfg(flags),
309 sequenceName=IDTIDEPreselAlgSequenceName)
310
311 IDTIDEPostProcSequenceName='IDTIDEPostProcSequence'
312 acc.addSequence(parAND(IDTIDEPostProcSequenceName),
313 parentName=IDTIDEPreselSequenceName)
314
315 # if the flags.Tracking.writeExtendedSi_PRDInfo is enabled
316 # the TSOS_CommonKernelCfg( is scheduled, which would do the same
317 # augemntation as the (DFITkTSOSKernel
318 if not flags.Tracking.writeExtendedSi_PRDInfo:
319 from DerivationFrameworkInDet.InDetToolsConfig import DFITkTSOSKernelCfg
320 acc.merge(DFITkTSOSKernelCfg(flags),
321 sequenceName=IDTIDEPostProcSequenceName)
322
323 if flags.Input.isMC:
324 from InDetPhysValMonitoring.InDetPhysValDecorationConfig import (
325 InDetPhysValTruthDecoratorAlgCfg)
326 acc.merge(InDetPhysValTruthDecoratorAlgCfg(flags),
327 sequenceName=IDTIDEPostProcSequenceName)
328
329 acc.merge(IDTIDEThinningKernelCfg(flags, StreamName=StreamName),
330 sequenceName=IDTIDEPostProcSequenceName)
331 return acc
332
333# Main config
334
335def IDTIDECfg(flags):
336 """Main config fragment for IDTIDE"""
337 acc = ComponentAccumulator()
338
339 # Main algorithm (kernel)
340 if flags.Detector.GeometryID:
341 acc.merge(IDTIDEKernelCfg(flags, StreamName='StreamDAOD_IDTIDE'))
342 if flags.Detector.GeometryITk:
343 acc.merge(ITkTIDEKernelCfg(flags, StreamName='StreamDAOD_IDTIDE'))
344
345 # =============================
346 # Define contents of the format
347 # =============================
348 from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
349 from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
350 from DerivationFrameworkCore.SlimmingHelper import SlimmingHelper
351 IDTIDESlimmingHelper = SlimmingHelper(
352 "IDTIDESlimmingHelper",
353 NamesAndTypes=flags.Input.TypedCollections,
354 flags=flags)
355
356 AllVariables = []
357 StaticContent = []
358 SmartCollections = []
359 ExtraVariables = []
360
361 IDTIDESlimmingHelper.AppendToDictionary.update({
362 "EventInfo": "xAOD::EventInfo", "EventInfoAux": "xAOD::EventAuxInfo",
363 "CombinedMuonTrackParticles": "xAOD::TrackParticleContainer", "CombinedMuonTrackParticlesAux": "xAOD::TrackParticleAuxContainer",
364 "Muons": "xAOD::MuonContainer", "MuonsAux": "xAOD::MuonAuxContainer",
365 "Electrons": "xAOD::ElectronContainer",
366 "ElectronsAux": "xAOD::ElectronAuxContainer",
367 "Photons": "xAOD::PhotonContainer",
368 "PhotonsAux": "xAOD::PhotonAuxContainer",
369 "JetETMissNeutralParticleFlowObjects": "xAOD::FlowElementContainer",
370 "JetETMissNeutralParticleFlowObjectsAux": "xAOD::FlowElementAuxContainer",
371 "JetETMissChargedParticleFlowObjects": "xAOD::FlowElementContainer",
372 "JetETMissChargedParticleFlowObjectsAux": "xAOD::FlowElementAuxContainer",
373 "TauJets": "xAOD::TauJetContainer",
374 "TauJetsAux": "xAOD::TauJetAuxContainer",
375 "InDetTrackParticles": "xAOD::TrackParticleContainer",
376 "InDetTrackParticlesAux": "xAOD::TrackParticleAuxContainer",
377 "InDetLargeD0TrackParticles": "xAOD::TrackParticleContainer",
378 "InDetLargeD0TrackParticlesAux": "xAOD::TrackParticleAuxContainer",
379 "Kt4EMTopoOriginEventShape": "xAOD::EventShape",
380 "Kt4EMTopoOriginEventShapeAux": "xAOD::EventShapeAuxInfo",
381 "Kt4LCTopoOriginEventShape": "xAOD::EventShape",
382 "Kt4LCTopoOriginEventShapeAux": "xAOD::EventShapeAuxInfo",
383 "NeutralParticleFlowIsoCentralEventShape": "xAOD::EventShape",
384 "NeutralParticleFlowIsoCentralEventShapeAux": "xAOD::EventShapeAuxInfo",
385 "NeutralParticleFlowIsoForwardEventShape": "xAOD::EventShape",
386 "NeutralParticleFlowIsoForwardEventShapeAux": "xAOD::EventShapeAuxInfo",
387 "TopoClusterIsoCentralEventShape": "xAOD::EventShape",
388 "TopoClusterIsoCentralEventShapeAux": "xAOD::EventShapeAuxInfo",
389 "TopoClusterIsoForwardEventShape": "xAOD::EventShape",
390 "TopoClusterIsoForwardEventShapeAux": "xAOD::EventShapeAuxInfo"}
391 )
392 if flags.Detector.GeometryID:
393 IDTIDESlimmingHelper.AppendToDictionary.update({
394 "PixelClusters": "xAOD::TrackMeasurementValidationContainer",
395 "PixelClustersAux": "xAOD::TrackMeasurementValidationAuxContainer",
396 "SCT_Clusters": "xAOD::TrackMeasurementValidationContainer",
397 "SCT_ClustersAux": "xAOD::TrackMeasurementValidationAuxContainer"
398 })
399 if flags.Detector.GeometryITk:
400 IDTIDESlimmingHelper.AppendToDictionary.update({
401 "ITkPixelMeasurements": "xAOD::TrackMeasurementValidationContainer",
402 "ITkPixelMeasurementsAux": "xAOD::TrackMeasurementValidationAuxContainer",
403 "ITkStripMeasurements": "xAOD::TrackMeasurementValidationContainer",
404 "ITkStripMeasurementsAux": "xAOD::TrackMeasurementValidationAuxContainer"
405 })
406 if flags.ITk.DAODStorePLR:
407 IDTIDESlimmingHelper.AppendToDictionary.update({
408 "PLRMeasurements": "xAOD::TrackMeasurementValidationContainer",
409 "PLRMeasurementsAux": "xAOD::TrackMeasurementValidationAuxContainer"
410 })
411
412 SmartCollections += ["Muons", "Electrons", "Photons", "TauJets"]
413
414 AllVariables += ["EventInfo",
415 "JetETMissNeutralParticleFlowObjects",
416 "JetETMissChargedParticleFlowObjects",
417 "InDetTrackParticles",
418 "InDetLargeD0TrackParticles",
419 "PixelClusters",
420 "SCT_Clusters",
421 "Kt4EMTopoOriginEventShape",
422 "Kt4LCTopoOriginEventShape",
423 "NeutralParticleFlowIsoCentralEventShape",
424 "NeutralParticleFlowIsoForwardEventShape",
425 "TopoClusterIsoCentralEventShape",
426 "TopoClusterIsoForwardEventShape",
427 ]
428 if flags.Detector.GeometryID:
429 AllVariables += ["PixelClusters", "SCT_Clusters"]
430 if flags.Detector.GeometryITk:
431 AllVariables += ["ITkPixelMeasurements", "ITkStripMeasurements"]
432 if flags.ITk.DAODStorePLR:
433 AllVariables += ["PLRMeasurements"]
434
435 IDTIDESlimmingHelper.AppendToDictionary.update({
436 "Kt4EMPFlowEventShape": "xAOD::EventShape",
437 "Kt4EMPFlowEventShapeAux": "xAOD::EventShapeAuxInfo",
438 "Kt4EMPFlowNeutEventShape": "xAOD::EventShape",
439 "Kt4EMPFlowNeutEventShapeAux": "xAOD::EventShapeAuxInfo",
440 "PrimaryVertices": "xAOD::VertexContainer",
441 "PrimaryVerticesAux": "xAOD::VertexAuxContainer",
442 "InDetTrackParticlesClusterAssociations": "xAOD::TrackParticleClusterAssociationContainer",
443 "InDetTrackParticlesClusterAssociationsAux": "xAOD::TrackParticleClusterAssociationAuxContainer",
444 "AntiKt4EMTopoJets": "xAOD::JetContainer",
445 "AntiKt4EMTopoJetsAux": "xAOD::JetAuxContainer",
446 "AntiKt4EMPFlowJets": "xAOD::JetContainer",
447 "AntiKt4EMPFlowJetsAux": "xAOD::JetAuxContainer"})
448
449 ExtraVariables += ["TauJets.ABS_ETA_LEAD_TRACK.ClusterTotalEnergy.ClustersMeanCenterLambda.ClustersMeanEMProbability.ClustersMeanFirstEngDens.ClustersMeanPresamplerFrac.ClustersMeanSecondLambda.EMFracFixed.LeadClusterFrac.NNDecayMode.NNDecayModeProb_1p0n.NNDecayModeProb_1p1n.NNDecayModeProb_1pXn.NNDecayModeProb_3p0n.NNDecayModeProb_3pXn.PFOEngRelDiff.PanTau_DecayModeExtended.UpsilonCluster.absipSigLeadTrk.chargedFELinks.etHotShotWin.etHotShotWinOverPtLeadTrk.etaCombined.hadLeakFracFixed.leadTrackProbHT.mCombined.mu.nConversionTracks.nFakeTracks.nModifiedIsolationTracks.nVtxPU.neutralFELinks.passThinning.phiCombined.ptCombined.ptIntermediateAxisEM.rho"]
450 ExtraVariables += ["PrimaryVertices.sumPt2.x.y.z"]
451
452 AllVariables += ["Kt4EMPFlowEventShape", "Kt4EMPFlowNeutEventShape",
453 "InDetTrackParticlesClusterAssociations",
454 "AntiKt4EMTopoJets", "AntiKt4EMPFlowJets"]
455
456 if flags.Detector.EnablePixel:
457 IDTIDESlimmingHelper.AppendToDictionary.update(
458 {'PixelMSOSs': 'xAOD::TrackStateValidationContainer',
459 'PixelMSOSsAux': 'xAOD::TrackStateValidationAuxContainer'})
460 AllVariables += ["PixelMSOSs"]
461
462 if flags.Detector.EnableSCT:
463 IDTIDESlimmingHelper.AppendToDictionary.update(
464 {'SCT_MSOSs': 'xAOD::TrackStateValidationContainer',
465 'SCT_MSOSsAux': 'xAOD::TrackStateValidationAuxContainer'})
466 AllVariables += ["SCT_MSOSs"]
467
468 if flags.Detector.EnableTRT:
469 IDTIDESlimmingHelper.AppendToDictionary.update(
470 {'TRT_MSOSs': 'xAOD::TrackStateValidationContainer',
471 'TRT_MSOSsAux': 'xAOD::TrackStateValidationAuxContainer'})
472 AllVariables += ["TRT_MSOSs"]
473
474 if flags.Detector.EnableITkPixel:
475 IDTIDESlimmingHelper.AppendToDictionary.update(
476 {'ITkPixelMSOSs': 'xAOD::TrackStateValidationContainer',
477 'ITkPixelMSOSsAux': 'xAOD::TrackStateValidationAuxContainer'})
478 AllVariables += ["ITkPixelMSOSs"]
479
480 if flags.Detector.EnableITkStrip:
481 IDTIDESlimmingHelper.AppendToDictionary.update(
482 {'ITkStripMSOSs': 'xAOD::TrackStateValidationContainer',
483 'ITkStripMSOSsAux': 'xAOD::TrackStateValidationAuxContainer'})
484 AllVariables += ["ITkStripMSOSs"]
485
486 if flags.Input.isMC:
487
488 IDTIDESlimmingHelper.AppendToDictionary.update({
489 "AntiKt4TruthJets": "xAOD::JetContainer",
490 "AntiKt4TruthJetsAux": "xAOD::JetAuxContainer",
491 "InTimeAntiKt4TruthJets": "xAOD::JetContainer",
492 "InTimeAntiKt4TruthJetsAux": "xAOD::JetAuxContainer",
493 "JetInputTruthParticles": "xAOD::TruthParticleContainer",
494 "JetInputTruthParticlesNoWZ": "xAOD::TruthParticleContainer",
495 "TruthEvents": "xAOD::TruthEventContainer",
496 "TruthEventsAux": "xAOD::TruthEventAuxContainer",
497 "TruthParticles": "xAOD::TruthParticleContainer",
498 "TruthParticlesAux": "xAOD::TruthParticleAuxContainer",
499 "egammaTruthParticles": "xAOD::TruthParticleContainer",
500 "egammaTruthParticlesAux": "xAOD::TruthParticleAuxContainer",
501 "MuonTruthParticles": "xAOD::TruthParticleContainer",
502 "MuonTruthParticlesAux": "xAOD::TruthParticleAuxContainer",
503 "LRTegammaTruthParticles": "xAOD::TruthParticleContainer",
504 "LRTegammaTruthParticlesAux": "xAOD::TruthParticleAuxContainer",
505 "TruthVertices": "xAOD::TruthVertexContainer",
506 "TruthVerticesAux": "xAOD::TruthVertexAuxContainer"})
507
508 AllVariables += ["AntiKt4TruthJets",
509 "InTimeAntiKt4TruthJets",
510 "JetInputTruthParticles",
511 "JetInputTruthParticlesNoWZ",
512 "TruthEvents",
513 "TruthParticles",
514 "egammaTruthParticles",
515 "MuonTruthParticles",
516 "LRTegammaTruthParticles",
517 "TruthVertices"]
518
519 list_aux = ["BHadronsFinal", "BHadronsInitial", "BQuarksFinal",
520 "CHadronsFinal", "CHadronsInitial", "CQuarksFinal",
521 "HBosons", "Partons", "TQuarksFinal", "TausFinal",
522 "WBosons", "ZBosons"]
523 for item in list_aux:
524 label = "TruthLabel"+item
525 labelAux = label+"Aux"
526 IDTIDESlimmingHelper.AppendToDictionary.update(
527 {label: "xAOD::TruthParticleContainer",
528 labelAux: "xAOD::TruthParticleAuxContainer"})
529 AllVariables += [label]
530 # End of isMC block
531
532 # Trigger info is actually stored only when running on data...
533 IDTIDESlimmingHelper.IncludeTriggerNavigation = True
534 IDTIDESlimmingHelper.IncludeAdditionalTriggerContent = True
535
536 IDTIDESlimmingHelper.AllVariables = AllVariables
537 IDTIDESlimmingHelper.StaticContent = StaticContent
538 IDTIDESlimmingHelper.SmartCollections = SmartCollections
539 IDTIDESlimmingHelper.ExtraVariables = ExtraVariables
540
541 # Output stream
542 IDTIDEItemList = IDTIDESlimmingHelper.GetItemList()
543 acc.merge(OutputStreamCfg(flags, "DAOD_IDTIDE",
544 ItemList=IDTIDEItemList, AcceptAlgs=["IDTIDEKernel"]))
545 acc.merge(SetupMetaDataForStreamCfg(
546 flags, "DAOD_IDTIDE", AcceptAlgs=["IDTIDEKernel"],
547 createMetadata=[MetadataCategory.CutFlowMetaData, MetadataCategory.TriggerMenuMetaData]))
548
549 return acc
IDTIDEThinningKernelCfg(flags, name="IDTIDEThinningKernel", StreamName="")
Definition IDTIDE.py:205
IDTIDEKernelCfg(flags, StreamName="")
Definition IDTIDE.py:239
IDTIDEKernelCommonCfg(flags, name='IDTIDEKernel')
Definition IDTIDE.py:36
ITkTIDEKernelCfg(flags, StreamName="")
Definition IDTIDE.py:294
IDTIDECfg(flags)
Definition IDTIDE.py:335