ATLAS Offline Software
Loading...
Searching...
No Matches
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
10from AthenaConfiguration.ComponentFactory import CompFactory
11from TileConfiguration.TileConfigFlags import TileRunType
12
13import sys
14
15
16def 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
33def 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
112 updateBeamChambersCalibrations(alg, run)
113 acc.addEventAlgo(alg, primary=True)
114
115 return acc
116
117
118if __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())
TileTBAANtupleCfg(flags, outputFile='', useFELIX=None, **kwargs)