ATLAS Offline Software
Loading...
Searching...
No Matches
LArDigitizationConfig.py
Go to the documentation of this file.
1"""Define functions for LAr Digitization with ComponentAccumulator
2
3Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
4"""
5# utilities
6from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
7from AthenaConfiguration.ComponentFactory import CompFactory
8from AthenaConfiguration.Enums import BeamType, LHCPeriod, ProductionStep
9from OutputStreamAthenaPool.OutputStreamConfig import OutputStreamCfg
10# for PileUpTool
11from LArGeoAlgsNV.LArGMConfig import LArGMCfg
12from LArRecUtils.LArADC2MeVCondAlgConfig import LArADC2MeVCondAlgCfg
13from LArRecUtils.LArXTalkWeightCondAlgConfig import LArXTalkWeightCondAlgCfg
14from LArRecUtils.LArRecUtilsConfig import LArAutoCorrNoiseCondAlgCfg
15from LArBadChannelTool.LArBadChannelConfig import LArBadFebCfg,LArBadChannelCfg
16from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBCfg
17from DigitizationConfig.PileUpToolsConfig import PileUpToolsCfg
18from DigitizationConfig.PileUpMergeSvcConfig import PileUpMergeSvcCfg, PileUpXingFolderCfg
19# for Digitization
20from LArROD.LArRawChannelBuilderAlgConfig import LArRawChannelBuilderAlgCfg
21from LArROD.LArDigitThinnerConfig import LArDigitThinnerCfg
22from LArROD.LArNNChannelBuilder import LArNNRawChannelBuilderCfg
23from LArROD.LArOFFCChannelBuilder import LArOFFCRawChannelBuilderCfg
24from DigitizationConfig.TruthDigitizationOutputConfig import TruthDigitizationOutputCfg
25# for Trigger Tower
26from CaloConditions.CaloConditionsConfig import CaloTriggerTowerCfg
27from SGComps.AddressRemappingConfig import InputOverwriteCfg
28
29# Enum of CaloGains
30from ROOT.CaloGain import CaloGain
31
32
33
34def useLArFloat(flags):
35 """Return bool for simplified transient LArHit with float E,time"""
36 # temporary, remapping to LArHitFloat does not seeem to work
37 # with this scheme... => larger memory usage
38 if flags.Digitization.DoXingByXingPileUp or flags.Common.isOverlay:
39 return False
40 # check for fast chain, running digitisation from hits in memory
41 if flags.Sim.DoFullChain:
42 return False
43 return False
44
45
46def LArRangeEMCfg(flags, name="LArRangeEM", **kwargs):
47 """Return a PileUpXingFoldertool for ElectroMagnetic calorimeter"""
48 # bunch crossing range in ns
49 kwargs.setdefault("FirstXing", -751)
50 kwargs.setdefault("LastXing", 101)
51 if useLArFloat(flags):
52 kwargs.setdefault("ItemList", ["LArHitFloatContainer#LArHitEMB",
53 "LArHitFloatContainer#LArHitEMEC"])
54 else:
55 kwargs.setdefault("ItemList", ["LArHitContainer#LArHitEMB",
56 "LArHitContainer#LArHitEMEC"])
57 return PileUpXingFolderCfg(flags, name, **kwargs)
58
59
60def LArRangeHECCfg(flags, name="LArRangeHEC", **kwargs):
61 """Return a PileUpXingFoldertool for Hadronic End-Cap"""
62 # bunch crossing range in ns
63 kwargs.setdefault("FirstXing", -676)
64 kwargs.setdefault("LastXing", 101)
65 if useLArFloat(flags):
66 kwargs.setdefault("ItemList", ["LArHitFloatContainer#LArHitHEC"])
67 else:
68 kwargs.setdefault("ItemList", ["LArHitContainer#LArHitHEC"])
69 return PileUpXingFolderCfg(flags, name, **kwargs)
70
71
72def LArRangeFCALCfg(flags, name="LArRangeFCAL", **kwargs):
73 """Return a PileUpXingFoldertool for Forward Calorimeters"""
74 # bunch crossing range in ns
75 kwargs.setdefault("FirstXing", -551)
76 kwargs.setdefault("LastXing", 101)
77 if useLArFloat(flags):
78 kwargs.setdefault("ItemList", ["LArHitFloatContainer#LArHitFCAL"])
79 else:
80 kwargs.setdefault("ItemList", ["LArHitContainer#LArHitFCAL"])
81 return PileUpXingFolderCfg(flags, name, **kwargs)
82
83
84def LArPileUpToolCfg(flags, name="LArPileUpTool", **kwargs):
85 """Return ComponentAccumulator with configured LArPileUpTool"""
86 acc = LArGMCfg(flags)
87
88 # add new conditions for LArXTalkWeight
89 acc.merge(LArXTalkWeightCondAlgCfg(flags))
90
91 # defaults
92 if flags.Common.isOverlay:
93 # Some noise needs to be added during MC Overlay
94 # No noise should be added during Data Overlay
95 kwargs.setdefault("NoiseOnOff", not flags.Overlay.DataOverlay)
96 kwargs.setdefault("NoiseOnOff", flags.Digitization.DoCaloNoise) # For other jobs go with the noise flag setting.
97 kwargs.setdefault("DoDigiTruthReconstruction", flags.Digitization.EnableCaloHSTruthRecoInputs)
98 kwargs.setdefault("RandomSeedOffset", flags.Digitization.RandomSeedOffset)
99 if flags.Digitization.PileUp:
100 intervals = []
101 if flags.Digitization.DoXingByXingPileUp:
102 kwargs.setdefault("FirstXing", -751)
103 kwargs.setdefault("LastXing", 101)
104 else:
105 intervals += [acc.popToolsAndMerge(LArRangeEMCfg(flags))]
106 intervals += [acc.popToolsAndMerge(LArRangeHECCfg(flags))]
107 intervals += [acc.popToolsAndMerge(LArRangeFCALCfg(flags))]
108 kwargs.setdefault("PileUpMergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=intervals)))
109 else:
110 kwargs.setdefault("PileUpMergeSvc", '')
111 kwargs.setdefault("RndmEvtOverlay", flags.Common.isOverlay)
112 # if doing MC+MC overlay
113 if flags.Common.isOverlay and flags.Input.isMC:
114 kwargs.setdefault("isMcOverlay", True)
115
116 # cosmics digitization
117 if flags.Beam.Type is BeamType.Cosmics:
118 kwargs.setdefault("UseTriggerTime", True)
119 acc.addEventAlgo(CompFactory.CosTriggerTimeAlg())
120 if flags.Digitization.PileUp or flags.Common.isOverlay:
121 kwargs.setdefault("PileUp", True)
122 kwargs.setdefault("useLArFloat", useLArFloat(flags))
123 if useLArFloat(flags):
124 acc.merge(InputOverwriteCfg("LArHitContainer","LArHitEMB","LArHitFloatContainer","LArHitEMB"))
125 acc.merge(InputOverwriteCfg("LArHitContainer","LArHitEMEC","LArHitFloatContainer","LArHitEMEC"))
126 acc.merge(InputOverwriteCfg("LArHitContainer","LArHitHEC","LArHitFloatContainer","LArHitHEC"))
127 acc.merge(InputOverwriteCfg("LArHitContainer","LArHitFCAL","LArHitFloatContainer","LArHitFCAL"))
128 if flags.Common.isOverlay:
129 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
130 acc.merge(SGInputLoaderCfg(flags, [
131 "LArHitFloatContainer#LArHitEMB",
132 "LArHitFloatContainer#LArHitEMEC",
133 "LArHitFloatContainer#LArHitFCAL",
134 "LArHitFloatContainer#LArHitHEC",
135 ]))
136 else:
137 if flags.Common.isOverlay and not flags.Sim.DoFullChain:
138 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
139 acc.merge(SGInputLoaderCfg(flags, [
140 "LArHitContainer#LArHitEMB",
141 "LArHitContainer#LArHitEMEC",
142 "LArHitContainer#LArHitFCAL",
143 "LArHitContainer#LArHitHEC",
144 ]))
145
146 if flags.Common.isOverlay:
147 kwargs.setdefault("OnlyUseContainerName", False)
148 if flags.Input.isMC:
149 kwargs.setdefault("InputDigitContainer", f"{flags.Overlay.BkgPrefix}LArDigitContainer_MC")
150 else:
151 kwargs.setdefault("InputDigitContainer", f"{flags.Overlay.BkgPrefix}LArDigitContainer_data")
152
153 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
154 acc.merge(SGInputLoaderCfg(flags, [f'LArDigitContainer#{kwargs["InputDigitContainer"]}']))
155 else:
156 kwargs.setdefault("OnlyUseContainerName", flags.Digitization.PileUp)
157 LArPileUpTool = CompFactory.LArPileUpTool
158 acc.setPrivateTools(LArPileUpTool(name, **kwargs))
159 return acc
160
161def LArHitEMapToDigitAlgCfg(flags, name="LArHitEMapToDigitAlg", **kwargs):
162 """Return ComponentAccumulator with configured LArHitEMapToDigitAlg"""
163 acc = LArGMCfg(flags)
164
165 #The LArHitEMapToDigit needs: Noise, fSampl, Pedestal,Shape ADC2MeV
166 # AutoCorrNoise, the list of bad FEBs and the cabling
167 acc.merge(LArADC2MeVCondAlgCfg(flags))
168 acc.merge(LArBadFebCfg(flags))
169 acc.merge(LArBadChannelCfg(flags))
170 if flags.Overlay.DataOverlay:
171 kwargs.setdefault("ShapeKey", "LArShape")
172 #kwargs.setdefault("AutoCorrNoiseKey", "LArAutoCorr")
173 if not flags.Digitization.DoCaloNoise:
174 requiredConditons=["fSampl", "Pedestal", "Shape"]
175 else:
176 requiredConditons=["Noise", "fSampl", "Pedestal", "Shape"]
177 acc.merge(LArElecCalibDBCfg(flags,requiredConditons))
178
179 if not flags.Common.isOverlay:
180 acc.merge(LArAutoCorrNoiseCondAlgCfg(flags))
181 #kwargs.setdefault('AutoCorrNoiseKey','LArAutoCorr')
182
183 if "ProblemsToMask" not in kwargs:
184 kwargs["ProblemsToMask"] = ["deadReadout", "deadPhys"]
185 # defaults
186 if flags.Common.isOverlay:
187 # Some noise needs to be added during MC Overlay
188 # No noise should be added during Data Overlay
189 kwargs.setdefault("NoiseOnOff", not flags.Overlay.DataOverlay)
190 else :
191 kwargs.setdefault("NoiseOnOff", flags.Digitization.DoCaloNoise)
192 kwargs.setdefault("DoDigiTruthReconstruction", flags.Digitization.EnableCaloHSTruthRecoInputs)
193 kwargs.setdefault("RandomSeedOffset", flags.Digitization.RandomSeedOffset)
194 if (not flags.Digitization.HighGainFCal) and (not flags.Common.isOverlay):
195 kwargs.setdefault("HighGainThreshFCAL", 0)
196 kwargs.setdefault("GainRangeFCAL",[int(CaloGain.LARMEDIUMGAIN),int(CaloGain.LARLOWGAIN)])
197 if (not flags.Digitization.HighGainEMECIW) and (not flags.Common.isOverlay):
198 kwargs.setdefault("HighGainThreshEMECIW", 0)
199 kwargs.setdefault("GainRangeEMECIW",[int(CaloGain.LARMEDIUMGAIN),int(CaloGain.LARLOWGAIN)])
200 kwargs.setdefault("RndmEvtOverlay", flags.Common.isOverlay)
201 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
202 kwargs.setdefault("DigitContainer", flags.Overlay.BkgPrefix + "LArDigitContainer_MC")
203 else:
204 kwargs.setdefault("DigitContainer", "LArDigitContainer_MC") # FIXME - should not be hard-coded
205 # if doing MC+MC overlay
206 if flags.Common.isOverlay and flags.Input.isMC:
207 kwargs.setdefault("isMcOverlay", True)
208 kwargs.setdefault("Nsamples", flags.LAr.ROD.nSamples)
209 kwargs.setdefault("firstSample", #Need to set a negative value to include preceeding samples
210 -flags.LAr.ROD.nPreceedingSamples if flags.LAr.ROD.nPreceedingSamples!=0 else flags.LAr.ROD.FirstSample)
211 LArHitEMapToDigitAlg = CompFactory.LArHitEMapToDigitAlg
212 acc.addEventAlgo(LArHitEMapToDigitAlg(name, **kwargs))
213 return acc
214
215def LArOutputCfg(flags):
216 """Return ComponentAccumulator with Output for LAr. Not standalone."""
217 acc = ComponentAccumulator()
218 if flags.Output.doWriteRDO:
219 ItemList = []
220 if flags.Digitization.AddCaloDigi:
221 ItemList.append("LArDigitContainer#*")
222 elif flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
223 ItemList.append("LArDigitContainer#" + flags.Overlay.BkgPrefix + "LArDigitContainer_MC")
224 elif flags.Digitization.AddCaloDigiThinned:
225 ItemList.append("LArDigitContainer#LArDigitContainer_MC_Thinned")
226 if flags.Common.ProductionStep != ProductionStep.PileUpPresampling:
227 ItemList.append("LArRawChannelContainer#LArRawChannels")
228 if flags.Overlay.DataOverlay:
229 ItemList.append("LArFebHeaderContainer#LArFebHeader")
230 if flags.Digitization.EnableTruth:
231 ItemList.append("CaloCalibrationHitContainer#*")
232 acc.merge(TruthDigitizationOutputCfg(flags))
233 acc.merge(OutputStreamCfg(flags, "RDO", ItemList))
234 return acc
235
236
237def LArDigitizationBasicCfg(flags, **kwargs):
238 """Return ComponentAccumulator with LAr digitization configuration"""
239 acc = ComponentAccumulator()
240 if "PileUpTools" not in kwargs:
241 PileUpTools = acc.popToolsAndMerge(LArPileUpToolCfg(flags))
242 kwargs["PileUpTools"] = PileUpTools
243 acc.merge(PileUpToolsCfg(flags, **kwargs))
244
245 acc.merge(LArHitEMapToDigitAlgCfg(flags))
246 if flags.LAr.ROD.NNRawChannelBuilding:
247 acc.merge(LArNNRawChannelBuilderCfg(flags))
248 elif flags.LAr.ROD.OFFCRawChannelBuilding:
249 acc.merge(LArOFFCRawChannelBuilderCfg(flags))
250 else:
251 acc.merge(LArRawChannelBuilderAlgCfg(flags))
252
253 if flags.Digitization.AddCaloDigiThinned:
254 acc.merge(LArDigitThinnerCfg(flags))
255 return acc
256
257
258def LArDigitizationCfg(flags, **kwargs):
259 """Return ComponentAccumulator with LAr digitization and Output"""
260 acc = LArDigitizationBasicCfg(flags, **kwargs)
261 acc.merge(LArOutputCfg(flags))
262 return acc
263
264
265def LArOverlayDigitizationBasicCfg(flags, name="digitmaker1", **kwargs):
266 """Return ComponentAccumulator with LAr Overlay digitization configuration"""
267 acc = ComponentAccumulator()
268
269 if "LArPileUpTool" not in kwargs:
270 kwargs["LArPileUpTool"] = acc.popToolsAndMerge(LArPileUpToolCfg(flags))
271
272 if flags.Concurrency.NumThreads > 0:
273 kwargs.setdefault('Cardinality', flags.Concurrency.NumThreads)
274
275 LArHitEMapMaker = CompFactory.LArHitEMapMaker
276 acc.addEventAlgo(LArHitEMapMaker(name, **kwargs))
277 acc.merge(LArHitEMapToDigitAlgCfg(flags))
278
279 acc.merge(LArRawChannelBuilderAlgCfg(flags))
280 if flags.Digitization.AddCaloDigiThinned:
281 acc.merge(LArDigitThinnerCfg(flags))
282 return acc
283
284
285def LArOverlayCfg(flags, **kwargs):
286 """Return ComponentAccumulator with LAr overlay and Output"""
287 acc = LArOverlayDigitizationBasicCfg(flags, **kwargs)
288 acc.merge(LArOutputCfg(flags))
289 return acc
290
291
292def LArAutoCorrNoiseCondSCAlgCfg(flags, **kwargs):
293 acc = ComponentAccumulator()
294
295 requiredConditions=["AutoCorrSC"]
296 from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBMCSCCfg
297 acc.merge(LArElecCalibDBMCSCCfg(flags,requiredConditions))
298 kwargs.setdefault("LArAutoCorrObjKey", "LArAutoCorrSC") # Provided by LArFlatConditionsAlg<LArAutoCorrSC>
299
300 from LArCabling.LArCablingConfig import LArOnOffIdMappingSCCfg
301 acc.merge(LArOnOffIdMappingSCCfg(flags))
302 kwargs.setdefault("LArOnOffIdMappingObjKey", 'LArOnOffIdMapSC')
303 kwargs.setdefault("nSampl", flags.LAr.ROD.nSamples + 2) # See ATLASSIM-5483
304 kwargs.setdefault("isSuperCell", True)
305 kwargs.setdefault("LArAutoCorrNoiseObjKey", "LArAutoCorrNoiseSC") # output
306 acc.addCondAlgo(CompFactory.LArAutoCorrNoiseCondAlg(name="LArAutoCorrNoiseSCCondAlg", **kwargs))
307 return acc
308
309
310def LArSCL1MakerCfg(flags, **kwargs):
311 """Return ComponentAccumulator for LArSCL1Maker"""
312 acc = ComponentAccumulator()
313 if flags.Common.isOverlay:
314 acc.merge(LArOverlayDigitizationBasicCfg(flags))
315 else:
316 acc.merge(LArDigitizationBasicCfg(flags))
317
318 kwargs.setdefault("LArHitEMapKey", "StoreGateSvc+LArHitEMap") # Provided by LArPileUpTool
319
320 from LArRecUtils.LArADC2MeVSCCondAlgConfig import LArADC2MeVSCCondAlgCfg
321 acc.merge(LArADC2MeVSCCondAlgCfg(flags))
322 kwargs.setdefault("LArADC2MeVKey", "ConditionStore+LArADC2MeVSC") # Provided by LArADC2MeVSCCondAlg
323
324 from LArCabling.LArCablingConfig import LArOnOffIdMappingSCCfg
325 acc.merge(LArOnOffIdMappingSCCfg(flags))
326 # '<prefix>/LAR/IdentifierOfl/OnOffIdMap_SC</prefix> <tag>LARIdentifierOflOnOffIdMap_SC-000</tag>' Do we need to add this override in the IOVDbSvc or just add the conditions properly in the Run3 conditions global tag???
327 kwargs.setdefault("ScCablingKey", "ConditionStore+LArOnOffIdMapSC") # Provided by LArOnOffMappingAlgSC
328
329 requiredConditions=["fSamplSC","ShapeSC","PedestalSC","NoiseSC"]
330 from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBMCSCCfg
331 acc.merge(LArElecCalibDBMCSCCfg(flags,requiredConditions))
332 kwargs.setdefault("FracSKey", "ConditionStore+LArfSamplSC") # Provided by LArFlatConditionsAlg<LArfSamplSC>
333 kwargs.setdefault("ShapeKey", "ConditionStore+LArShapeSC") # Provided by LArFlatConditionsAlg<LArShapeSC>
334 kwargs.setdefault("PedestalKey", "ConditionStore+LArPedestalSC") # Provided by LArFlatConditionsAlg<LArPedestalSC>
335 kwargs.setdefault("LArNoiseKey", "ConditionStore+LArNoiseSC") # Provided by LArFlatConditionsAlg<LArNoiseSC>
336
337 acc.merge(LArAutoCorrNoiseCondSCAlgCfg(flags))
338 kwargs.setdefault("LArAutoCorrKey", "ConditionStore+LArAutoCorrNoiseSC") # Provided by LArAutoCorrNoiseCondAlg/LArAutoCorrNoiseSCCondAlg
339 kwargs.setdefault("NSamples", flags.LAr.ROD.nSamples + 2) # For consistency with LArAutoCorrNoiseSC - see ATLASSIM-5483
340 from RngComps.RngCompsConfig import AthRNGSvcCfg
341 kwargs.setdefault("RndmSvc",
342 acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)))
343 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
344 kwargs.setdefault("SCL1ContainerName", f"{flags.Overlay.BkgPrefix}LArDigitSCL2") # Output - why L2??
345 if flags.Common.isOverlay:
346 kwargs.setdefault("BkgDigitKey", f"{flags.Overlay.BkgPrefix}LArDigitSCL2")
347
348 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
349 acc.merge(SGInputLoaderCfg(flags, [f'LArDigitContainer#{kwargs["BkgDigitKey"]}']))
350 kwargs.setdefault("SCL1ContainerName","LArDigitSCL2") # Output - why L2??
351 acc.addEventAlgo(CompFactory.LArSCL1Maker(**kwargs))
352 return acc
353
354
355def LArTriggerDigitizationBasicCfg(flags, **kwargs):
356 """Return ComponentAccumulator for LAr Trigger Tower"""
357 acc = LArDigitizationBasicCfg(flags)
358 acc.merge(CaloTriggerTowerCfg(flags))
359
360 kwargs.setdefault("NoiseOnOff", flags.Digitization.DoCaloNoise)
361 kwargs.setdefault("RandomSeedOffset", flags.Digitization.RandomSeedOffset)
362 kwargs.setdefault("PileUp", flags.Digitization.PileUp)
363 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
364 kwargs.setdefault("EmTTL1ContainerName", flags.Overlay.BkgPrefix + "LArTTL1EM")
365 kwargs.setdefault("HadTTL1ContainerName", flags.Overlay.BkgPrefix + "LArTTL1HAD")
366 acc.addEventAlgo(CompFactory.LArTTL1Maker(**kwargs))
367 if flags.GeoModel.Run >= LHCPeriod.Run3:
368 acc.merge(LArSCL1MakerCfg(flags))
369 if flags.Common.ProductionStep is not ProductionStep.PileUpPresampling:
370 from LArROD.LArSuperCellBuilderConfig import LArSuperCellBuilderAlgCfg, LArSuperCellBCIDAlgCfg
371 acc.merge(LArSuperCellBuilderAlgCfg(flags))
372 acc.merge(LArSuperCellBCIDAlgCfg(flags))
373 return acc
374
375
376def LArTriggerDigitizationCfg(flags, **kwargs):
377 """Return ComponentAccumulator for LAr Trigger Tower and Output"""
378 acc = LArTriggerDigitizationBasicCfg(flags)
379 acc.merge(LArOutputCfg(flags))
380 acc.merge(OutputStreamCfg(flags, "RDO", ["LArTTL1Container#*"]))
381 if flags.GeoModel.Run >= LHCPeriod.Run3:
382 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
383 acc.merge(OutputStreamCfg(flags, "RDO", ["LArDigitContainer#" + flags.Overlay.BkgPrefix + "LArDigitSCL2"]))
384 else:
385 acc.merge(OutputStreamCfg(flags, "RDO", ["CaloCellContainer#SCell"]))
386 return acc
387
388
389def LArOverlayTriggerDigitizationBasicCfg(flags, **kwargs):
390 """Return ComponentAccumulator with LAr Overlay Trigger Tower"""
391 acc = LArOverlayDigitizationBasicCfg(flags)
392 acc.merge(CaloTriggerTowerCfg(flags))
393
394 kwargs.setdefault("NoiseOnOff", flags.Digitization.DoCaloNoise)
395 kwargs.setdefault("RandomSeedOffset", flags.Digitization.RandomSeedOffset)
396 kwargs.setdefault("PileUp", True)
397 kwargs.setdefault("EmTTL1ContainerName", flags.Overlay.SigPrefix + "LArTTL1EM")
398 kwargs.setdefault("HadTTL1ContainerName", flags.Overlay.SigPrefix + "LArTTL1HAD")
399
400 if flags.Concurrency.NumThreads > 0:
401 kwargs.setdefault('Cardinality', flags.Concurrency.NumThreads)
402
403 acc.addEventAlgo(CompFactory.LArTTL1Maker(**kwargs))
404 return acc
405
406
407def LArSuperCellOverlayCfg(flags, **kwargs):
408 acc = LArSCL1MakerCfg(flags)
409 from LArROD.LArSuperCellBuilderConfig import LArSuperCellBuilderAlgCfg, LArSuperCellBCIDAlgCfg
410 acc.merge(LArSuperCellBuilderAlgCfg(flags))
411 acc.merge(LArSuperCellBCIDAlgCfg(flags))
412 acc.merge(OutputStreamCfg(flags, "RDO", ["CaloCellContainer#SCell"]))
413 return acc
LArRangeEMCfg(flags, name="LArRangeEM", **kwargs)