1 """Define functions for LAr Digitization with ComponentAccumulator
3 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
6 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
7 from AthenaConfiguration.ComponentFactory
import CompFactory
8 from AthenaConfiguration.Enums
import BeamType, LHCPeriod, ProductionStep
9 from OutputStreamAthenaPool.OutputStreamConfig
import OutputStreamCfg
11 from LArGeoAlgsNV.LArGMConfig
import LArGMCfg
12 from LArRecUtils.LArADC2MeVCondAlgConfig
import LArADC2MeVCondAlgCfg
13 from LArRecUtils.LArXTalkWeightCondAlgConfig
import LArXTalkWeightCondAlgCfg
14 from LArRecUtils.LArRecUtilsConfig
import LArAutoCorrNoiseCondAlgCfg
15 from LArBadChannelTool.LArBadChannelConfig
import LArBadFebCfg,LArBadChannelCfg
16 from LArConfiguration.LArElecCalibDBConfig
import LArElecCalibDBCfg
17 from DigitizationConfig.PileUpToolsConfig
import PileUpToolsCfg
18 from DigitizationConfig.PileUpMergeSvcConfig
import PileUpMergeSvcCfg, PileUpXingFolderCfg
20 from LArROD.LArRawChannelBuilderAlgConfig
import LArRawChannelBuilderAlgCfg
21 from LArROD.LArDigitThinnerConfig
import LArDigitThinnerCfg
22 from LArROD.LArNNChannelBuilder
import LArNNRawChannelBuilderCfg
23 from DigitizationConfig.TruthDigitizationOutputConfig
import TruthDigitizationOutputCfg
25 from CaloConditions.CaloConditionsConfig
import CaloTriggerTowerCfg
26 from SGComps.AddressRemappingConfig
import InputOverwriteCfg
29 """Return bool for simplified transient LArHit with float E,time"""
32 if flags.Digitization.DoXingByXingPileUp
or flags.Common.isOverlay:
35 if flags.Sim.DoFullChain:
41 """Return a PileUpXingFoldertool for ElectroMagnetic calorimeter"""
43 kwargs.setdefault(
"FirstXing", -751)
44 kwargs.setdefault(
"LastXing", 101)
46 kwargs.setdefault(
"ItemList", [
"LArHitFloatContainer#LArHitEMB",
47 "LArHitFloatContainer#LArHitEMEC"])
49 kwargs.setdefault(
"ItemList", [
"LArHitContainer#LArHitEMB",
50 "LArHitContainer#LArHitEMEC"])
55 """Return a PileUpXingFoldertool for Hadronic End-Cap"""
57 kwargs.setdefault(
"FirstXing", -676)
58 kwargs.setdefault(
"LastXing", 101)
60 kwargs.setdefault(
"ItemList", [
"LArHitFloatContainer#LArHitHEC"])
62 kwargs.setdefault(
"ItemList", [
"LArHitContainer#LArHitHEC"])
67 """Return a PileUpXingFoldertool for Forward Calorimeters"""
69 kwargs.setdefault(
"FirstXing", -551)
70 kwargs.setdefault(
"LastXing", 101)
72 kwargs.setdefault(
"ItemList", [
"LArHitFloatContainer#LArHitFCAL"])
74 kwargs.setdefault(
"ItemList", [
"LArHitContainer#LArHitFCAL"])
79 """Return ComponentAccumulator with configured LArPileUpTool"""
86 if flags.Common.isOverlay:
89 kwargs.setdefault(
"NoiseOnOff",
not flags.Overlay.DataOverlay)
90 kwargs.setdefault(
"NoiseOnOff", flags.Digitization.DoCaloNoise)
91 kwargs.setdefault(
"DoDigiTruthReconstruction", flags.Digitization.EnableCaloHSTruthRecoInputs)
92 kwargs.setdefault(
"RandomSeedOffset", flags.Digitization.RandomSeedOffset)
93 if flags.Digitization.PileUp:
95 if flags.Digitization.DoXingByXingPileUp:
96 kwargs.setdefault(
"FirstXing", -751)
97 kwargs.setdefault(
"LastXing", 101)
102 kwargs.setdefault(
"PileUpMergeSvc", acc.getPrimaryAndMerge(
PileUpMergeSvcCfg(flags, Intervals=intervals)).name)
104 kwargs.setdefault(
"PileUpMergeSvc",
'')
105 kwargs.setdefault(
"RndmEvtOverlay", flags.Common.isOverlay)
107 if flags.Common.isOverlay
and flags.Input.isMC:
108 kwargs.setdefault(
"isMcOverlay",
True)
111 if flags.Beam.Type
is BeamType.Cosmics:
112 kwargs.setdefault(
"UseTriggerTime",
True)
113 acc.addEventAlgo(CompFactory.CosTriggerTimeAlg())
114 if flags.Digitization.PileUp
or flags.Common.isOverlay:
115 kwargs.setdefault(
"PileUp",
True)
116 kwargs.setdefault(
"useLArFloat",
useLArFloat(flags))
118 acc.merge(
InputOverwriteCfg(
"LArHitContainer",
"LArHitEMB",
"LArHitFloatContainer",
"LArHitEMB"))
119 acc.merge(
InputOverwriteCfg(
"LArHitContainer",
"LArHitEMEC",
"LArHitFloatContainer",
"LArHitEMEC"))
120 acc.merge(
InputOverwriteCfg(
"LArHitContainer",
"LArHitHEC",
"LArHitFloatContainer",
"LArHitHEC"))
121 acc.merge(
InputOverwriteCfg(
"LArHitContainer",
"LArHitFCAL",
"LArHitFloatContainer",
"LArHitFCAL"))
122 if flags.Common.isOverlay:
123 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
125 "LArHitFloatContainer#LArHitEMB",
126 "LArHitFloatContainer#LArHitEMEC",
127 "LArHitFloatContainer#LArHitFCAL",
128 "LArHitFloatContainer#LArHitHEC",
131 if flags.Common.isOverlay
and not flags.Sim.DoFullChain:
132 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
134 "LArHitContainer#LArHitEMB",
135 "LArHitContainer#LArHitEMEC",
136 "LArHitContainer#LArHitFCAL",
137 "LArHitContainer#LArHitHEC",
140 if flags.Common.isOverlay:
141 kwargs.setdefault(
"OnlyUseContainerName",
False)
142 if flags.Overlay.ByteStream:
143 from LArByteStream.LArRawDataReadingConfig
import LArRawDataReadingCfg
146 kwargs.setdefault(
"InputDigitContainer", f
"{flags.Overlay.BkgPrefix}FREE")
149 kwargs.setdefault(
"InputDigitContainer", f
"{flags.Overlay.BkgPrefix}LArDigitContainer_MC")
151 kwargs.setdefault(
"InputDigitContainer", f
"{flags.Overlay.BkgPrefix}LArDigitContainer_data")
153 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
154 acc.merge(
SGInputLoaderCfg(flags, [f
'LArDigitContainer#{kwargs["InputDigitContainer"]}']))
156 kwargs.setdefault(
"OnlyUseContainerName", flags.Digitization.PileUp)
157 LArPileUpTool = CompFactory.LArPileUpTool
162 """Return ComponentAccumulator with configured LArHitEMapToDigitAlg"""
170 if flags.Overlay.DataOverlay:
171 kwargs.setdefault(
"ShapeKey",
"LArShape")
173 if not flags.Digitization.DoCaloNoise:
174 requiredConditons=[
"fSampl",
"Pedestal",
"Shape"]
176 requiredConditons=[
"Noise",
"fSampl",
"Pedestal",
"Shape"]
179 if not flags.Common.isOverlay:
183 if "ProblemsToMask" not in kwargs:
184 kwargs[
"ProblemsToMask"] = [
"deadReadout",
"deadPhys"]
186 if flags.Common.isOverlay:
189 kwargs.setdefault(
"NoiseOnOff",
not flags.Overlay.DataOverlay)
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 if (
not flags.Digitization.HighGainEMECIW)
and (
not flags.Common.isOverlay):
197 kwargs.setdefault(
"HighGainThreshEMECIW", 0)
198 kwargs.setdefault(
"RndmEvtOverlay", flags.Common.isOverlay)
199 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
200 kwargs.setdefault(
"DigitContainer", flags.Overlay.BkgPrefix +
"LArDigitContainer_MC")
202 kwargs.setdefault(
"DigitContainer",
"LArDigitContainer_MC")
204 if flags.Common.isOverlay
and flags.Input.isMC:
205 kwargs.setdefault(
"isMcOverlay",
True)
206 kwargs.setdefault(
"Nsamples", flags.LAr.ROD.nSamples)
207 kwargs.setdefault(
"firstSample",
208 -flags.LAr.ROD.nPreceedingSamples
if flags.LAr.ROD.nPreceedingSamples!=0
else flags.LAr.ROD.FirstSample)
209 LArHitEMapToDigitAlg = CompFactory.LArHitEMapToDigitAlg
214 """Return ComponentAccumulator with Output for LAr. Not standalone."""
216 if flags.Output.doWriteRDO:
218 if flags.Digitization.AddCaloDigi:
219 ItemList.append(
"LArDigitContainer#*")
220 elif flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
221 ItemList.append(
"LArDigitContainer#" + flags.Overlay.BkgPrefix +
"LArDigitContainer_MC")
222 elif flags.Digitization.AddCaloDigiThinned:
223 ItemList.append(
"LArDigitContainer#LArDigitContainer_MC_Thinned")
224 if flags.Common.ProductionStep != ProductionStep.PileUpPresampling:
225 ItemList.append(
"LArRawChannelContainer#LArRawChannels")
226 if flags.Overlay.DataOverlay:
227 ItemList.append(
"LArFebHeaderContainer#LArFebHeader")
228 if flags.Digitization.EnableTruth:
229 ItemList.append(
"CaloCalibrationHitContainer#*")
236 """Return ComponentAccumulator with LAr digitization configuration"""
238 if "PileUpTools" not in kwargs:
240 kwargs[
"PileUpTools"] = PileUpTools
244 if flags.LAr.ROD.NNRawChannelBuilding:
249 if flags.Digitization.AddCaloDigiThinned:
255 """Return ComponentAccumulator with LAr digitization and Output"""
262 """Return ComponentAccumulator with LAr Overlay digitization configuration"""
265 if "LArPileUpTool" not in kwargs:
268 if flags.Concurrency.NumThreads > 0:
269 kwargs.setdefault(
'Cardinality', flags.Concurrency.NumThreads)
271 LArHitEMapMaker = CompFactory.LArHitEMapMaker
276 if flags.Digitization.AddCaloDigiThinned:
282 """Return ComponentAccumulator with LAr overlay and Output"""
291 requiredConditions=[
"AutoCorrSC"]
292 from LArConfiguration.LArElecCalibDBConfig
import LArElecCalibDBMCSCCfg
294 kwargs.setdefault(
"LArAutoCorrObjKey",
"LArAutoCorrSC")
296 from LArCabling.LArCablingConfig
import LArOnOffIdMappingSCCfg
298 kwargs.setdefault(
"LArOnOffIdMappingObjKey",
'LArOnOffIdMapSC')
299 kwargs.setdefault(
"nSampl", flags.LAr.ROD.nSamples + 2)
300 kwargs.setdefault(
"isSuperCell",
True)
301 kwargs.setdefault(
"LArAutoCorrNoiseObjKey",
"LArAutoCorrNoiseSC")
302 acc.addCondAlgo(CompFactory.LArAutoCorrNoiseCondAlg(name=
"LArAutoCorrNoiseSCCondAlg", **kwargs))
307 """Return ComponentAccumulator for LArSCL1Maker"""
309 if flags.Common.isOverlay:
314 kwargs.setdefault(
"LArHitEMapKey",
"StoreGateSvc+LArHitEMap")
316 from LArRecUtils.LArADC2MeVSCCondAlgConfig
import LArADC2MeVSCCondAlgCfg
318 kwargs.setdefault(
"LArADC2MeVKey",
"ConditionStore+LArADC2MeVSC")
320 from LArCabling.LArCablingConfig
import LArOnOffIdMappingSCCfg
323 kwargs.setdefault(
"ScCablingKey",
"ConditionStore+LArOnOffIdMapSC")
325 requiredConditions=[
"fSamplSC",
"ShapeSC",
"PedestalSC",
"NoiseSC"]
326 from LArConfiguration.LArElecCalibDBConfig
import LArElecCalibDBMCSCCfg
328 kwargs.setdefault(
"FracSKey",
"ConditionStore+LArfSamplSC")
329 kwargs.setdefault(
"ShapeKey",
"ConditionStore+LArShapeSC")
330 kwargs.setdefault(
"PedestalKey",
"ConditionStore+LArPedestalSC")
331 kwargs.setdefault(
"LArNoiseKey",
"ConditionStore+LArNoiseSC")
334 kwargs.setdefault(
"LArAutoCorrKey",
"ConditionStore+LArAutoCorrNoiseSC")
335 kwargs.setdefault(
"NSamples", flags.LAr.ROD.nSamples + 2)
336 from RngComps.RngCompsConfig
import AthRNGSvcCfg
337 kwargs.setdefault(
"RndmSvc",
339 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
340 kwargs.setdefault(
"SCL1ContainerName", f
"{flags.Overlay.BkgPrefix}LArDigitSCL2")
341 if flags.Common.isOverlay:
342 kwargs.setdefault(
"BkgDigitKey", f
"{flags.Overlay.BkgPrefix}LArDigitSCL2")
344 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
345 acc.merge(
SGInputLoaderCfg(flags, [f
'LArDigitContainer#{kwargs["BkgDigitKey"]}']))
346 kwargs.setdefault(
"SCL1ContainerName",
"LArDigitSCL2")
347 acc.addEventAlgo(CompFactory.LArSCL1Maker(**kwargs))
352 """Return ComponentAccumulator for LAr Trigger Tower"""
356 kwargs.setdefault(
"NoiseOnOff", flags.Digitization.DoCaloNoise)
357 kwargs.setdefault(
"RandomSeedOffset", flags.Digitization.RandomSeedOffset)
358 kwargs.setdefault(
"PileUp", flags.Digitization.PileUp)
359 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
360 kwargs.setdefault(
"EmTTL1ContainerName", flags.Overlay.BkgPrefix +
"LArTTL1EM")
361 kwargs.setdefault(
"HadTTL1ContainerName", flags.Overlay.BkgPrefix +
"LArTTL1HAD")
362 acc.addEventAlgo(CompFactory.LArTTL1Maker(**kwargs))
363 if flags.GeoModel.Run >= LHCPeriod.Run3:
365 if flags.Common.ProductionStep
is not ProductionStep.PileUpPresampling:
366 from LArROD.LArSuperCellBuilderConfig
import LArSuperCellBuilderAlgCfg, LArSuperCellBCIDAlgCfg
373 """Return ComponentAccumulator for LAr Trigger Tower and Output"""
377 if flags.GeoModel.Run >= LHCPeriod.Run3:
378 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
379 acc.merge(
OutputStreamCfg(flags,
"RDO", [
"LArDigitContainer#" + flags.Overlay.BkgPrefix +
"LArDigitSCL2"]))
386 """Return ComponentAccumulator with LAr Overlay Trigger Tower"""
390 kwargs.setdefault(
"NoiseOnOff", flags.Digitization.DoCaloNoise)
391 kwargs.setdefault(
"RandomSeedOffset", flags.Digitization.RandomSeedOffset)
392 kwargs.setdefault(
"PileUp",
True)
393 kwargs.setdefault(
"EmTTL1ContainerName", flags.Overlay.SigPrefix +
"LArTTL1EM")
394 kwargs.setdefault(
"HadTTL1ContainerName", flags.Overlay.SigPrefix +
"LArTTL1HAD")
396 if flags.Concurrency.NumThreads > 0:
397 kwargs.setdefault(
'Cardinality', flags.Concurrency.NumThreads)
399 acc.addEventAlgo(CompFactory.LArTTL1Maker(**kwargs))
405 from LArROD.LArSuperCellBuilderConfig
import LArSuperCellBuilderAlgCfg, LArSuperCellBCIDAlgCfg