ATLAS Offline Software
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 
9 from AthenaConfiguration.ComponentFactory import CompFactory
10 from AthenaConfiguration.Enums import BeamType, Format, LHCPeriod
11 from TileConfiguration.TileConfigFlags import TileRunType
12 
13 def _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 
65 if __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)
TileTMDBRawChannelMonitorAlgorithm.TileTMDBRawChannelMonitoringConfig
def TileTMDBRawChannelMonitoringConfig(flags, MuRcvRawChCnt="MuRcvRawChCnt", FillRawChannelHistograms=True, FillEfficiencyHistograms=False, **kwargs)
Definition: TileTMDBRawChannelMonitorAlgorithm.py:48
vtune_athena.format
format
Definition: vtune_athena.py:14
TileJiveXMLConfig.TileAlgoJiveXMLCfg
def TileAlgoJiveXMLCfg(flags, TileDigitsContainer=None, TileRawChannelContainer=None, CaloClusterContainer='TileTopoCluster', **kwargs)
Definition: TileJiveXMLConfig.py:57
RunTileMonitoring._configFlagsFromPartition
def _configFlagsFromPartition(flags, partition, log)
Definition: RunTileMonitoring.py:13
TileTMDBMonitorAlgorithm.TileTMDBMonitoringConfig
def TileTMDBMonitoringConfig(flags, **kwargs)
Definition: TileTMDBMonitorAlgorithm.py:12
TileRawChannelNoiseMonitorAlgorithm.TileRawChannelNoiseMonitoringConfig
def TileRawChannelNoiseMonitoringConfig(flags, **kwargs)
Definition: TileRawChannelNoiseMonitorAlgorithm.py:8
TileMuIdMonitorAlgorithm.TileMuIdMonitoringConfig
def TileMuIdMonitoringConfig(flags, **kwargs)
Definition: TileMuIdMonitorAlgorithm.py:8
TileCellMakerConfig.TileCellMakerCfg
def TileCellMakerCfg(flags, mergeChannels=True, **kwargs)
Definition: TileCellMakerConfig.py:32
TileRODMonitorAlgorithm.TileRODMonitoringConfig
def TileRODMonitoringConfig(flags, **kwargs)
Definition: TileRODMonitorAlgorithm.py:9
RunTileMonitoring.TileMonPostProcessingAlg
Definition: RunTileMonitoring.py:412
TileMuonFitMonitorAlgorithm.TileMuonFitMonitoringConfig
def TileMuonFitMonitoringConfig(flags, **kwargs)
Definition: TileMuonFitMonitorAlgorithm.py:11
TileTowerMonitorAlgorithm.TileTowerMonitoringConfig
def TileTowerMonitoringConfig(flags, **kwargs)
Definition: TileTowerMonitorAlgorithm.py:11
pool::DbPrintLvl::setLevel
void setLevel(MsgLevel l)
Definition: DbPrint.h:32
TileClusterMonitorAlgorithm.TileClusterMonitoringConfig
def TileClusterMonitoringConfig(flags, **kwargs)
Definition: TileClusterMonitorAlgorithm.py:8
CBNT_TBInfo.BeamType
BeamType
Definition: CBNT_TBInfo.py:29
LArG4FSStartPointFilter.exec
exec
Definition: LArG4FSStartPointFilter.py:103
TileMBTSMonitorAlgorithm.TileMBTSMonitoringConfig
def TileMBTSMonitoringConfig(flags, **kwargs)
Definition: TileMBTSMonitorAlgorithm.py:10
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:312
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
TileCellMonitorAlgorithm.TileCellMonitoringConfig
def TileCellMonitoringConfig(flags, **kwargs)
Definition: TileCellMonitorAlgorithm.py:8
Constants
some useful constants -------------------------------------------------—
RunTileMonitoring.TileMonPostProcessingAlg.initialize
def initialize(self)
Definition: RunTileMonitoring.py:413
python.AutoConfigOnlineRecoFlags.autoConfigOnlineRecoFlags
def autoConfigOnlineRecoFlags(flags, partition=None)
Definition: AutoConfigOnlineRecoFlags.py:134
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
TrigJetMonitorAlgorithm.items
items
Definition: TrigJetMonitorAlgorithm.py:71
TileDigiNoiseMonitorAlgorithm.TileDigiNoiseMonitoringConfig
def TileDigiNoiseMonitoringConfig(flags, **kwargs)
Definition: TileDigiNoiseMonitorAlgorithm.py:8
TileTMDBDigitsMonitorAlgorithm.TileTMDBDigitsMonitoringConfig
def TileTMDBDigitsMonitoringConfig(flags)
Definition: TileTMDBDigitsMonitorAlgorithm.py:10
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
TileDQFragMonitorAlgorithm.TileDQFragMonitoringConfig
def TileDQFragMonitoringConfig(flags, **kwargs)
Definition: TileDQFragMonitorAlgorithm.py:10
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
TileRawChannelMakerConfig.TileRawChannelMakerCfg
def TileRawChannelMakerCfg(flags, **kwargs)
Definition: TileRawChannelMakerConfig.py:10
TileMuIdConfig.TileLookForMuAlgCfg
def TileLookForMuAlgCfg(flags, **kwargs)
Definition: TileMuIdConfig.py:12
TileMuonFitterConfig.TileMuonFitterCfg
def TileMuonFitterCfg(flags, **kwargs)
Definition: TileMuonFitterConfig.py:12
str
Definition: BTagTrackIpAccessor.cxx:11
RunTileMonitoring._addBoolArgument
def _addBoolArgument(parser, argument, dest=None, help='')
Definition: RunTileMonitoring.py:68
python.Utils.unixtools.find_datafile
def find_datafile(fname, pathlist=None, access=os.R_OK)
pathresolver-like helper function --------------------------------------—
Definition: unixtools.py:67
Trk::split
@ split
Definition: LayerMaterialProperties.h:38
TileRawChannelTimeMonitorAlgorithm.TileRawChannelTimeMonitoringConfig
def TileRawChannelTimeMonitoringConfig(flags, amplitudeFragIDs=None, **kwargs)
Definition: TileRawChannelTimeMonitorAlgorithm.py:11