6 from AthenaConfiguration.ComponentFactory
import CompFactory
7 from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
8 from AthenaConfiguration.Enums
import Format
9 from AthenaConfiguration.Enums
import LHCPeriod
11 from OutputStreamAthenaPool.OutputStreamConfig
import addToAOD
12 from OutputStreamAthenaPool.OutputStreamConfig
import addToESD
14 from TriggerJobOpts.TriggerByteStreamConfig
import ByteStreamReadCfg
16 from ZdcNtuple.ZdcNtupleConfig
import ZdcNtupleCfg
19 from TrigConfigSvc.TriggerConfigAccess
import getL1MenuAccess
21 from TrigDecisionTool.TrigDecisionToolConfig
import TrigDecisionToolCfg, getRun3NavigationContainerFromInput
22 from AthenaConfiguration.TestDefaults
import defaultGeometryTags, defaultConditionsTags
26 defaultGeometryZdcRun2 =
"ATLAS-R2-2016-01-03-00"
27 defaultGeometryZdc2023 =
"ATLAS-R3S-2021-03-03-00"
28 defaultGeometryZdc2024 =
"ATLAS-R3S-2021-03-04-00"
31 projName = flags.Input.ProjectName
34 return defaultGeometryZdcRun2
36 return defaultGeometryZdcRun2
38 return defaultGeometryZdcRun2
40 return defaultGeometryZdcRun2
42 return defaultGeometryZdc2023
44 return defaultGeometryZdc2024
46 return defaultGeometryZdc2024
48 run = flags.GeoModel.Run
49 if (run == LHCPeriod.RUN2):
50 return defaultGeometryTags.RUN2
51 if (run == LHCPeriod.RUN3):
52 return defaultGeometryTags.RUN3
57 zdcConfigMap[
'data15_hi'] = {}
58 zdcConfigMap[
'data16_hip'] = {}
59 zdcConfigMap[
'data17_13TeV'] = {}
60 zdcConfigMap[
'data18_hi'] = {}
61 zdcConfigMap[
'data22_13p6TeV'] = {}
62 zdcConfigMap[
'data23_5p36TeV'] = {}
63 zdcConfigMap[
'data23_13p6TeV'] = {}
64 zdcConfigMap[
'data23_hi'] = {}
65 zdcConfigMap[
'data23_comm'] = {}
66 zdcConfigMap[
'data23_5p36TeV'] = {}
67 zdcConfigMap[
'data24_900GeV'] = {}
69 zdcConfigMap[
'data24_13p6TeV'] = {}
70 zdcConfigMap[
'data24_13p6TeV'][
'default'] =
'pp2024'
72 zdcConfigMap[
'data24_refcomm'] = {}
73 zdcConfigMap[
'data24_refcomm'][
'default'] =
'pp2024'
74 zdcConfigMap[
'data24_refcomm'][
'calibration_ZdcInjCalib'] =
'Injectorpp2024'
76 zdcConfigMap[
'data24_hicomm'] = {}
77 zdcConfigMap[
'data24_hicomm'][
'default'] =
'PbPb2024'
78 zdcConfigMap[
'data24_hicomm'][
'calibration_ZdcInjCalib'] =
'InjectorPbPb2024'
80 zdcConfigMap[
'data24_hi'] = {}
81 zdcConfigMap[
'data24_hi'][
'default']=
"PbPb2024"
82 zdcConfigMap[
'data24_hi'][
'calibration_ZdcInjCalib']=
"InjectorPbPb2024"
86 if flags.Input.TriggerStream ==
"calibration_ZDCInjCalib" or flags.Input.TriggerStream ==
"calibration_DcmDummyProcessor":
87 config =
"Injectorpp2024"
89 if flags.Input.ProjectName ==
"data24_hi" or flags.Input.ProjectName ==
"data24_hicomm":
90 config =
"InjectorPbPb2024"
94 run = flags.GeoModel.Run
95 if (run == LHCPeriod.Run3):
97 config =
"MonteCarloPbPb2023"
98 elif flags.Input.ProjectName ==
"data22_13p6TeV":
100 elif flags.Input.ProjectName ==
"data23_5p36TeV" or flags.Input.ProjectName ==
"data23_900GeV" or flags.Input.ProjectName ==
"data23_13p6TeV":
102 elif flags.Input.ProjectName ==
"data23_hi" or flags.Input.ProjectName ==
"data23_comm":
104 elif flags.Input.ProjectName ==
"data24_5p36TeV" or flags.Input.ProjectName ==
"data24_900GeV" or flags.Input.ProjectName ==
"data24_13p6TeV" or flags.Input.ProjectName ==
"data24_refcomm":
106 elif flags.Input.ProjectName ==
"data24_hi" or flags.Input.ProjectName ==
"data24_hicomm":
108 elif (run == LHCPeriod.Run2):
109 if flags.Input.ProjectName ==
"data15_hi":
111 elif flags.Input.ProjectName ==
"data17_13TeV":
113 elif flags.Input.ProjectName ==
"data16_hip":
115 elif flags.Input.ProjectName ==
"data18_hi":
125 if flags.Input.Format
is Format.BS:
126 ZDC_ItemList.append(
"xAOD::ZdcModuleContainer#ZdcModules")
127 ZDC_ItemList.append(
"xAOD::ZdcModuleAuxContainer#ZdcModulesAux.")
128 ZDC_ItemList.append(
"xAOD::ZdcModuleContainer#ZdcSums")
129 ZDC_ItemList.append(
"xAOD::ZdcModuleAuxContainer#ZdcSumsAux.")
131 acc.merge(
addToESD(flags,ZDC_ItemList))
132 acc.merge(
addToAOD(flags,ZDC_ItemList))
135 if flags.Output.doWriteAOD:
136 from xAODMetaDataCnv.InfileMetaDataConfig
import SetupMetaDataForStreamCfg
142 def ZdcAnalysisToolCfg(flags, run, config="PbPb2023", DoCalib=False, DoFADCCorr=False, DoNonLinCorr=False, DoTimeCalib=False, DoTrigEff=False, ForceCalibRun=-1, ForceCalibLB=814):
145 print(
'ZdcAnalysisToolCfg: setting up ZdcAnalysisTool with config='+config)
147 acc.setPrivateTools(CompFactory.ZDC.ZdcAnalysisTool(
148 name =
'ZdcAnalysisTool'+config,
149 Configuration = config,
151 DoFADCCorr = DoFADCCorr,
152 DoNonLinCorr = DoNonLinCorr,
153 DoTimeCalib = DoTimeCalib,
154 DoTrigEff = DoTrigEff,
155 ForceCalibRun = ForceCalibRun,
156 ForceCalibLB = ForceCalibLB,
163 print(
'ZdcAnalysisToolCfg: setting up ZdcAnalysisTool with config='+config)
164 acc.setPrivateTools(CompFactory.ZDC.ZdcLEDAnalysisTool(name =
'ZdcLEDAnalysisTool'+config,
165 Configuration = config,
166 DoFADCCorr = DoFADCCorr))
175 trigValTool = CompFactory.ZDC.ZdcTrigValidTool(
176 name =
'ZdcTrigValTool',
179 filepath_LUT =
'TrigT1ZDC/zdc_json_PbPb5.36TeV_2023.json')
181 trigValTool.TrigDecisionTool = acc.getPublicTool(
'TrigDecisionTool')
183 trigValTool.triggerList = [c
for c
in getL1MenuAccess(flags)
if 'L1_ZDC_BIT' in c]
185 acc.setPrivateTools(trigValTool)
192 CompFactory.ZDC.RPDAnalysisTool(
193 name=
"RPDAnalysisTool",
202 CompFactory.ZDC.RpdSubtractCentroidTool(
203 name=
"RpdSubtractCentroidTool",
212 print (
'ZdcRecConfig.py: Running with config tag ', config)
220 if flags.Input.ProjectName ==
"data15_hi":
224 elif flags.Input.ProjectName ==
"data17_13TeV":
228 elif flags.Input.ProjectName ==
"data16_hip":
232 elif flags.Input.ProjectName ==
"data18_hi":
237 acc.merge(
ByteStreamReadCfg(flags, type_names=[
'xAOD::TriggerTowerContainer/ZdcTriggerTowers',
238 'xAOD::TriggerTowerAuxContainer/ZdcTriggerTowersAux.']))
240 acc.addEventAlgo(CompFactory.ZdcByteStreamRawDataV2())
241 acc.addEventAlgo(CompFactory.ZdcRecV3Decode())
243 anaTool = acc.popToolsAndMerge(
ZdcAnalysisToolCfg(flags,2,config,doCalib,doFADCCorr,doNonLinCorr,doTimeCalib,doTrigEff))
245 acc.addEventAlgo(CompFactory.ZdcRecV3(
"ZdcRecV3",ZdcAnalysisTool=anaTool))
253 print (
'ZdcRecConfig.py: Running with config tag ', config)
263 if flags.Input.TriggerStream !=
"calibration_ZDCInjCalib" and flags.Input.TriggerStream !=
"calibration_DcmDummyProcessor":
264 if flags.Common.isOnline:
267 if flags.Input.ProjectName ==
"data24_5p36TeV" or flags.Input.ProjectName ==
"data24_refcomm":
268 ForceCalibRun = 488239
270 elif flags.Input.ProjectName ==
"data24_hi" or flags.Input.ProjectName ==
"data24_hicomm":
271 ForceCalibRun = 488980
276 elif flags.Input.ProjectName ==
"data23_comm":
278 elif flags.Input.ProjectName ==
"data23_hi":
281 elif flags.Input.ProjectName ==
"data24_hi":
291 doRPD = flags.Detector.EnableZDC_RPD
293 print(
'ZdcRecRun3Cfg: doCalib = '+
str(doCalib)+
' for project '+flags.Input.ProjectName)
294 print(
'RPD enable flag is '+
str(doRPD))
296 anaTool = acc.popToolsAndMerge(
ZdcAnalysisToolCfg(flags,3,config,doCalib,doFADCCorr,doNonLinCorr,doTimeCalib,doTrigEff,ForceCalibRun,ForceCalibLB))
302 if ( flags.Input.isMC ):
305 zdcTools += [rpdAnaTool,centroidTool]
306 elif ( flags.Trigger.doZDC ):
308 elif flags.Input.TriggerStream ==
"calibration_ZDCInjCalib" or flags.Input.TriggerStream ==
"calibration_DcmDummyProcessor":
310 elif (flags.Common.isOnline):
313 zdcTools += [rpdAnaTool,centroidTool]
316 zdcTools = [anaTool,trigTool]
318 zdcTools += [rpdAnaTool,centroidTool]
320 if flags.Input.Format
is Format.BS:
321 acc.addEventAlgo(CompFactory.ZdcByteStreamLucrodData())
322 acc.addEventAlgo(CompFactory.ZdcRecRun3Decode())
324 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
326 acc.addEventAlgo(CompFactory.ZdcMCTruthAlg())
328 zdcAlg = CompFactory.ZdcRecRun3(
"ZdcRecRun3",ZdcAnalysisTools=zdcTools)
329 acc.addEventAlgo(zdcAlg, primary=
True)
336 run = flags.GeoModel.Run
338 if (run == LHCPeriod.Run2):
339 print (
'ZdcRecConfig.py: setting up Run 2 ntuple!')
341 elif (run == LHCPeriod.Run3):
342 print (
'ZdcRecConfig.py: setting up Run 3 ntuples!')
345 print (
'ZdcRecConfig.py: setting up no ntuple!')
355 enableTrigger =
False,
356 enableOutputSamples =
True,
357 enableOutputTree =
True,
358 writeOnlyTriggers =
False,
362 acc.addService(CompFactory.THistSvc(Output = [
"ANALYSIS DATAFILE='zdctree.root' OPT='RECREATE'"]))
375 isMC = flags.Input.isMC,
376 enableTrigger =
not flags.Input.isMC,
377 enableOutputSamples =
True,
378 enableOutputTree =
True,
379 writeOnlyTriggers =
False,
380 enableRPD = flags.Detector.EnableZDC_RPD,
381 enableCentroid = flags.Detector.EnableZDC_RPD,
385 acc.addService(CompFactory.THistSvc(Output = [
"ANALYSIS DATAFILE='NTUP.root' OPT='RECREATE'"]))
399 enableTrigger =
False,
400 enableOutputSamples =
True,
401 enableOutputTree =
True,
402 writeOnlyTriggers =
False,
404 enableCentroid =
False,
408 acc.addService(CompFactory.THistSvc(Output = [
"ANALYSIS DATAFILE='NTUP.root' OPT='RECREATE'"]))
414 zdcLEDNtuple = CompFactory.ZdcLEDNtuple(
"ZdcLEDNtuple")
415 zdcLEDNtuple.enableOutputTree =
True
416 acc.addEventAlgo(zdcLEDNtuple)
417 acc.addService(CompFactory.THistSvc(Output = [
"ANALYSIS DATAFILE='NTUP.root' OPT='RECREATE'"]))
424 if flags.Input.Format
is Format.BS:
425 run = flags.GeoModel.Run
428 print (
"ZdcRecConfig.py: run = "+run.name)
430 config =
'ppPbPb2023'
434 if (flags.GeoModel.Run == LHCPeriod.Run3):
437 acc.addEventAlgo(CompFactory.ZdcByteStreamLucrodData())
438 acc.addEventAlgo(CompFactory.ZdcRecRun3Decode())
443 zdcTools += [anaTool]
446 zdcAlg = CompFactory.ZdcRecRun3(
"ZdcRecRun3",DAQMode=2, ForcedEventType=2, ZdcAnalysisTools=zdcTools)
447 acc.addEventAlgo(zdcAlg, primary=
True)
449 if flags.Output.doWriteESD
or flags.Output.doWriteAOD:
459 tdmv = CompFactory.TrigDec.TrigDecisionMakerValidator()
460 tdmv.errorOnFailure =
True
463 acc.addEventAlgo( tdmv )
468 """Configure Zdc analysis alg
469 Additional arguments are useful in calibration runs
474 run = flags.GeoModel.Run
477 print (
"ZdcRecConfig.py: run = "+run.name)
479 if (run == LHCPeriod.Run2):
480 print (
'ZdcRecConfig.py: setting up Run 2!')
482 elif (run == LHCPeriod.Run3):
483 print (
'ZdcRecConfig.py: setting up Run 3!')
486 print (
'ZdcRecConfig.py: setting up nothing (problem)!')
488 if flags.Output.doWriteESD
or flags.Output.doWriteAOD:
494 if __name__ ==
'__main__':
496 """ This is selftest & ZDC calibration transform at the same time"""
497 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
498 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
502 flags.Scheduler.CheckDependencies =
True
503 flags.Scheduler.ShowDataDeps =
True
504 flags.Scheduler.ShowDataFlow =
True
505 flags.Scheduler.ShowControlFlow =
True
506 flags.Scheduler.EnableVerboseViews =
True
508 flags.Detector.GeometryZDC=
True
509 flags.Detector.GeometryAFP=
False
510 flags.Detector.GeometryALFA=
False
511 flags.Detector.GeometryLucid=
False
512 flags.Detector.GeometryMDT=
False
513 flags.Detector.GeometryMM=
False
514 flags.Detector.GeometryMuon=
False
515 flags.Trigger.decodeHLT=
False
516 flags.Trigger.enableL1MuonPhase1=
False
517 flags.Trigger.L1.doMuon=
False
518 flags.Trigger.L1.doCalo=
False
519 flags.Trigger.L1.doTopo=
False
526 flags.Output.AODFileName=
"AOD.pool.root"
527 flags.Output.HISTFileName=
"HIST.root"
528 flags.Output.doWriteAOD=
True
530 parser = flags.getArgumentParser()
531 parser.add_argument(
'--runCalibForStandaloneData',default=
"Calib",help=
"indicate if we run calib/LED reconstruction for standalone data: Calib (default) --> run calib reconstruction for injector-pulse events; LED --> run LED reconstruction for LED events")
532 args = flags.fillFromArgs(parser=parser)
535 isLED = (flags.Input.TriggerStream ==
"calibration_ZDCLEDCalib")
536 isInj = (flags.Input.TriggerStream ==
"calibration_ZDCInjCalib")
537 isCalib = (flags.Input.TriggerStream ==
"calibration_ZDCCalib" or flags.Input.TriggerStream ==
"physics_MinBias" or flags.Input.TriggerStream ==
"express_express" or flags.Input.TriggerStream ==
"physics_UCC")
538 if flags.Input.TriggerStream ==
"calibration_DcmDummyProcessor":
539 if args.runCalibForStandaloneData ==
"Calib" or args.runCalibForStandaloneData ==
"calib":
541 elif args.runCalibForStandaloneData ==
"LED" or args.runCalibForStandaloneData ==
"led":
544 print(
'WARNING: The value for the argument runCalibForStandaloneData is invalid')
545 print(
'Running nominal reconstruction (injector-pulse) by default')
549 print(
'ZdcRecConfig: Running LED data!')
551 print(
'ZdcRecConfig: Running Injected pulse data!')
553 print(
'ZdcRecConfig: Running ZDC calibration data!')
554 if (flags.Input.isMC):
555 print(
'ZdcRecConfig: Running over MC Samples')
556 flags.Input.ProjectName =
"data23_hi"
557 flags.Reco.EnableTrigger =
False
560 pn = flags.Input.ProjectName
562 raise ValueError(
'Unknown project name')
564 if (isInj
or isLED
or isInj
or pn ==
'data_test'):
565 flags.Trigger.EDMVersion=3
566 flags.GeoModel.Run = LHCPeriod.Run3
567 flags.IOVDb.GlobalTag=defaultConditionsTags.RUN3_DATA
571 flags.Trigger.EDMVersion=2
572 flags.GeoModel.Run = LHCPeriod.Run2
573 flags.IOVDb.GlobalTag=defaultConditionsTags.RUN2_DATA
575 flags.Trigger.EDMVersion=3
576 flags.GeoModel.Run = LHCPeriod.Run3
577 flags.IOVDb.GlobalTag=defaultConditionsTags.RUN3_DATA
579 if (flags.Input.isMC):
580 print(
'ZdcRecConfig: Overriding MC run to be Run 3!')
581 flags.GeoModel.Run = LHCPeriod.Run3
584 or flags.Input.TriggerStream ==
"calibration_DcmDummyProcessor"
585 or pn ==
"data22_13p6TeV"):
586 flags.Detector.EnableZDC_RPD =
False
588 if flags.Input.TriggerStream ==
"calibration_DcmDummyProcessor":
589 flags.DQ.useTrigger =
False
590 flags.DQ.triggerDataAvailable =
False
599 from AtlasGeoModel.ForDetGeoModelConfig
import ForDetGeometryCfg
602 if not flags.Input.isMC
and pn !=
'data_test':
603 from TriggerJobOpts.TriggerRecoConfig
import TriggerRecoCfgData
614 if not flags.Input.isMC:
616 from ZdcMonitoring.ZdcLEDMonitorAlgorithm
import ZdcLEDMonitoringConfig
621 from ZdcMonitoring.ZdcMonitorAlgorithm
import ZdcMonitoringConfig
623 acc.merge(zdcMonitorAcc)
625 if (flags.Input.TriggerStream !=
"calibration_DcmDummyProcessor"):
629 from ZdcMonitoring.ZdcMonitorAlgorithm
import ZdcMonitoringConfig
631 acc.merge(zdcMonitorAcc)
638 acc.printConfig(withDetails=
True)
640 with open(
"config.pkl",
"wb")
as f:
643 if status.isFailure():