5 from AthenaConfiguration.ComponentFactory
import CompFactory
6 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
7 from AthenaConfiguration.Enums
import Format
8 from AthenaConfiguration.Enums
import LHCPeriod
10 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
11 from OutputStreamAthenaPool.OutputStreamConfig
import addToESD
13 from TriggerJobOpts.TriggerByteStreamConfig
import ByteStreamReadCfg
16 from TrigConfigSvc.TriggerConfigAccess
import getL1MenuAccess
18 from TrigDecisionTool.TrigDecisionToolConfig
import TrigDecisionToolCfg, getRun3NavigationContainerFromInput
26 if flags.Input.Format
is Format.BS:
27 ZDC_ItemList.append(
"xAOD::ZdcModuleContainer#ZdcModules")
28 ZDC_ItemList.append(
"xAOD::ZdcModuleAuxContainer#ZdcModulesAux.")
29 ZDC_ItemList.append(
"xAOD::ZdcModuleContainer#ZdcSums")
30 ZDC_ItemList.append(
"xAOD::ZdcModuleAuxContainer#ZdcSumsAux.")
32 acc.merge(
addToESD(flags,ZDC_ItemList))
33 acc.merge(
addToAOD(flags,ZDC_ItemList))
35 from xAODMetaDataCnv.InfileMetaDataConfig
import SetupMetaDataForStreamCfg
42 def ZdcAnalysisToolCfg(flags, run, config="PbPb2023", DoCalib=False, DoTimeCalib=False, DoTrigEff=False):
45 print(
'ZdcAnalysisToolCfg: setting up ZdcAnalysisTool with config='+config)
47 acc.setPrivateTools(CompFactory.ZDC.ZdcAnalysisTool(
48 name =
'ZdcAnalysisTool'+config,
49 Configuration = config,
51 DoTimeCalib = DoTimeCalib,
52 DoTrigEff = DoTrigEff,
59 print(
'ZdcAnalysisToolCfg: setting up ZdcAnalysisTool with config='+config)
60 acc.setPrivateTools(CompFactory.ZDC.ZdcLEDAnalysisTool(name =
'ZdcLEDAnalysisTool'+config,
61 Configuration = config))
70 trigValTool = CompFactory.ZDC.ZdcTrigValidTool(
71 name =
'ZdcTrigValTool',
74 filepath_LUT =
'TrigT1ZDC/zdc_json_PbPb5.36TeV_2023.json')
76 trigValTool.TrigDecisionTool = acc.getPublicTool(
'TrigDecisionTool')
78 trigValTool.triggerList = [c
for c
in getL1MenuAccess(flags)
if 'L1_ZDC_BIT' in c]
80 acc.setPrivateTools(trigValTool)
86 acc.setPrivateTools(CompFactory.ZDC.RpdSubtractCentroidTool(name =
'RpdSubtractCentroidTool'))
96 if flags.Input.ProjectName ==
"data15_hi":
101 elif flags.Input.ProjectName ==
"data17_13TeV":
106 elif flags.Input.ProjectName ==
"data16_hip":
111 elif flags.Input.ProjectName ==
"data18_hi":
117 acc.merge(
ByteStreamReadCfg(flags, type_names=[
'xAOD::TriggerTowerContainer/ZdcTriggerTowers',
118 'xAOD::TriggerTowerAuxContainer/ZdcTriggerTowersAux.']))
120 acc.addEventAlgo(CompFactory.ZdcByteStreamRawDataV2())
121 acc.addEventAlgo(CompFactory.ZdcRecV3Decode())
123 anaTool = acc.popToolsAndMerge(
ZdcAnalysisToolCfg(flags,2,config,doCalib,doTimeCalib,doTrigEff))
125 acc.addEventAlgo(CompFactory.ZdcRecV3(
"ZdcRecV3",ZdcAnalysisTool=anaTool))
137 if flags.Input.ProjectName ==
"data22_13p6TeV":
139 elif flags.Input.ProjectName ==
"data23_900GeV":
141 elif flags.Input.ProjectName ==
"data23_comm":
144 elif flags.Input.ProjectName ==
"data23_13p6TeV":
146 elif flags.Input.ProjectName ==
"data23_5p36TeV":
148 elif flags.Input.ProjectName ==
"data23_hi":
153 print(
'ZdcRecRun3Cfg: doCalib = '+
str(doCalib)+
' for project '+flags.Input.ProjectName)
155 anaTool = acc.popToolsAndMerge(
ZdcAnalysisToolCfg(flags,3,config,doCalib,doTimeCalib,doTrigEff))
158 if ( flags.Input.isMC ):
159 zdcTools = [anaTool,centroidTool]
160 elif ( flags.Trigger.doZDC ):
162 elif (flags.Common.isOnline):
163 zdcTools = [anaTool,centroidTool]
166 zdcTools = [anaTool,trigTool,centroidTool]
168 if flags.Input.Format
is Format.BS:
169 acc.addEventAlgo(CompFactory.ZdcByteStreamLucrodData())
170 acc.addEventAlgo(CompFactory.ZdcRecRun3Decode())
172 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
175 zdcAlg = CompFactory.ZdcRecRun3(
"ZdcRecRun3",ZdcAnalysisTools=zdcTools)
176 acc.addEventAlgo(zdcAlg, primary=
True)
183 run = flags.GeoModel.Run
185 if (run == LHCPeriod.Run2):
186 print (
'ZdcRecConfig.py: setting up Run 2 ntuple!')
188 elif (run == LHCPeriod.Run3):
189 print (
'ZdcRecConfig.py: setting up Run 3 ntuples!')
192 print (
'ZdcRecConfig.py: setting up no ntuple!')
199 zdcNtuple = CompFactory.ZdcNtuple(
"ZdcNtuple")
200 zdcNtuple.useGRL =
False
201 zdcNtuple.zdcOnly =
True
202 zdcNtuple.enableTrigger =
False
203 zdcNtuple.enableOutputSamples =
True
204 zdcNtuple.enableOutputTree =
True
205 zdcNtuple.writeOnlyTriggers =
False
206 zdcNtuple.nsamplesZdc = 7
207 acc.addEventAlgo(zdcNtuple)
208 acc.addService(CompFactory.THistSvc(Output = [
"ANALYSIS DATAFILE='zdctree.root' OPT='RECREATE'"]))
209 acc.setAppProperty(
"HistogramPersistency",
"ROOT")
215 zdcNtuple = CompFactory.ZdcNtuple(
"ZdcNtuple")
216 zdcNtuple.useGRL =
False
217 zdcNtuple.zdcOnly =
True
218 zdcNtuple.lhcf2022 =
False
219 zdcNtuple.lhcf2022zdc =
False
220 zdcNtuple.lhcf2022afp =
False
221 zdcNtuple.enableTrigger =
False if flags.Input.isMC
else True
222 zdcNtuple.enableOutputSamples =
True
223 zdcNtuple.enableOutputTree =
True
224 zdcNtuple.writeOnlyTriggers =
False
225 zdcNtuple.enableRPD =
True
226 zdcNtuple.enableCentroid =
True
227 zdcNtuple.reprocZdc =
False
228 acc.addEventAlgo(zdcNtuple)
229 acc.addService(CompFactory.THistSvc(Output = [
"ANALYSIS DATAFILE='NTUP.root' OPT='RECREATE'"]))
237 if flags.Input.Format
is Format.BS:
238 run = flags.GeoModel.Run
241 print (
"ZdcRecConfig.py: run = "+run.name)
243 config =
'ppPbPb2023'
246 acc.addEventAlgo(CompFactory.ZdcByteStreamLucrodData())
247 acc.addEventAlgo(CompFactory.ZdcRecRun3Decode())
252 zdcTools += [anaTool]
255 zdcAlg = CompFactory.ZdcRecRun3(
"ZdcRecRun3",DAQMode=2, ForcedEventType=2, ZdcAnalysisTools=zdcTools)
256 acc.addEventAlgo(zdcAlg, primary=
True)
258 zdcLEDNtuple = CompFactory.ZdcLEDNtuple(
"ZdcLEDNtuple")
259 zdcLEDNtuple.enableOutputTree =
True
260 acc.addEventAlgo(zdcLEDNtuple)
261 acc.addService(CompFactory.THistSvc(Output = [
"ANALYSIS DATAFILE='NTUP.root' OPT='RECREATE'"]))
263 if flags.Output.doWriteESD
or flags.Output.doWriteAOD:
273 tdmv = CompFactory.TrigDec.TrigDecisionMakerValidator()
274 tdmv.errorOnFailure =
True
277 acc.addEventAlgo( tdmv )
282 """Configure Zdc analysis alg
283 Additional arguments are useful in calibration runs
288 run = flags.GeoModel.Run
291 print (
"ZdcRecConfig.py: run = "+run.name)
293 if (run == LHCPeriod.Run2):
294 print (
'ZdcRecConfig.py: setting up Run 2!')
296 elif (run == LHCPeriod.Run3):
297 print (
'ZdcRecConfig.py: setting up Run 3!')
300 print (
'ZdcRecConfig.py: setting up nothing (problem)!')
302 if flags.Output.doWriteESD
or flags.Output.doWriteAOD:
307 if __name__ ==
'__main__':
309 """ This is selftest & ZDC calibration transform at the same time"""
310 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
311 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
312 from AthenaConfiguration.TestDefaults
import defaultGeometryTags
316 flags.Scheduler.CheckDependencies =
True
317 flags.Scheduler.ShowDataDeps =
True
318 flags.Scheduler.ShowDataFlow =
True
319 flags.Scheduler.ShowControlFlow =
True
320 flags.Scheduler.EnableVerboseViews =
True
322 flags.Detector.GeometryZDC=
True
323 flags.Detector.GeometryAFP=
False
324 flags.Detector.GeometryALFA=
False
325 flags.Detector.GeometryLucid=
False
326 flags.Detector.GeometryMDT=
False
327 flags.Detector.GeometryMM=
False
328 flags.Detector.GeometryMuon=
False
329 flags.Trigger.decodeHLT=
False
330 flags.Trigger.enableL1MuonPhase1=
False
331 flags.Trigger.L1.doMuon=
False
332 flags.Trigger.L1.doCalo=
False
333 flags.Trigger.L1.doTopo=
False
340 flags.Output.AODFileName=
"AOD.pool.root"
341 flags.Output.HISTFileName=
"HIST.root"
342 flags.Output.doWriteAOD=
True
348 isLED = (flags.Input.TriggerStream ==
"calibration_ZDCLEDCalib")
349 isCalib = (flags.Input.TriggerStream ==
"calibration_ZDCCalib" or flags.Input.TriggerStream ==
"physics_MinBias" or flags.Input.TriggerStream ==
"express_express" )
352 print(
'ZdcRecConfig: Running LED data!')
354 print(
'ZdcRecConfig: Running ZDC calibration data!')
357 pn = flags.Input.ProjectName
359 raise ValueError(
'Unknown project name')
365 flags.Trigger.EDMVersion=2
366 flags.GeoModel.Run = LHCPeriod.Run2
368 flags.Trigger.EDMVersion=3
369 flags.GeoModel.Run = LHCPeriod.Run3
370 flags.GeoModel.AtlasVersion=defaultGeometryTags.RUN3
372 flags.Trigger.EDMVersion=3
373 flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN3
374 flags.GeoModel.Run = LHCPeriod.Run3
376 if (flags.Input.isMC):
377 print(
'ZdcRecConfig: Overriding MC run to be Run 3!')
378 flags.GeoModel.Run = LHCPeriod.Run3
384 from AtlasGeoModel.ForDetGeoModelConfig
import ForDetGeometryCfg
387 if not flags.Input.isMC:
388 from TriggerJobOpts.TriggerRecoConfig
import TriggerRecoCfgData
398 if not flags.Input.isMC:
400 from ZdcMonitoring.ZdcLEDMonitorAlgorithm
import ZdcLEDMonitoringConfig
403 from ZdcMonitoring.ZdcMonitorAlgorithm
import ZdcMonitoringConfig
408 acc.printConfig(withDetails=
True)
410 with open(
"config.pkl",
"wb")
as f:
413 if status.isFailure():