ATLAS Offline Software
Loading...
Searching...
No Matches
RunTileMonitoring.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'''@file RunTileMonitoring.py
6@brief Script to run Tile Reconstrcution/Monitoring with new-style configuration
7'''
8
9from AthenaConfiguration.ComponentFactory import CompFactory
10from AthenaConfiguration.Enums import BeamType, Format, LHCPeriod
11from TileConfiguration.TileConfigFlags import TileRunType
12
13def _configFlagsFromPartition(flags, partition, log):
14 """
15 Configure the following flags from partition in online: run number, beam type, and project
16 """
17
18 from ipc import IPCPartition
19 from ispy import ISObject
20 ipcPartition = IPCPartition(partition)
21 if not ipcPartition.isValid():
22 log.error( 'Partition: ' + ipcPartition.name() + ' is not valid' )
23 sys.exit(1)
24 try:
25 runParams = ISObject(ipcPartition, 'RunParams.SOR_RunParams', 'RunParams')
26 except Exception:
27 beamType = 'cosmics'
28 runNumber = 399999
29 projectName = 'data20_calib'
30 log.warning("No Run Parameters in IS => Set defaults: partition: %s, beam type: %i, run number: %i, project tag: %s",
31 partition, beamType, runNumber, projectName)
32 else:
33 runParams.checkout()
34 beamType = runParams.beam_type
35 beamEnergy = runParams.beam_energy
36 runNumber = runParams.run_number
37 projectName = runParams.T0_project_tag
38 runType = runParams.run_type
39 log.info("RUN CONFIG: partition: %s, run type: %s, beam type: %i, beam energy: %i, run number: %i, project tag: %s",
40 partition, runType, beamType, beamEnergy, runNumber, projectName)
41
42 if any([projectName.endswith(_) for _ in ("cos", "test", "calib")]):
43 beamType = 'cosmics'
44 elif projectName.endswith('1beam'):
45 beamType = 'singlebeam'
46 elif beamEnergy > 0:
47 beamType = 'collisions'
48 else:
49 beamType = 'cosmics'
50
51 if partition == 'Tile':
52 flags.Tile.NoiseFilter = 0
53 if 'CIS' in runType:
54 flags.Tile.RunType = TileRunType.MONOCIS if 'mono' in runType else TileRunType.CIS
55 elif 'Laser' in runType:
56 flags.Tile.RunType = TileRunType.LAS
57 elif 'Pedestals' in runType:
58 flags.Tile.RunType = TileRunType.PED
59
60 flags.Beam.Type = BeamType(beamType)
61 flags.Input.ProjectName = projectName
62 flags.Input.RunNumbers = [runNumber]
63
64
65if __name__=='__main__':
66 import sys, os
67
68 def _addBoolArgument(parser, argument, dest=None, help=''):
69 group = parser.add_mutually_exclusive_group()
70 destination = dest if dest else argument
71 group.add_argument('--' + argument, dest=destination, action='store_true', help="Switch on " + help)
72 group.add_argument('--no-' + argument, dest=destination, action='store_false', help="Switch off " + help)
73
74 from AthenaConfiguration.AllConfigFlags import initConfigFlags
75 flags = initConfigFlags()
76 parser = flags.getArgumentParser()
77 parser.add_argument('--preExec', help='Code to execute before locking configs')
78 parser.add_argument('--postExec', help='Code to execute after setup')
79 parser.add_argument('--printDetailedConfig', action='store_true', help='Print detailed Athena configuration')
80 parser.add_argument('--dumpArguments', action='store_true', help='Print arguments and exit')
81
82 _addBoolArgument(parser, 'laser', help='Tile Laser monitoring')
83 _addBoolArgument(parser, 'cis', help='Tile CIS monitoring')
84 _addBoolArgument(parser, 'noise', help='Tile Noise monitoring')
85 _addBoolArgument(parser, 'cells', help='Tile Calorimeter Cells monitoring')
86 _addBoolArgument(parser, 'towers', help='Tile Calorimeter Towers monitoring')
87 _addBoolArgument(parser, 'clusters', help='Tile Calorimeter Clusters monitoring')
88 _addBoolArgument(parser, 'muid', help='Tile Calorimeter MuId monitoring')
89 _addBoolArgument(parser, 'muonfit', help='Tile Calorimeter MuonFit monitoring')
90 _addBoolArgument(parser, 'mbts', help='MBTS monitoring')
91 _addBoolArgument(parser, 'rod', help='Tile Calorimeter ROD monitoring')
92 _addBoolArgument(parser, 'digi-noise',dest='digiNoise', help='Tile digi noise monitoring')
93 _addBoolArgument(parser, 'raw-chan-noise',dest='rawChanNoise', help='Tile raw channel noise monitoring')
94 _addBoolArgument(parser, 'tmdb', help='TMDB monitoring')
95 _addBoolArgument(parser, 'tmdb-digits', dest='tmdbDigits', help='TMDB digits monitoring')
96 _addBoolArgument(parser, 'tmdb-raw-channels', dest='tmdbRawChannels', help='TMDB raw channels monitoring')
97 _addBoolArgument(parser, 'online', help='Online environment running')
98
99 parser.add_argument('--no-mon', action='store_false', dest='mon', help='Do not run Tile monitoring algorithms')
100 parser.add_argument('--cosmics', action='store_true', help='Use cosmics streams for online Tile monitoring')
101 parser.add_argument('--jivexml', action='store_true', help='Create Jive XML output')
102 parser.add_argument('--stateless', action="store_true", help='Run Online Tile monitoring in partition')
103 parser.add_argument('--use-mbts-trigger', action="store_true", dest='useMbtsTrigger', help='Use L1 MBTS triggers')
104 parser.add_argument('--partition', default="", help='EMON, Partition name, default taken from $TDAQ_PARTITION if not set')
105 parser.add_argument('--key', type=str, default="",
106 help='EMON, Selection key, e.g.: SFI, default: dcm (ATLAS), CompleteEvent (TileMon), ReadoutApplication (Tile)')
107 parser.add_argument('--keyValue', default=[],
108 help='EMON, Key values, e.g. [SFI-1, SFI-2]; if empty all SFIs; default: "" (*), TileREB-ROS (Tile)')
109 parser.add_argument('--keyCount', type=int, default=50,
110 help='EMON, key count, e.g. 5 to get five random SFIs, default: 50 (physics), 1000 (laser:CIS)')
111 parser.add_argument('--publishName', default='TilePT-stateless-10', help='EMON, Name under which to publish histograms')
112 parser.add_argument('--include', default="", help='EMON, Regular expression to select histograms to publish')
113 parser.add_argument('--lvl1Items', default=[], help='EMON, A list of L1 bit numbers, default []')
114 parser.add_argument('--lvl1Names', default=[], help='EMON, A list of L1 bit names, default []')
115 parser.add_argument('--lvl1Logic', default='Ignore', choices=['And','Or','Ignore'], help='EMON, default: Ignore')
116 parser.add_argument('--lvl1Origin', default='TAV', choices=['TBP','TAP','TAV'], help='EMON, default: TAV')
117 parser.add_argument('--streamType', default='physics', help='EMON, HLT stream type (e.g. physics or calibration)')
118 parser.add_argument('--streamNames', default=['express','Main','Standby','L1Calo','ZeroBias','Background','MinBias'], help='EMON, List of HLT stream names')
119 parser.add_argument('--streamLogic', default='Or', choices=['And','Or','Ignore'], help='EMON, default: Or')
120 parser.add_argument('--triggerType', type=int, default=256, help='EMON, LVL1 8 bit trigger type, default: 256')
121 parser.add_argument('--groupName', default="TilePhysMon", help='EMON, Name of the monitoring group')
122 parser.add_argument('--postProcessingInterval', type=int, default=10000000,
123 help='Number of events between postprocessing steps (<0: disabled, >evtMax: during finalization)')
124
125 update_group = parser.add_mutually_exclusive_group()
126 update_group.add_argument('--frequency', type=int, default=0, help='EMON, Frequency (in number of events) of publishing histograms')
127 update_group.add_argument('--updatePeriod', type=int, default=60, help='EMON, Frequency (in seconds) of publishing histograms')
128
129 args, _ = parser.parse_known_args()
130
131 # Set up default arguments which can be overriden via command line
132 if not args.mon:
133 parser.set_defaults(cells=False, towers=False, clusters=False, muid=False, muonfit=False, mbts=False,
134 rod=False, tmdb=False, tmdbDigits=False, tmdbRawChannels=False)
135 elif not any([args.laser, args.cis, args.noise, args.mbts]):
136 mbts = not (args.stateless and args.useMbtsTrigger)
137 parser.set_defaults(cells=True, towers=True, clusters=True, muid=True, muonfit=None, mbts=mbts,
138 rod=True, tmdb=True, tmdbDigits=True, tmdbRawChannels=True)
139 elif args.noise:
140 parser.set_defaults(digiNoise=True, rawChanNoise=True)
141
142 if args.stateless:
143 parser.set_defaults(online=True)
144 partition = args.partition if args.partition else os.getenv('TDAQ_PARTITION', 'ATLAS')
145
146 keys = {'ATLAS' : 'dcm', 'TileMon' : 'CompleteEvent', 'Tile' : 'ReadoutApplication'}
147 key = args.key if args.key else keys.get(partition, 'dcm')
148
149 keyValues = {'Tile': ['TileREB-ROS']}
150 keyValue = args.keyValue if args.keyValue else keyValues.get(partition, [])
151
152 # Given frequency, set up updatePeriod to 0, since updatePeriod has higher priority
153 updatePeriod = 0 if args.frequency > 0 else args.updatePeriod
154 parser.set_defaults(partition=partition, key=key, keyValue=keyValue, updatePeriod=updatePeriod)
155
156 if any([args.laser, args.cis]):
157 calibGroupName = 'TileLasMon' if args.laser else 'TileCisMon'
158 parser.set_defaults(streamType='calibration', streamNames=['Tile'], streamLogic='And', keyCount=1000, groupName=calibGroupName)
159 elif args.noise:
160 publishInclude = ".*Summary.*|.*DMUErrors.*|.*DigiNoise.*"
161 parser.set_defaults(streamType='physics', streamNames=['CosmicCalo'], streamLogic='And', include=publishInclude,
162 triggerType=0x82, frequency=300, updatePeriod=0, keyCount=100, groupName='TileNoiseMon', postProcessingInterval=299)
163 elif args.mbts:
164
165 _l1Items = []
166 _l1Names = ['L1_MBTS_1', 'L1_MBTS_1_EMPTY', 'L1_MBTS_1_1_EMPTY']
167 _l1Names += ['L1_MBTSA' + str(counter) for counter in range(0, 16)]
168 _l1Names += ['L1_MBTSC' + str(counter) for counter in range(0, 16)]
169 parser.set_defaults(lvl1Logic='Or', lvl1Origin='TBP', lvl1Items=_l1Items, lvl1Names=_l1Names,
170 keyCount=100, groupName='TileMBTSMon', useMbtsTrigger = True)
171 elif args.cosmics:
172 parser.set_defaults(postProcessingInterval=100, groupName='TileCosmicsMon', streamNames=['CosmicCalo','CosmicMuons','IDCosmic'])
173 else:
174 parser.set_defaults(postProcessingInterval=100)
175
176 args, _ = parser.parse_known_args()
177
178 # Setup logs
179 from AthenaCommon.Logging import log
180 from AthenaCommon.Constants import INFO
181 log.setLevel(INFO)
182
183 if args.dumpArguments:
184 log.info('=====>>> FINAL ARGUMENTS FOLLOW')
185 print('{:40} : {}'.format('Argument Name', 'Value'))
186 for a,v in (vars(args)).items():
187 print(f'{a:40} : {v}')
188 sys.exit(0)
189
190 # Set the Athena configuration flags to defaults (can be overriden via comand line)
191 flags.DQ.useTrigger = False
192 flags.DQ.enableLumiAccess = False
193 flags.Tile.RunType = TileRunType.PHY
194 flags.LAr.doHVCorr = False
195
196 if args.mbts and args.useMbtsTrigger:
197 flags.Trigger.triggerConfig = 'DB'
198
199 flags.Input.Files = []
200 if args.stateless:
201 _configFlagsFromPartition(flags, args.partition, log)
202 flags.Input.isMC = False
203 flags.Input.Format = Format.BS
204 flags.GeoModel.Run = LHCPeriod.Run3
205 if args.mbts and args.useMbtsTrigger:
206 if args.partition in ['TileMon']:
207 flags.Trigger.triggerConfig = 'DB:{:s}:{:d},{:d},{:d},{:d}'.format('TRIGGERDB_RUN3', 3185, 4357, 4219, 2543)
208 else:
209 beamType = flags.Beam.Type
210 from AthenaConfiguration.AutoConfigOnlineRecoFlags import autoConfigOnlineRecoFlags
211 autoConfigOnlineRecoFlags(flags, args.partition)
212 flags.Beam.Type = beamType
213
214 else:
215 # Initial configuration flags from command line arguments (to be used to set up defaults)
216 flags.fillFromArgs(parser=parser)
217 if not (args.filesInput or flags.Input.Files):
218 if args.laser:
219 inputDirectory = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TileByteStream/TileByteStream-02-00-00"
220 inputFile = "data18_tilecomm.00363899.calibration_tile.daq.RAW._lb0000._TileREB-ROS._0005-200ev.data"
221 flags.Input.Files = [os.path.join(inputDirectory, inputFile)]
222 flags.Input.RunNumbers = [363899]
223 elif args.cis:
224 inputDirectory = "/cvmfs/atlas-nightlies.cern.ch/repo/data/data-art/TileByteStream/TileByteStream-02-00-00"
225 inputFile = "data18_tilecomm.00363899.calibration_tile.daq.RAW._lb0000._TileREB-ROS._0005-200ev.data"
226 flags.Input.Files = [os.path.join(inputDirectory, inputFile)]
227 flags.Input.RunNumbers = [363899]
228 elif args.noise:
229 inputDirectory = 'root://eosatlas.cern.ch//eos/atlas/atlascerngroupdisk/det-tile/test'
230 inputFile = 'data12_8TeV.00201555.physics_ZeroBiasOverlay.merge.RAW._lb0150._SFO-ALL._0001.1'
231 flags.Input.Files = [os.path.join(inputDirectory, inputFile)]
232 else:
233 from AthenaConfiguration.TestDefaults import defaultTestFiles
234 flags.Input.Files = defaultTestFiles.RAW_RUN2
235
236 if any([args.cis, args.laser]):
237 flags.Input.ProjectName = flags.Input.Files[0].split(os.path.sep)[-1].split('.')[0]
238
239 runNumber = flags.Input.RunNumbers[0]
240 if not flags.Input.isMC:
241 from AthenaConfiguration.TestDefaults import defaultGeometryTags
242 flags.GeoModel.AtlasVersion = defaultGeometryTags.autoconfigure(flags)
243
244 if not flags.Output.HISTFileName:
245 flags.Output.HISTFileName = 'tilemon_{}.root'.format(runNumber)
246
247 if args.online:
248 flags.Common.isOnline = True
249 if flags.Common.isOnline:
250 flags.IOVDb.GlobalTag = 'CONDBR2-HLTP-2025-01' if runNumber > 232498 else 'COMCOND-HLTP-004-02'
251 flags.DQ.Environment = 'online'
252 flags.DQ.FileKey = ''
253 else:
254 flags.IOVDb.GlobalTag = 'CONDBR2-BLKPA-2025-03' if runNumber > 232498 else 'COMCOND-BLKPA-RUN1-06'
255
256 if any([args.laser, args.cis]):
257 if args.laser:
258 flags.Tile.RunType = TileRunType.GAPLAS
259 elif args.cis:
260 flags.Tile.RunType = TileRunType.GAPCIS
261 flags.Tile.doFit = True
262 flags.Tile.correctTime = True
263 flags.Tile.doOverflowFit = False
264 flags.Tile.BestPhaseFromCOOL = True
265 flags.Tile.NoiseFilter = 1
266
267 if args.jivexml:
268 flags.Output.doJiveXML = True
269
270 # Override default configuration flags from command line arguments
271 flags.fillFromArgs(parser=parser)
272
273 if args.preExec:
274 log.info('Executing preExec: %s', args.preExec)
275 exec(args.preExec)
276
277 log.info('=====>>> FINAL CONFIG FLAGS SETTINGS FOLLOW')
278 flags.dump(pattern='Tile.*|Input.*|Exec.*|IOVDb.[D|G].*', evaluate=True)
279
280 flags.lock()
281
282 # Initialize configuration object, add accumulator, merge, and run.
283 from AthenaConfiguration.MainServicesConfig import MainServicesCfg
284 cfg = MainServicesCfg(flags)
285
286 typeNames = ['CTP_RDO/CTP_RDO'] if args.mbts and args.useMbtsTrigger else []
287
288 from TileByteStream.TileByteStreamConfig import TileRawDataReadingCfg
289 cfg.merge( TileRawDataReadingCfg(flags, readMuRcv=False,
290 readMuRcvDigits=any([args.tmdbDigits, args.tmdb]),
291 readMuRcvRawCh=any([args.tmdbRawChannels, args.tmdb]),
292 readLaserObj=False,
293 stateless=args.stateless,
294 type_names=typeNames) )
295
296 if args.stateless:
297 jobs = ['cosmics', 'mbts', 'noise', 'laser', 'cis']
298 bufferSize = 200 if any(job in args.publishName for job in jobs) else 500
299
300 bsEmonInputSvc = cfg.getService( "ByteStreamInputSvc" )
301 bsEmonInputSvc.Partition = args.partition
302 bsEmonInputSvc.Key = args.key
303 bsEmonInputSvc.KeyValue = args.keyValue
304 bsEmonInputSvc.KeyCount = args.keyCount
305 bsEmonInputSvc.PublishName = args.publishName
306 bsEmonInputSvc.ISServer = 'Histogramming'
307 bsEmonInputSvc.Include = args.include
308 bsEmonInputSvc.UpdatePeriod = args.updatePeriod
309 bsEmonInputSvc.Frequency = args.frequency
310 bsEmonInputSvc.LVL1Items = args.lvl1Items
311 bsEmonInputSvc.LVL1Names = args.lvl1Names
312 bsEmonInputSvc.LVL1Logic = args.lvl1Logic
313 bsEmonInputSvc.LVL1Origin = args.lvl1Origin
314 bsEmonInputSvc.StreamType = 'express' if flags.Beam.Type is BeamType.SingleBeam else args.streamType
315 bsEmonInputSvc.StreamNames = args.streamNames
316 bsEmonInputSvc.StreamLogic = args.streamLogic
317 bsEmonInputSvc.GroupName = args.groupName
318 bsEmonInputSvc.ProcessCorruptedEvents = True
319 bsEmonInputSvc.BufferSize = bufferSize
320
321 if (args.threads):
322 cfg.getEventAlgo('SGInputLoader').ExtraOutputs=[("xAOD::EventInfo","StoreGateSvc+EventInfo"),("xAOD::EventAuxInfo","StoreGateSvc+EventInfoAux.")]
323
324 cfg.addPublicTool( CompFactory.TileROD_Decoder(fullTileMode = runNumber) )
325
326 from TileRecUtils.TileRawChannelMakerConfig import TileRawChannelMakerCfg
327 cfg.merge( TileRawChannelMakerCfg(flags, Cardinality=args.threads if args.threads else 0) )
328
329 l1Triggers = ['bit0_RNDM', 'bit1_ZeroBias', 'bit2_L1Cal', 'bit3_Muon',
330 'bit4_RPC', 'bit5_FTK', 'bit6_CTP', 'bit7_Calib', 'AnyPhysTrig']
331
332 if any([args.laser, args.cis]):
333 triggerTypes = [0x34] if args.laser else [0x32]
334 from TileMonitoring.TileRawChannelTimeMonitorAlgorithm import TileRawChannelTimeMonitoringConfig
335 cfg.merge(TileRawChannelTimeMonitoringConfig(flags, TriggerTypes=triggerTypes))
336
337 if args.rod:
338 from TileMonitoring.TileRODMonitorAlgorithm import TileRODMonitoringConfig
339 cfg.merge(TileRODMonitoringConfig(flags, fillHistogramsForL1Triggers = l1Triggers))
340
341 if args.tmdbDigits:
342 from TileMonitoring.TileTMDBDigitsMonitorAlgorithm import TileTMDBDigitsMonitoringConfig
343 cfg.merge(TileTMDBDigitsMonitoringConfig(flags))
344
345 if args.tmdbRawChannels:
346 from TileMonitoring.TileTMDBRawChannelMonitorAlgorithm import TileTMDBRawChannelMonitoringConfig
347 cfg.merge(TileTMDBRawChannelMonitoringConfig(flags))
348
349 if args.tmdb:
350 from TileMonitoring.TileTMDBMonitorAlgorithm import TileTMDBMonitoringConfig
351 cfg.merge(TileTMDBMonitoringConfig(flags))
352
353 muonfit = flags.Beam.Type is not BeamType.Collisions if args.muonfit is None else args.muonfit
354 if any([args.cells, args.towers, args.clusters, args.mbts, args.muid, muonfit, flags.Output.doJiveXML]):
355 from TileRecUtils.TileCellMakerConfig import TileCellMakerCfg
356 cfg.merge( TileCellMakerCfg(flags) )
357
358 if args.cells:
359 from TileMonitoring.TileCellMonitorAlgorithm import TileCellMonitoringConfig
360 cfg.merge(TileCellMonitoringConfig(flags, fillHistogramsForL1Triggers = l1Triggers,
361 fillGapScintilatorHistograms=True, fillChannelTimeHistograms=True))
362
363 if args.towers:
364 from TileMonitoring.TileTowerMonitorAlgorithm import TileTowerMonitoringConfig
365 cfg.merge(TileTowerMonitoringConfig(flags, fillHistogramsForL1Triggers = l1Triggers))
366
367 if args.clusters:
368 from TileMonitoring.TileClusterMonitorAlgorithm import TileClusterMonitoringConfig
369 cfg.merge(TileClusterMonitoringConfig(flags, fillTimingHistograms = True, fillHistogramsForL1Triggers = l1Triggers))
370
371 if args.mbts:
372 from TileMonitoring.TileMBTSMonitorAlgorithm import TileMBTSMonitoringConfig
373 cfg.merge(TileMBTSMonitoringConfig(flags, FillHistogramsPerMBTS = True, useTrigger = args.useMbtsTrigger))
374
375 if args.muid:
376 from TileMuId.TileMuIdConfig import TileLookForMuAlgCfg
377 cfg.merge(TileLookForMuAlgCfg(flags))
378
379 from TileMonitoring.TileMuIdMonitorAlgorithm import TileMuIdMonitoringConfig
380 cfg.merge(TileMuIdMonitoringConfig(flags, fillHistogramsForL1Triggers = l1Triggers))
381
382 if muonfit:
383 from TileCosmicAlgs.TileMuonFitterConfig import TileMuonFitterCfg
384 cfg.merge(TileMuonFitterCfg(flags, Cardinality=args.threads if args.threads else 0))
385
386 from TileMonitoring.TileMuonFitMonitorAlgorithm import TileMuonFitMonitoringConfig
387 cfg.merge(TileMuonFitMonitoringConfig(flags, fillHistogramsForL1Triggers = l1Triggers))
388
389 if args.digiNoise:
390 from TileMonitoring.TileDigiNoiseMonitorAlgorithm import TileDigiNoiseMonitoringConfig
391 cfg.merge(TileDigiNoiseMonitoringConfig(flags))
392
393 if args.rawChanNoise:
394 from TileMonitoring.TileRawChannelNoiseMonitorAlgorithm import TileRawChannelNoiseMonitoringConfig
395 cfg.merge(TileRawChannelNoiseMonitoringConfig(flags))
396
397 from TileMonitoring.TileDQFragMonitorAlgorithm import TileDQFragMonitoringConfig
398 cfg.merge( TileDQFragMonitoringConfig(flags) )
399
400 if any([args.digiNoise, args.rawChanNoise, args.tmdbDigits, args.tmdb]) and args.postProcessingInterval > 0:
401 from AthenaCommon.Utils.unixtools import find_datafile
402 configurations = []
403 dataPath = find_datafile('TileMonitoring')
404 if any([args.tmdbDigits, args.tmdb]):
405 configurations += [os.path.join(dataPath, 'TileTMDBPostProc.yaml')]
406 if args.digiNoise:
407 configurations += [os.path.join(dataPath, 'TileDigiNoisePostProc.yaml')]
408 if args.rawChanNoise:
409 configurations += [os.path.join(dataPath, 'TileRawChanNoisePostProc.yaml')]
410
411 from DataQualityUtils.DQPostProcessingAlg import DQPostProcessingAlg
412 class TileMonPostProcessingAlg(DQPostProcessingAlg):
413 def initialize(self):
414 if hasattr(self, 'OutputLevel'):
415 self.msg.setLevel(self.OutputLevel)
416 return super(TileMonPostProcessingAlg, self).initialize()
417
418 ppa = TileMonPostProcessingAlg("TileMonPostProcessingAlg")
419 ppa.OutputLevel = flags.Exec.OutputLevel
420 ppa.ExtraInputs = {( 'xAOD::EventInfo' , 'StoreGateSvc+EventInfo' )}
421 ppa.Interval = args.postProcessingInterval
422 ppa.ConfigFiles = configurations
423 if not hasattr(ppa, '_descriptors'):
424 ppa._descriptors = {} # Dummy descriptors to allow print detailed config
425 ppa._ctr = 1 # Start postprocessing only after specified number of events (not during the first one)
426 if flags.Common.isOnline:
427 fileKey = flags.DQ.FileKey
428 ppa.FileKey = (fileKey + '/') if not fileKey.endswith('/') else fileKey
429 else:
430 ppa.FileKey = f'/{flags.DQ.FileKey}/run_{runNumber}/'
431
432 cfg.addEventAlgo(ppa, sequenceName='AthEndSeq')
433
434 if flags.Output.doJiveXML:
435 from TileMonitoring.TileJiveXMLConfig import TileAlgoJiveXMLCfg
436 cfg.merge(TileAlgoJiveXMLCfg(flags, WriteToFile=(not args.stateless), stateless=args.stateless))
437
438
439 # Any last things to do?
440 if args.postExec:
441 log.info('Executing postExec: %s', args.postExec)
442 exec(args.postExec)
443
444 if flags.Common.isOnline:
445 cfg.getService("THistSvc").Output=["Tile DATAFILE='%s' OPT='RECREATE'" % (flags.Output.HISTFileName)]
446 cfg.getService("TileCablingSvc").CablingType=6
447
448 if args.stateless and args.cis:
449 cfg.getEventAlgo('TileDQstatusAlg').TileBeamElemContainer=""
450
451 cfg.printConfig(withDetails=args.printDetailedConfig,
452 summariseProps=args.printDetailedConfig,
453 printDefaults=args.printDetailedConfig)
454
455 sc = cfg.run()
456 sys.exit(0 if sc.isSuccess() else 1)
void print(char *figname, TCanvas *c1)
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition hcg.cxx:177
_configFlagsFromPartition(flags, partition, log)
_addBoolArgument(parser, argument, dest=None, help='')
void initialize()