ATLAS Offline Software
Loading...
Searching...
No Matches
ITkPixelDigitizationConfig.py
Go to the documentation of this file.
1"""Define methods to construct configured ITk Pixel Digitization tools and algorithms
2
3Copyright (C) 2002-2021 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.PileUpMergeSvcConfig import PileUpMergeSvcCfg, PileUpXingFolderCfg
9from DigitizationConfig.PileUpToolsConfig import PileUpToolsCfg
10from DigitizationConfig.TruthDigitizationOutputConfig import TruthDigitizationOutputCfg
11from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
12from PixelConditionsAlgorithms.ITkPixelConditionsConfig import (
13 ITkPixelModuleConfigCondAlgCfg, ITkPixelChargeCalibCondAlgCfg,
14 ITkPixelDistortionAlgCfg
15)
16from PixelConditionsTools.ITkPixelConditionsSummaryConfig import ITkPixelConditionsSummaryCfg
17from PixelGeoModelXml.ITkPixelGeoModelConfig import ITkPixelReadoutGeometryCfg
18from PixelReadoutGeometry.PixelReadoutGeometryConfig import ITkPixelReadoutManagerCfg
19from SiLorentzAngleTool.ITkPixelLorentzAngleConfig import ITkPixelLorentzAngleToolCfg
20from SiPropertiesTool.ITkPixelSiPropertiesConfig import ITkPixelSiPropertiesToolCfg
21from SimulationConfig.SimEnums import PixelRadiationDamageSimulationType
22
23
24# The earliest and last bunch crossing times for which interactions will be sent
25# to the ITk Pixel Digitization code
27 return -25
28
29
31 if flags.Beam.BunchSpacing > 50:
32 return 75
33 else:
34 return 25
35
36
37def ITkEnergyDepositionToolCfg(flags, name="ITkEnergyDepositionTool", **kwargs):
38 """Return a configured EnergyDepositionTool"""
39 acc = ITkPixelDistortionAlgCfg(flags)
40 kwargs.setdefault("DeltaRayCut", 80.7687)
41 kwargs.setdefault("nCols", 5)
42 kwargs.setdefault("LoopLimit", 100000)
43 kwargs.setdefault("doBichsel", True)
44 kwargs.setdefault("doBichselBetaGammaCut", 0.7) # dEdx not quite consistent below this
45 kwargs.setdefault("doDeltaRay", False) # needs validation
46 kwargs.setdefault("doPU", False)
47 kwargs.setdefault("PixelDistortionData", "ITkPixelDistortionData")
48 EnergyDepositionTool = CompFactory.EnergyDepositionTool
49 acc.setPrivateTools(EnergyDepositionTool(name, **kwargs))
50 return acc
51
52
53def BarrelRD53SimToolCfg(flags, name="BarrelRD53SimTool", **kwargs):
54 """Return a RD53SimTool configured for Barrel"""
55 acc = ITkPixelReadoutManagerCfg(flags)
56 acc.merge(ITkPixelModuleConfigCondAlgCfg(flags))
57 acc.merge(ITkPixelChargeCalibCondAlgCfg(flags))
58 kwargs.setdefault("BarrelEC", 0)
59 kwargs.setdefault("DoNoise", flags.Digitization.DoITkPixelDetectorNoise)
60 kwargs.setdefault("PixelReadoutManager", acc.getPrimary())
61 kwargs.setdefault("PixelChargeCalibCondData", "ITkPixelChargeCalibCondData")
62 kwargs.setdefault("PixelConditionsSummaryTool", acc.popToolsAndMerge(ITkPixelConditionsSummaryCfg(flags)))
63 kwargs.setdefault("DoTimeWalk", False) #Set this to true to enable Timewalk effects
64 acc.setPrivateTools(CompFactory.RD53SimTool(name, **kwargs))
65 return acc
66
67
68def EndcapRD53SimToolCfg(flags, name="EndcapRD53SimTool", **kwargs):
69 """Return a RD53SimTool configured for Endcap"""
70 acc = ITkPixelReadoutManagerCfg(flags)
71 acc.merge(ITkPixelModuleConfigCondAlgCfg(flags))
72 acc.merge(ITkPixelChargeCalibCondAlgCfg(flags))
73 kwargs.setdefault("BarrelEC", 2)
74 kwargs.setdefault("DoNoise", flags.Digitization.DoITkPixelDetectorNoise)
75 kwargs.setdefault("PixelReadoutManager", acc.getPrimary())
76 kwargs.setdefault("PixelChargeCalibCondData", "ITkPixelChargeCalibCondData")
77 kwargs.setdefault("PixelConditionsSummaryTool", acc.popToolsAndMerge(ITkPixelConditionsSummaryCfg(flags)))
78 kwargs.setdefault("DoTimeWalk", False) #Set this to true to enable Timewalk effects
79 RD53SimTool = CompFactory.RD53SimTool
80 acc.setPrivateTools(RD53SimTool(name, **kwargs))
81 return acc
82
83
84def ITkSensorSimPlanarToolCfg(flags, name="ITkSensorSimPlanarTool", **kwargs):
85 """Return ComponentAccumulator with configured SensorSimPlanarTool for ITk"""
86 acc = ITkPixelModuleConfigCondAlgCfg(flags)
87 kwargs.setdefault("SiPropertiesTool", acc.popToolsAndMerge(ITkPixelSiPropertiesToolCfg(flags)))
88 kwargs.setdefault("LorentzAngleTool", acc.popToolsAndMerge(ITkPixelLorentzAngleToolCfg(flags)))
89 kwargs.setdefault("PixelModuleData", "ITkPixelModuleData")
90 kwargs.setdefault("DigitizeITk3Das3D", flags.Digitization.DigitizeITk3Das3D)
91 kwargs.setdefault("RadiationDamageSimulationType", flags.Digitization.PixelPlanarRadiationDamageSimulationType.value)
92
93 # radiation damage temlate corrections paths/histograms
94 kwargs.setdefault("TemplateCorrectionROOTfile", "maps_ITk_Planar_100V_fl10e15.root")
95 kwargs.setdefault("LorentzAngleCorrectionHistos", ["layer_1_100_um_la", "layer_2_150_um_la", "layer_3_150_um_la", "layer_4_150_um_la"])
96 kwargs.setdefault("ChargeCorrectionHistos", ["layer_1_100_um_cce", "layer_2_150_um_cce", "layer_3_150_um_cce", "layer_4_150_um_cce"])
97 kwargs.setdefault("DistanceCorrectionHistos", ["layer_1_100_um_dz", "layer_2_150_um_dz", "layer_3_150_um_dz", "layer_4_150_um_dz"])
98 if flags.Digitization.PixelPlanarRadiationDamageSimulationType is not PixelRadiationDamageSimulationType.NoRadiationDamage:
99 # acc.merge(ITkPixelRadSimFluenceMapAlgCfg(flags)) # TODO: not supported yet
100 pass
101 acc.setPrivateTools(CompFactory.SensorSimPlanarTool(name, **kwargs))
102 return acc
103
104
105def ITkSensorSim3DToolCfg(flags, name="ITkSensorSim3DTool", **kwargs):
106 """Return ComponentAccumulator with configured SensorSim3DTool for ITk"""
107 acc = ITkPixelModuleConfigCondAlgCfg(flags)
108 kwargs.setdefault("SiPropertiesTool", acc.popToolsAndMerge(ITkPixelSiPropertiesToolCfg(flags)))
109 kwargs.setdefault("PixelModuleData", "ITkPixelModuleData")
110 kwargs.setdefault("RadiationDamageSimulationType", flags.Digitization.Pixel3DRadiationDamageSimulationType.value)
111 kwargs.setdefault("DigitizeITk3Das3D", flags.Digitization.DigitizeITk3Das3D)
112
113 # radiation damage temlate corrections paths/histograms
114 kwargs.setdefault("TemplateCorrectionROOTfile", "maps_ITk_3D_100V_fl10e15.root")
115 kwargs.setdefault("ChargeCorrectionHistos", ["barrel_25_um_cee", "ring_25_um_cee"])
116 if flags.Digitization.Pixel3DRadiationDamageSimulationType is not PixelRadiationDamageSimulationType.NoRadiationDamage:
117 # acc.merge(ITkPixelRadSimFluenceMapAlgCfg(flags)) # TODO: not supported yet
118 pass
119 acc.setPrivateTools(CompFactory.SensorSim3DTool(name, **kwargs))
120 return acc
121
122
123def ITkPixelDigitizationBasicToolCfg(flags, name="ITkPixelDigitizationBasicTool", **kwargs):
124 """Return ComponentAccumulator with configured PixelDigitizationTool for ITk"""
125 acc = ITkPixelReadoutGeometryCfg(flags)
126 # set up tool handle lists
127 chargeTools = []
128 feSimTools = []
129 chargeTools.append(acc.popToolsAndMerge(ITkSensorSimPlanarToolCfg(flags)))
130 chargeTools.append(acc.popToolsAndMerge(ITkSensorSim3DToolCfg(flags)))
131 feSimTools.append(acc.popToolsAndMerge(BarrelRD53SimToolCfg(flags)))
132 feSimTools.append(acc.popToolsAndMerge(EndcapRD53SimToolCfg(flags)))
133 kwargs.setdefault("ChargeTools", chargeTools)
134 kwargs.setdefault("EnergyDepositionTool", acc.popToolsAndMerge(ITkEnergyDepositionToolCfg(flags)))
135 kwargs.setdefault("FrontEndSimTools", feSimTools)
136 kwargs.setdefault("InputObjectName", "ITkPixelHits")
137 kwargs.setdefault("PixelDetEleCollKey", "ITkPixelDetectorElementCollection")
138 if flags.Digitization.DoXingByXingPileUp:
139 kwargs.setdefault("FirstXing", ITkPixel_FirstXing(flags))
140 kwargs.setdefault("LastXing", ITkPixel_LastXing(flags))
141 from RngComps.RngCompsConfig import AthRNGSvcCfg
142 kwargs.setdefault("RndmSvc", acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)))
143
144 acc.setPrivateTools(CompFactory.PixelDigitizationTool(name, **kwargs))
145 return acc
146
147
148def ITkPixelDigitizationToolCfg(flags, name="ITkPixelDigitizationTool", **kwargs):
149 """Return ComponentAccumulator with configured ITkPixelDigitizationBasicTool"""
150 acc = ComponentAccumulator()
151 if flags.Digitization.PileUp:
152 intervals = []
153 if not flags.Digitization.DoXingByXingPileUp:
154 intervals += [acc.popToolsAndMerge(ITkPixelRangeCfg(flags))]
155 kwargs.setdefault("PileUpMergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=intervals)))
156 else:
157 kwargs.setdefault("PileUpMergeSvc", '')
158 kwargs.setdefault("OnlyUseContainerName", flags.Digitization.PileUp)
159 kwargs.setdefault("HardScatterSplittingMode", 0)
160 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
161 kwargs.setdefault("RDOCollName", flags.Overlay.BkgPrefix + "ITkPixelRDOs")
162 kwargs.setdefault("SDOCollName", flags.Overlay.BkgPrefix + "ITkPixelSDO_Map")
163 else:
164 kwargs.setdefault("RDOCollName", "ITkPixelRDOs")
165 kwargs.setdefault("SDOCollName", "ITkPixelSDO_Map")
166 tool = acc.popToolsAndMerge(ITkPixelDigitizationBasicToolCfg(flags, name, **kwargs))
167 acc.setPrivateTools(tool)
168 return acc
169
170
171def ITkPixelDigitizationHSToolCfg(flags, name="ITkPixelDigitizationHSTool", **kwargs):
172 """Return ComponentAccumulator with PixelDigitizationTool configured for Hard Scatter ITk"""
173 acc = ComponentAccumulator()
174 rangetool = acc.popToolsAndMerge(ITkPixelRangeCfg(flags))
175 kwargs.setdefault("PileUpMergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=rangetool)))
176 kwargs.setdefault("HardScatterSplittingMode", 1)
177 tool = acc.popToolsAndMerge(ITkPixelDigitizationBasicToolCfg(flags, name, **kwargs))
178 acc.setPrivateTools(tool)
179 return acc
180
181
182def ITkPixelDigitizationPUToolCfg(flags, name="ITkPixelDigitizationPUTool", **kwargs):
183 """Return ComponentAccumulator with PixelDigitizationTool configured for PileUp ITk"""
184 acc = ComponentAccumulator()
185 rangetool = acc.popToolsAndMerge(ITkPixelRangeCfg(flags))
186 kwargs.setdefault("PileUpMergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=rangetool)))
187 kwargs.setdefault("HardScatterSplittingMode", 2)
188 kwargs.setdefault("RDOCollName", "ITkPixel_PU_RDOs")
189 kwargs.setdefault("SDOCollName", "ITkPixel_PU_SDO_Map")
190 tool = acc.popToolsAndMerge(ITkPixelDigitizationBasicToolCfg(flags, name, **kwargs))
191 acc.setPrivateTools(tool)
192 return acc
193
194
195def ITkPixelDigitizationSplitNoMergePUToolCfg(flags, name="ITkPixelDigitizationSplitNoMergePUTool", **kwargs):
196 """Return ComponentAccumulator with PixelDigitizationTool configured for PileUpITkPixelHits"""
197 acc = ComponentAccumulator()
198 rangetool = acc.popToolsAndMerge(ITkPixelRangeCfg(flags))
199 kwargs.setdefault("PileUpMergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=rangetool)))
200 kwargs.setdefault("HardScatterSplittingMode", 0)
201 kwargs.setdefault("InputObjectName", "PileupITkPixelHits")
202 kwargs.setdefault("RDOCollName", "ITkPixel_PU_RDOs")
203 kwargs.setdefault("SDOCollName", "ITkPixel_PU_SDO_Map")
204 tool = acc.popToolsAndMerge(ITkPixelDigitizationBasicToolCfg(flags, name, **kwargs))
205 acc.setPrivateTools(tool)
206 return acc
207
208
209def ITkPixelOverlayDigitizationToolCfg(flags, name="ITkPixelOverlayDigitizationTool", **kwargs):
210 """Return ComponentAccumulator with PixelDigitizationTool configured for overlay"""
211 kwargs.setdefault("OnlyUseContainerName", False)
212 kwargs.setdefault("RDOCollName", flags.Overlay.SigPrefix + "ITkPixelRDOs")
213 kwargs.setdefault("SDOCollName", flags.Overlay.SigPrefix + "ITkPixelSDO_Map")
214 kwargs.setdefault("HardScatterSplittingMode", 0)
215 return ITkPixelDigitizationBasicToolCfg(flags, name, **kwargs)
216
217
218def ITkPixelRangeCfg(flags, name="ITkPixelRange", **kwargs):
219 """Return a configured PileUpXingFolder tool"""
220 kwargs.setdefault("FirstXing", ITkPixel_FirstXing(flags))
221 kwargs.setdefault("LastXing", ITkPixel_LastXing(flags))
222 kwargs.setdefault("CacheRefreshFrequency", 1.0) # default 0 no dataproxy reset
223 kwargs.setdefault("ItemList", ["SiHitCollection#ITkPixelHits"])
224 return PileUpXingFolderCfg(flags, name, **kwargs)
225
226
228 """Return ComponentAccumulator with Output for ITk Pixel. Not standalone."""
229 acc = ComponentAccumulator()
230 if flags.Output.doWriteRDO:
231 ItemList = ["PixelRDO_Container#*"]
232 if flags.Digitization.EnableTruth:
233 ItemList += ["InDetSimDataCollection#*"]
234 acc.merge(TruthDigitizationOutputCfg(flags))
235 if flags.ITk.savePixelSiHits:
236 ItemList += ["SiHitCollection#ITkPixelHits"]
237 acc.merge(OutputStreamCfg(flags, "RDO", ItemList))
238 return acc
239
240
241def ITkPixelDigitizationBasicCfg(flags, **kwargs):
242 """Return ComponentAccumulator for ITk Pixel digitization"""
243 acc = ComponentAccumulator()
244 if "PileUpTools" not in kwargs:
245 PileUpTools = acc.popToolsAndMerge(ITkPixelDigitizationToolCfg(flags))
246 kwargs["PileUpTools"] = PileUpTools
247 acc.merge(PileUpToolsCfg(flags, **kwargs))
248 return acc
249
250
252 """Return ComponentAccumulator with ITk Pixel Overlay digitization"""
253 acc = ComponentAccumulator()
254 if flags.Common.ProductionStep != ProductionStep.FastChain:
255 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
256 acc.merge(SGInputLoaderCfg(flags, ["SiHitCollection#ITkPixelHits"]))
257
258 if "DigitizationTool" not in kwargs:
259 tool = acc.popToolsAndMerge(ITkPixelOverlayDigitizationToolCfg(flags))
260 kwargs["DigitizationTool"] = tool
261
262 if flags.Concurrency.NumThreads > 0:
263 kwargs.setdefault("Cardinality", flags.Concurrency.NumThreads)
264
265 # Set common overlay extra inputs
266 kwargs.setdefault("ExtraInputs", flags.Overlay.ExtraInputs)
267 acc.addEventAlgo(CompFactory.PixelDigitization(name="ITkPixelOverlayDigitization", **kwargs))
268 return acc
269
270
271# with output defaults
272def ITkPixelDigitizationCfg(flags, **kwargs):
273 """Return ComponentAccumulator for ITk Pixel digitization and Output"""
274 acc = ITkPixelDigitizationBasicCfg(flags, **kwargs)
275 acc.merge(ITkPixelOutputCfg(flags))
276 return acc
277
278
279# additional specialisations
280def ITkPixelDigitizationHSCfg(flags, **kwargs):
281 """Return ComponentAccumulator for Hard-Scatter-only ITk Pixel digitization and Output"""
282 acc = ComponentAccumulator()
283 tool = acc.popToolsAndMerge(ITkPixelDigitizationHSToolCfg(flags))
284 kwargs["PileUpTools"] = tool
285 acc.merge(PileUpToolsCfg(flags, **kwargs))
286 acc.merge(ITkPixelOutputCfg(flags))
287 return acc
288
289
290def ITkPixelDigitizationPUCfg(flags, **kwargs):
291 """Return ComponentAccumulator with Pile-up-only ITk Pixel digitization and Output"""
292 acc = ComponentAccumulator()
293 tool = acc.popToolsAndMerge(ITkPixelDigitizationPUToolCfg(flags))
294 kwargs["PileUpTools"] = tool
295 acc.merge(PileUpToolsCfg(flags, **kwargs))
296 acc.merge(ITkPixelOutputCfg(flags))
297 return acc
ITkSensorSim3DToolCfg(flags, name="ITkSensorSim3DTool", **kwargs)
ITkPixelDigitizationBasicToolCfg(flags, name="ITkPixelDigitizationBasicTool", **kwargs)
BarrelRD53SimToolCfg(flags, name="BarrelRD53SimTool", **kwargs)
ITkPixelRangeCfg(flags, name="ITkPixelRange", **kwargs)
ITkPixelDigitizationPUToolCfg(flags, name="ITkPixelDigitizationPUTool", **kwargs)
ITkPixelDigitizationToolCfg(flags, name="ITkPixelDigitizationTool", **kwargs)
ITkEnergyDepositionToolCfg(flags, name="ITkEnergyDepositionTool", **kwargs)
ITkPixelDigitizationSplitNoMergePUToolCfg(flags, name="ITkPixelDigitizationSplitNoMergePUTool", **kwargs)
ITkPixelDigitizationHSToolCfg(flags, name="ITkPixelDigitizationHSTool", **kwargs)
ITkPixelOverlayDigitizationToolCfg(flags, name="ITkPixelOverlayDigitizationTool", **kwargs)
ITkSensorSimPlanarToolCfg(flags, name="ITkSensorSimPlanarTool", **kwargs)
EndcapRD53SimToolCfg(flags, name="EndcapRD53SimTool", **kwargs)