ATLAS Offline Software
Loading...
Searching...
No Matches
TRT_DigitizationConfig.py
Go to the documentation of this file.
1"""Define methods to construct configured TRT Digitization tools and algorithms
2
3Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
4"""
5from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
6from AthenaConfiguration.ComponentFactory import CompFactory
7from AthenaConfiguration.Enums import BeamType, ProductionStep
8from TRT_GeoModel.TRT_GeoModelConfig import TRT_ReadoutGeometryCfg
9from MagFieldServices.MagFieldServicesConfig import AtlasFieldCacheCondAlgCfg
10from TRT_PAI_Process.TRT_PAI_ProcessConfig import TRT_PAI_Process_XeToolCfg, TRT_PAI_Process_ArToolCfg, TRT_PAI_Process_KrToolCfg
11from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
12from DigitizationConfig.PileUpToolsConfig import PileUpToolsCfg
13from DigitizationConfig.PileUpMergeSvcConfig import PileUpMergeSvcCfg, PileUpXingFolderCfg
14from DigitizationConfig.TruthDigitizationOutputConfig import TruthDigitizationOutputCfg
15
16
17# The earliest and last bunch crossing times for which interactions will be sent
18# to the TRT Digitization code
20 return -50
21
22
24 return 50
25
26
27def TRT_RangeCfg(flags, name="TRTRange", **kwargs):
28 """Return an TRT configured PileUpXingFolder tool"""
29 kwargs.setdefault("FirstXing", TRT_FirstXing())
30 kwargs.setdefault("LastXing", TRT_LastXing())
31 kwargs.setdefault("CacheRefreshFrequency", 1.0) #default 0 no dataproxy reset
32 kwargs.setdefault("ItemList", ["TRTUncompressedHitCollection#TRTUncompressedHits"])
33 return PileUpXingFolderCfg(flags, name, **kwargs)
34
35
36def TRT_DigitizationBasicToolCfg(flags, name="TRT_DigitizationBasicTool", **kwargs):
37 """Return ComponentAccumulator with common TRT digitization tool config"""
38 acc = TRT_ReadoutGeometryCfg(flags)
39 acc.merge(AtlasFieldCacheCondAlgCfg(flags))
40 # default arguments
41 from TRT_ConditionsServices.TRT_ConditionsServicesConfig import TRT_StrawStatusSummaryToolCfg
42 kwargs.setdefault("InDetTRTStrawStatusSummaryTool", acc.popToolsAndMerge(TRT_StrawStatusSummaryToolCfg(flags)))
43 kwargs.setdefault("PAI_Tool_Ar", acc.popToolsAndMerge(TRT_PAI_Process_ArToolCfg(flags)))
44 kwargs.setdefault("PAI_Tool_Kr", acc.popToolsAndMerge(TRT_PAI_Process_KrToolCfg(flags)))
45 kwargs.setdefault("PAI_Tool_Xe", acc.popToolsAndMerge(TRT_PAI_Process_XeToolCfg(flags)))
46 kwargs.setdefault("Override_TrtRangeCutProperty", flags.Sim.TRTRangeCut)
47 kwargs.setdefault("RandomSeedOffset", flags.Digitization.RandomSeedOffset)
48 if not flags.Digitization.DoInnerDetectorNoise:
49 kwargs.setdefault("Override_noiseInSimhits", 0)
50 kwargs.setdefault("Override_noiseInUnhitStraws", 0)
51 if flags.Beam.Type is BeamType.Cosmics:
52 kwargs.setdefault("PrintDigSettings", True)
53 kwargs.setdefault("Override_cosmicFlag", 0)
54 kwargs.setdefault("Override_doCosmicTimingPit", 1)
55 kwargs.setdefault("Override_jitterTimeOffset", 0.)
56 kwargs.setdefault("Override_timeCorrection", 0)
57 if flags.Digitization.DoXingByXingPileUp:
58 kwargs.setdefault("FirstXing", TRT_FirstXing())
59 kwargs.setdefault("LastXing", TRT_LastXing())
60 if flags.BField.configuredSolenoidFieldScale>0 and flags.BField.configuredSolenoidFieldScale<1:
61 from AthenaCommon.SystemOfUnits import tesla
62 kwargs.setdefault("Override_solenoidFieldStrength", flags.BField.configuredSolenoidFieldScale * 2.0 * tesla)
63 from RngComps.RngCompsConfig import AthRNGSvcCfg
64 kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)))
65 TRTDigitizationTool = CompFactory.TRTDigitizationTool
66 tool = TRTDigitizationTool(name, **kwargs)
67 acc.setPrivateTools(tool)
68 return acc
69
70
71def TRT_DigitizationToolCfg(flags, name="TRTDigitizationTool", **kwargs):
72 """Return ComponentAccumulator with configured TRT digitization tool"""
73 acc = ComponentAccumulator()
74 if flags.Digitization.PileUp:
75 intervals = []
76 if not flags.Digitization.DoXingByXingPileUp:
77 intervals += [acc.popToolsAndMerge(TRT_RangeCfg(flags))]
78 kwargs.setdefault("MergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=intervals)))
79 else:
80 kwargs.setdefault("MergeSvc", '')
81 kwargs.setdefault("OnlyUseContainerName", flags.Digitization.PileUp)
82 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
83 kwargs.setdefault("OutputObjectName", flags.Overlay.BkgPrefix + "TRT_RDOs")
84 kwargs.setdefault("OutputSDOName", flags.Overlay.BkgPrefix + "TRT_SDO_Map")
85 else:
86 kwargs.setdefault("OutputObjectName", "TRT_RDOs")
87 kwargs.setdefault("OutputSDOName", "TRT_SDO_Map")
88 kwargs.setdefault("HardScatterSplittingMode", 0)
89 if flags.Digitization.TRT.HeavyIonHT:
90 kwargs.setdefault("Override_highThresholdBarShort", 0.00129875)
91 kwargs.setdefault("Override_highThresholdBarLong", 0.00118775)
92 kwargs.setdefault("Override_highThresholdECAwheels", 0.001185591)
93 kwargs.setdefault("Override_highThresholdECBwheels", 0.001145376)
94 kwargs.setdefault("Override_highThresholdBarShortArgon", 0.000468802)
95 kwargs.setdefault("Override_highThresholdBarLongArgon", 0.000456754)
96 kwargs.setdefault("Override_highThresholdECAwheelsArgon", 0.0006035)
97 kwargs.setdefault("Override_highThresholdECBwheelsArgon", 0.00057375)
98 tool = acc.popToolsAndMerge(TRT_DigitizationBasicToolCfg(flags, name, **kwargs))
99 acc.setPrivateTools(tool)
100 return acc
101
102
103def TRT_DigitizationGeantinoTruthToolCfg(flags, name="TRT_GeantinoTruthDigitizationTool", **kwargs):
104 """Return ComponentAccumulator with Geantino configured TRT digitization tool"""
105 acc = ComponentAccumulator()
106 if flags.Digitization.PileUp:
107 intervals = []
108 if not flags.Digitization.DoXingByXingPileUp:
109 intervals += [acc.popToolsAndMerge(TRT_RangeCfg(flags))]
110 kwargs.setdefault("MergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=intervals)))
111 else:
112 kwargs.setdefault("MergeSvc", '')
113 kwargs.setdefault("OnlyUseContainerName", flags.Digitization.PileUp)
114 kwargs.setdefault("VetoPileUpTruthLinks", False)
115 tool = acc.popToolsAndMerge(TRT_DigitizationToolCfg(flags, name, **kwargs))
116 acc.setPrivateTools(tool)
117 return acc
118
119
120def TRT_DigitizationHSToolCfg(flags, name="TRT_DigitizationToolHS", **kwargs):
121 """Return ComponentAccumulator with Hard Scatter configured TRT digitization tool"""
122 acc = ComponentAccumulator()
123 rangetool = acc.popToolsAndMerge(TRT_RangeCfg(flags))
124 kwargs.setdefault("MergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=rangetool)))
125 kwargs.setdefault("OutputObjectName", "TRT_RDOs")
126 kwargs.setdefault("OutputSDOName", "TRT_SDO_Map")
127 kwargs.setdefault("HardScatterSplittingMode", 1)
128 tool = acc.popToolsAndMerge(TRT_DigitizationBasicToolCfg(flags, name, **kwargs))
129 acc.setPrivateTools(tool)
130 return acc
131
132
133def TRT_DigitizationPUToolCfg(flags, name="TRT_DigitizationToolPU", **kwargs):
134 """Return ComponentAccumulator with Pile Up configured TRT digitization tool"""
135 acc = ComponentAccumulator()
136 rangetool = acc.popToolsAndMerge(TRT_RangeCfg(flags))
137 kwargs.setdefault("MergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=rangetool)))
138 kwargs.setdefault("OutputObjectName", "TRT_PU_RDOs")
139 kwargs.setdefault("OutputSDOName", "TRT_PU_SDO_Map")
140 kwargs.setdefault("HardScatterSplittingMode", 2)
141 acc.merge(TRT_DigitizationBasicToolCfg(flags, name, **kwargs))
142 return acc
143
144
145def TRT_DigitizationSplitNoMergePUToolCfg(flags, name="TRT_DigitizationToolSplitNoMergePU", **kwargs):
146 """Return ComponentAccumulator with PileUpTRT_Hits configured TRT digitization tool"""
147 acc = ComponentAccumulator()
148 rangetool = acc.popToolsAndMerge(TRT_RangeCfg(flags))
149 kwargs.setdefault("MergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=rangetool)))
150 kwargs.setdefault("HardScatterSplittingMode", 0)
151 kwargs.setdefault("DataObjectName", "PileupTRTUncompressedHits")
152 kwargs.setdefault("OutputObjectName", "TRT_PU_RDOs")
153 kwargs.setdefault("OutputSDOName", "TRT_PU_SDO_Map")
154 kwargs.setdefault("Override_noiseInSimhits", 0)
155 kwargs.setdefault("Override_noiseInUnhitStraws", 0)
156 tool = acc.popToolsAndMerge(TRT_DigitizationBasicToolCfg(flags, name, **kwargs))
157 acc.setPrivateTools(tool)
158 return acc
159
160
161def TRT_OverlayDigitizationToolCfg(flags, name="TRT_OverlayDigitizationTool", **kwargs):
162 """Return ComponentAccumulator with configured Overlay TRT digitization tool"""
163 acc = ComponentAccumulator()
164 kwargs.setdefault("OnlyUseContainerName", False)
165 kwargs.setdefault("OutputObjectName", flags.Overlay.SigPrefix + "TRT_RDOs")
166 kwargs.setdefault("OutputSDOName", flags.Overlay.SigPrefix + "TRT_SDO_Map")
167 kwargs.setdefault("Override_isOverlay", 1)
168 kwargs.setdefault("HardScatterSplittingMode", 0)
169 kwargs.setdefault("Override_getT0FromData", 0)
170 kwargs.setdefault("Override_noiseInSimhits", 0)
171 kwargs.setdefault("Override_noiseInUnhitStraws", 0)
172 kwargs.setdefault("MergeSvc", '')
173 tool = acc.popToolsAndMerge(TRT_DigitizationBasicToolCfg(flags, name, **kwargs))
174 acc.setPrivateTools(tool)
175 return acc
176
177
178def TRT_OutputCfg(flags):
179 """Return ComponentAccumulator with Output for TRT. Not standalone."""
180 acc = ComponentAccumulator()
181 if flags.Output.doWriteRDO:
182 ItemList = ["TRT_RDO_Container#*"]
183 if flags.Digitization.EnableTruth:
184 ItemList += ["InDetSimDataCollection#*"]
185 acc.merge(TruthDigitizationOutputCfg(flags))
186 acc.merge(OutputStreamCfg(flags, "RDO", ItemList))
187 return acc
188
189
190def TRT_DigitizationBasicCfg(flags, **kwargs):
191 """Return ComponentAccumulator for TRT digitization"""
192 acc = ComponentAccumulator()
193 if "PileUpTools" not in kwargs:
194 PileUpTools = acc.popToolsAndMerge(TRT_DigitizationToolCfg(flags))
195 kwargs["PileUpTools"] = PileUpTools
196 acc.merge(PileUpToolsCfg(flags, **kwargs))
197 return acc
198
199
201 """Return ComponentAccumulator with TRT Overlay digitization"""
202 acc = ComponentAccumulator()
203 if flags.Common.ProductionStep != ProductionStep.FastChain:
204 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
205 acc.merge(SGInputLoaderCfg(flags, ["TRTUncompressedHitCollection#TRTUncompressedHits"]))
206
207 if "DigitizationTool" not in kwargs:
208 tool = acc.popToolsAndMerge(TRT_OverlayDigitizationToolCfg(flags))
209 kwargs["DigitizationTool"] = tool
210
211 if flags.Concurrency.NumThreads > 0:
212 kwargs.setdefault("Cardinality", flags.Concurrency.NumThreads)
213
214 # Set common overlay extra inputs
215 kwargs.setdefault("ExtraInputs", flags.Overlay.ExtraInputs)
216
217 TRTDigitization = CompFactory.TRTDigitization
218 acc.addEventAlgo(TRTDigitization(name="TRT_OverlayDigitization", **kwargs))
219 return acc
220
221
222# with output defaults
223def TRT_DigitizationCfg(flags, **kwargs):
224 """Return ComponentAccumulator for TRT digitization and Output"""
225 acc = TRT_DigitizationBasicCfg(flags, **kwargs)
226 acc.merge(TRT_OutputCfg(flags))
227 return acc
228
229
230def TRT_OverlayDigitizationCfg(flags, **kwargs):
231 """Return ComponentAccumulator with TRT Overlay digitization and Output"""
232 acc = TRT_OverlayDigitizationBasicCfg(flags, **kwargs)
233 acc.merge(TRT_OutputCfg(flags))
234 return acc
235
236
237# additional specialisations
238def TRT_DigitizationHSCfg(flags, name="TRT_DigitizationHS", **kwargs):
239 """Return ComponentAccumulator for Hard-Scatter-only TRT digitization and Output"""
240 acc = TRT_DigitizationHSToolCfg(flags)
241 kwargs["PileUpTools"] = acc.popPrivateTools()
242 acc = TRT_DigitizationBasicCfg(flags, name=name, **kwargs)
243 acc.merge(TRT_OutputCfg(flags))
244 return acc
245
246
247def TRT_DigitizationPUCfg(flags, name="TRT_DigitizationPU", **kwargs):
248 """Return ComponentAccumulator with Pile-up-only TRT digitization and Output"""
249 acc = TRT_DigitizationPUToolCfg(flags)
250 kwargs["PileUpTools"] = acc.popPrivateTools()
251 acc = TRT_DigitizationBasicCfg(flags, name=name, **kwargs)
252 acc.merge(TRT_OutputCfg(flags))
253 return acc
Top algorithm class for TRT digitization.
TRT_DigitizationToolCfg(flags, name="TRTDigitizationTool", **kwargs)
TRT_DigitizationPUCfg(flags, name="TRT_DigitizationPU", **kwargs)
TRT_DigitizationBasicCfg(flags, **kwargs)
TRT_DigitizationBasicToolCfg(flags, name="TRT_DigitizationBasicTool", **kwargs)
TRT_OverlayDigitizationCfg(flags, **kwargs)
TRT_DigitizationHSCfg(flags, name="TRT_DigitizationHS", **kwargs)
TRT_OverlayDigitizationToolCfg(flags, name="TRT_OverlayDigitizationTool", **kwargs)
TRT_RangeCfg(flags, name="TRTRange", **kwargs)
TRT_DigitizationSplitNoMergePUToolCfg(flags, name="TRT_DigitizationToolSplitNoMergePU", **kwargs)
TRT_DigitizationHSToolCfg(flags, name="TRT_DigitizationToolHS", **kwargs)
TRT_DigitizationGeantinoTruthToolCfg(flags, name="TRT_GeantinoTruthDigitizationTool", **kwargs)
TRT_OverlayDigitizationBasicCfg(flags, **kwargs)
TRT_DigitizationPUToolCfg(flags, name="TRT_DigitizationToolPU", **kwargs)