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",
139 if flags.Common.isOverlay:
140 kwargs.setdefault(
"OnlyUseContainerName",
False)
141 if flags.Overlay.DataOverlay:
142 kwargs.setdefault(
"InputDigitContainer", f
"{flags.Overlay.BkgPrefix}FREE")
144 kwargs.setdefault(
"InputDigitContainer", f
"{flags.Overlay.BkgPrefix}LArDigitContainer_MC")
146 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
147 acc.merge(
SGInputLoaderCfg(flags, [f
'LArDigitContainer#{kwargs["InputDigitContainer"]}']))
149 kwargs.setdefault(
"OnlyUseContainerName", flags.Digitization.PileUp)
150 LArPileUpTool = CompFactory.LArPileUpTool
155 """Return ComponentAccumulator with configured LArHitEMapToDigitAlg"""
163 if flags.Overlay.DataOverlay:
164 kwargs.setdefault(
"ShapeKey",
"LArShape")
166 if not flags.Digitization.DoCaloNoise:
167 requiredConditons=[
"fSampl",
"Pedestal",
"Shape"]
169 requiredConditons=[
"Noise",
"fSampl",
"Pedestal",
"Shape"]
172 if not flags.Common.isOverlay:
176 if "ProblemsToMask" not in kwargs:
177 kwargs[
"ProblemsToMask"] = [
"deadReadout",
"deadPhys"]
179 if flags.Common.isOverlay:
182 kwargs.setdefault(
"NoiseOnOff",
not flags.Overlay.DataOverlay)
184 kwargs.setdefault(
"NoiseOnOff", flags.Digitization.DoCaloNoise)
185 kwargs.setdefault(
"DoDigiTruthReconstruction", flags.Digitization.EnableCaloHSTruthRecoInputs)
186 kwargs.setdefault(
"RandomSeedOffset", flags.Digitization.RandomSeedOffset)
187 if (
not flags.Digitization.HighGainFCal)
and (
not flags.Common.isOverlay):
188 kwargs.setdefault(
"HighGainThreshFCAL", 0)
189 if (
not flags.Digitization.HighGainEMECIW)
and (
not flags.Common.isOverlay):
190 kwargs.setdefault(
"HighGainThreshEMECIW", 0)
191 kwargs.setdefault(
"RndmEvtOverlay", flags.Common.isOverlay)
192 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
193 kwargs.setdefault(
"DigitContainer", flags.Overlay.BkgPrefix +
"LArDigitContainer_MC")
195 kwargs.setdefault(
"DigitContainer",
"LArDigitContainer_MC")
197 if flags.Common.isOverlay
and flags.Input.isMC:
198 kwargs.setdefault(
"isMcOverlay",
True)
199 kwargs.setdefault(
"Nsamples", flags.LAr.ROD.nSamples)
200 kwargs.setdefault(
"firstSample",
201 -flags.LAr.ROD.nPreceedingSamples
if flags.LAr.ROD.nPreceedingSamples!=0
else flags.LAr.ROD.FirstSample)
202 LArHitEMapToDigitAlg = CompFactory.LArHitEMapToDigitAlg
207 """Return ComponentAccumulator with Output for LAr. Not standalone."""
209 if flags.Output.doWriteRDO:
211 if flags.Digitization.AddCaloDigi:
212 ItemList.append(
"LArDigitContainer#*")
213 elif flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
214 ItemList.append(
"LArDigitContainer#" + flags.Overlay.BkgPrefix +
"LArDigitContainer_MC")
215 elif flags.Digitization.AddCaloDigiThinned:
216 ItemList.append(
"LArDigitContainer#LArDigitContainer_MC_Thinned")
217 if flags.Common.ProductionStep != ProductionStep.PileUpPresampling:
218 ItemList.append(
"LArRawChannelContainer#LArRawChannels")
219 if flags.Digitization.EnableTruth:
220 ItemList.append(
"CaloCalibrationHitContainer#*")
227 """Return ComponentAccumulator with LAr digitization configuration"""
229 if "PileUpTools" not in kwargs:
231 kwargs[
"PileUpTools"] = PileUpTools
235 if flags.LAr.ROD.NNRawChannelBuilding:
240 if flags.Digitization.AddCaloDigiThinned:
246 """Return ComponentAccumulator with LAr digitization and Output"""
253 """Return ComponentAccumulator with LAr Overlay digitization configuration"""
256 if flags.Overlay.DataOverlay:
257 from LArByteStream.LArRawDataReadingConfig
import LArRawDataReadingCfg
260 if "LArPileUpTool" not in kwargs:
263 if flags.Concurrency.NumThreads > 0:
264 kwargs.setdefault(
'Cardinality', flags.Concurrency.NumThreads)
266 LArHitEMapMaker = CompFactory.LArHitEMapMaker
271 if flags.Digitization.AddCaloDigiThinned:
277 """Return ComponentAccumulator with LAr overlay and Output"""
286 requiredConditions=[
"AutoCorrSC"]
287 from LArConfiguration.LArElecCalibDBConfig
import LArElecCalibDBMCSCCfg
289 kwargs.setdefault(
"LArAutoCorrObjKey",
"LArAutoCorrSC")
291 from LArCabling.LArCablingConfig
import LArOnOffIdMappingSCCfg
293 kwargs.setdefault(
"LArOnOffIdMappingObjKey",
'LArOnOffIdMapSC')
294 kwargs.setdefault(
"nSampl", flags.LAr.ROD.nSamples + 2)
295 kwargs.setdefault(
"isSuperCell",
True)
296 kwargs.setdefault(
"LArAutoCorrNoiseObjKey",
"LArAutoCorrNoiseSC")
297 acc.addCondAlgo(CompFactory.LArAutoCorrNoiseCondAlg(name=
"LArAutoCorrNoiseSCCondAlg", **kwargs))
302 """Return ComponentAccumulator for LArSCL1Maker"""
304 if flags.Common.isOverlay:
309 kwargs.setdefault(
"LArHitEMapKey",
"StoreGateSvc+LArHitEMap")
311 from LArRecUtils.LArADC2MeVSCCondAlgConfig
import LArADC2MeVSCCondAlgCfg
313 kwargs.setdefault(
"LArADC2MeVKey",
"ConditionStore+LArADC2MeVSC")
315 from LArCabling.LArCablingConfig
import LArOnOffIdMappingSCCfg
318 kwargs.setdefault(
"ScCablingKey",
"ConditionStore+LArOnOffIdMapSC")
320 requiredConditions=[
"fSamplSC",
"ShapeSC",
"PedestalSC",
"NoiseSC"]
321 from LArConfiguration.LArElecCalibDBConfig
import LArElecCalibDBMCSCCfg
323 kwargs.setdefault(
"FracSKey",
"ConditionStore+LArfSamplSC")
324 kwargs.setdefault(
"ShapeKey",
"ConditionStore+LArShapeSC")
325 kwargs.setdefault(
"PedestalKey",
"ConditionStore+LArPedestalSC")
326 kwargs.setdefault(
"LArNoiseKey",
"ConditionStore+LArNoiseSC")
329 kwargs.setdefault(
"LArAutoCorrKey",
"ConditionStore+LArAutoCorrNoiseSC")
330 kwargs.setdefault(
"NSamples", flags.LAr.ROD.nSamples + 2)
331 from RngComps.RngCompsConfig
import AthRNGSvcCfg
332 kwargs.setdefault(
"RndmSvc",
334 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
335 kwargs.setdefault(
"SCL1ContainerName", f
"{flags.Overlay.BkgPrefix}LArDigitSCL2")
336 if flags.Common.isOverlay:
337 kwargs.setdefault(
"BkgDigitKey", f
"{flags.Overlay.BkgPrefix}LArDigitSCL2")
339 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
340 acc.merge(
SGInputLoaderCfg(flags, [f
'LArDigitContainer#{kwargs["BkgDigitKey"]}']))
341 kwargs.setdefault(
"SCL1ContainerName",
"LArDigitSCL2")
342 acc.addEventAlgo(CompFactory.LArSCL1Maker(**kwargs))
347 """Return ComponentAccumulator for LAr Trigger Tower"""
351 kwargs.setdefault(
"NoiseOnOff", flags.Digitization.DoCaloNoise)
352 kwargs.setdefault(
"RandomSeedOffset", flags.Digitization.RandomSeedOffset)
353 kwargs.setdefault(
"PileUp", flags.Digitization.PileUp)
354 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
355 kwargs.setdefault(
"EmTTL1ContainerName", flags.Overlay.BkgPrefix +
"LArTTL1EM")
356 kwargs.setdefault(
"HadTTL1ContainerName", flags.Overlay.BkgPrefix +
"LArTTL1HAD")
357 acc.addEventAlgo(CompFactory.LArTTL1Maker(**kwargs))
358 if flags.GeoModel.Run >= LHCPeriod.Run3:
360 if flags.Common.ProductionStep
is not ProductionStep.PileUpPresampling:
361 from LArROD.LArSuperCellBuilderConfig
import LArSuperCellBuilderAlgCfg, LArSuperCellBCIDAlgCfg
368 """Return ComponentAccumulator for LAr Trigger Tower and Output"""
372 if flags.GeoModel.Run >= LHCPeriod.Run3:
373 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
374 acc.merge(
OutputStreamCfg(flags,
"RDO", [
"LArDigitContainer#" + flags.Overlay.BkgPrefix +
"LArDigitSCL2"]))
381 """Return ComponentAccumulator with LAr Overlay Trigger Tower"""
385 kwargs.setdefault(
"NoiseOnOff", flags.Digitization.DoCaloNoise)
386 kwargs.setdefault(
"RandomSeedOffset", flags.Digitization.RandomSeedOffset)
387 kwargs.setdefault(
"PileUp",
True)
388 kwargs.setdefault(
"EmTTL1ContainerName", flags.Overlay.SigPrefix +
"LArTTL1EM")
389 kwargs.setdefault(
"HadTTL1ContainerName", flags.Overlay.SigPrefix +
"LArTTL1HAD")
391 if flags.Concurrency.NumThreads > 0:
392 kwargs.setdefault(
'Cardinality', flags.Concurrency.NumThreads)
394 acc.addEventAlgo(CompFactory.LArTTL1Maker(**kwargs))
400 from LArROD.LArSuperCellBuilderConfig
import LArSuperCellBuilderAlgCfg, LArSuperCellBCIDAlgCfg