ATLAS Offline Software
Loading...
Searching...
No Matches
MCTruthSimAlgsConfig.py
Go to the documentation of this file.
1"""ComponentAccumulator configuration for Monte Carlo Truth simulation algorithms
2
3Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
4"""
5from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
6from AthenaConfiguration.ComponentFactory import CompFactory
7from AthenaConfiguration.Enums import ProductionStep
8from DigitizationConfig.PileUpToolsConfig import PileUpToolsCfg
9from DigitizationConfig.PileUpMergeSvcConfig import PileUpMergeSvcCfg, PileUpXingFolderCfg
10
11# Note: various experimentalDigi uses not migrated
12
13def GenericMergeMcEventCollCfg(flags, name="MergeMcEventCollTool", **kwargs):
14 acc = ComponentAccumulator()
15 kwargs.setdefault("TruthCollInputKey", "TruthEvent")
16 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
17 kwargs.setdefault("TruthCollOutputKey", flags.Overlay.BkgPrefix + "TruthEvent")
18 else:
19 kwargs.setdefault("TruthCollOutputKey", "TruthEvent")
20 kwargs.setdefault("LowTimeToKeep", -50.5)
21 kwargs.setdefault("HighTimeToKeep", 50.5)
22 kwargs.setdefault("KeepUnstable", False)
23 kwargs.setdefault("AbsEtaMax", 5.0)
24 kwargs.setdefault("OutOfTimeAbsEtaMax", 3.0)
25 kwargs.setdefault("rRange", 20.0)
26 kwargs.setdefault("zRange", 200.0)
27 kwargs.setdefault("SaveCavernBackground", True)
28 kwargs.setdefault("SaveInTimeMinBias", True)
29 kwargs.setdefault("SaveOutOfTimeMinBias", True)
30 kwargs.setdefault("SaveRestOfMinBias", False)
31 kwargs.setdefault("AddBackgroundCollisionVertices", True)
32 kwargs.setdefault("CompressOutputCollection", False)
33 tool = CompFactory.MergeMcEventCollTool(name, **kwargs)
34 acc.merge(PileUpToolsCfg(flags, PileUpTools=tool))
35 return acc
36
37
38def MergeMcEventCollCfg(flags, name="MergeMcEventCollTool", **kwargs):
39 acc = ComponentAccumulator()
40 if flags.Digitization.DoXingByXingPileUp: # PileUpTool approach
41 kwargs.setdefault("FirstXing", -30000)
42 kwargs.setdefault("LastXing", 30000)
43 kwargs.setdefault("DoSlimming", False)
44 kwargs.setdefault("OnlySaveSignalTruth", False)
45 acc.merge(GenericMergeMcEventCollCfg(flags, name, **kwargs))
46 return acc
47
48
49def SignalOnlyMcEventCollCfg(flags, name="SignalOnlyMcEventCollTool", **kwargs):
50 acc = ComponentAccumulator()
51 if flags.Digitization.DoXingByXingPileUp: # PileUpTool approach
52 kwargs.setdefault("FirstXing", 0)
53 kwargs.setdefault("LastXing", 0)
54 kwargs.setdefault("OnlySaveSignalTruth", True)
55 acc.merge(GenericMergeMcEventCollCfg(flags, name, **kwargs))
56 return acc
57
58
59def InTimeOnlyMcEventCollCfg(flags, name="InTimeOnlyMcEventCollTool", **kwargs):
60 acc = ComponentAccumulator()
61 if flags.Digitization.DoXingByXingPileUp: # PileUpTool approach
62 kwargs.setdefault("FirstXing", 0)
63 kwargs.setdefault("LastXing", 0)
64 kwargs.setdefault("DoSlimming", False)
65 kwargs.setdefault("OnlySaveSignalTruth", False)
66 acc.merge(GenericMergeMcEventCollCfg(flags, name, **kwargs))
67 return acc
68
69
70def GenericSimpleMergeMcEventCollCfg(flags, name="MergeMcEventCollTool", **kwargs):
71 acc = ComponentAccumulator()
72 if flags.Digitization.DoXingByXingPileUp: # PileUpTool approach
73 kwargs.setdefault("PileUpMergeSvc", "")
74 else: # 'Algorithm' approach (consider all bunch-crossings at once)
75 kwargs.setdefault("PileUpMergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags)))
76 kwargs.setdefault("OnlySaveSignalTruth", False)
77 kwargs.setdefault("OverrideEventNumbers", True)
78 kwargs.setdefault("TruthCollInputKey", "TruthEvent")
79 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
80 kwargs.setdefault("TruthCollOutputKey", flags.Overlay.BkgPrefix + "TruthEvent")
81 else:
82 kwargs.setdefault("TruthCollOutputKey", "TruthEvent")
83 tool = CompFactory.SimpleMergeMcEventCollTool(name, **kwargs)
84 acc.merge(PileUpToolsCfg(flags, PileUpTools=tool))
85 return acc
86
87
88def SimpleMergeMcEventCollCfg(flags, name="MergeMcEventCollTool", **kwargs):
89 if flags.Digitization.DoXingByXingPileUp: # PileUpTool approach
90 kwargs.setdefault("FirstXing", -30000)
91 kwargs.setdefault("LastXing", 30000)
92 return GenericSimpleMergeMcEventCollCfg(flags, name, **kwargs)
93
94
95def SignalOnlySimpleMergeMcEventCollCfg(flags, name="SignalOnlyMcEventCollTool", **kwargs):
96 if flags.Digitization.DoXingByXingPileUp: # PileUpTool approach
97 kwargs.setdefault("FirstXing", 0)
98 kwargs.setdefault("LastXing", 0)
99 kwargs.setdefault("OnlySaveSignalTruth", True)
100 return GenericSimpleMergeMcEventCollCfg(flags, name, **kwargs)
101
102
103def InTimeOnlySimpleMergeMcEventCollCfg(flags, name="InTimeOnlyMcEventCollTool", **kwargs):
104 if flags.Digitization.DoXingByXingPileUp: # PileUpTool approach
105 kwargs.setdefault("FirstXing", 0)
106 kwargs.setdefault("LastXing", 0)
107 return GenericSimpleMergeMcEventCollCfg(flags, name, **kwargs)
108
109
110# The earliest bunch crossing time for which interactions will be sent
111# to the Truth jet merging code. See discussions in ATLASSIM-3837.
113 return -125
114
115
116# The latest bunch crossing time for which interactions will be sent
117# to the Truth jet merging code. See discussions in ATLASSIM-3837.
119 return 75
120
121
122def TruthJetRangeCfg(flags, name="TruthJetRange", **kwargs):
123 """Return a Truth-Jet configured PileUpXingFolder tool"""
124 #this is the time of the xing in ns
125 kwargs.setdefault("FirstXing", TruthJet_FirstXing())
126 kwargs.setdefault("LastXing", TruthJet_LastXing())
127 itemList = ["xAOD::JetContainer#AntiKt4TruthJets",
128 "xAOD::JetContainer#AntiKt6TruthJets"]
129 kwargs.setdefault("ItemList", itemList)
130 return PileUpXingFolderCfg(flags, name, **kwargs)
131
132
133def MergeAntiKt4TruthJetsCfg(flags, name="MergeAntiKt4TruthJetsTool", **kwargs):
134 acc = ComponentAccumulator()
135 rangetool = acc.popToolsAndMerge(TruthJetRangeCfg(flags))
136 acc.merge(PileUpMergeSvcCfg(flags, Intervals=rangetool))
137 if flags.Digitization.DoXingByXingPileUp: # PileUpTool approach
138 kwargs.setdefault("FirstXing", TruthJet_FirstXing())
139 kwargs.setdefault("LastXing", TruthJet_LastXing())
140 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
141 kwargs.setdefault("InTimeOutputTruthJetCollKey", flags.Overlay.BkgPrefix + "InTimeAntiKt4TruthJets")
142 kwargs.setdefault("OutOfTimeTruthJetCollKey", flags.Overlay.BkgPrefix + "OutOfTimeAntiKt4TruthJets")
143 else:
144 kwargs.setdefault("InTimeOutputTruthJetCollKey", "InTimeAntiKt4TruthJets")
145 kwargs.setdefault("OutOfTimeTruthJetCollKey", "OutOfTimeAntiKt4TruthJets")
146 tool = CompFactory.MergeTruthJetsTool(name, **kwargs)
147 acc.merge(PileUpToolsCfg(flags, PileUpTools=tool))
148 return acc
149
150
151def MergeAntiKt6TruthJetsCfg(flags, name="MergeAntiKt6TruthJetsTool", **kwargs):
152 acc = ComponentAccumulator()
153 rangetool = acc.popToolsAndMerge(TruthJetRangeCfg(flags))
154 acc.merge(PileUpMergeSvcCfg(flags, Intervals=rangetool))
155 if flags.Digitization.DoXingByXingPileUp: # PileUpTool approach
156 kwargs.setdefault("FirstXing", TruthJet_FirstXing())
157 kwargs.setdefault("LastXing", TruthJet_LastXing())
158 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
159 kwargs.setdefault("InTimeOutputTruthJetCollKey", flags.Overlay.BkgPrefix + "InTimeAntiKt6TruthJets")
160 kwargs.setdefault("OutOfTimeTruthJetCollKey", flags.Overlay.BkgPrefix + "OutOfTimeAntiKt6TruthJets")
161 else:
162 kwargs.setdefault("InTimeOutputTruthJetCollKey", "InTimeAntiKt6TruthJets")
163 kwargs.setdefault("OutOfTimeTruthJetCollKey", "OutOfTimeAntiKt6TruthJets")
164 tool = CompFactory.MergeTruthJetsTool(name, **kwargs)
165 acc.merge(PileUpToolsCfg(flags, PileUpTools=tool))
166 return acc
167
168
169def MergeTruthJetsFilterCfg(flags, name="MergeTruthJetsFilterTool", **kwargs):
170 acc = ComponentAccumulator()
171 kwargs.setdefault("ActivateFilter", True)
172 acc.merge(MergeAntiKt4TruthJetsCfg(flags, name, **kwargs))
173 return acc
174
175
176# The earliest bunch crossing time for which interactions will be sent
177# to the Truth particle merging code.
179 return 0
180
181
182# The latest bunch crossing time for which interactions will be sent
183# to the Truth particle merging code.
185 return 0
186
187
188def TruthParticleRangeCfg(flags, name="TruthParticleRange", **kwargs):
189 """Return a Truth-Particle configured PileUpXingFolder tool"""
190 #this is the time of the xing in ns
191 kwargs.setdefault("FirstXing", TruthParticle_FirstXing())
192 kwargs.setdefault("LastXing", TruthParticle_LastXing())
193 kwargs.setdefault("ItemList", ["xAOD::TruthParticleContainer#TruthPileupParticles",
194 "xAOD::TruthParticleAuxContainer#TruthPileupParticlesAux."])
195 return PileUpXingFolderCfg(flags, name, **kwargs)
196
197
198def MergeTruthParticlesCfg(flags, name="MergeTruthParticlesTool", **kwargs):
199 acc = ComponentAccumulator()
200 rangetool = acc.popToolsAndMerge(TruthParticleRangeCfg(flags))
201 acc.merge(PileUpMergeSvcCfg(flags, Intervals=rangetool))
202 if flags.Digitization.DoXingByXingPileUp: # PileUpTool approach
203 kwargs.setdefault("FirstXing", TruthParticle_FirstXing())
204 kwargs.setdefault("LastXing", TruthParticle_LastXing())
205 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
206 kwargs.setdefault("InTimeOutputTruthParticleCollKey", flags.Overlay.BkgPrefix + "TruthPileupParticles")
207 else:
208 kwargs.setdefault("InTimeOutputTruthParticleCollKey", "TruthPileupParticles")
209 tool = CompFactory.MergeTruthParticlesTool(name, **kwargs)
210 acc.merge(PileUpToolsCfg(flags, PileUpTools=tool))
211 return acc
212
213
214# The earliest bunch crossing time for which interactions will be sent
215# to the TrackRecordCollection merging code.
217 return -1
218
219
220# The latest bunch crossing time for which interactions will be sent
221# to the TrackRecordCollection merging code.
223 return 1
224
225
226def TrackRangeCfg(flags, name="TrackRange", **kwargs):
227 """Return a Track configured PileUpXingFolder tool"""
228 # this is the time of the xing in ns
229 kwargs.setdefault("FirstXing", TrackRecord_FirstXing())
230 kwargs.setdefault("LastXing", TrackRecord_LastXing())
231 kwargs.setdefault("ItemList", ["TrackRecordCollection#MuonExitLayer"])
232 return PileUpXingFolderCfg(flags, name, **kwargs)
233
234
235def MergeTrackRecordCollCfg(flags, name="MergeTrackRecordCollTool", **kwargs):
236 acc = ComponentAccumulator()
237 rangetool = acc.popToolsAndMerge(TrackRangeCfg(flags))
238 acc.merge(PileUpMergeSvcCfg(flags, Intervals=rangetool))
239 if flags.Digitization.DoXingByXingPileUp: # PileUpTool approach
240 kwargs.setdefault("FirstXing", TrackRecord_FirstXing())
241 kwargs.setdefault("LastXing", TrackRecord_LastXing())
242 tool = CompFactory.MergeTrackRecordCollTool(name, **kwargs)
243 acc.merge(PileUpToolsCfg(flags, PileUpTools=tool))
244 return acc
245
246
247def MergeCaloEntryLayerCfg(flags, name="MergeCaloEntryLayerTool", **kwargs):
248 acc = ComponentAccumulator()
249 kwargs.setdefault("TrackRecordCollKey", "CaloEntryLayer")
250 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
251 kwargs.setdefault("TrackRecordCollOutputKey", flags.Overlay.BkgPrefix + "CaloEntryLayer")
252 else:
253 kwargs.setdefault("TrackRecordCollOutputKey", "CaloEntryLayer")
254 acc.merge(MergeTrackRecordCollCfg(flags, name, **kwargs))
255 return acc
256
257
258def MergeMuonEntryLayerCfg(flags, name="MergeMuonEntryLayerTool", **kwargs):
259 acc = ComponentAccumulator()
260 kwargs.setdefault("TrackRecordCollKey", "MuonEntryLayer")
261 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
262 kwargs.setdefault("TrackRecordCollOutputKey", flags.Overlay.BkgPrefix + "MuonEntryLayer")
263 else:
264 kwargs.setdefault("TrackRecordCollOutputKey", "MuonEntryLayer")
265 acc.merge(MergeTrackRecordCollCfg(flags, name, **kwargs))
266 return acc
267
268
269def MergeMuonExitLayerCfg(flags, name="MergeMuonExitLayerTool", **kwargs):
270 acc = ComponentAccumulator()
271 kwargs.setdefault("TrackRecordCollKey", "MuonExitLayer")
272 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
273 kwargs.setdefault("TrackRecordCollOutputKey", flags.Overlay.BkgPrefix + "MuonExitLayer")
274 else:
275 kwargs.setdefault("TrackRecordCollOutputKey", "MuonExitLayer")
276 acc.merge(MergeTrackRecordCollCfg(flags, name, **kwargs))
277 return acc
278
279
280def MergeHijingParsCfg(flags, name="MergeHijingParsTool", **kwargs):
281 acc = ComponentAccumulator()
282 if flags.Digitization.DoXingByXingPileUp: # PileUpTool approach
283 kwargs.setdefault("FirstXing", -1)
284 kwargs.setdefault("LastXing", +1)
285 tool = CompFactory.MergeHijingParsTool(name, **kwargs)
286 acc.merge(PileUpToolsCfg(flags, PileUpTools=tool))
287 return acc
288
289
290# The earliest bunch crossing time for which interactions will be sent
291# to the CaloCalibrationHitContainer merging code.
293 return -1
294
295# The latest bunch crossing time for which interactions will be sent
296# to the CaloCalibrationHitContainer merging code.
298 return 1
299
300
301def CalibRangeCfg(flags, name="CalibRange", **kwargs):
302 """Return a Calibration configured PileUpXingFolder tool"""
303 # bunch crossing range in ns
304 kwargs.setdefault("FirstXing", CalibHit_FirstXing())
305 kwargs.setdefault("LastXing", CalibHit_LastXing())
306 ItemList = [
307 "CaloCalibrationHitContainer#LArCalibrationHitActive",
308 "CaloCalibrationHitContainer#LArCalibrationHitDeadMaterial",
309 "CaloCalibrationHitContainer#LArCalibrationHitInactive",
310 "CaloCalibrationHitContainer#TileCalibHitActiveCell",
311 "CaloCalibrationHitContainer#TileCalibHitInactiveCell",
312 "CaloCalibrationHitContainer#TileCalibHitDeadMaterial"
313 ]
314 kwargs.setdefault("ItemList", ItemList)
315 return PileUpXingFolderCfg(flags, name, **kwargs)
316
317
318def MergeCalibHitsCfg(flags, name="MergeCalibHitsTool", **kwargs):
319 acc = ComponentAccumulator()
320 rangetool = acc.popToolsAndMerge(CalibRangeCfg(flags))
321 acc.merge(PileUpMergeSvcCfg(flags, Intervals=rangetool))
322 if flags.Digitization.DoXingByXingPileUp: # PileUpTool approach
323 kwargs.setdefault("FirstXing", CalibHit_FirstXing())
324 kwargs.setdefault("LastXing", CalibHit_LastXing())
325 tool = CompFactory.MergeCalibHitsTool(name, **kwargs)
326 acc.merge(PileUpToolsCfg(flags, PileUpTools=tool))
327 return acc
328
329
330def MergeGenericMuonSimHitCollCfg(flags, name="MergeGenericMuonSimHitCollTool", **kwargs):
331 acc = ComponentAccumulator()
332 tool = CompFactory.MergeGenericMuonSimHitCollTool(name, **kwargs)
333 acc.merge(PileUpToolsCfg(flags, PileUpTools=tool))
334 return acc
335
336
337def MergeMicromegasSimHitCollCfg(flags, name="MergeMicromegasSimHitCollTool", **kwargs):
338 acc = ComponentAccumulator()
339 kwargs.setdefault("SimHitContainerNames", ["MM_Hits"])
340 if flags.Digitization.DoXingByXingPileUp: # PileUpTool approach
341 kwargs.setdefault("FirstXing", -250)
342 kwargs.setdefault("LastXing", 200)
343 tool = CompFactory.MergeGenericMuonSimHitCollTool(name, **kwargs)
344 acc.merge(PileUpToolsCfg(flags, PileUpTools=tool))
345 return acc
346
347
348def MergeSTGCSimHitCollCfg(flags, name="MergeSTGCSimHitCollTool", **kwargs):
349 acc = ComponentAccumulator()
350 kwargs.setdefault("SimHitContainerNames", ["sTGC_Hits"])
351 if flags.Digitization.DoXingByXingPileUp: # PileUpTool approach
352 kwargs.setdefault("FirstXing", -50)
353 kwargs.setdefault("LastXing", 75)
354 tool = CompFactory.MergeGenericMuonSimHitCollTool(name, **kwargs)
355 acc.merge(PileUpToolsCfg(flags, PileUpTools=tool))
356 return acc
MergeCaloEntryLayerCfg(flags, name="MergeCaloEntryLayerTool", **kwargs)
MergeMuonEntryLayerCfg(flags, name="MergeMuonEntryLayerTool", **kwargs)
MergeTruthParticlesCfg(flags, name="MergeTruthParticlesTool", **kwargs)
InTimeOnlyMcEventCollCfg(flags, name="InTimeOnlyMcEventCollTool", **kwargs)
MergeSTGCSimHitCollCfg(flags, name="MergeSTGCSimHitCollTool", **kwargs)
SignalOnlySimpleMergeMcEventCollCfg(flags, name="SignalOnlyMcEventCollTool", **kwargs)
MergeTrackRecordCollCfg(flags, name="MergeTrackRecordCollTool", **kwargs)
MergeMuonExitLayerCfg(flags, name="MergeMuonExitLayerTool", **kwargs)
TrackRangeCfg(flags, name="TrackRange", **kwargs)
TruthParticleRangeCfg(flags, name="TruthParticleRange", **kwargs)
SignalOnlyMcEventCollCfg(flags, name="SignalOnlyMcEventCollTool", **kwargs)
MergeHijingParsCfg(flags, name="MergeHijingParsTool", **kwargs)
MergeCalibHitsCfg(flags, name="MergeCalibHitsTool", **kwargs)
MergeGenericMuonSimHitCollCfg(flags, name="MergeGenericMuonSimHitCollTool", **kwargs)
MergeMicromegasSimHitCollCfg(flags, name="MergeMicromegasSimHitCollTool", **kwargs)
MergeAntiKt6TruthJetsCfg(flags, name="MergeAntiKt6TruthJetsTool", **kwargs)
SimpleMergeMcEventCollCfg(flags, name="MergeMcEventCollTool", **kwargs)
MergeTruthJetsFilterCfg(flags, name="MergeTruthJetsFilterTool", **kwargs)
MergeMcEventCollCfg(flags, name="MergeMcEventCollTool", **kwargs)
MergeAntiKt4TruthJetsCfg(flags, name="MergeAntiKt4TruthJetsTool", **kwargs)
CalibRangeCfg(flags, name="CalibRange", **kwargs)
GenericSimpleMergeMcEventCollCfg(flags, name="MergeMcEventCollTool", **kwargs)
TruthJetRangeCfg(flags, name="TruthJetRange", **kwargs)
GenericMergeMcEventCollCfg(flags, name="MergeMcEventCollTool", **kwargs)
InTimeOnlySimpleMergeMcEventCollCfg(flags, name="InTimeOnlyMcEventCollTool", **kwargs)