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-2022 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 DigitizationConfig.TruthDigitizationOutputConfig import TruthDigitizationOutputCfg
24# for Trigger Tower
25from CaloConditions.CaloConditionsConfig import CaloTriggerTowerCfg
26from SGComps.AddressRemappingConfig import InputOverwriteCfg
27
28# Enum of CaloGains
29from ROOT.CaloGain import CaloGain
30
31
32
33def useLArFloat(flags):
34 """Return bool for simplified transient LArHit with float E,time"""
35 # temporary, remapping to LArHitFloat does not seeem to work
36 # with this scheme... => larger memory usage
37 if flags.Digitization.DoXingByXingPileUp or flags.Common.isOverlay:
38 return False
39 # check for fast chain, running digitisation from hits in memory
40 if flags.Sim.DoFullChain:
41 return False
42 return False
43
44
45def LArRangeEMCfg(flags, name="LArRangeEM", **kwargs):
46 """Return a PileUpXingFoldertool for ElectroMagnetic calorimeter"""
47 # bunch crossing range in ns
48 kwargs.setdefault("FirstXing", -751)
49 kwargs.setdefault("LastXing", 101)
50 if useLArFloat(flags):
51 kwargs.setdefault("ItemList", ["LArHitFloatContainer#LArHitEMB",
52 "LArHitFloatContainer#LArHitEMEC"])
53 else:
54 kwargs.setdefault("ItemList", ["LArHitContainer#LArHitEMB",
55 "LArHitContainer#LArHitEMEC"])
56 return PileUpXingFolderCfg(flags, name, **kwargs)
57
58
59def LArRangeHECCfg(flags, name="LArRangeHEC", **kwargs):
60 """Return a PileUpXingFoldertool for Hadronic End-Cap"""
61 # bunch crossing range in ns
62 kwargs.setdefault("FirstXing", -676)
63 kwargs.setdefault("LastXing", 101)
64 if useLArFloat(flags):
65 kwargs.setdefault("ItemList", ["LArHitFloatContainer#LArHitHEC"])
66 else:
67 kwargs.setdefault("ItemList", ["LArHitContainer#LArHitHEC"])
68 return PileUpXingFolderCfg(flags, name, **kwargs)
69
70
71def LArRangeFCALCfg(flags, name="LArRangeFCAL", **kwargs):
72 """Return a PileUpXingFoldertool for Forward Calorimeters"""
73 # bunch crossing range in ns
74 kwargs.setdefault("FirstXing", -551)
75 kwargs.setdefault("LastXing", 101)
76 if useLArFloat(flags):
77 kwargs.setdefault("ItemList", ["LArHitFloatContainer#LArHitFCAL"])
78 else:
79 kwargs.setdefault("ItemList", ["LArHitContainer#LArHitFCAL"])
80 return PileUpXingFolderCfg(flags, name, **kwargs)
81
82
83def LArPileUpToolCfg(flags, name="LArPileUpTool", **kwargs):
84 """Return ComponentAccumulator with configured LArPileUpTool"""
85 acc = LArGMCfg(flags)
86
87 # add new conditions for LArXTalkWeight
88 acc.merge(LArXTalkWeightCondAlgCfg(flags))
89
90 # defaults
91 if flags.Common.isOverlay:
92 # Some noise needs to be added during MC Overlay
93 # No noise should be added during Data Overlay
94 kwargs.setdefault("NoiseOnOff", not flags.Overlay.DataOverlay)
95 kwargs.setdefault("NoiseOnOff", flags.Digitization.DoCaloNoise) # For other jobs go with the noise flag setting.
96 kwargs.setdefault("DoDigiTruthReconstruction", flags.Digitization.EnableCaloHSTruthRecoInputs)
97 kwargs.setdefault("RandomSeedOffset", flags.Digitization.RandomSeedOffset)
98 if flags.Digitization.PileUp:
99 intervals = []
100 if flags.Digitization.DoXingByXingPileUp:
101 kwargs.setdefault("FirstXing", -751)
102 kwargs.setdefault("LastXing", 101)
103 else:
104 intervals += [acc.popToolsAndMerge(LArRangeEMCfg(flags))]
105 intervals += [acc.popToolsAndMerge(LArRangeHECCfg(flags))]
106 intervals += [acc.popToolsAndMerge(LArRangeFCALCfg(flags))]
107 kwargs.setdefault("PileUpMergeSvc", acc.getPrimaryAndMerge(PileUpMergeSvcCfg(flags, Intervals=intervals)))
108 else:
109 kwargs.setdefault("PileUpMergeSvc", '')
110 kwargs.setdefault("RndmEvtOverlay", flags.Common.isOverlay)
111 # if doing MC+MC overlay
112 if flags.Common.isOverlay and flags.Input.isMC:
113 kwargs.setdefault("isMcOverlay", True)
114
115 # cosmics digitization
116 if flags.Beam.Type is BeamType.Cosmics:
117 kwargs.setdefault("UseTriggerTime", True)
118 acc.addEventAlgo(CompFactory.CosTriggerTimeAlg())
119 if flags.Digitization.PileUp or flags.Common.isOverlay:
120 kwargs.setdefault("PileUp", True)
121 kwargs.setdefault("useLArFloat", useLArFloat(flags))
122 if useLArFloat(flags):
123 acc.merge(InputOverwriteCfg("LArHitContainer","LArHitEMB","LArHitFloatContainer","LArHitEMB"))
124 acc.merge(InputOverwriteCfg("LArHitContainer","LArHitEMEC","LArHitFloatContainer","LArHitEMEC"))
125 acc.merge(InputOverwriteCfg("LArHitContainer","LArHitHEC","LArHitFloatContainer","LArHitHEC"))
126 acc.merge(InputOverwriteCfg("LArHitContainer","LArHitFCAL","LArHitFloatContainer","LArHitFCAL"))
127 if flags.Common.isOverlay:
128 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
129 acc.merge(SGInputLoaderCfg(flags, [
130 "LArHitFloatContainer#LArHitEMB",
131 "LArHitFloatContainer#LArHitEMEC",
132 "LArHitFloatContainer#LArHitFCAL",
133 "LArHitFloatContainer#LArHitHEC",
134 ]))
135 else:
136 if flags.Common.isOverlay and not flags.Sim.DoFullChain:
137 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
138 acc.merge(SGInputLoaderCfg(flags, [
139 "LArHitContainer#LArHitEMB",
140 "LArHitContainer#LArHitEMEC",
141 "LArHitContainer#LArHitFCAL",
142 "LArHitContainer#LArHitHEC",
143 ]))
144
145 if flags.Common.isOverlay:
146 kwargs.setdefault("OnlyUseContainerName", False)
147 if flags.Overlay.ByteStream:
148 from LArByteStream.LArRawDataReadingConfig import LArRawDataReadingCfg
149 acc.merge(LArRawDataReadingCfg(flags))
150
151 kwargs.setdefault("InputDigitContainer", f"{flags.Overlay.BkgPrefix}FREE")
152 else:
153 if flags.Input.isMC:
154 kwargs.setdefault("InputDigitContainer", f"{flags.Overlay.BkgPrefix}LArDigitContainer_MC")
155 else:
156 kwargs.setdefault("InputDigitContainer", f"{flags.Overlay.BkgPrefix}LArDigitContainer_data")
157
158 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
159 acc.merge(SGInputLoaderCfg(flags, [f'LArDigitContainer#{kwargs["InputDigitContainer"]}']))
160 else:
161 kwargs.setdefault("OnlyUseContainerName", flags.Digitization.PileUp)
162 LArPileUpTool = CompFactory.LArPileUpTool
163 acc.setPrivateTools(LArPileUpTool(name, **kwargs))
164 return acc
165
166def LArHitEMapToDigitAlgCfg(flags, name="LArHitEMapToDigitAlg", **kwargs):
167 """Return ComponentAccumulator with configured LArHitEMapToDigitAlg"""
168 acc = LArGMCfg(flags)
169
170 #The LArHitEMapToDigit needs: Noise, fSampl, Pedestal,Shape ADC2MeV
171 # AutoCorrNoise, the list of bad FEBs and the cabling
172 acc.merge(LArADC2MeVCondAlgCfg(flags))
173 acc.merge(LArBadFebCfg(flags))
174 acc.merge(LArBadChannelCfg(flags))
175 if flags.Overlay.DataOverlay:
176 kwargs.setdefault("ShapeKey", "LArShape")
177 #kwargs.setdefault("AutoCorrNoiseKey", "LArAutoCorr")
178 if not flags.Digitization.DoCaloNoise:
179 requiredConditons=["fSampl", "Pedestal", "Shape"]
180 else:
181 requiredConditons=["Noise", "fSampl", "Pedestal", "Shape"]
182 acc.merge(LArElecCalibDBCfg(flags,requiredConditons))
183
184 if not flags.Common.isOverlay:
185 acc.merge(LArAutoCorrNoiseCondAlgCfg(flags))
186 #kwargs.setdefault('AutoCorrNoiseKey','LArAutoCorr')
187
188 if "ProblemsToMask" not in kwargs:
189 kwargs["ProblemsToMask"] = ["deadReadout", "deadPhys"]
190 # defaults
191 if flags.Common.isOverlay:
192 # Some noise needs to be added during MC Overlay
193 # No noise should be added during Data Overlay
194 kwargs.setdefault("NoiseOnOff", not flags.Overlay.DataOverlay)
195 else :
196 kwargs.setdefault("NoiseOnOff", flags.Digitization.DoCaloNoise)
197 kwargs.setdefault("DoDigiTruthReconstruction", flags.Digitization.EnableCaloHSTruthRecoInputs)
198 kwargs.setdefault("RandomSeedOffset", flags.Digitization.RandomSeedOffset)
199 if (not flags.Digitization.HighGainFCal) and (not flags.Common.isOverlay):
200 kwargs.setdefault("HighGainThreshFCAL", 0)
201 kwargs.setdefault("GainRangeFCAL",[int(CaloGain.LARMEDIUMGAIN),int(CaloGain.LARLOWGAIN)])
202 if (not flags.Digitization.HighGainEMECIW) and (not flags.Common.isOverlay):
203 kwargs.setdefault("HighGainThreshEMECIW", 0)
204 kwargs.setdefault("GainRangeEMECIW",[int(CaloGain.LARMEDIUMGAIN),int(CaloGain.LARLOWGAIN)])
205 kwargs.setdefault("RndmEvtOverlay", flags.Common.isOverlay)
206 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
207 kwargs.setdefault("DigitContainer", flags.Overlay.BkgPrefix + "LArDigitContainer_MC")
208 else:
209 kwargs.setdefault("DigitContainer", "LArDigitContainer_MC") # FIXME - should not be hard-coded
210 # if doing MC+MC overlay
211 if flags.Common.isOverlay and flags.Input.isMC:
212 kwargs.setdefault("isMcOverlay", True)
213 kwargs.setdefault("Nsamples", flags.LAr.ROD.nSamples)
214 kwargs.setdefault("firstSample", #Need to set a negative value to include preceeding samples
215 -flags.LAr.ROD.nPreceedingSamples if flags.LAr.ROD.nPreceedingSamples!=0 else flags.LAr.ROD.FirstSample)
216 LArHitEMapToDigitAlg = CompFactory.LArHitEMapToDigitAlg
217 acc.addEventAlgo(LArHitEMapToDigitAlg(name, **kwargs))
218 return acc
219
220def LArOutputCfg(flags):
221 """Return ComponentAccumulator with Output for LAr. Not standalone."""
222 acc = ComponentAccumulator()
223 if flags.Output.doWriteRDO:
224 ItemList = []
225 if flags.Digitization.AddCaloDigi:
226 ItemList.append("LArDigitContainer#*")
227 elif flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
228 ItemList.append("LArDigitContainer#" + flags.Overlay.BkgPrefix + "LArDigitContainer_MC")
229 elif flags.Digitization.AddCaloDigiThinned:
230 ItemList.append("LArDigitContainer#LArDigitContainer_MC_Thinned")
231 if flags.Common.ProductionStep != ProductionStep.PileUpPresampling:
232 ItemList.append("LArRawChannelContainer#LArRawChannels")
233 if flags.Overlay.DataOverlay:
234 ItemList.append("LArFebHeaderContainer#LArFebHeader")
235 if flags.Digitization.EnableTruth:
236 ItemList.append("CaloCalibrationHitContainer#*")
237 acc.merge(TruthDigitizationOutputCfg(flags))
238 acc.merge(OutputStreamCfg(flags, "RDO", ItemList))
239 return acc
240
241
242def LArDigitizationBasicCfg(flags, **kwargs):
243 """Return ComponentAccumulator with LAr digitization configuration"""
244 acc = ComponentAccumulator()
245 if "PileUpTools" not in kwargs:
246 PileUpTools = acc.popToolsAndMerge(LArPileUpToolCfg(flags))
247 kwargs["PileUpTools"] = PileUpTools
248 acc.merge(PileUpToolsCfg(flags, **kwargs))
249
250 acc.merge(LArHitEMapToDigitAlgCfg(flags))
251 if flags.LAr.ROD.NNRawChannelBuilding:
252 acc.merge(LArNNRawChannelBuilderCfg(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)