ATLAS Offline Software
TileTBAANtupleConfig.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 #
3 # Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
4 #
5 '''
6 @file TileTBAANtupleConfig.py
7 @brief Python configuration of TileTBAANtuple algorithm for the Run III
8 '''
9 
10 from AthenaConfiguration.ComponentFactory import CompFactory
11 from TileConfiguration.TileConfigFlags import TileRunType
12 
13 import sys
14 
15 
16 def getTileTBperiod(run, useFELIX):
17  ''' Function to get Tile TB period.'''
18 
19  TBperiod = 2015 if (run // 100000 == 5) else 2016
20 
21  if useFELIX:
22  TBperiod = 2017
23  if run > 800000:
24  TBperiod += 2
25  if run >= 2200000:
26  TBperiod = 2022
27  elif run >= 2110000:
28  TBperiod = 2021
29 
30  return TBperiod
31 
32 
33 def TileTBAANtupleCfg(flags, outputFile='', useFELIX=None, **kwargs):
34 
35  ''' Function to configure TileTBAANtuple algorithm.'''
36 
37  cisRun = flags.Tile.RunType is TileRunType.CIS
38  monoRun = flags.Tile.RunType is TileRunType.MONOCIS
39  pedestalRun = flags.Tile.RunType is TileRunType.PED
40 
41  # Units: TileRawChannelUnit::ADC (0) or TileRawChannelUnit::MegaElectronVolts (3)
42  offlineUnits = 0 if cisRun or monoRun or pedestalRun else 3
43  calibrateEnergy = (offlineUnits != 0)
44 
45  run = flags.Input.RunNumbers[0]
46 
47  if useFELIX is None:
48  useFELIX = True if run > 2310438 else False
49 
50  TBperiod = getTileTBperiod(run, useFELIX) if not flags.Input.isMC else 2003
51 
52  kwargs.setdefault('TileDigitsContainer', 'TileDigitsCnt')
53  kwargs.setdefault('TileBeamElemContainer', 'TileBeamElemCnt' if not flags.Input.isMC else "")
54  kwargs.setdefault('TileRawChannelContainerFlat', "")
55  kwargs.setdefault('TileRawChannelContainerFit', 'TileRawChannelFit' if flags.Tile.doFit else "")
56  kwargs.setdefault('TileRawChannelContainerOpt', "TileRawChannelOpt2" if flags.Tile.doOpt2 else "")
57  kwargs.setdefault('TileRawChannelContainerDsp', "")
58  kwargs.setdefault('TileRawChannelContainerFitCool', 'TileRawChannelFitCool' if flags.Tile.doFitCOOL else "")
59 
60  kwargs.setdefault('TileDigitsContainerFlx', 'TileDigitsFlxCnt' if useFELIX else "")
61  kwargs.setdefault('TileRawChannelContainerFitFlx', 'TileRawChannelFlxFit' if useFELIX and flags.Tile.doFit else "")
62  kwargs.setdefault('TileRawChannelContainerOptFlx', 'TileRawChannelFlxOpt2' if useFELIX and flags.Tile.doOpt2 else "")
63 
64  kwargs.setdefault('TileHitContainer', 'TileHitCnt' if flags.Input.isMC else "")
65  kwargs.setdefault('TileHitVector', 'TileHitVec' if flags.Input.isMC else "")
66  kwargs.setdefault('CaloCellContainer', 'AllCalo')
67 
68  kwargs.setdefault('TileLaserObj', "")
69 
70  kwargs.setdefault('OfflineUnits', offlineUnits)
71  kwargs.setdefault('CalibrateEnergy', calibrateEnergy)
72  kwargs.setdefault('CalibMode', pedestalRun or cisRun)
73  kwargs.setdefault('PMTOrder', not (cisRun or monoRun or pedestalRun))
74 
75  kwargs.setdefault('NSamples', -1)
76  kwargs.setdefault('NSamplesFelix', 16 if useFELIX else 0)
77 
78  kwargs.setdefault('TBperiod', TBperiod)
79 
80  if flags.Input.isMC:
81  kwargs.setdefault('beamFragList', [])
82  kwargs.setdefault('CompleteNtuple', False)
83 
84  from TileGeoModel.TileGMConfig import TileGMCfg
85  acc = TileGMCfg(flags)
86 
87  from TileConditions.TileCablingSvcConfig import TileCablingSvcCfg
88  acc.merge( TileCablingSvcCfg(flags) )
89 
90  if 'TileCondToolEmscale' not in kwargs:
91  from TileConditions.TileEMScaleConfig import TileCondToolEmscaleCfg
92  emScaleTool = acc.popToolsAndMerge( TileCondToolEmscaleCfg(flags) )
93  kwargs['TileCondToolEmscale'] = emScaleTool
94 
95  from TileRecUtils.TileDQstatusConfig import TileDQstatusAlgCfg
96  acc.merge( TileDQstatusAlgCfg(flags) )
97 
98  if flags.Input.isMC:
99  from TileConditions.TileSamplingFractionConfig import TileSamplingFractionCondAlgCfg
100  acc.merge( TileSamplingFractionCondAlgCfg(flags) )
101  else:
102  kwargs['TileSamplingFraction'] = ""
103 
104  if not outputFile:
105  outputFile = f'tiletb_{run}.aan.root'
106  histsvc = CompFactory.THistSvc()
107  histsvc.Output += ["%s DATAFILE='%s' OPT='RECREATE'" % ('AANT', outputFile)]
108  acc.addService(histsvc)
109 
110  alg = CompFactory.TileTBAANtuple(**kwargs)
111  from TileMonitoring.TileTBBeamChambersCalibration import updateBeamChambersCalibrations
113  acc.addEventAlgo(alg, primary=True)
114 
115  return acc
116 
117 
118 if __name__ == '__main__':
119 
120  # Setup logs
121  from AthenaCommon.Logging import log
122  from AthenaCommon.Constants import INFO
123  log.setLevel(INFO)
124 
125  from AthenaConfiguration.AllConfigFlags import initConfigFlags
126  from AthenaConfiguration.TestDefaults import defaultConditionsTags, defaultGeometryTags, defaultTestFiles
127 
128  flags = initConfigFlags()
129  parser = flags.getArgumentParser()
130  parser.add_argument('--postExec', help='Code to execute after setup')
131  args, _ = parser.parse_known_args()
132 
133  flags.Exec.MaxEvents = 3
134  flags.GeoModel.AtlasVersion = defaultGeometryTags.RUN2
135  flags.IOVDb.GlobalTag = defaultConditionsTags.RUN2_DATA
136  flags.Tile.doFit = False
137  flags.Tile.doOpt2 = False
138  flags.Tile.RunType = TileRunType.PHY
139  flags.Input.Files = defaultTestFiles.RAW_RUN2
140 
141  flags.fillFromArgs(parser=parser)
142  flags.lock()
143 
144  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
145  cfg = MainServicesCfg(flags)
146 
147  from TileByteStream.TileByteStreamConfig import TileRawDataReadingCfg
148  cfg.merge( TileRawDataReadingCfg(flags, readMuRcv=False,
149  readDigits=True,
150  readRawChannel=True,
151  readDigitsFlx=True,
152  readBeamElem=True,
153  stateless=False) )
154 
155  cfg.merge( TileTBAANtupleCfg(flags, TileBeamElemContainer="") )
156 
157  cfg.getCondAlgo('TileHid2RESrcIDCondAlg').RODStatusProxy = None
158 
159  # =======>>> Any last things to do?
160  if args.postExec:
161  log.info('Executing postExec: %s', args.postExec)
162  exec(args.postExec)
163 
164  if args.config_only:
165  cfg.store(open('TileTBAANtuple.pkl', 'wb'))
166  else:
167  sc = cfg.run()
168  # Success should be 0
169  sys.exit(not sc.isSuccess())
python.TileSamplingFractionConfig.TileSamplingFractionCondAlgCfg
def TileSamplingFractionCondAlgCfg(flags, **kwargs)
Definition: TileSamplingFractionConfig.py:9
TileTBAANtupleConfig.TileTBAANtupleCfg
def TileTBAANtupleCfg(flags, outputFile='', useFELIX=None, **kwargs)
Definition: TileTBAANtupleConfig.py:33
TileDQstatusConfig.TileDQstatusAlgCfg
def TileDQstatusAlgCfg(flags, **kwargs)
Definition: TileDQstatusConfig.py:31
LArG4FSStartPointFilter.exec
exec
Definition: LArG4FSStartPointFilter.py:103
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:312
Constants
some useful constants -------------------------------------------------—
TileTBBeamChambersCalibration.updateBeamChambersCalibrations
def updateBeamChambersCalibrations(alg, run)
Definition: TileTBBeamChambersCalibration.py:92
python.TileEMScaleConfig.TileCondToolEmscaleCfg
def TileCondToolEmscaleCfg(flags, **kwargs)
Definition: TileEMScaleConfig.py:125
Trk::open
@ open
Definition: BinningType.h:40
TileTBAANtupleConfig.getTileTBperiod
def getTileTBperiod(run, useFELIX)
Definition: TileTBAANtupleConfig.py:16
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
TileByteStreamConfig.TileRawDataReadingCfg
def TileRawDataReadingCfg(flags, readDigits=True, readRawChannel=True, readMuRcv=None, readMuRcvDigits=False, readMuRcvRawCh=False, readBeamElem=None, readLaserObj=None, readDigitsFlx=False, readL2=False, stateless=False, **kwargs)
Definition: TileByteStreamConfig.py:87
python.TileCablingSvcConfig.TileCablingSvcCfg
def TileCablingSvcCfg(flags)
Definition: TileCablingSvcConfig.py:11
TileGMConfig.TileGMCfg
def TileGMCfg(flags)
Definition: TileGMConfig.py:7