6@author Salah-Eddine Dahbi, Song-Ming Wang
7@brief Global Monitoring job option to run online DQ with
8 new-style configuration.
9-- Offline on lxplus for ART test :
10 --- python GlobalMonitoring.py IOVDb.GlobalTag="conditions_Tag" --offline
11 --filesInput [path_to_RAW_data_file] --evtMax [Max_number_events]
12 --- note: if the filesInput is not provided a defaultTestFile will be used.
13 --- note: if the evtMax is not provided, the default is 100.
14-- Online is the default: python GlobalMonitoring.py"
17if __name__ ==
'__main__':
20 from AthenaConfiguration.Enums
import BeamType
21 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
22 from AthenaConfiguration.ComponentFactory
import CompFactory
23 from AthenaConfiguration.Enums
import Format
24 flags = initConfigFlags()
25 parser = flags.getArgumentParser()
26 parser.add_argument(
'--offline', action=
'store_true',
27 help=
"Run in offline mode (default is online)")
29 parser.set_defaults(threads=1)
30 args, _ = parser.parse_known_args()
31 is_online =
not args.offline
32 flags.fillFromArgs(parser=parser)
35 from AthenaCommon.Logging
import log
36 from AthenaCommon
import Constants
38 log.setLevel(getattr(Constants, args.loglevel))
40 print(
"Running in online mode")
41 partitionName = os.environ.get(
"TDAQ_PARTITION",
"ATLAS")
42 from AthenaConfiguration.AutoConfigOnlineRecoFlags
import (
43 autoConfigOnlineRecoFlags)
44 autoConfigOnlineRecoFlags(flags, partitionName)
46 flags.Concurrency.NumThreads = 1
47 flags.Exec.MaxEvents = -1
50 from ispy
import IPCPartition, ISObject
51 p = IPCPartition(partitionName)
53 print(
"Partition:", p.name(),
"is not valid")
56 if partitionName ==
"ATLAS" or partitionName ==
'ATLAS_MP1':
58 y = ISObject(p,
'RunParams.RunParams',
'RunParams')
60 print(
"Could not find Run Parameters in IS - "
61 "Set default beam type to 'cosmics'")
62 beamType = BeamType.Cosmics
65 beamtype = y.beam_type
66 beamenergy = y.beam_energy
67 runnumber = y.run_number
68 project = y.T0_project_tag
69 print(
"RUN CONFIGURATION: beam type %i, beam energy %i, "
70 "run number %i, project tag %s" %
71 (beamtype, beamenergy, runnumber, project))
73 if project[7:10] ==
"cos":
74 beamType = BeamType.Cosmics
76 beamType = BeamType.Collisions
78 beamType = BeamType.Collisions
81 flags.DQ.useTrigger =
True
82 flags.DQ.triggerDataAvailable =
True
83 flags.DQ.enableLumiAccess =
False
84 print(
"Online mode setup complete.")
87 print(
"Running in offline mode")
88 partitionName =
'GMTestPartition'
91 flags.DQ.useTrigger =
False
92 flags.Reco.EnableTrigger =
False
93 flags.DQ.triggerDataAvailable =
False
94 flags.LAr.doHVCorr =
False
95 flags.DQ.enableLumiAccess =
True
96 isOnlineStateless =
True
98 print(
"Offline mode setup complete.")
109 detDescrVersion =
'ATLAS-R3S-2021-03-02-00'
110 flags.IOVDb.DatabaseInstance =
"CONDBR2"
111 flags.GeoModel.Layout =
"atlas"
112 flags.GeoModel.AtlasVersion = detDescrVersion
114 flags.Trigger.triggerConfig =
'DB'
116 if partitionName
not in [
'ATLAS',
'ATLAS_MP1']:
117 from AthenaConfiguration.TestDefaults
import defaultTestFiles
119 if not args.filesInput
and args.offline:
120 flags.Input.Files = defaultTestFiles.RAW_RUN3_DATA24
123 flags.Exec.MaxEvents = 100
125 if flags.Input.Format
is Format.BS:
126 if flags.DQ.Environment
not in (
'tier0',
'tier0Raw',
'online'):
127 log.warning(
'Reading RAW file, but DQ.Environment set to %s',
128 flags.DQ.Environment)
129 log.warning(
'Will proceed but best guess is this is an error')
130 log.info(
'Will schedule reconstruction, as best we know')
132 if flags.DQ.Environment
in (
'tier0',
'tier0Raw',
'online'):
133 log.warning(
'Reading POOL file, but DQ.Environment set to %s',
134 flags.DQ.Environment)
135 log.warning(
'Will proceed but best guess is this is an error')
137 flags.Common.isOnline =
True
140 print(
"Configuration Info".center(50))
142 print(f
"{'Partition:':30} {partitionName}")
143 print(f
"{'Max events:':30} {flags.Exec.MaxEvents}")
144 print(f
"{'Run numbers:':30} {flags.Input.RunNumbers}")
145 print(f
"{'Lumi block numbers:':30} {flags.Input.LumiBlockNumbers}")
149 print(
"Beam Info".center(50))
150 print(f
"{'Beam Energy:':30} {flags.Beam.Energy}")
151 print(f
"{'Beam Type:':30} {flags.Beam.Type}")
152 print(f
"{'Beam Number Of Collisions:':30} "
153 f
"{flags.Beam.NumberOfCollisions}")
154 print(f
"{'Beam Estimated Luminosity:':30} "
155 f
"{flags.Beam.estimatedLuminosity}")
156 print(f
"{'Beam Bunch Spacing:':30} {flags.Beam.BunchSpacing}")
159 flags.Input.isMC =
False
161 flags.InDet.useSctDCS =
False
162 flags.InDet.useDCS =
False
164 flags.DQ.doMonitoring =
True
165 flags.DQ.doPostProcessing =
True
166 flags.DQ.FileKey =
''
167 flags.DQ.Environment =
'online'
168 flags.Output.HISTFileName =
'monitoring.root'
169 flags.LAr.doHVCorr =
False
170 flags.Detector.EnableCalo =
True
174 flags.DQ.Steering.doGlobalMon =
False
176 flags.DQ.Steering.doHLTMon =
False
178 if '_hi' in flags.Input.ProjectName:
179 flags.DQ.Steering.doZDCMon =
True
180 flags.Reco.EnableZDC =
True
182 flags.DQ.Steering.doLVL1CaloMon =
False
183 flags.DQ.Steering.doLVL1InterfacesMon =
False
185 flags.DQ.Steering.doDataFlowMon =
False
188 flags.DQ.Steering.doCTPMon =
False
189 if partitionName
not in [
'ATLAS',
'ATLAS_MP1']:
190 flags.DQ.useTrigger =
False
191 flags.DQ.triggerDataAvailable =
False
192 flags.Reco.EnableTrigger =
False
194 log.info(
'FINAL CONFIG FLAGS SETTINGS FOLLOW')
195 if (args.loglevel
is None or
196 getattr(Constants, args.loglevel) <= Constants.INFO):
201 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
202 acc = MainServicesCfg(flags)
203 acc.addService(CompFactory.ByteStreamCnvSvc(), primary=
True)
205 from ByteStreamCnvSvc.ByteStreamConfig
import ByteStreamReadCfg
206 acc.merge(ByteStreamReadCfg(flags))
207 if not args.offline
and not args.filesInput:
208 from ByteStreamEmonSvc.EmonByteStreamConfig
import EmonByteStreamCfg
209 acc.merge(EmonByteStreamCfg(flags,
210 type_names=[
'CTP_RDO/CTP_RDO']))
211 bytestreamInput = acc.getService(
"ByteStreamInputSvc")
216 bytestreamInput.Partition = partitionName
218 bytestreamInput.Key =
"dcm"
219 bytestreamInput.KeyCount = 40
220 bytestreamInput.BufferSize = 120
226 bytestreamInput.Timeout = 600000
228 bytestreamInput.UpdatePeriod = 200
230 bytestreamInput.StreamNames = [
'express']
231 bytestreamInput.StreamType =
"physics"
232 bytestreamInput.StreamLogic =
"Or"
234 bytestreamInput.PublishName = os.environ.get(
235 "TDAQ_APPLICATION_NAME",
"GlobalMonitoring")
238 bytestreamInput.ISServer =
'Histogramming-Global-iss'
239 if partitionName !=
'ATLAS' and partitionName !=
'ATLAS_MP1':
240 bytestreamInput.ISServer =
'Histogramming'
242 if partitionName ==
'ATLAS' or partitionName ==
'ATLAS_MP1':
243 from PyUtils.OnlineISConfig
import GetAtlasReady
244 if beamType == BeamType.Cosmics:
245 bytestreamInput.StreamNames = [
'express',
'IDCosmic',
246 'HLT_IDCosmic',
'CosmicMuons',
251 bytestreamInput.StreamNames = [
'express']
252 bytestreamInput.StreamType =
"express"
255 bytestreamInput.StreamNames = [
'express',
'IDCosmic',
257 'CosmicMuons',
'MinBias',
262 bytestreamInput.StreamLogic =
'Ignore'
263 bytestreamInput.PublishName =
'GMT9_sdahbi_R55'
265 from xAODEventInfoCnv.xAODEventInfoCnvConfig
import (
266 EventInfoBeamSpotDecoratorAlgCfg)
267 acc.merge(EventInfoBeamSpotDecoratorAlgCfg(flags))
270 acc.flagPerfmonDomain(
'Calo')
271 if flags.Detector.EnableCalo:
272 from CaloRec.CaloRecoConfig
import CaloRecoCfg
273 acc.merge(CaloRecoCfg(flags))
276 acc.flagPerfmonDomain(
'ZDC')
277 if flags.Reco.EnableZDC:
278 from ZdcRec.ZdcRecConfig
import ZdcRecCfg
279 acc.merge(ZdcRecCfg(flags))
282 acc.flagPerfmonDomain(
'CaloExtension')
283 if flags.Reco.EnableCaloExtension:
284 from TrackToCalo.CaloExtensionBuilderAlgCfg
import (
285 CaloExtensionBuilderCfg)
286 acc.merge(CaloExtensionBuilderCfg(flags))
287 acc.flagPerfmonDomain(
'CaloRings')
288 if flags.Reco.EnableCaloRinger:
289 from CaloRingerAlgs.CaloRingerAlgsConfig
import CaloRingerSteeringCfg
290 acc.merge(CaloRingerSteeringCfg(flags))
292 acc.flagPerfmonDomain(
'ID')
293 if flags.Reco.EnableTracking:
294 from InDetConfig.TrackRecoConfig
import InDetTrackRecoCfg
295 acc.merge(InDetTrackRecoCfg(flags))
297 acc.flagPerfmonDomain(
'Muon')
298 if flags.Detector.EnableMuon:
299 from MuonConfig.MuonReconstructionConfig
import MuonReconstructionCfg
300 acc.merge(MuonReconstructionCfg(flags))
302 acc.flagPerfmonDomain(
'CombinedMuon')
303 if flags.Reco.EnableCombinedMuon:
304 from MuonCombinedConfig.MuonCombinedReconstructionConfig
import (
305 MuonCombinedReconstructionCfg)
306 acc.merge(MuonCombinedReconstructionCfg(flags))
309 acc.flagPerfmonDomain(
'Jets')
310 if flags.Reco.EnableJet:
311 from JetRecConfig.JetRecoSteering
import JetRecoSteeringCfg
312 acc.merge(JetRecoSteeringCfg(flags))
316 acc.flagPerfmonDomain(
'TrackCellAssociation')
317 if flags.Reco.EnableTrackCellAssociation:
318 from TrackParticleAssociationAlgs.TrackParticleAssociationAlgsConfig
import (
319 TrackParticleCellAssociationCfg)
320 acc.merge(TrackParticleCellAssociationCfg(flags))
321 acc.flagPerfmonDomain(
'Jets')
322 if flags.Reco.EnableGlobalFELinking:
326 from eflowRec.PFCfg
import PFGlobalFlowElementLinkingCfg
327 acc.merge(PFGlobalFlowElementLinkingCfg(flags))
329 acc.flagPerfmonDomain(
'PFlow')
330 if flags.Reco.EnablePFlow:
331 from eflowRec.PFRun3Config
import PFCfg
332 acc.merge(
PFCfg(flags))
334 acc.flagPerfmonDomain(
'EGamma')
335 if flags.Reco.EnableEgamma:
336 from egammaConfig.egammaSteeringConfig
import EGammaSteeringCfg
337 acc.merge(EGammaSteeringCfg(flags))
339 acc.flagPerfmonDomain(
'Tau')
340 if flags.Reco.EnableTau:
341 from tauRec.TauConfig
import TauReconstructionCfg
342 acc.merge(TauReconstructionCfg(flags))
345 acc.flagPerfmonDomain(
'Trigger')
346 if flags.Reco.EnableTrigger:
347 from TriggerJobOpts.TriggerRecoConfig
import TriggerRecoCfg
348 acc.merge(TriggerRecoCfg(flags))
351 acc.flagPerfmonDomain(
'MET')
352 if flags.Reco.EnableMet:
353 from METReconstruction.METRecCfg
import METCfg
354 acc.merge(METCfg(flags))
357 acc.flagPerfmonDomain(
'Isolation')
358 if flags.Reco.EnableIsolation:
359 from IsolationAlgs.IsolationSteeringConfig
import IsolationSteeringCfg
360 acc.merge(IsolationSteeringCfg(flags))
363 acc.flagPerfmonDomain(
'Lucid')
364 if flags.Detector.EnableLucid:
365 from ForwardRec.LucidRecConfig
import LucidRecCfg
366 acc.merge(LucidRecCfg(flags))
369 acc.flagPerfmonDomain(
'HI')
370 if flags.Reco.EnableHI:
371 from HIRecConfig.HIRecConfig
import HIRecCfg
372 acc.merge(HIRecCfg(flags))
375 acc.flagPerfmonDomain(
'FTag')
376 if flags.Reco.EnableBTagging:
377 from BTagging.BTagConfig
import BTagRecoSplitCfg
378 acc.merge(BTagRecoSplitCfg(flags))
387 acc.flagPerfmonDomain(
'DQM')
388 if flags.DQ.doMonitoring:
389 from AthenaMonitoring.AthenaMonitoringCfg
import (
390 AthenaMonitoringCfg, AthenaMonitoringPostprocessingCfg)
391 acc.merge(AthenaMonitoringCfg(flags))
392 if flags.DQ.doPostProcessing:
393 acc.merge(AthenaMonitoringPostprocessingCfg(flags))
395 if flags.DQ.Steering.doInDetMon:
396 if flags.DQ.Steering.InDet.doGlobalMon:
398 from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConfig
import (
399 InDetGlobalMonitoringRun3TestConfig)
401 if flags.DQ.Steering.InDet.doAlignMon:
403 from InDetAlignmentMonitoringRun3.InDetAlignmentMonitoringRun3Config
import (
404 InDetAlignmentMonitoringRun3Config)
406 if flags.DQ.Steering.doPixelMon:
407 from PixelMonitoring.PixelMonitoringConfig
import (
408 PixelMonitoringConfig)
411 if flags.DQ.Steering.doSCTMon:
413 from SCT_Monitoring.SCTMonitoringConfig
import SCTMonitoringConfig
416 if flags.DQ.Steering.doTRTMon:
418 from TRTMonitoringRun3.TRTMonitoringRun3Config
import (
419 TRTMonitoringRun3Cfg)
420 acc.merge(TRTMonitoringRun3Cfg(flags))
422 if flags.DQ.Steering.doLArMon:
424 from LArConfiguration.LArMonitoringConfig
import (
426 acc.merge(LArMonitoringConfig(flags))
428 if flags.DQ.Steering.doTileMon:
430 from TileMonitoring.TileMonitoringConfig
import TileMonitoringCfg
431 acc.merge(TileMonitoringCfg(flags))
433 if flags.DQ.Steering.doCaloGlobalMon:
435 from CaloMonitoring.CaloMonitoringConfig
import CaloMonitoringCfg
436 acc.merge(CaloMonitoringCfg(flags))
438 if flags.DQ.Steering.doMuonMon:
440 from MuonDQAMonitoring.MuonDQAMonitoringConfig
import (
441 MuonDQAMonitoringConfig)
444 if flags.DQ.Steering.doHLTMon:
446 from TrigHLTMonitoring.TrigHLTMonitorAlgorithm
import (
448 acc.merge(TrigHLTMonTopConfig(flags))
450 if flags.DQ.Steering.doJetTagMon:
452 from JetTagMonitoring.JetTagMonitorAlgorithm
import (
454 acc.merge(JetTagMonitorConfig(flags))
456 if flags.DQ.Steering.doEgammaMon:
458 from egammaPerformance.egammaMonitoringConfig
import (
459 egammaMonitoringConfig)
462 if flags.DQ.Steering.doJetMon:
464 from JetMonitoring.JetMonitoringStandard
import (
465 standardJetMonitoring)
466 acc.merge(standardJetMonitoring(flags))
471 if flags.DQ.Environment !=
'tier0ESD':
473 if (
not flags.Reco.EnableHI
or
474 (flags.Reco.EnableHI
and flags.Tracking.doUPC)):
475 from eflowRec.PFCfg
import PFGlobalFlowElementLinkingCfg
476 acc.merge(PFGlobalFlowElementLinkingCfg(flags))
479 acc.getEventAlgo(
"AlgTRTMonitoringRun3RAW").doExpert =
True
481 from IOVDbSvc.IOVDbSvcConfig
import addOverride
482 acc.merge(addOverride(flags,
"/TRT/Onl/Calib/PID_NN",
483 "TRTCalibPID_NN_v2", db=
""))
489 acc.getService(
"PoolSvc").ReadCatalog += [
490 "xmlcatalog_file:/det/dqm/GlobalMonitoring/"
491 "PoolFileCatalog_M7/PoolFileCatalog.xml"]
495 sys.exit(0
if sc.isSuccess()
else 1)
void print(char *figname, TCanvas *c1)