83def LArPileUpToolCfg(flags, name="LArPileUpTool", **kwargs):
84 """Return ComponentAccumulator with configured LArPileUpTool"""
87 # add new conditions for LArXTalkWeight
88 acc.merge(LArXTalkWeightCondAlgCfg(flags))
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:
100 if flags.Digitization.DoXingByXingPileUp:
101 kwargs.setdefault("FirstXing", -751)
102 kwargs.setdefault("LastXing", 101)
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)))
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)
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",
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",
145 if flags.Common.isOverlay:
146 kwargs.setdefault("OnlyUseContainerName", False)
148 kwargs.setdefault("InputDigitContainer", f"{flags.Overlay.BkgPrefix}LArDigitContainer_MC")
150 kwargs.setdefault("InputDigitContainer", f"{flags.Overlay.BkgPrefix}LArDigitContainer_data")
152 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
153 acc.merge(SGInputLoaderCfg(flags, [f'LArDigitContainer#{kwargs["InputDigitContainer"]}']))
155 kwargs.setdefault("OnlyUseContainerName", flags.Digitization.PileUp)
156 LArPileUpTool = CompFactory.LArPileUpTool
157 acc.setPrivateTools(LArPileUpTool(name, **kwargs))
160def LArHitEMapToDigitAlgCfg(flags, name="LArHitEMapToDigitAlg", **kwargs):
161 """Return ComponentAccumulator with configured LArHitEMapToDigitAlg"""
162 acc = LArGMCfg(flags)
164 #The LArHitEMapToDigit needs: Noise, fSampl, Pedestal,Shape ADC2MeV
165 # AutoCorrNoise, the list of bad FEBs and the cabling
166 acc.merge(LArADC2MeVCondAlgCfg(flags))
167 acc.merge(LArBadFebCfg(flags))
168 acc.merge(LArBadChannelCfg(flags))
169 if flags.Overlay.DataOverlay:
170 kwargs.setdefault("ShapeKey", "LArShape")
171 #kwargs.setdefault("AutoCorrNoiseKey", "LArAutoCorr")
172 if not flags.Digitization.DoCaloNoise:
173 requiredConditons=["fSampl", "Pedestal", "Shape"]
175 requiredConditons=["Noise", "fSampl", "Pedestal", "Shape"]
176 acc.merge(LArElecCalibDBCfg(flags,requiredConditons))
178 if not flags.Common.isOverlay:
179 acc.merge(LArAutoCorrNoiseCondAlgCfg(flags))
180 #kwargs.setdefault('AutoCorrNoiseKey','LArAutoCorr')
182 if "ProblemsToMask" not in kwargs:
183 kwargs["ProblemsToMask"] = ["deadReadout", "deadPhys"]
185 if flags.Common.isOverlay:
186 # Some noise needs to be added during MC Overlay
187 # No noise should be added during Data Overlay
188 kwargs.setdefault("NoiseOnOff", not flags.Overlay.DataOverlay)
190 kwargs.setdefault("NoiseOnOff", flags.Digitization.DoCaloNoise)
191 kwargs.setdefault("DoDigiTruthReconstruction", flags.Digitization.EnableCaloHSTruthRecoInputs)
192 kwargs.setdefault("RandomSeedOffset", flags.Digitization.RandomSeedOffset)
193 if (not flags.Digitization.HighGainFCal) and (not flags.Common.isOverlay):
194 kwargs.setdefault("HighGainThreshFCAL", 0)
195 kwargs.setdefault("GainRangeFCAL",[int(CaloGain.LARMEDIUMGAIN),int(CaloGain.LARLOWGAIN)])
196 if (not flags.Digitization.HighGainEMECIW) and (not flags.Common.isOverlay):
197 kwargs.setdefault("HighGainThreshEMECIW", 0)
198 kwargs.setdefault("GainRangeEMECIW",[int(CaloGain.LARMEDIUMGAIN),int(CaloGain.LARLOWGAIN)])
199 kwargs.setdefault("RndmEvtOverlay", flags.Common.isOverlay)
200 if flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
201 kwargs.setdefault("DigitContainer", flags.Overlay.BkgPrefix + "LArDigitContainer_MC")
203 kwargs.setdefault("DigitContainer", "LArDigitContainer_MC") # FIXME - should not be hard-coded
204 # if doing MC+MC overlay
205 if flags.Common.isOverlay and flags.Input.isMC:
206 kwargs.setdefault("isMcOverlay", True)
207 kwargs.setdefault("Nsamples", flags.LAr.ROD.nSamples)
208 kwargs.setdefault("firstSample", #Need to set a negative value to include preceeding samples
209 -flags.LAr.ROD.nPreceedingSamples if flags.LAr.ROD.nPreceedingSamples!=0 else flags.LAr.ROD.FirstSample)
210 LArHitEMapToDigitAlg = CompFactory.LArHitEMapToDigitAlg
211 acc.addEventAlgo(LArHitEMapToDigitAlg(name, **kwargs))
214def LArOutputCfg(flags):
215 """Return ComponentAccumulator with Output for LAr. Not standalone."""
216 acc = ComponentAccumulator()
217 if flags.Output.doWriteRDO:
219 if flags.Digitization.AddCaloDigi:
220 ItemList.append("LArDigitContainer#*")
221 elif flags.Common.ProductionStep == ProductionStep.PileUpPresampling:
222 ItemList.append("LArDigitContainer#" + flags.Overlay.BkgPrefix + "LArDigitContainer_MC")
223 elif flags.Digitization.AddCaloDigiThinned:
224 ItemList.append("LArDigitContainer#LArDigitContainer_MC_Thinned")
225 if flags.Common.ProductionStep != ProductionStep.PileUpPresampling:
226 ItemList.append("LArRawChannelContainer#LArRawChannels")
227 if flags.Overlay.DataOverlay:
228 ItemList.append("LArFebHeaderContainer#LArFebHeader")
229 if flags.Digitization.EnableTruth:
230 ItemList.append("CaloCalibrationHitContainer#*")
231 acc.merge(TruthDigitizationOutputCfg(flags))
232 acc.merge(OutputStreamCfg(flags, "RDO", ItemList))
236def LArDigitizationBasicCfg(flags, **kwargs):
237 """Return ComponentAccumulator with LAr digitization configuration"""
238 acc = ComponentAccumulator()
239 if "PileUpTools" not in kwargs:
240 PileUpTools = acc.popToolsAndMerge(LArPileUpToolCfg(flags))
241 kwargs["PileUpTools"] = PileUpTools
242 acc.merge(PileUpToolsCfg(flags, **kwargs))
244 acc.merge(LArHitEMapToDigitAlgCfg(flags))
245 if flags.LAr.ROD.NNRawChannelBuilding:
246 acc.merge(LArNNRawChannelBuilderCfg(flags))
248 acc.merge(LArRawChannelBuilderAlgCfg(flags))
250 if flags.Digitization.AddCaloDigiThinned:
251 acc.merge(LArDigitThinnerCfg(flags))
262def LArOverlayDigitizationBasicCfg(flags, name="digitmaker1", **kwargs):
263 """Return ComponentAccumulator with LAr Overlay digitization configuration"""
264 acc = ComponentAccumulator()
266 if "LArPileUpTool" not in kwargs:
267 kwargs["LArPileUpTool"] = acc.popToolsAndMerge(LArPileUpToolCfg(flags))
269 if flags.Concurrency.NumThreads > 0:
270 kwargs.setdefault('Cardinality', flags.Concurrency.NumThreads)
272 LArHitEMapMaker = CompFactory.LArHitEMapMaker
273 acc.addEventAlgo(LArHitEMapMaker(name, **kwargs))
274 acc.merge(LArHitEMapToDigitAlgCfg(flags))
276 acc.merge(LArRawChannelBuilderAlgCfg(flags))
277 if flags.Digitization.AddCaloDigiThinned:
278 acc.merge(LArDigitThinnerCfg(flags))
289def LArAutoCorrNoiseCondSCAlgCfg(flags, **kwargs):
290 acc = ComponentAccumulator()
292 requiredConditions=["AutoCorrSC"]
293 from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBMCSCCfg
294 acc.merge(LArElecCalibDBMCSCCfg(flags,requiredConditions))
295 kwargs.setdefault("LArAutoCorrObjKey", "LArAutoCorrSC") # Provided by LArFlatConditionsAlg<LArAutoCorrSC>
297 from LArCabling.LArCablingConfig import LArOnOffIdMappingSCCfg
298 acc.merge(LArOnOffIdMappingSCCfg(flags))
299 kwargs.setdefault("LArOnOffIdMappingObjKey", 'LArOnOffIdMapSC')
300 kwargs.setdefault("nSampl", flags.LAr.ROD.nSamples + 2) # See ATLASSIM-5483
301 kwargs.setdefault("isSuperCell", True)
302 kwargs.setdefault("LArAutoCorrNoiseObjKey", "LArAutoCorrNoiseSC") # output
303 acc.addCondAlgo(CompFactory.LArAutoCorrNoiseCondAlg(name="LArAutoCorrNoiseSCCondAlg", **kwargs))