Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
ZdcRecConfig.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 #
3 # Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
4 #
5 
6 from AthenaConfiguration.ComponentFactory import CompFactory
7 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
8 from AthenaConfiguration.Enums import Format
9 from AthenaConfiguration.Enums import LHCPeriod
10 
11 from OutputStreamAthenaPool.OutputStreamConfig import addToAOD
12 from OutputStreamAthenaPool.OutputStreamConfig import addToESD
13 
14 from TriggerJobOpts.TriggerByteStreamConfig import ByteStreamReadCfg
15 
16 from ZdcNtuple.ZdcNtupleConfig import ZdcNtupleCfg
17 
18 # FIXME: removing for MC
19 from TrigConfigSvc.TriggerConfigAccess import getL1MenuAccess
20 # added getRun3NavigationContainerFromInput as per Tim Martin's suggestions
21 from TrigDecisionTool.TrigDecisionToolConfig import TrigDecisionToolCfg, getRun3NavigationContainerFromInput
22 from AthenaConfiguration.TestDefaults import defaultGeometryTags, defaultConditionsTags
23 
24 zdcConfigMap = {}
25 
26 defaultGeometryZdcRun2 = "ATLAS-R2-2016-01-03-00"
27 defaultGeometryZdc2023 = "ATLAS-R3S-2021-03-03-00"
28 defaultGeometryZdc2024 = "ATLAS-R3S-2021-03-04-00"
29 
30 def zdcGeometry(flags):
31  projName = flags.Input.ProjectName
32  match projName:
33  case "data15_hi":
34  return defaultGeometryZdcRun2
35  case "data18_hi":
36  return defaultGeometryZdcRun2
37  case "data16_hi":
38  return defaultGeometryZdcRun2
39  case "data16_hip":
40  return defaultGeometryZdcRun2
41  case "data23_hi":
42  return defaultGeometryZdc2023
43  case "data24_hi":
44  return defaultGeometryZdc2024
45  case "data24_hicomm":
46  return defaultGeometryZdc2024
47  case _:
48  run = flags.GeoModel.Run
49  if (run == LHCPeriod.RUN2):
50  return defaultGeometryTags.RUN2
51  if (run == LHCPeriod.RUN3):
52  return defaultGeometryTags.RUN3
53  return ""
54 
56 
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'] = {}
68 
69  zdcConfigMap['data24_13p6TeV'] = {}
70  zdcConfigMap['data24_13p6TeV']['default'] = 'pp2024'
71 
72  zdcConfigMap['data24_refcomm'] = {}
73  zdcConfigMap['data24_refcomm']['default'] = 'pp2024'
74  zdcConfigMap['data24_refcomm']['calibration_ZdcInjCalib'] = 'Injectorpp2024'
75 
76  zdcConfigMap['data24_hicomm'] = {}
77  zdcConfigMap['data24_hicomm']['default'] = 'PbPb2024'
78  zdcConfigMap['data24_hicomm']['calibration_ZdcInjCalib'] = 'InjectorPbPb2024'
79 
80  zdcConfigMap['data24_hi'] = {}
81  zdcConfigMap['data24_hi']['default']="PbPb2024"
82  zdcConfigMap['data24_hi']['calibration_ZdcInjCalib']="InjectorPbPb2024"
83 
84 def SetConfigTag(flags):
85 
86  if flags.Input.TriggerStream == "calibration_ZDCInjCalib" or flags.Input.TriggerStream == "calibration_DcmDummyProcessor": # calibration_DcmDummyProcessor is the "trigger stream" in the data we record in the standalone partition that is NOT LED data
87  config = "Injectorpp2024" # default config tag for injector pulse
88 
89  if flags.Input.ProjectName == "data24_hi" or flags.Input.ProjectName == "data24_hicomm":
90  config = "InjectorPbPb2024"
91  else:
92  config = "PbPb2023" # default config tag
93 
94  run = flags.GeoModel.Run
95  if (run == LHCPeriod.Run3):
96  if flags.Input.isMC:
97  config = "MonteCarloPbPb2023"
98  elif flags.Input.ProjectName == "data22_13p6TeV":
99  config = "LHCf2022"
100  elif flags.Input.ProjectName == "data23_5p36TeV" or flags.Input.ProjectName == "data23_900GeV" or flags.Input.ProjectName == "data23_13p6TeV":
101  config = "pp2023"
102  elif flags.Input.ProjectName == "data23_hi" or flags.Input.ProjectName == "data23_comm":
103  config = "PbPb2023"
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":
105  config = "pp2024"
106  elif flags.Input.ProjectName == "data24_hi" or flags.Input.ProjectName == "data24_hicomm":
107  config = "PbPb2024"
108  elif (run == LHCPeriod.Run2):
109  if flags.Input.ProjectName == "data15_hi":
110  config = "PbPb2015"
111  elif flags.Input.ProjectName == "data17_13TeV":
112  config = "PbPb2015"
113  elif flags.Input.ProjectName == "data16_hip":
114  config = "pPb2016"
115  elif flags.Input.ProjectName == "data18_hi":
116  config = "PbPb2018"
117 
118  return config
119 
120 def ZdcRecOutputCfg(flags):
121 
122  acc = ComponentAccumulator()
123 
124  ZDC_ItemList=[]
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.")
130 
131  acc.merge(addToESD(flags,ZDC_ItemList))
132  acc.merge(addToAOD(flags,ZDC_ItemList))
133 
134  # In case running standalone (i.e. not within RecoSteering)
135  if flags.Output.doWriteAOD:
136  from xAODMetaDataCnv.InfileMetaDataConfig import SetupMetaDataForStreamCfg
137  acc.merge(SetupMetaDataForStreamCfg(flags,streamName="AOD"))
138 
139  return acc
140 
141 
142 def ZdcAnalysisToolCfg(flags, run, config="PbPb2023", DoCalib=False, DoFADCCorr=False, DoNonLinCorr=False, DoTimeCalib=False, DoTrigEff=False, ForceCalibRun=-1, ForceCalibLB=814):
143  acc = ComponentAccumulator()
144 
145  print('ZdcAnalysisToolCfg: setting up ZdcAnalysisTool with config='+config)
146 
147  acc.setPrivateTools(CompFactory.ZDC.ZdcAnalysisTool(
148  name = 'ZdcAnalysisTool'+config,
149  Configuration = config,
150  DoCalib = DoCalib,
151  DoFADCCorr = DoFADCCorr,
152  DoNonLinCorr = DoNonLinCorr,
153  DoTimeCalib = DoTimeCalib,
154  DoTrigEff = DoTrigEff,
155  ForceCalibRun = ForceCalibRun,
156  ForceCalibLB = ForceCalibLB,
157  LHCRun = run ))
158  return acc
159 
160 def ZdcLEDAnalysisToolCfg(flags, config = 'ppPbPb2023', DoFADCCorr = True):
161  acc = ComponentAccumulator()
162 
163  print('ZdcAnalysisToolCfg: setting up ZdcAnalysisTool with config='+config)
164  acc.setPrivateTools(CompFactory.ZDC.ZdcLEDAnalysisTool(name = 'ZdcLEDAnalysisTool'+config,
165  Configuration = config,
166  DoFADCCorr = DoFADCCorr))
167  return acc
168 
169 
170 def ZdcTrigValToolCfg(flags, config = 'PbPb2023'):
171  acc = ComponentAccumulator()
172 
173  acc.merge(TrigDecisionToolCfg(flags))
174 
175  trigValTool = CompFactory.ZDC.ZdcTrigValidTool(
176  name = 'ZdcTrigValTool',
177  WriteAux = True,
178  AuxSuffix = '',
179  filepath_LUT = 'TrigT1ZDC/zdc_json_PbPb5.36TeV_2023.json') # changed on Oct 13 to accomodate Zdc 1n peak shift
180 
181  trigValTool.TrigDecisionTool = acc.getPublicTool('TrigDecisionTool')
182 
183  trigValTool.triggerList = [c for c in getL1MenuAccess(flags) if 'L1_ZDC_BIT' in c]
184 
185  acc.setPrivateTools(trigValTool)
186 
187  return acc
188 
189 def RPDAnalysisToolCfg(flags, config: str):
190  acc = ComponentAccumulator()
191  acc.setPrivateTools(
192  CompFactory.ZDC.RPDAnalysisTool(
193  name="RPDAnalysisTool",
194  Configuration=config
195  )
196  )
197  return acc
198 
199 def RpdSubtractCentroidToolCfg(flags, config: str):
200  acc = ComponentAccumulator()
201  acc.setPrivateTools(
202  CompFactory.ZDC.RpdSubtractCentroidTool(
203  name="RpdSubtractCentroidTool",
204  Configuration=config
205  )
206  )
207  return acc
208 
209 def ZdcRecRun2Cfg(flags):
210  acc = ComponentAccumulator()
211  config = SetConfigTag(flags)
212  print ('ZdcRecConfig.py: Running with config tag ', config)
213 
214  doCalib = False
215  doTimeCalib = False
216  doTrigEff = False
217  doNonLinCorr = False
218  doFADCCorr = False
219 
220  if flags.Input.ProjectName == "data15_hi":
221  doCalib = True
222  doTimeCalib = True
223  doTrigEff = True
224  elif flags.Input.ProjectName == "data17_13TeV":
225  doCalib = False
226  doTimeCalib = False
227  doTrigEff = False
228  elif flags.Input.ProjectName == "data16_hip":
229  doCalib = True
230  doTimeCalib = False
231  doTrigEff = False
232  elif flags.Input.ProjectName == "data18_hi":
233  doCalib = True
234  doTimeCalib = False
235  doTrigEff = False
236 
237  acc.merge(ByteStreamReadCfg(flags, type_names=['xAOD::TriggerTowerContainer/ZdcTriggerTowers',
238  'xAOD::TriggerTowerAuxContainer/ZdcTriggerTowersAux.']))
239 
240  acc.addEventAlgo(CompFactory.ZdcByteStreamRawDataV2())
241  acc.addEventAlgo(CompFactory.ZdcRecV3Decode())
242 
243  anaTool = acc.popToolsAndMerge(ZdcAnalysisToolCfg(flags,2,config,doCalib,doFADCCorr,doNonLinCorr,doTimeCalib,doTrigEff))
244 
245  acc.addEventAlgo(CompFactory.ZdcRecV3("ZdcRecV3",ZdcAnalysisTool=anaTool))
246 
247  return acc
248 
249 def ZdcRecRun3Cfg(flags):
250 
251  acc = ComponentAccumulator()
252  config = SetConfigTag(flags)
253  print ('ZdcRecConfig.py: Running with config tag ', config)
254 
255  doCalib = False
256  doTimeCalib = False
257  doTrigEff = False
258  doFADCCorr = False
259  doNonLinCorr = True #default for 2023
260  ForceCalibRun = -1
261  ForceCalibLB = 814
262 
263  if flags.Input.TriggerStream != "calibration_ZDCInjCalib" and flags.Input.TriggerStream != "calibration_DcmDummyProcessor":
264  if flags.Common.isOnline: # calibration file for ongoing run not available - copy calib file from eos & hard code the run + lb
265  doCalib = True
266  doTimeCalib = True
267  if flags.Input.ProjectName == "data24_5p36TeV" or flags.Input.ProjectName == "data24_refcomm":
268  ForceCalibRun = 488239
269  ForceCalibLB = 1
270  elif flags.Input.ProjectName == "data24_hi" or flags.Input.ProjectName == "data24_hicomm":
271  ForceCalibRun = 488980 # place holder available at point1 - replace with a 2024 run during data taking
272  ForceCalibLB = 80
273  else:
274  doCalib = False
275  doTimeCalib = False
276  elif flags.Input.ProjectName == "data23_comm":
277  doCalib = True
278  elif flags.Input.ProjectName == "data23_hi": # for "data24_hi" or "data24_5p36TeV," need to also check flags.Input.TriggerStream != "calibration_ZDCInjCalib"
279  doCalib = True
280  doTimeCalib = True
281  elif flags.Input.ProjectName == "data24_hi": # for "data24_hi" or "data24_5p36TeV," need to also check flags.Input.TriggerStream != "calibration_ZDCInjCalib"
282  doCalib = True
283  doTimeCalib = True
284  doFADCCorr = False
285  doNonLinCorr = False
286 
287  # No calibration required (or exists) for MC
288  if flags.Input.isMC:
289  doCalib = False
290 
291  doRPD = flags.Detector.EnableZDC_RPD
292 
293  print('ZdcRecRun3Cfg: doCalib = '+str(doCalib)+' for project '+flags.Input.ProjectName)
294  print('RPD enable flag is '+str(doRPD))
295 
296  anaTool = acc.popToolsAndMerge(ZdcAnalysisToolCfg(flags,3,config,doCalib,doFADCCorr,doNonLinCorr,doTimeCalib,doTrigEff,ForceCalibRun,ForceCalibLB))
297 
298  if (doRPD):
299  rpdAnaTool = acc.popToolsAndMerge(RPDAnalysisToolCfg(flags, config))
300  centroidTool = acc.popToolsAndMerge(RpdSubtractCentroidToolCfg(flags, config))
301 
302  if ( flags.Input.isMC ):
303  zdcTools = [anaTool] # expand list as needed
304  if doRPD:
305  zdcTools += [rpdAnaTool,centroidTool]
306  elif ( flags.Trigger.doZDC ): # if doZDC flag is true we are in a trigger reprocessing -> no TrigValidTool
307  zdcTools = [anaTool] # expand list as needed
308  elif flags.Input.TriggerStream == "calibration_ZDCInjCalib" or flags.Input.TriggerStream == "calibration_DcmDummyProcessor":
309  zdcTools = [anaTool] # no trigger / RPD / centroid - either online or offline
310  elif (flags.Common.isOnline): # running online + NOT injector pulse: with RPD + centroid but no trigger validation for now; may add later
311  zdcTools = [anaTool] # expand list as needed
312  if doRPD:
313  zdcTools += [rpdAnaTool,centroidTool]
314  else: # default (not MC, not trigger repoc, not injector pulse, not online)
315  trigTool = acc.popToolsAndMerge(ZdcTrigValToolCfg(flags,config))
316  zdcTools = [anaTool,trigTool] # expand list as needed
317  if doRPD:
318  zdcTools += [rpdAnaTool,centroidTool]
319 
320  if flags.Input.Format is Format.BS:
321  acc.addEventAlgo(CompFactory.ZdcByteStreamLucrodData())
322  acc.addEventAlgo(CompFactory.ZdcRecRun3Decode())
323  if flags.Input.isMC:
324  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
325  acc.merge(PoolReadCfg(flags))
326  acc.addEventAlgo(CompFactory.ZdcMCTruthAlg())
327 
328  zdcAlg = CompFactory.ZdcRecRun3("ZdcRecRun3",ZdcAnalysisTools=zdcTools)
329  acc.addEventAlgo(zdcAlg, primary=True)
330 
331  return acc
332 
333 def ZdcNtupleLocalCfg(flags):
334 
335  acc = ComponentAccumulator()
336  run = flags.GeoModel.Run
337 
338  if (run == LHCPeriod.Run2):
339  print ('ZdcRecConfig.py: setting up Run 2 ntuple!')
340  acc.merge(ZdcNtupleRun2Cfg(flags))
341  elif (run == LHCPeriod.Run3):
342  print ('ZdcRecConfig.py: setting up Run 3 ntuples!')
343  acc.merge(ZdcNtupleRun3Cfg(flags))
344  else:
345  print ('ZdcRecConfig.py: setting up no ntuple!')
346 
347  return acc
348 
349 def ZdcNtupleRun2Cfg(flags,**kwargs):
350 
351  acc = ComponentAccumulator()
352  acc.merge(ZdcNtupleCfg(flags,
353  useGRL = False,
354  zdcOnly = True,
355  enableTrigger = False,
356  enableOutputSamples = True,
357  enableOutputTree = True,
358  writeOnlyTriggers = False,
359  nsamplesZdc = 7,
360  **kwargs))
361 
362  acc.addService(CompFactory.THistSvc(Output = ["ANALYSIS DATAFILE='zdctree.root' OPT='RECREATE'"]))
363 # acc.setAppProperty("HistogramPersistency","ROOT")
364  return acc
365 
366 def ZdcNtupleRun3Cfg(flags,**kwargs):
367 
368  acc = ComponentAccumulator()
369  acc.merge(ZdcNtupleCfg(flags,
370  useGRL = False,
371  zdcOnly = True,
372  lhcf2022 = False,
373  lhcf2022zdc = False,
374  lhcf2022afp = False,
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,
382  reprocZdc = False,
383  **kwargs))
384 
385  acc.addService(CompFactory.THistSvc(Output = ["ANALYSIS DATAFILE='NTUP.root' OPT='RECREATE'"]))
386  #acc.setAppProperty("HistogramPersistency","ROOT")
387  return acc
388 
389 def ZdcInjNtupleCfg(flags,**kwargs):
390 
391  acc = ComponentAccumulator()
392  acc.merge(ZdcNtupleCfg(flags,
393  useGRL = False,
394  zdcOnly = True,
395  zdcInj = True,
396  lhcf2022 = False,
397  lhcf2022zdc = False,
398  lhcf2022afp = False,
399  enableTrigger = False,
400  enableOutputSamples = True,
401  enableOutputTree = True,
402  writeOnlyTriggers = False,
403  enableRPD = False,
404  enableCentroid = False,
405  reprocZdc = False,
406  **kwargs))
407 
408  acc.addService(CompFactory.THistSvc(Output = ["ANALYSIS DATAFILE='NTUP.root' OPT='RECREATE'"]))
409  #acc.setAppProperty("HistogramPersistency","ROOT")
410  return acc
411 
412 def ZdcLEDNtupleCfg(flags):
413  acc = ComponentAccumulator()
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'"]))
418  return acc
419 
420 def ZdcLEDRecCfg(flags):
421 
422  acc = ComponentAccumulator()
423 
424  if flags.Input.Format is Format.BS:
425  run = flags.GeoModel.Run
426 
427  # debugging message since the metadata isn't working for calibration files yet
428  print ("ZdcRecConfig.py: run = "+run.name)
429 
430  config = 'ppPbPb2023'
431  #config = 'ppALFA2023'
432  doFADCCorr = False
433 
434  if (flags.GeoModel.Run == LHCPeriod.Run3):
435  doFADCCorr = False
436 
437  acc.addEventAlgo(CompFactory.ZdcByteStreamLucrodData())
438  acc.addEventAlgo(CompFactory.ZdcRecRun3Decode())
439 
440  anaTool = acc.popToolsAndMerge(ZdcLEDAnalysisToolCfg(flags, config, DoFADCCorr = doFADCCorr)) #anatool for zdcLED calibration
441 
442  zdcTools = []
443  zdcTools += [anaTool] # add trigTool after deocration migration
444 
445  # FIXME these are dependent on !65768
446  zdcAlg = CompFactory.ZdcRecRun3("ZdcRecRun3",DAQMode=2, ForcedEventType=2, ZdcAnalysisTools=zdcTools) # DAQMode set to PhysicsPEB, event type set to ZdcEventLED
447  acc.addEventAlgo(zdcAlg, primary=True)
448 
449  if flags.Output.doWriteESD or flags.Output.doWriteAOD:
450  acc.merge(ZdcRecOutputCfg(flags))
451 
452  return acc
453 
454 def ZdcLEDTrigCfg(flags):
455 
456  acc = ComponentAccumulator()
457 
458  # suggested by Tim Martin
459  tdmv = CompFactory.TrigDec.TrigDecisionMakerValidator()
460  tdmv.errorOnFailure = True
461  tdmv.TrigDecisionTool = acc.getPrimaryAndMerge(TrigDecisionToolCfg(flags))
462  tdmv.NavigationKey = getRun3NavigationContainerFromInput(flags)
463  acc.addEventAlgo( tdmv )
464  # end of Tim's suggestions
465  return acc
466 
467 def ZdcRecCfg(flags):
468  """Configure Zdc analysis alg
469  Additional arguments are useful in calibration runs
470  """
471 
472  acc = ComponentAccumulator()
473 
474  run = flags.GeoModel.Run
475 
476  # debugging message since the metadata isn't working for calibration files yet
477  print ("ZdcRecConfig.py: run = "+run.name)
478 
479  if (run == LHCPeriod.Run2):
480  print ('ZdcRecConfig.py: setting up Run 2!')
481  acc.merge(ZdcRecRun2Cfg(flags))
482  elif (run == LHCPeriod.Run3):
483  print ('ZdcRecConfig.py: setting up Run 3!')
484  acc.merge(ZdcRecRun3Cfg(flags))
485  else:
486  print ('ZdcRecConfig.py: setting up nothing (problem)!')
487 
488  if flags.Output.doWriteESD or flags.Output.doWriteAOD:
489  acc.merge(ZdcRecOutputCfg(flags))
490 
491  return acc
492 
493 
494 if __name__ == '__main__':
495 
496  """ This is selftest & ZDC calibration transform at the same time"""
497  from AthenaConfiguration.AllConfigFlags import initConfigFlags
498  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
499 
500  flags = initConfigFlags()
501 
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
507 
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
520  #flags.Reco.EnableTrigger = False
521 
522  # This does not work in this context
523  # run = flags.GeoModel.Run
524  # The EDM Version should be auto configured, but is not working at the moment, so is set by hand
525 
526  flags.Output.AODFileName="AOD.pool.root"
527  flags.Output.HISTFileName="HIST.root"
528  flags.Output.doWriteAOD=True
529 
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)
533 
534  # check for LED / calibration data running, and configure appropriately
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": # standalone data: do we want to run calibration or LED?
539  if args.runCalibForStandaloneData == "Calib" or args.runCalibForStandaloneData == "calib":
540  isCalib = True
541  elif args.runCalibForStandaloneData == "LED" or args.runCalibForStandaloneData == "led":
542  isLED = True
543  else:
544  print('WARNING: The value for the argument runCalibForStandaloneData is invalid')
545  print('Running nominal reconstruction (injector-pulse) by default')
546  isCalib = True
547 
548  if (isLED):
549  print('ZdcRecConfig: Running LED data!')
550  if (isInj):
551  print('ZdcRecConfig: Running Injected pulse data!')
552  if (isCalib):
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
558 
559  # supply missing metadata based on project name
560  pn = flags.Input.ProjectName
561  if not pn:
562  raise ValueError('Unknown project name')
563 
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
568  else:
569  year = int(pn.split('_')[0].split('data')[1])
570  if (year < 20):
571  flags.Trigger.EDMVersion=2
572  flags.GeoModel.Run = LHCPeriod.Run2
573  flags.IOVDb.GlobalTag=defaultConditionsTags.RUN2_DATA
574  elif (year > 20):
575  flags.Trigger.EDMVersion=3
576  flags.GeoModel.Run = LHCPeriod.Run3
577  flags.IOVDb.GlobalTag=defaultConditionsTags.RUN3_DATA
578 
579  if (flags.Input.isMC):
580  print('ZdcRecConfig: Overriding MC run to be Run 3!')
581  flags.GeoModel.Run = LHCPeriod.Run3
582 
583  if (isInj
584  or flags.Input.TriggerStream == "calibration_DcmDummyProcessor"
585  or pn == "data22_13p6TeV"):
586  flags.Detector.EnableZDC_RPD = False # disable RPD for injector, LHCf
587 
588  if flags.Input.TriggerStream == "calibration_DcmDummyProcessor": # standalone data: no trigger info available
589  flags.DQ.useTrigger = False
590  flags.DQ.triggerDataAvailable = False
591 
592  flags.GeoModel.AtlasVersion=zdcGeometry(flags)
593 
594  flags.lock()
595  # flags.dump(evaluate=True) # uncomment this line if needed for testing
596 
597  acc=MainServicesCfg(flags)
598 
599  from AtlasGeoModel.ForDetGeoModelConfig import ForDetGeometryCfg
600  acc.merge(ForDetGeometryCfg(flags))
601 
602  if not flags.Input.isMC and pn != 'data_test': # trigger reco config not existing for MC or standalone
603  from TriggerJobOpts.TriggerRecoConfig import TriggerRecoCfgData
604  acc.merge(TriggerRecoCfgData(flags))
605 
606  if isLED:
607  #acc.merge(ZdcLEDTrigCfg(flags))
608  acc.merge(ZdcLEDRecCfg(flags))
609  if isCalib: # should be able to run both if in standalone data
610  acc.merge(ZdcRecCfg(flags))
611  if isInj: # should be able to run both if in standalone data
612  acc.merge(ZdcRecCfg(flags))
613 
614  if not flags.Input.isMC:
615  if (isLED):
616  from ZdcMonitoring.ZdcLEDMonitorAlgorithm import ZdcLEDMonitoringConfig
617  acc.merge(ZdcLEDMonitoringConfig(flags,'ppPbPb2023'))
618  acc.merge(ZdcLEDNtupleCfg(flags))
619 
620  if (isCalib):
621  from ZdcMonitoring.ZdcMonitorAlgorithm import ZdcMonitoringConfig
622  zdcMonitorAcc = ZdcMonitoringConfig(flags)
623  acc.merge(zdcMonitorAcc)
624  # zdcMonitorAcc.getEventAlgo('ZdcMonAlg').OutputLevel = 2 # turn on DEBUG messages
625  if (flags.Input.TriggerStream != "calibration_DcmDummyProcessor"): #after ntuple works for standalone data, take this line out
626  acc.merge(ZdcNtupleLocalCfg(flags))
627 
628  if (isInj):
629  from ZdcMonitoring.ZdcMonitorAlgorithm import ZdcMonitoringConfig
630  zdcMonitorAcc = ZdcMonitoringConfig(flags)
631  acc.merge(zdcMonitorAcc)
632  # zdcMonitorAcc.getEventAlgo('ZdcMonAlg').OutputLevel = 2 # turn on DEBUG messages
633  acc.merge(ZdcInjNtupleCfg(flags))
634  else:
635  acc.merge(ZdcRecCfg(flags))
636  acc.merge(ZdcNtupleLocalCfg(flags))
637 
638  acc.printConfig(withDetails=True)
639 
640  with open("config.pkl", "wb") as f:
641  acc.store(f)
642  status = acc.run()
643  if status.isFailure():
644  import sys
645  sys.exit(-1)
646 
python.JetAnalysisCommon.ComponentAccumulator
ComponentAccumulator
Definition: JetAnalysisCommon.py:302
python.ZdcRecConfig.ZdcRecRun2Cfg
def ZdcRecRun2Cfg(flags)
Definition: ZdcRecConfig.py:209
ZdcLEDMonitorAlgorithm.ZdcLEDMonitoringConfig
def ZdcLEDMonitoringConfig(inputFlags, run_type)
Definition: ZdcLEDMonitorAlgorithm.py:14
python.ZdcRecConfig.ZdcNtupleRun2Cfg
def ZdcNtupleRun2Cfg(flags, **kwargs)
Definition: ZdcRecConfig.py:349
python.ForDetGeoModelConfig.ForDetGeometryCfg
def ForDetGeometryCfg(flags)
Definition: ForDetGeoModelConfig.py:33
python.ZdcRecConfig.ZdcNtupleRun3Cfg
def ZdcNtupleRun3Cfg(flags, **kwargs)
Definition: ZdcRecConfig.py:366
python.ZdcRecConfig.ZdcTrigValToolCfg
def ZdcTrigValToolCfg(flags, config='PbPb2023')
Definition: ZdcRecConfig.py:170
python.TriggerRecoConfig.TriggerRecoCfgData
def TriggerRecoCfgData(flags)
Definition: TriggerRecoConfig.py:23
python.ByteStreamConfig.ByteStreamReadCfg
def ByteStreamReadCfg(flags, type_names=None)
Definition: Event/ByteStreamCnvSvc/python/ByteStreamConfig.py:25
python.ZdcRecConfig.ZdcInjNtupleCfg
def ZdcInjNtupleCfg(flags, **kwargs)
Definition: ZdcRecConfig.py:389
python.ZdcRecConfig.ZdcRecCfg
def ZdcRecCfg(flags)
Definition: ZdcRecConfig.py:467
python.ZdcRecConfig.zdcGeometry
def zdcGeometry(flags)
Definition: ZdcRecConfig.py:30
ZdcNtupleConfig.ZdcNtupleCfg
def ZdcNtupleCfg(flags, name="ZdcNtuple", **kwargs)
Definition: ZdcNtupleConfig.py:7
python.ZdcRecConfig.ZdcRecRun3Cfg
def ZdcRecRun3Cfg(flags)
Definition: ZdcRecConfig.py:249
python.ZdcRecConfig.RpdSubtractCentroidToolCfg
def RpdSubtractCentroidToolCfg(flags, str config)
Definition: ZdcRecConfig.py:199
python.TriggerConfigAccess.getL1MenuAccess
L1MenuAccess getL1MenuAccess(flags=None)
Definition: TriggerConfigAccess.py:129
python.ZdcRecConfig.GenerateConfigTagDict
def GenerateConfigTagDict()
Definition: ZdcRecConfig.py:55
python.TrigDecisionToolConfig.getRun3NavigationContainerFromInput
def getRun3NavigationContainerFromInput(flags)
Definition: TrigDecisionToolConfig.py:63
python.LArMinBiasAlgConfig.int
int
Definition: LArMinBiasAlgConfig.py:59
python.ZdcRecConfig.ZdcLEDRecCfg
def ZdcLEDRecCfg(flags)
Definition: ZdcRecConfig.py:420
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:260
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
python.OutputStreamConfig.addToESD
def addToESD(flags, itemOrList, **kwargs)
Definition: OutputStreamConfig.py:127
python.ZdcRecConfig.RPDAnalysisToolCfg
def RPDAnalysisToolCfg(flags, str config)
Definition: ZdcRecConfig.py:189
python.TriggerInterface.TrigDecisionToolCfg
def TrigDecisionToolCfg(flags)
Definition: TriggerInterface.py:14
Trk::open
@ open
Definition: BinningType.h:40
python.ZdcRecConfig.ZdcLEDAnalysisToolCfg
def ZdcLEDAnalysisToolCfg(flags, config='ppPbPb2023', DoFADCCorr=True)
Definition: ZdcRecConfig.py:160
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
python.OutputStreamConfig.addToAOD
def addToAOD(flags, itemOrList, **kwargs)
Definition: OutputStreamConfig.py:142
python.ZdcRecConfig.ZdcRecOutputCfg
def ZdcRecOutputCfg(flags)
Definition: ZdcRecConfig.py:120
ZdcMonitorAlgorithm.ZdcMonitoringConfig
def ZdcMonitoringConfig(inputFlags)
Definition: ZdcMonitorAlgorithm.py:87
python.ZdcRecConfig.ZdcLEDNtupleCfg
def ZdcLEDNtupleCfg(flags)
Definition: ZdcRecConfig.py:412
str
Definition: BTagTrackIpAccessor.cxx:11
python.ZdcRecConfig.ZdcLEDTrigCfg
def ZdcLEDTrigCfg(flags)
Definition: ZdcRecConfig.py:454
python.ZdcRecConfig.ZdcNtupleLocalCfg
def ZdcNtupleLocalCfg(flags)
Definition: ZdcRecConfig.py:333
python.ZdcRecConfig.SetConfigTag
def SetConfigTag(flags)
Definition: ZdcRecConfig.py:84
InfileMetaDataConfig.SetupMetaDataForStreamCfg
def SetupMetaDataForStreamCfg(flags, streamName="", AcceptAlgs=None, createMetadata=None, propagateMetadataFromInput=True, *args, **kwargs)
Definition: InfileMetaDataConfig.py:222
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:69
python.ZdcRecConfig.ZdcAnalysisToolCfg
def ZdcAnalysisToolCfg(flags, run, config="PbPb2023", DoCalib=False, DoFADCCorr=False, DoNonLinCorr=False, DoTimeCalib=False, DoTrigEff=False, ForceCalibRun=-1, ForceCalibLB=814)
Definition: ZdcRecConfig.py:142
Trk::split
@ split
Definition: LayerMaterialProperties.h:38