ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
InnerDetector
InDetDigitization
PixelDigitization
python
PLR_DigitizationConfig.py
Go to the documentation of this file.
1
"""Define methods to construct configured PLR Digitization tools and algorithms
2
3
Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
4
"""
5
from
AthenaConfiguration.ComponentAccumulator
import
ComponentAccumulator
6
from
AthenaConfiguration.ComponentFactory
import
CompFactory
7
from
AthenaConfiguration.Enums
import
ProductionStep
8
from
DigitizationConfig.PileUpMergeSvcConfig
import
PileUpMergeSvcCfg, PileUpXingFolderCfg
9
from
DigitizationConfig.PileUpToolsConfig
import
PileUpToolsCfg
10
from
DigitizationConfig.TruthDigitizationOutputConfig
import
TruthDigitizationOutputCfg
11
from
OutputStreamAthenaPool.OutputStreamConfig
import
OutputStreamCfg
12
13
from
PixelConditionsAlgorithms.PLR_ConditionsConfig
import
(
14
PLR_ConfigCondAlgCfg, PLR_ChargeCalibCondAlgCfg,
15
PLR_DistortionAlgCfg
16
)
17
from
PixelConditionsTools.PLR_ConditionsSummaryConfig
import
PLR_ConditionsSummaryCfg
18
from
PLRGeoModelXml.PLR_GeoModelConfig
import
PLR_ReadoutGeometryCfg
19
from
PixelReadoutGeometry.PixelReadoutGeometryConfig
import
PLR_ReadoutManagerCfg
20
from
SiLorentzAngleTool.PLR_LorentzAngleConfig
import
PLR_LorentzAngleToolCfg
21
from
SiPropertiesTool.PLR_SiPropertiesConfig
import
PLR_SiPropertiesToolCfg
22
from
SimulationConfig.SimEnums
import
PixelRadiationDamageSimulationType
23
24
25
# The earliest and last bunch crossing times for which interactions will be sent
26
# to the PLR Digitization code
27
def
PLR_FirstXing
(flags):
28
return
-25
29
30
31
def
PLR_LastXing
(flags):
32
if
flags.Beam.BunchSpacing > 50:
33
return
75
34
else
:
35
return
25
36
37
38
def
PLR_EnergyDepositionToolCfg
(flags, name="PLR_EnergyDepositionTool", **kwargs):
39
"""Return a configured EnergyDepositionTool"""
40
acc = PLR_DistortionAlgCfg(flags)
41
kwargs.setdefault(
"DeltaRayCut"
, 117.)
42
kwargs.setdefault(
"nCols"
, 5)
43
kwargs.setdefault(
"LoopLimit"
, 100000)
44
kwargs.setdefault(
"doBichsel"
,
True
)
45
kwargs.setdefault(
"doBichselBetaGammaCut"
, 0.7)
# dEdx not quite consistent below this
46
kwargs.setdefault(
"doDeltaRay"
,
False
)
# needs validation
47
kwargs.setdefault(
"doPU"
,
True
)
48
kwargs.setdefault(
"PixelDistortionData"
,
"PLR_DistortionData"
)
49
acc.setPrivateTools(CompFactory.EnergyDepositionTool(name, **kwargs))
50
return
acc
51
52
53
def
PLR_RD53SimToolCfg
(flags, name="PLR_RD53SimTool", **kwargs):
54
"""Return a RD53SimTool configured for PLR"""
55
acc = PLR_ReadoutManagerCfg(flags)
56
acc.merge(PLR_ConfigCondAlgCfg(flags))
57
acc.merge(PLR_ChargeCalibCondAlgCfg(flags))
58
kwargs.setdefault("BarrelEC", 4)
59
kwargs.setdefault("DoNoise", flags.Digitization.DoInnerDetectorNoise)
60
kwargs.setdefault("PixelReadoutManager", acc.getPrimary())
61
kwargs.setdefault("PixelChargeCalibCondData", "PLR_ChargeCalibCondData")
62
kwargs.setdefault("PixelConditionsSummaryTool", acc.popToolsAndMerge(PLR_ConditionsSummaryCfg(flags)))
63
kwargs.setdefault("DoTimeWalk", False)
64
acc.setPrivateTools(CompFactory.RD53SimTool(name, **kwargs))
65
return acc
66
67
68
def PLR_SensorSimPlanarToolCfg(flags, name="PLR_SensorSimPlanarTool", **kwargs):
69
"""
Return ComponentAccumulator with configured SensorSimPlanarTool for PL
R"""
70
acc = PLR_ConfigCondAlgCfg(flags)
71
kwargs.setdefault("SiPropertiesTool", acc.popToolsAndMerge(PLR_SiPropertiesToolCfg(flags)))
72
kwargs.setdefault("LorentzAngleTool", acc.popToolsAndMerge(PLR_LorentzAngleToolCfg(flags)))
73
kwargs.setdefault("PixelModuleData", "PLR_ModuleData")
74
kwargs.setdefault("RadiationDamageSimulationType", flags.Digitization.PixelPlanarRadiationDamageSimulationType.value)
75
kwargs.setdefault("DigitizeITk3Das3D", False)
76
if flags.Digitization.PixelPlanarRadiationDamageSimulationType is not PixelRadiationDamageSimulationType.NoRadiationDamage:
77
# acc.merge(PLR_RadSimFluenceMapAlgCfg(flags)) # TODO: not supported yet
78
pass
79
acc.setPrivateTools(CompFactory.SensorSimPlanarTool(name, **kwargs))
80
return acc
81
82
83
def PLR_SensorSim3DToolCfg(flags, name="PLR_SensorSim3DTool", **kwargs):
84
"""
Return ComponentAccumulator with configured SensorSim3DTool for PL
R"""
85
acc = PLR_ConfigCondAlgCfg(flags)
86
kwargs.setdefault("SiPropertiesTool", acc.popToolsAndMerge(PLR_SiPropertiesToolCfg(flags)))
87
kwargs.setdefault("PixelModuleData", "PLR_ModuleData")
88
kwargs.setdefault("RadiationDamageSimulationType", flags.Digitization.Pixel3DRadiationDamageSimulationType.value)
89
kwargs.setdefault("DigitizeITk3Das3D", False)
90
if flags.Digitization.Pixel3DRadiationDamageSimulationType is not PixelRadiationDamageSimulationType.NoRadiationDamage:
91
# acc.merge(PLR_RadSimFluenceMapAlgCfg(flags)) # TODO: not supported yet
92
pass
93
acc.setPrivateTools(CompFactory.SensorSim3DTool(name, **kwargs))
94
return acc
95
96
97
def PLR_DigitizationBasicToolCfg(flags, name="PLR_DigitizationBasicTool", **kwargs):
98
"""
Return ComponentAccumulator with configured PixelDigitizationTool for PL
R"""
99
acc = PLR_ReadoutGeometryCfg(flags)
100
# set up tool handle lists
101
chargeTools = []
102
feSimTools = []
103
chargeTools.append(acc.popToolsAndMerge(PLR_SensorSimPlanarToolCfg(flags)))
104
# chargeTools.append(acc.popToolsAndMerge(PLR_SensorSim3DToolCfg(flags)))
105
feSimTools.append(acc.popToolsAndMerge(PLR_RD53SimToolCfg(flags)))
106
kwargs.setdefault("PixelIDName", "PLR_ID")
107
kwargs.setdefault("ChargeTools", chargeTools)
108
kwargs.setdefault("EnergyDepositionTool", acc.popToolsAndMerge(PLR_EnergyDepositionToolCfg(flags)))
109
kwargs.setdefault("FrontEndSimTools", feSimTools)
110
kwargs.setdefault("InputObjectName", "PLR_Hits")
111
kwargs.setdefault("PixelDetEleCollKey", "PLR_DetectorElementCollection")
112
if flags.Digitization.DoXingByXingPileUp:
113
kwargs.setdefault("FirstXing", PLR_FirstXing(flags))
114
kwargs.setdefault("LastXing", PLR_LastXing(flags))
115
from RngComps.RngCompsConfig import AthRNGSvcCfg
116
kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)))
117
118
acc.setPrivateTools(CompFactory.PixelDigitizationTool(name, **kwargs, ))
119
return acc
120
121
122
def PLR_DigitizationToolCfg(flags, name="PLR_DigitizationTool", **kwargs):
123
"""
Return ComponentAccumulator with configured PLR_DigitizationBasicTool"""
124
acc = ComponentAccumulator()
125
if flags.Digitization.PileUp:
126
intervals = []
127
if not flags.Digitization.DoXingByXingPileUp:
128
intervals += [acc.popToolsAndMerge(PLR_RangeCfg(flags))]
129
kwargs.setdefault("PileUpMergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=intervals)))
130
else:
131
kwargs.setdefault("PileUpMergeSvc", "")
132
kwargs.setdefault("OnlyUseContainerName", flags.Digitization.PileUp)
133
kwargs.setdefault("HardScatterSplittingMode", 0)
134
if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
135
kwargs.setdefault("RDOCollName", flags.Overlay.BkgPrefix + "PLR_RDOs")
136
kwargs.setdefault("SDOCollName", flags.Overlay.BkgPrefix + "PLR_SDO_Map")
137
else:
138
kwargs.setdefault("RDOCollName", "PLR_RDOs")
139
kwargs.setdefault("SDOCollName", "PLR_SDO_Map")
140
tool = acc.popToolsAndMerge(PLR_DigitizationBasicToolCfg(flags, name, **kwargs))
141
acc.setPrivateTools(tool)
142
return acc
143
144
145
def PLR_DigitizationHSToolCfg(flags, name="PLR_DigitizationHSTool", **kwargs):
146
"""Return ComponentAccumulator with PixelDigitizationTool configured for Hard Scatte
r"""
147
acc = ComponentAccumulator()
148
rangetool = acc.popToolsAndMerge(PLR_RangeCfg(flags))
149
acc.merge(PileUpMergeSvcCfg(flags, Intervals=rangetool))
150
kwargs.setdefault("HardScatterSplittingMode", 1)
151
tool = acc.popToolsAndMerge(PLR_DigitizationBasicToolCfg(flags, name, **kwargs))
152
acc.setPrivateTools(tool)
153
return acc
154
155
156
def PLR_DigitizationPUToolCfg(flags, name="PLR_DigitizationPUTool", **kwargs):
157
"""
Return ComponentAccumulator with PixelDigitizationTool configured for PileUp"""
158
acc = ComponentAccumulator()
159
rangetool = acc.popToolsAndMerge(PLR_RangeCfg(flags))
160
acc.merge(PileUpMergeSvcCfg(flags, Intervals=rangetool))
161
kwargs.setdefault("HardScatterSplittingMode", 2)
162
kwargs.setdefault("RDOCollName", "PLR_PU_RDOs")
163
kwargs.setdefault("SDOCollName", "PLR_PU_SDO_Map")
164
tool = acc.popToolsAndMerge(PLR_DigitizationBasicToolCfg(flags, name, **kwargs))
165
acc.setPrivateTools(tool)
166
return acc
167
168
169
def PLR_DigitizationSplitNoMergePUToolCfg(flags, name="PLR_DigitizationSplitNoMergePUTool", **kwargs):
170
"""Return ComponentAccumulator with PixelDigitizationTool configured for PileUpPLR_Hits"""
171
acc = ComponentAccumulator()
172
rangetool = acc.popToolsAndMerge(PLR_RangeCfg(flags))
173
acc.merge(PileUpMergeSvcCfg(flags, Intervals=rangetool))
174
kwargs.setdefault("HardScatterSplittingMode", 0)
175
kwargs.setdefault("InputObjectName", "PileupPLR_Hits")
176
kwargs.setdefault("RDOCollName", "PLR_PU_RDOs")
177
kwargs.setdefault("SDOCollName", "PLR_PU_SDO_Map")
178
tool = acc.popToolsAndMerge(PLR_DigitizationBasicToolCfg(flags, name, **kwargs))
179
acc.setPrivateTools(tool)
180
return acc
181
182
183
def PLR_OverlayDigitizationToolCfg(flags, name="PLR_OverlayDigitizationTool", **kwargs):
184
"""Return ComponentAccumulator with PixelDigitizationTool configured for overlay"""
185
kwargs.setdefault("OnlyUseContainerName", False)
186
kwargs.setdefault("RDOCollName", flags.Overlay.SigPrefix + "PLR_RDOs")
187
kwargs.setdefault("SDOCollName", flags.Overlay.SigPrefix + "PLR_SDO_Map")
188
kwargs.setdefault("HardScatterSplittingMode", 0)
189
return PLR_DigitizationBasicToolCfg(flags, name, **kwargs)
190
191
192
def PLR_RangeCfg(flags, name="PLR_Range", **kwargs):
193
"""Return a configured PileUpXingFolder tool"""
194
kwargs.setdefault("FirstXing", PLR_FirstXing(flags))
195
kwargs.setdefault("LastXing", PLR_LastXing(flags))
196
kwargs.setdefault("CacheRefreshFrequency", 1.0) # default 0 no dataproxy reset
197
kwargs.setdefault("ItemList", ["SiHitCollection#PLR_Hits"])
198
return PileUpXingFolderCfg(flags, name, **kwargs)
199
200
201
def PLR_OutputCfg(flags):
202
"""Return ComponentAccumulator with Output for PLR. Not standalone."""
203
acc = ComponentAccumulator()
204
if flags.Output.doWriteRDO:
205
ItemList = ["PixelRDO_Container#*"]
206
if flags.Digitization.EnableTruth:
207
ItemList += ["InDetSimDataCollection#*"]
208
acc.merge(TruthDigitizationOutputCfg(flags))
209
acc.merge(OutputStreamCfg(flags, "RDO", ItemList))
210
return acc
211
212
213
def PLR_DigitizationBasicCfg(flags, **kwargs):
214
"""Return ComponentAccumulator for PLR digitization"""
215
acc = ComponentAccumulator()
216
if "PileUpTools" not in kwargs:
217
PileUpTools = acc.popToolsAndMerge(PLR_DigitizationToolCfg(flags))
218
kwargs["PileUpTools"] = PileUpTools
219
acc.merge(PileUpToolsCfg(flags, **kwargs))
220
return acc
221
222
223
def PLR_OverlayDigitizationBasicCfg(flags, **kwargs):
224
"""Return ComponentAccumulator with PLR Overlay digitization"""
225
acc = ComponentAccumulator()
226
if flags.Common.ProductionStep != ProductionStep.FastChain:
227
from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
228
acc.merge(SGInputLoaderCfg(flags, ["SiHitCollection#PLR_Hits"]))
229
230
if "DigitizationTool" not in kwargs:
231
tool = acc.popToolsAndMerge(PLR_OverlayDigitizationToolCfg(flags))
232
kwargs["DigitizationTool"] = tool
233
234
if flags.Concurrency.NumThreads > 0:
235
kwargs.setdefault("Cardinality", flags.Concurrency.NumThreads)
236
237
# Set common overlay extra inputs
238
kwargs.setdefault("ExtraInputs", flags.Overlay.ExtraInputs)
239
acc.addEventAlgo(CompFactory.PixelDigitization(name="PLR_OverlayDigitization", **kwargs))
240
return acc
241
242
243
# with output defaults
244
def PLR_DigitizationCfg(flags, **kwargs):
245
"""Return ComponentAccumulator for PLR digitization and Output"""
246
acc = PLR_DigitizationBasicCfg(flags, **kwargs)
247
acc.merge(PLR_OutputCfg(flags))
248
return acc
249
250
251
# additional specialisations
252
def PLR_DigitizationHSCfg(flags, **kwargs):
253
"""Return ComponentAccumulator for Hard-Scatter-only PLR digitization and Output"""
254
acc = ComponentAccumulator()
255
tool = acc.popToolsAndMerge(PLR_DigitizationHSToolCfg(flags))
256
kwargs["PileUpTools"] = tool
257
acc.merge(PileUpToolsCfg(flags, **kwargs))
258
acc.merge(PLR_OutputCfg(flags))
259
return acc
260
261
262
def PLR_DigitizationPUCfg(flags, **kwargs):
263
"""Return ComponentAccumulator with Pile-up-only PLR digitization and Output"""
264
acc = ComponentAccumulator()
265
tool = acc.popToolsAndMerge(PLR_DigitizationPUToolCfg(flags))
266
kwargs["PileUpTools"] = tool
267
acc.merge(PileUpToolsCfg(flags, **kwargs))
268
acc.merge(PLR_OutputCfg(flags))
269
return acc
PLR_DigitizationConfig.PLR_LastXing
PLR_LastXing(flags)
Definition
PLR_DigitizationConfig.py:31
PLR_DigitizationConfig.PLR_EnergyDepositionToolCfg
PLR_EnergyDepositionToolCfg(flags, name="PLR_EnergyDepositionTool", **kwargs)
Definition
PLR_DigitizationConfig.py:38
PLR_DigitizationConfig.PLR_FirstXing
PLR_FirstXing(flags)
Definition
PLR_DigitizationConfig.py:27
PLR_DigitizationConfig.PLR_RD53SimToolCfg
PLR_RD53SimToolCfg(flags, name="PLR_RD53SimTool", **kwargs)
Definition
PLR_DigitizationConfig.py:53
Generated on
for ATLAS Offline Software by
1.17.0