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
24 from AthenaCommon.Logging
import logging
25 log = logging.getLogger(
"ZdcRecConfig")
27 from CoolConvUtilities.ParticleTypeUtil
import getTypeForRun
32 projName = flags.Input.ProjectName
35 return defaultGeometryTags.RUN2_ZDC
37 return defaultGeometryTags.RUN2_ZDC
39 return defaultGeometryTags.RUN2_ZDC
41 return defaultGeometryTags.RUN2_ZDC
43 return defaultGeometryTags.RUN3_ZDC23
45 return defaultGeometryTags.RUN3_ZDC24
47 return defaultGeometryTags.RUN3_ZDC24
49 return defaultGeometryTags.RUN3_ZDC24
51 return defaultGeometryTags.RUN3_ZDC24
52 case
"data25_hipcomm":
53 return defaultGeometryTags.RUN3_ZDC24
55 return defaultGeometryTags.RUN3_ZDC24
57 run = flags.GeoModel.Run
58 if run == LHCPeriod.Run2:
59 return defaultGeometryTags.RUN2_ZDC
60 if run == LHCPeriod.Run3:
61 return defaultGeometryTags.RUN3_ZDC24
66 zdcConfigMap[
'data15_hi'] = {}
67 zdcConfigMap[
'data16_hip'] = {}
68 zdcConfigMap[
'data17_13TeV'] = {}
69 zdcConfigMap[
'data18_hi'] = {}
70 zdcConfigMap[
'data22_13p6TeV'] = {}
71 zdcConfigMap[
'data23_5p36TeV'] = {}
72 zdcConfigMap[
'data23_13p6TeV'] = {}
73 zdcConfigMap[
'data23_hi'] = {}
74 zdcConfigMap[
'data23_comm'] = {}
75 zdcConfigMap[
'data23_5p36TeV'] = {}
76 zdcConfigMap[
'data24_900GeV'] = {}
78 zdcConfigMap[
'data24_13p6TeV'] = {}
79 zdcConfigMap[
'data24_13p6TeV'][
'default'] =
'pp2024'
81 zdcConfigMap[
'data24_refcomm'] = {}
82 zdcConfigMap[
'data24_refcomm'][
'default'] =
'pp2024'
83 zdcConfigMap[
'data24_refcomm'][
'calibration_ZdcInjCalib'] =
'Injectorpp2024'
85 zdcConfigMap[
'data24_hicomm'] = {}
86 zdcConfigMap[
'data24_hicomm'][
'default'] =
'PbPb2024'
87 zdcConfigMap[
'data24_hicomm'][
'calibration_ZdcInjCalib'] =
'InjectorPbPb2024'
89 zdcConfigMap[
'data24_hi'] = {}
90 zdcConfigMap[
'data24_hi'][
'default']=
"PbPb2024"
91 zdcConfigMap[
'data24_hi'][
'calibration_ZdcInjCalib']=
"InjectorPbPb2024"
96 if flags.Input.RunNumbers:
97 run_num = flags.Input.RunNumbers[0]
100 aa_type = aa.getBeam1Type()
101 print(
'ZdcRecConfig::SetConfigTag(): Getting config for type %d' % (aa_type))
104 if flags.Input.ProjectName ==
"data25_comm" and flags.Input.TriggerStream ==
"calibration_ZDCCalib":
105 config =
"InjectorPbPb2024"
107 elif flags.Input.TriggerStream ==
"calibration_ZDCInjCalib" or flags.Input.TriggerStream ==
"calibration_DcmDummyProcessor":
108 config =
"InjectorpOOONeNe2025"
109 if flags.Input.ProjectName ==
"data24_5p36TeV" or flags.Input.ProjectName ==
"data24_900GeV" or flags.Input.ProjectName ==
"data24_13p6TeV" or flags.Input.ProjectName ==
"data24_refcomm":
110 config =
"Injectorpp2024"
111 if flags.Input.ProjectName
in [
"data24_hi",
"data24_hicomm"]:
112 config =
"InjectorPbPb2024"
113 if flags.Input.ProjectName
in [
"data25_hi",
"data25_hicomm",
"data25_hip"] :
114 if (aa_type == 8
or aa_type == 10):
115 config =
"InjectorpOOONeNe2025"
117 config =
"configZDC_PbPb2025.inj.v1.json"
122 run = flags.GeoModel.Run
123 if run == LHCPeriod.Run3:
125 config =
"MonteCarloPbPb2023"
126 elif flags.Input.ProjectName ==
"data22_13p6TeV":
128 elif flags.Input.ProjectName
in [
"data23_5p36TeV",
"data23_900GeV",
"data23_13p6TeV"]:
130 elif flags.Input.ProjectName
in [
"data23_hi",
"data23_comm"]:
132 elif flags.Input.ProjectName
in [
"data24_5p36TeV",
"data24_900GeV",
"data24_13p6TeV",
"data24_refcomm"]:
134 elif flags.Input.ProjectName
in [
"data24_hi",
"data24_hicomm"]:
135 config =
"configZDC_PbPb2024.v5.json"
136 elif flags.Input.ProjectName
in [
"data25_hipcomm"]:
138 elif flags.Input.ProjectName
in [
"data25_hip"]:
140 elif flags.Input.ProjectName
in [
"data25_hi",
"data25_hicomm"]:
141 if (aa_type == 8
or aa_type == 10):
142 config =
"OONeNe2025"
144 config =
"configZDC_PbPb2025.v1.json"
145 elif run == LHCPeriod.Run2:
146 if flags.Input.ProjectName ==
"data15_hi":
148 elif flags.Input.ProjectName ==
"data17_13TeV":
150 elif flags.Input.ProjectName ==
"data16_hip":
152 elif flags.Input.ProjectName ==
"data18_hi":
159 '''set generic flags needed for ZDC reconstruction that are independent of stream type
160 Also fills flags from input arguments'''
162 flags.Scheduler.CheckDependencies =
True
163 flags.Scheduler.ShowDataDeps =
True
164 flags.Scheduler.ShowDataFlow =
True
165 flags.Scheduler.ShowControlFlow =
True
166 flags.Scheduler.EnableVerboseViews =
True
168 flags.Detector.GeometryZDC=
True
169 flags.Detector.GeometryAFP=
False
170 flags.Detector.GeometryALFA=
False
171 flags.Detector.GeometryLucid=
False
172 flags.Detector.GeometryMDT=
False
173 flags.Detector.GeometryMM=
False
174 flags.Detector.GeometryMuon=
False
176 flags.Trigger.decodeHLT=
False
177 flags.Trigger.enableL1MuonPhase1=
False
178 flags.Trigger.L1.doMuon=
False
179 flags.Trigger.L1.doCalo=
False
180 flags.Trigger.L1.doTopo=
False
186 parser = flags.getArgumentParser()
187 parser.add_argument(
'--runInjForStandaloneData',default=
"Inj",help=
"indicate if we run inj/LED reconstruction for standalone data: inj (default) --> run injected-pulse reconstruction for injector-pulse events; LED --> run LED reconstruction for LED events")
188 flags.fillFromArgs(parser=parser)
192 '''Function that checks on data type from triggerstream tag
193 and sets run-type-and-year-dependent settings
194 Returns: a tuple of the following four values
195 isLED - bool, true if running on LED data
196 isInj - bool, true if running on Inj data
197 isCalib - bool, true if running on Calib data
198 pn - string, project name such as data24_hi
201 isComm = (flags.Input.ProjectName ==
"data25_comm" and flags.Input.TriggerStream ==
"calibration_ZDCCalib")
202 isLED = (flags.Input.TriggerStream ==
"calibration_ZDCLEDCalib")
203 isInj = (flags.Input.TriggerStream ==
"calibration_ZDCInjCalib" or isComm)
204 isCalib = (flags.Input.TriggerStream ==
"calibration_ZDCCalib" or "physics_" in flags.Input.TriggerStream
or flags.Input.TriggerStream ==
"express_express" and not isComm)
206 if flags.Input.TriggerStream ==
"calibration_DcmDummyProcessor":
207 runInjForStandaloneDataArgValid =
False
209 if flags.hasFlag(
"runInjForStandaloneData"):
210 if flags.runInjForStandaloneData.lower() ==
"inj":
212 runInjForStandaloneDataArgValid =
True
213 elif flags.runInjForStandaloneData.lower() ==
"led":
215 runInjForStandaloneDataArgValid =
True
217 if not runInjForStandaloneDataArgValid:
218 log.warning(
"runInjForStandaloneData is either not a defined flag or has invalid value (value must be Inj / LED, case insensitive).")
219 log.warning(
"Running nominal reconstruction (injector-pulse) by default for standalone data")
220 log.warning(
"Could lead to undesired behavior if pulsing LED in standalone mode")
224 log.info(
'ZdcRecConfig: Running LED data!')
226 log.info(
'ZdcRecConfig: Running Injected pulse data!')
228 log.info(
'ZdcRecConfig: Running ZDC calibration data!')
230 log.info(
'ZdcRecConfig: Running over MC Samples')
231 flags.Input.ProjectName =
"data23_hi"
232 flags.Reco.EnableTrigger =
False
235 pn = flags.Input.ProjectName
237 raise ValueError(
'Unknown project name')
239 if isLED
or isInj
or pn ==
'data_test':
240 flags.Trigger.EDMVersion=3
241 flags.GeoModel.Run = LHCPeriod.Run3
242 flags.IOVDb.GlobalTag=defaultConditionsTags.RUN3_DATA
244 year =
int(pn.split(
'_')[0].
split(
'data')[1])
246 flags.Trigger.EDMVersion=2
247 flags.GeoModel.Run = LHCPeriod.Run2
248 flags.IOVDb.GlobalTag=defaultConditionsTags.RUN2_DATA
250 flags.Trigger.EDMVersion=3
251 flags.GeoModel.Run = LHCPeriod.Run3
252 flags.IOVDb.GlobalTag=defaultConditionsTags.RUN3_DATA
255 log.info(
'ZdcRecConfig: Overriding MC run to be Run 3!')
256 flags.GeoModel.Run = LHCPeriod.Run3
259 or flags.Input.TriggerStream ==
"calibration_DcmDummyProcessor"
260 or pn ==
"data22_13p6TeV"):
261 flags.Detector.EnableZDC_RPD =
False
263 if flags.Input.TriggerStream ==
"calibration_DcmDummyProcessor":
264 flags.DQ.useTrigger =
False
265 flags.DQ.triggerDataAvailable =
False
269 return isLED, isInj, isCalib, pn
277 if flags.Input.Format
is Format.BS:
278 ZDC_ItemList.append(
"xAOD::ZdcModuleContainer#ZdcModules")
279 ZDC_ItemList.append(
"xAOD::ZdcModuleAuxContainer#ZdcModulesAux.")
280 ZDC_ItemList.append(
"xAOD::ZdcModuleContainer#ZdcSums")
281 ZDC_ItemList.append(
"xAOD::ZdcModuleAuxContainer#ZdcSumsAux.")
283 acc.merge(
addToESD(flags,ZDC_ItemList))
284 acc.merge(
addToAOD(flags,ZDC_ItemList))
286 if flags.Output.doWriteAOD:
287 from xAODMetaDataCnv.InfileMetaDataConfig
import SetupMetaDataForStreamCfg
293 def ZdcAnalysisToolCfg(flags, run, config="PbPb2023", DoCalib=False, DoFADCCorr=False, DoNonLinCorr=False, DoTimeCalib=False, DoTrigEff=False, ForceCalibRun=-1, ForceCalibLB=814, AuxSuffix=""):
296 log.info(
'ZdcAnalysisToolCfg: setting up ZdcAnalysisTool with config='+config)
300 if (config[-5:]==
'.json'):
303 log.info(
'ZdcAnalysisToolCfg: setting up with JSON file '+jsonFile)
305 acc.setPrivateTools(CompFactory.ZDC.ZdcAnalysisTool(
306 name =
'ZdcAnalysisTool'+config,
307 Configuration = config,
309 DoFADCCorr = DoFADCCorr,
310 DoFADCCorrPerSample =
True,
311 DoNonLinCorr = DoNonLinCorr,
312 DoTimeCalib = DoTimeCalib,
313 DoTrigEff = DoTrigEff,
314 ForceCalibRun = ForceCalibRun,
315 ForceCalibLB = ForceCalibLB,
316 AuxSuffix = AuxSuffix,
317 JSONConfigurationFile=jsonFile,
324 log.info(
'ZdcAnalysisToolCfg: setting up ZdcAnalysisTool with config='+config)
325 acc.setPrivateTools(CompFactory.ZDC.ZdcLEDAnalysisTool(name =
'ZdcLEDAnalysisTool'+config,
326 Configuration = config,
327 DoFADCCorr = DoFADCCorr))
336 trigValTool = CompFactory.ZDC.ZdcTrigValidTool(
337 name =
'ZdcTrigValTool',
340 filepath_LUT =
'TrigT1ZDC/zdc_json_PbPb5.36TeV_2023.json')
342 trigValTool.TrigDecisionTool = acc.getPublicTool(
'TrigDecisionTool')
344 trigValTool.triggerList = [c
for c
in getL1MenuAccess(flags)
if 'L1_ZDC_BIT' in c]
346 acc.setPrivateTools(trigValTool)
353 CompFactory.ZDC.RPDAnalysisTool(
354 name=
"RPDAnalysisTool",
355 Configuration=config,
356 AuxSuffix = AuxSuffix
364 CompFactory.ZDC.RpdSubtractCentroidTool(
365 name=
"RpdSubtractCentroidTool",
366 Configuration=config,
367 AuxSuffix = AuxSuffix
375 log.info (
'ZdcRecConfig.py: Running with config tag%s', config)
383 if flags.Input.ProjectName ==
"data15_hi":
387 elif flags.Input.ProjectName ==
"data17_13TeV":
391 elif flags.Input.ProjectName ==
"data16_hip":
395 elif flags.Input.ProjectName ==
"data18_hi":
400 acc.merge(
ByteStreamReadCfg(flags, type_names=[
'xAOD::TriggerTowerContainer/ZdcTriggerTowers',
401 'xAOD::TriggerTowerAuxContainer/ZdcTriggerTowersAux.']))
403 acc.addEventAlgo(CompFactory.ZdcByteStreamRawDataV2())
404 acc.addEventAlgo(CompFactory.ZdcRecV3Decode())
406 anaTool = acc.popToolsAndMerge(
ZdcAnalysisToolCfg(flags,2,config,doCalib,doFADCCorr,doNonLinCorr,doTimeCalib,doTrigEff))
408 acc.addEventAlgo(CompFactory.ZdcRecV3(
"ZdcRecV3",ZdcAnalysisTool=anaTool))
416 log.info (
'ZdcRecConfig.py: Running with config tag %s', config)
427 if flags.Input.TriggerStream !=
"calibration_ZDCInjCalib" and flags.Input.TriggerStream !=
"calibration_DcmDummyProcessor":
428 if flags.Common.isOnline:
431 if flags.Input.ProjectName ==
"data24_5p36TeV" or flags.Input.ProjectName ==
"data24_refcomm":
432 ForceCalibRun = 488239
434 elif flags.Input.ProjectName ==
"data24_hi" or flags.Input.ProjectName ==
"data24_hicomm":
435 ForceCalibRun = 488980
440 elif flags.Input.ProjectName ==
"data23_comm":
442 elif flags.Input.ProjectName ==
"data23_hi":
445 elif flags.Input.ProjectName ==
"data24_hi":
450 elif flags.Input.ProjectName
in [
"data25_hip",
"data25_hipcomm"]:
455 elif flags.Input.ProjectName
in [
"data25_hicomm"]:
460 elif flags.Input.ProjectName
in [
"data25_hi"]:
470 doRPD = flags.Detector.EnableZDC_RPD
472 log.info(
'ZdcRecRun3Cfg: doCalib = '+
str(doCalib)+
' for project '+flags.Input.ProjectName)
473 log.info(
'RPD enable flag is '+
str(doRPD))
476 if "ZdcModules" in flags.Input.Collections:
477 log.info(
'ZdcRecConfig.py: found ZdcModules in input, reprocessing mode set')
481 anaTool = acc.popToolsAndMerge(
ZdcAnalysisToolCfg(flags,3,config,doCalib,doFADCCorr,doNonLinCorr,doTimeCalib,doTrigEff,ForceCalibRun,ForceCalibLB, AuxSuffix))
488 if flags.Input.isMC :
491 zdcTools += [rpdAnaTool,centroidTool]
492 elif flags.Trigger.doZDC :
494 elif flags.Input.TriggerStream ==
"calibration_ZDCInjCalib" or flags.Input.TriggerStream ==
"calibration_DcmDummyProcessor":
496 elif flags.Common.isOnline:
499 zdcTools += [rpdAnaTool,centroidTool]
503 zdcTools += [rpdAnaTool,centroidTool]
506 zdcTools = [anaTool,trigTool]
508 zdcTools += [rpdAnaTool,centroidTool]
510 if flags.Input.Format
is Format.BS:
511 acc.addEventAlgo(CompFactory.ZdcByteStreamLucrodData())
512 acc.addEventAlgo(CompFactory.ZdcRecRun3Decode())
514 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
516 acc.addEventAlgo(CompFactory.ZdcMCTruthAlg())
518 zdcAlg = CompFactory.ZdcRecRun3(
"ZdcRecRun3",ZdcAnalysisTools=zdcTools)
519 acc.addEventAlgo(zdcAlg, primary=
True)
526 run = flags.GeoModel.Run
528 if run == LHCPeriod.Run2:
529 log.info (
'ZdcRecConfig.py: setting up Run 2 ntuple!')
531 elif run == LHCPeriod.Run3:
532 log.info (
'ZdcRecConfig.py: setting up Run 3 ntuples!')
535 log.info (
'ZdcRecConfig.py: setting up no ntuple!')
545 enableTrigger =
False,
546 enableOutputSamples =
True,
547 enableOutputTree =
True,
548 writeOnlyTriggers =
False,
552 acc.addService(CompFactory.THistSvc(Output = [
"ANALYSIS DATAFILE='zdctree.root' OPT='RECREATE'"]))
564 isMC = flags.Input.isMC,
565 enableTrigger =
not flags.Input.isMC,
566 enableOutputSamples =
True,
567 enableOutputTree =
True,
568 writeOnlyTriggers =
False,
569 enableRPD = flags.Detector.EnableZDC_RPD,
570 enableCentroid = flags.Detector.EnableZDC_RPD,
574 acc.addService(CompFactory.THistSvc(Output = [
"ANALYSIS DATAFILE='NTUP.root' OPT='RECREATE'"]))
588 enableTrigger =
False,
589 enableOutputSamples =
True,
590 enableOutputTree =
True,
591 writeOnlyTriggers =
False,
593 enableCentroid =
False,
597 acc.addService(CompFactory.THistSvc(Output = [
"ANALYSIS DATAFILE='NTUP.root' OPT='RECREATE'"]))
603 zdcLEDNtuple = CompFactory.ZdcLEDNtuple(
"ZdcLEDNtuple")
604 zdcLEDNtuple.enableOutputTree =
True
605 acc.addEventAlgo(zdcLEDNtuple)
606 acc.addService(CompFactory.THistSvc(Output = [
"ANALYSIS DATAFILE='NTUP.root' OPT='RECREATE'"]))
613 if flags.Input.Format
is Format.BS:
614 run = flags.GeoModel.Run
617 log.info (
"ZdcRecConfig.py: run = "+run.name)
619 config =
'ppPbPb2023'
623 if flags.Input.ProjectName
in [
"data24_hi",
"data25_hip",
"data25_hi"]:
626 acc.addEventAlgo(CompFactory.ZdcByteStreamLucrodData())
627 acc.addEventAlgo(CompFactory.ZdcRecRun3Decode())
632 zdcTools += [anaTool]
635 zdcAlg = CompFactory.ZdcRecRun3(
"ZdcRecRun3",DAQMode=2, ForcedEventType=2, ZdcAnalysisTools=zdcTools)
636 acc.addEventAlgo(zdcAlg, primary=
True)
638 if flags.Output.doWriteESD
or flags.Output.doWriteAOD:
648 tdmv = CompFactory.TrigDec.TrigDecisionMakerValidator()
649 tdmv.errorOnFailure =
True
652 acc.addEventAlgo( tdmv )
657 """Configure Zdc analysis alg
658 Additional arguments are useful in calibration runs
663 run = flags.GeoModel.Run
666 log.info (
"ZdcRecConfig.py: run = "+run.name)
668 if run == LHCPeriod.Run2:
669 log.info (
'ZdcRecConfig.py: setting up Run 2!')
671 elif run == LHCPeriod.Run3:
672 log.info (
'ZdcRecConfig.py: setting up Run 3!')
675 log.warning (
'ZdcRecConfig.py: setting up nothing (problem)!')
677 if flags.Output.doWriteESD
or flags.Output.doWriteAOD:
683 if __name__ ==
'__main__':
685 """ This is selftest & ZDC calibration transform at the same time"""
691 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
692 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
700 flags.Output.AODFileName=
"AOD.pool.root"
701 flags.Output.HISTFileName=
"HIST.root"
702 flags.Output.doWriteAOD=
True
711 from AtlasGeoModel.ForDetGeoModelConfig
import ForDetGeometryCfg
714 if not flags.Input.isMC
and pn !=
'data_test':
715 from TriggerJobOpts.TriggerRecoConfig
import TriggerRecoCfgData
725 if not flags.Input.isMC:
727 from ZdcMonitoring.ZdcLEDMonitorAlgorithm
import ZdcLEDMonitoringConfig
732 from ZdcMonitoring.ZdcMonitorAlgorithm
import ZdcMonitoringConfig
734 acc.merge(zdcMonitorAcc)
735 if flags.Input.TriggerStream !=
"calibration_DcmDummyProcessor":
738 from ZdcMonitoring.ZdcMonitorAlgorithm
import ZdcMonitoringConfig
740 acc.merge(zdcMonitorAcc)
746 acc.printConfig(withDetails=
True)
749 with open(
"config.pkl",
"wb")
as f:
753 sys.exit(status.isFailure())