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.Overlay.IgnoreBkgInputs:
149 kwargs.setdefault("InputDigitContainer", "")
150 elif flags.Input.isMC:
151 kwargs.setdefault("InputDigitContainer", f"{flags.Overlay.BkgPrefix}LArDigitContainer_MC")
152 else:
153 kwargs.setdefault("InputDigitContainer", f"{flags.Overlay.BkgPrefix}LArDigitContainer_data")
154
155 if kwargs["InputDigitContainer"]:
156 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
157 acc.merge(SGInputLoaderCfg(flags, [f'LArDigitContainer#{kwargs["InputDigitContainer"]}']))
158 else:
159 kwargs.setdefault("OnlyUseContainerName", flags.Digitization.PileUp)
160 LArPileUpTool = CompFactory.LArPileUpTool
161 acc.setPrivateTools(LArPileUpTool(name, **kwargs))
162 return acc
163
164def LArHitEMapToDigitAlgCfg(flags, name="LArHitEMapToDigitAlg", **kwargs):
165 """Return ComponentAccumulator with configured LArHitEMapToDigitAlg"""
166 acc = LArGMCfg(flags)
167
168 #The LArHitEMapToDigit needs: Noise, fSampl, Pedestal,Shape ADC2MeV
169 # AutoCorrNoise, the list of bad FEBs and the cabling
170 acc.merge(LArADC2MeVCondAlgCfg(flags))
171 acc.merge(LArBadFebCfg(flags))
172 acc.merge(LArBadChannelCfg(flags))
173 if flags.Overlay.DataOverlay:
174 kwargs.setdefault("ShapeKey", "LArShape")
175 #kwargs.setdefault("AutoCorrNoiseKey", "LArAutoCorr")
176 if not flags.Digitization.DoCaloNoise:
177 requiredConditons=["fSampl", "Pedestal", "Shape"]
178 else:
179 requiredConditons=["Noise", "fSampl", "Pedestal", "Shape"]
180 acc.merge(LArElecCalibDBCfg(flags,requiredConditons))
181
182 if not flags.Common.isOverlay:
183 acc.merge(LArAutoCorrNoiseCondAlgCfg(flags))
184 #kwargs.setdefault('AutoCorrNoiseKey','LArAutoCorr')
185
186 if "ProblemsToMask" not in kwargs:
187 kwargs["ProblemsToMask"] = ["deadReadout", "deadPhys"]
188 # defaults
189 if flags.Common.isOverlay:
190 # Some noise needs to be added during MC Overlay
191 # No noise should be added during Data Overlay
192 kwargs.setdefault("NoiseOnOff", not flags.Overlay.DataOverlay)
193 else :
194 kwargs.setdefault("NoiseOnOff", flags.Digitization.DoCaloNoise)
195 kwargs.setdefault("DoDigiTruthReconstruction", flags.Digitization.EnableCaloHSTruthRecoInputs)
196 kwargs.setdefault("RandomSeedOffset", flags.Digitization.RandomSeedOffset)
197 if (not flags.Digitization.HighGainFCal) and (not flags.Common.isOverlay):
198 kwargs.setdefault("HighGainThreshFCAL", 0)
199 kwargs.setdefault("GainRangeFCAL",[int(CaloGain.LARMEDIUMGAIN),int(CaloGain.LARLOWGAIN)])
200 if (not flags.Digitization.HighGainEMECIW) and (not flags.Common.isOverlay):
201 kwargs.setdefault("HighGainThreshEMECIW", 0)
202 kwargs.setdefault("GainRangeEMECIW",[int(CaloGain.LARMEDIUMGAIN),int(CaloGain.LARLOWGAIN)])
203 kwargs.setdefault("RndmEvtOverlay", flags.Common.isOverlay)
204 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
205 kwargs.setdefault("DigitContainer", flags.Overlay.BkgPrefix + "LArDigitContainer_MC")
206 else:
207 kwargs.setdefault("DigitContainer", "LArDigitContainer_MC") # FIXME - should not be hard-coded
208 # if doing MC+MC overlay
209 if flags.Common.isOverlay and flags.Input.isMC:
210 kwargs.setdefault("isMcOverlay", True)
211 kwargs.setdefault("Nsamples", flags.LAr.ROD.nSamples)
212 kwargs.setdefault("firstSample", #Need to set a negative value to include preceeding samples
213 -flags.LAr.ROD.nPreceedingSamples if flags.LAr.ROD.nPreceedingSamples!=0 else flags.LAr.ROD.FirstSample)
214 LArHitEMapToDigitAlg = CompFactory.LArHitEMapToDigitAlg
215 acc.addEventAlgo(LArHitEMapToDigitAlg(name, **kwargs))
216 return acc
217
218def LArOutputCfg(flags):
219 """Return ComponentAccumulator with Output for LAr. Not standalone."""
220 acc = ComponentAccumulator()
221 if flags.Output.doWriteRDO:
222 ItemList = []
223 if flags.Digitization.AddCaloDigi:
224 ItemList.append("LArDigitContainer#*")
225 elif flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
226 ItemList.append("LArDigitContainer#" + flags.Overlay.BkgPrefix + "LArDigitContainer_MC")
227 elif flags.Digitization.AddCaloDigiThinned:
228 ItemList.append("LArDigitContainer#LArDigitContainer_MC_Thinned")
229 if flags.Common.ProductionStep != ProductionStep.PileUpPresampling:
230 ItemList.append("LArRawChannelContainer#LArRawChannels")
231 if flags.Overlay.DataOverlay:
232 ItemList.append("LArFebHeaderContainer#LArFebHeader")
233 if flags.Digitization.EnableTruth:
234 ItemList.append("CaloCalibrationHitContainer#*")
235 acc.merge(TruthDigitizationOutputCfg(flags))
236 acc.merge(OutputStreamCfg(flags, "RDO", ItemList))
237 return acc
238
239
240def LArDigitizationBasicCfg(flags, **kwargs):
241 """Return ComponentAccumulator with LAr digitization configuration"""
242 acc = ComponentAccumulator()
243 if "PileUpTools" not in kwargs:
244 PileUpTools = acc.popToolsAndMerge(LArPileUpToolCfg(flags))
245 kwargs["PileUpTools"] = PileUpTools
246 acc.merge(PileUpToolsCfg(flags, **kwargs))
247
248 acc.merge(LArHitEMapToDigitAlgCfg(flags))
249 if flags.LAr.ROD.NNRawChannelBuilding:
250 acc.merge(LArNNRawChannelBuilderCfg(flags))
251 elif flags.LAr.ROD.OFFCRawChannelBuilding:
252 acc.merge(LArOFFCRawChannelBuilderCfg(flags))
253 else:
254 acc.merge(LArRawChannelBuilderAlgCfg(flags))
255
256 if flags.Digitization.AddCaloDigiThinned:
257 acc.merge(LArDigitThinnerCfg(flags))
258 return acc
259
260
261def LArDigitizationCfg(flags, **kwargs):
262 """Return ComponentAccumulator with LAr digitization and Output"""
263 acc = LArDigitizationBasicCfg(flags, **kwargs)
264 acc.merge(LArOutputCfg(flags))
265 return acc
266
267
268def LArOverlayDigitizationBasicCfg(flags, name="digitmaker1", **kwargs):
269 """Return ComponentAccumulator with LAr Overlay digitization configuration"""
270 acc = ComponentAccumulator()
271
272 if "LArPileUpTool" not in kwargs:
273 kwargs["LArPileUpTool"] = acc.popToolsAndMerge(LArPileUpToolCfg(flags))
274
275 if flags.Concurrency.NumThreads > 0:
276 kwargs.setdefault('Cardinality', flags.Concurrency.NumThreads)
277
278 LArHitEMapMaker = CompFactory.LArHitEMapMaker
279 acc.addEventAlgo(LArHitEMapMaker(name, **kwargs))
280 acc.merge(LArHitEMapToDigitAlgCfg(flags))
281
282 acc.merge(LArRawChannelBuilderAlgCfg(flags))
283 if flags.Digitization.AddCaloDigiThinned:
284 acc.merge(LArDigitThinnerCfg(flags))
285 return acc
286
287
288def LArOverlayCfg(flags, **kwargs):
289 """Return ComponentAccumulator with LAr overlay and Output"""
290 acc = LArOverlayDigitizationBasicCfg(flags, **kwargs)
291 acc.merge(LArOutputCfg(flags))
292 return acc
293
294
295def LArAutoCorrNoiseCondSCAlgCfg(flags, **kwargs):
296 acc = ComponentAccumulator()
297
298 requiredConditions=["AutoCorrSC"]
299 from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBMCSCCfg
300 acc.merge(LArElecCalibDBMCSCCfg(flags,requiredConditions))
301 kwargs.setdefault("LArAutoCorrObjKey", "LArAutoCorrSC") # Provided by LArFlatConditionsAlg<LArAutoCorrSC>
302
303 from LArCabling.LArCablingConfig import LArOnOffIdMappingSCCfg
304 acc.merge(LArOnOffIdMappingSCCfg(flags))
305 kwargs.setdefault("LArOnOffIdMappingObjKey", 'LArOnOffIdMapSC')
306 kwargs.setdefault("nSampl", flags.LAr.ROD.nSamples + 2) # See ATLASSIM-5483
307 kwargs.setdefault("isSuperCell", True)
308 kwargs.setdefault("LArAutoCorrNoiseObjKey", "LArAutoCorrNoiseSC") # output
309 acc.addCondAlgo(CompFactory.LArAutoCorrNoiseCondAlg(name="LArAutoCorrNoiseSCCondAlg", **kwargs))
310 return acc
311
312
313def LArSCL1MakerCfg(flags, **kwargs):
314 """Return ComponentAccumulator for LArSCL1Maker"""
315 acc = ComponentAccumulator()
316 if flags.Common.isOverlay:
317 acc.merge(LArOverlayDigitizationBasicCfg(flags))
318 else:
319 acc.merge(LArDigitizationBasicCfg(flags))
320
321 kwargs.setdefault("LArHitEMapKey", "StoreGateSvc+LArHitEMap") # Provided by LArPileUpTool
322
323 from LArRecUtils.LArADC2MeVSCCondAlgConfig import LArADC2MeVSCCondAlgCfg
324 acc.merge(LArADC2MeVSCCondAlgCfg(flags))
325 kwargs.setdefault("LArADC2MeVKey", "ConditionStore+LArADC2MeVSC") # Provided by LArADC2MeVSCCondAlg
326
327 from LArCabling.LArCablingConfig import LArOnOffIdMappingSCCfg
328 acc.merge(LArOnOffIdMappingSCCfg(flags))
329 # '<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???
330 kwargs.setdefault("ScCablingKey", "ConditionStore+LArOnOffIdMapSC") # Provided by LArOnOffMappingAlgSC
331
332 requiredConditions=["fSamplSC","ShapeSC","PedestalSC","NoiseSC"]
333 from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBMCSCCfg
334 acc.merge(LArElecCalibDBMCSCCfg(flags,requiredConditions))
335 kwargs.setdefault("FracSKey", "ConditionStore+LArfSamplSC") # Provided by LArFlatConditionsAlg<LArfSamplSC>
336 kwargs.setdefault("ShapeKey", "ConditionStore+LArShapeSC") # Provided by LArFlatConditionsAlg<LArShapeSC>
337 kwargs.setdefault("PedestalKey", "ConditionStore+LArPedestalSC") # Provided by LArFlatConditionsAlg<LArPedestalSC>
338 kwargs.setdefault("LArNoiseKey", "ConditionStore+LArNoiseSC") # Provided by LArFlatConditionsAlg<LArNoiseSC>
339
340 acc.merge(LArAutoCorrNoiseCondSCAlgCfg(flags))
341 kwargs.setdefault("LArAutoCorrKey", "ConditionStore+LArAutoCorrNoiseSC") # Provided by LArAutoCorrNoiseCondAlg/LArAutoCorrNoiseSCCondAlg
342 kwargs.setdefault("NSamples", flags.LAr.ROD.nSamples + 2) # For consistency with LArAutoCorrNoiseSC - see ATLASSIM-5483
343 from RngComps.RngCompsConfig import AthRNGSvcCfg
344 kwargs.setdefault("RndmSvc",
345 acc.getPrimaryAndMerge(AthRNGSvcCfg(flags)))
346 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
347 kwargs.setdefault("SCL1ContainerName", f"{flags.Overlay.BkgPrefix}LArDigitSCL2") # Output - why L2??
348 if flags.Common.isOverlay:
349 kwargs.setdefault("BkgDigitKey", f"{flags.Overlay.BkgPrefix}LArDigitSCL2")
350
351 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
352 acc.merge(SGInputLoaderCfg(flags, [f'LArDigitContainer#{kwargs["BkgDigitKey"]}']))
353 kwargs.setdefault("SCL1ContainerName","LArDigitSCL2") # Output - why L2??
354 acc.addEventAlgo(CompFactory.LArSCL1Maker(**kwargs))
355 return acc
356
357
358def LArTriggerDigitizationBasicCfg(flags, **kwargs):
359 """Return ComponentAccumulator for LAr Trigger Tower"""
360 acc = LArDigitizationBasicCfg(flags)
361 acc.merge(CaloTriggerTowerCfg(flags))
362
363 kwargs.setdefault("NoiseOnOff", flags.Digitization.DoCaloNoise)
364 kwargs.setdefault("RandomSeedOffset", flags.Digitization.RandomSeedOffset)
365 kwargs.setdefault("PileUp", flags.Digitization.PileUp)
366 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
367 kwargs.setdefault("EmTTL1ContainerName", flags.Overlay.BkgPrefix + "LArTTL1EM")
368 kwargs.setdefault("HadTTL1ContainerName", flags.Overlay.BkgPrefix + "LArTTL1HAD")
369 acc.addEventAlgo(CompFactory.LArTTL1Maker(**kwargs))
370 if flags.GeoModel.Run >= LHCPeriod.Run3:
371 acc.merge(LArSCL1MakerCfg(flags))
372 if flags.Common.ProductionStep is not ProductionStep.PileUpPresampling:
373 from LArROD.LArSuperCellBuilderConfig import LArSuperCellBuilderAlgCfg, LArSuperCellBCIDAlgCfg
374 acc.merge(LArSuperCellBuilderAlgCfg(flags))
375 acc.merge(LArSuperCellBCIDAlgCfg(flags))
376 return acc
377
378
379def LArTriggerDigitizationCfg(flags, **kwargs):
380 """Return ComponentAccumulator for LAr Trigger Tower and Output"""
381 acc = LArTriggerDigitizationBasicCfg(flags)
382 acc.merge(LArOutputCfg(flags))
383 acc.merge(OutputStreamCfg(flags, "RDO", ["LArTTL1Container#*"]))
384 if flags.GeoModel.Run >= LHCPeriod.Run3:
385 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
386 acc.merge(OutputStreamCfg(flags, "RDO", ["LArDigitContainer#" + flags.Overlay.BkgPrefix + "LArDigitSCL2"]))
387 else:
388 acc.merge(OutputStreamCfg(flags, "RDO", ["CaloCellContainer#SCell"]))
389 return acc
390
391
392def LArOverlayTriggerDigitizationBasicCfg(flags, **kwargs):
393 """Return ComponentAccumulator with LAr Overlay Trigger Tower"""
394 acc = LArOverlayDigitizationBasicCfg(flags)
395 acc.merge(CaloTriggerTowerCfg(flags))
396
397 kwargs.setdefault("NoiseOnOff", flags.Digitization.DoCaloNoise)
398 kwargs.setdefault("RandomSeedOffset", flags.Digitization.RandomSeedOffset)
399 kwargs.setdefault("PileUp", True)
400 kwargs.setdefault("EmTTL1ContainerName", flags.Overlay.SigPrefix + "LArTTL1EM")
401 kwargs.setdefault("HadTTL1ContainerName", flags.Overlay.SigPrefix + "LArTTL1HAD")
402
403 if flags.Concurrency.NumThreads > 0:
404 kwargs.setdefault('Cardinality', flags.Concurrency.NumThreads)
405
406 acc.addEventAlgo(CompFactory.LArTTL1Maker(**kwargs))
407 return acc
408
409
410def LArSuperCellOverlayCfg(flags, **kwargs):
411 acc = LArSCL1MakerCfg(flags)
412 from LArROD.LArSuperCellBuilderConfig import LArSuperCellBuilderAlgCfg, LArSuperCellBCIDAlgCfg
413 acc.merge(LArSuperCellBuilderAlgCfg(flags))
414 acc.merge(LArSuperCellBCIDAlgCfg(flags))
415 acc.merge(OutputStreamCfg(flags, "RDO", ["CaloCellContainer#SCell"]))
416 return acc
LArRangeEMCfg(flags, name="LArRangeEM", **kwargs)