84def LArPileUpToolCfg(flags, name="LArPileUpTool", **kwargs):
85 """Return ComponentAccumulator with configured LArPileUpTool"""
88 # add new conditions for LArXTalkWeight
89 acc.merge(LArXTalkWeightCondAlgCfg(flags))
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:
101 if flags.Digitization.DoXingByXingPileUp:
102 kwargs.setdefault("FirstXing", -751)
103 kwargs.setdefault("LastXing", 101)
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)))
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)
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",
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",
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")
153 kwargs.setdefault("InputDigitContainer", f"{flags.Overlay.BkgPrefix}LArDigitContainer_data")
155 if kwargs["InputDigitContainer"]:
156 from SGComps.SGInputLoaderConfig import SGInputLoaderCfg
157 acc.merge(SGInputLoaderCfg(flags, [f'LArDigitContainer#{kwargs["InputDigitContainer"]}']))
159 kwargs.setdefault("OnlyUseContainerName", flags.Digitization.PileUp)
160 LArPileUpTool = CompFactory.LArPileUpTool
161 acc.setPrivateTools(LArPileUpTool(name, **kwargs))
164def LArHitEMapToDigitAlgCfg(flags, name="LArHitEMapToDigitAlg", **kwargs):
165 """Return ComponentAccumulator with configured LArHitEMapToDigitAlg"""
166 acc = LArGMCfg(flags)
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"]
179 requiredConditons=["Noise", "fSampl", "Pedestal", "Shape"]
180 acc.merge(LArElecCalibDBCfg(flags,requiredConditons))
182 if not flags.Common.isOverlay:
183 acc.merge(LArAutoCorrNoiseCondAlgCfg(flags))
184 #kwargs.setdefault('AutoCorrNoiseKey','LArAutoCorr')
186 if "ProblemsToMask" not in kwargs:
187 kwargs["ProblemsToMask"] = ["deadReadout", "deadPhys"]
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)
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")
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))
218def LArOutputCfg(flags):
219 """Return ComponentAccumulator with Output for LAr. Not standalone."""
220 acc = ComponentAccumulator()
221 if flags.Output.doWriteRDO:
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))
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))
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))
254 acc.merge(LArRawChannelBuilderAlgCfg(flags))
256 if flags.Digitization.AddCaloDigiThinned:
257 acc.merge(LArDigitThinnerCfg(flags))
268def LArOverlayDigitizationBasicCfg(flags, name="digitmaker1", **kwargs):
269 """Return ComponentAccumulator with LAr Overlay digitization configuration"""
270 acc = ComponentAccumulator()
272 if "LArPileUpTool" not in kwargs:
273 kwargs["LArPileUpTool"] = acc.popToolsAndMerge(LArPileUpToolCfg(flags))
275 if flags.Concurrency.NumThreads > 0:
276 kwargs.setdefault('Cardinality', flags.Concurrency.NumThreads)
278 LArHitEMapMaker = CompFactory.LArHitEMapMaker
279 acc.addEventAlgo(LArHitEMapMaker(name, **kwargs))
280 acc.merge(LArHitEMapToDigitAlgCfg(flags))
282 acc.merge(LArRawChannelBuilderAlgCfg(flags))
283 if flags.Digitization.AddCaloDigiThinned:
284 acc.merge(LArDigitThinnerCfg(flags))
295def LArAutoCorrNoiseCondSCAlgCfg(flags, **kwargs):
296 acc = ComponentAccumulator()
298 requiredConditions=["AutoCorrSC"]
299 from LArConfiguration.LArElecCalibDBConfig import LArElecCalibDBMCSCCfg
300 acc.merge(LArElecCalibDBMCSCCfg(flags,requiredConditions))
301 kwargs.setdefault("LArAutoCorrObjKey", "LArAutoCorrSC") # Provided by LArFlatConditionsAlg<LArAutoCorrSC>
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))