1"""Define methods to construct configured PLR Digitization tools and algorithms
3Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
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
13from PixelConditionsAlgorithms.PLR_ConditionsConfig
import (
14 PLR_ConfigCondAlgCfg, PLR_ChargeCalibCondAlgCfg,
17from PixelConditionsTools.PLR_ConditionsSummaryConfig
import PLR_ConditionsSummaryCfg
18from PLRGeoModelXml.PLR_GeoModelConfig
import PLR_ReadoutGeometryCfg
19from PixelReadoutGeometry.PixelReadoutGeometryConfig
import PLR_ReadoutManagerCfg
20from SiLorentzAngleTool.PLR_LorentzAngleConfig
import PLR_LorentzAngleToolCfg
21from SiPropertiesTool.PLR_SiPropertiesConfig
import PLR_SiPropertiesToolCfg
22from SimulationConfig.SimEnums
import PixelRadiationDamageSimulationType
32 if flags.Beam.BunchSpacing > 50:
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)
46 kwargs.setdefault(
"doDeltaRay",
False)
47 kwargs.setdefault(
"doPU",
True)
48 kwargs.setdefault(
"PixelDistortionData",
"PLR_DistortionData")
49 acc.setPrivateTools(CompFactory.EnergyDepositionTool(name, **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))
68def 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
79 acc.setPrivateTools(CompFactory.SensorSimPlanarTool(name, **kwargs))
83def 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
93 acc.setPrivateTools(CompFactory.SensorSim3DTool(name, **kwargs))
97def 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
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)))
118 acc.setPrivateTools(CompFactory.PixelDigitizationTool(name, **kwargs, ))
122def PLR_DigitizationToolCfg(flags, name="PLR_DigitizationTool", **kwargs):
123 """Return ComponentAccumulator with configured PLR_DigitizationBasicTool"""
124 acc = ComponentAccumulator()
125 if flags.Digitization.PileUp:
127 if not flags.Digitization.DoXingByXingPileUp:
128 intervals += [acc.popToolsAndMerge(PLR_RangeCfg(flags))]
129 kwargs.setdefault("PileUpMergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=intervals)))
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")
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)
145def 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)
156def 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)
169def 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)
183def 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)
192def 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)
201def 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))
213def 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))
223def 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"]))
230 if "DigitizationTool" not in kwargs:
231 tool = acc.popToolsAndMerge(PLR_OverlayDigitizationToolCfg(flags))
232 kwargs["DigitizationTool"] = tool
234 if flags.Concurrency.NumThreads > 0:
235 kwargs.setdefault("Cardinality", flags.Concurrency.NumThreads)
237 # Set common overlay extra inputs
238 kwargs.setdefault("ExtraInputs", flags.Overlay.ExtraInputs)
239 acc.addEventAlgo(CompFactory.PixelDigitization(name="PLR_OverlayDigitization", **kwargs))
243# with output defaults
244def PLR_DigitizationCfg(flags, **kwargs):
245 """Return ComponentAccumulator for PLR digitization and Output"""
246 acc = PLR_DigitizationBasicCfg(flags, **kwargs)
247 acc.merge(PLR_OutputCfg(flags))
251# additional specialisations
252def 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))
262def 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))
PLR_EnergyDepositionToolCfg(flags, name="PLR_EnergyDepositionTool", **kwargs)
PLR_RD53SimToolCfg(flags, name="PLR_RD53SimTool", **kwargs)