6 @author Salah-Eddine Dahbi, Song-Ming Wang
7 @brief Global Monitoring job option to run online DQ with new-style configuration.
8 -- Offline on lxplus for ART test :
9 --- python GlobalMonitoring.py IOVDb.GlobalTag="conditions_Tag" --offline --filesInput [path_to_RAW_data_file] --evtMax [Max_number_events]
10 --- note: if the filesInput is not provided a defaultTestFile will be used.
11 --- note: if the evtMax is not provided, the default is 100.
13 -- Online is the default: python GlobalMonitoring.py"
16 if __name__==
'__main__':
19 from AthenaConfiguration.Enums
import BeamType
20 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
21 from AthenaConfiguration.ComponentFactory
import CompFactory
22 from AthenaConfiguration.Enums
import Format
24 parser = flags.getArgumentParser()
25 parser.add_argument(
'--offline', action=
'store_true', help=
"Run in offline mode (default is online)")
27 parser.set_defaults(threads=1)
28 args, _ = parser.parse_known_args()
29 is_online =
not args.offline
30 flags.fillFromArgs(parser=parser)
33 from AthenaCommon.Logging
import log
34 from AthenaCommon
import Constants
36 log.setLevel(getattr(Constants, args.loglevel))
39 print(
"Running in online mode")
40 partitionName = os.environ.get(
"TDAQ_PARTITION",
"ATLAS")
42 from AthenaConfiguration.AutoConfigOnlineRecoFlags
import autoConfigOnlineRecoFlags
45 flags.Concurrency.NumThreads = 1
46 flags.Exec.MaxEvents = -1
50 from ispy
import IPCPartition, ISObject
51 p = IPCPartition(partitionName)
53 print(
"Partition:", p.name(),
"is not valid")
57 flags.DQ.useTrigger =
True
58 flags.DQ.triggerDataAvailable =
True
59 flags.DQ.enableLumiAccess =
False
60 print(
"Online mode setup complete.")
64 print(
"Running in offline mode")
65 partitionName =
'GMTestPartition'
68 flags.DQ.useTrigger =
False
69 flags.Reco.EnableTrigger =
False
70 flags.DQ.triggerDataAvailable =
False
71 flags.LAr.doHVCorr =
False
72 flags.DQ.enableLumiAccess =
True
73 isOnlineStateless =
True
76 print(
"Offline mode setup complete.")
85 detDescrVersion =
'ATLAS-R3S-2021-03-02-00'
86 flags.IOVDb.DatabaseInstance =
"CONDBR2"
87 flags.GeoModel.Layout=
"atlas"
88 flags.GeoModel.AtlasVersion = detDescrVersion
90 flags.Trigger.triggerConfig=
'DB'
92 if partitionName
not in [
'ATLAS',
'ATLAS_MP1']:
93 from AthenaConfiguration.TestDefaults
import defaultTestFiles
95 if not args.filesInput
and args.offline:
96 flags.Input.Files = defaultTestFiles.RAW_RUN3_DATA24
99 flags.Exec.MaxEvents = 100
101 if flags.Input.Format
is Format.BS :
102 if flags.DQ.Environment
not in (
'tier0',
'tier0Raw',
'online'):
103 log.warning(
'Reading RAW file, but DQ.Environment set to %s',
104 flags.DQ.Environment)
105 log.warning(
'Will proceed but best guess is this is an error')
106 log.info(
'Will schedule reconstruction, as best we know')
108 if flags.DQ.Environment
in (
'tier0',
'tier0Raw',
'online'):
109 log.warning(
'Reading POOL file, but DQ.Environment set to %s',
110 flags.DQ.Environment)
111 log.warning(
'Will proceed but best guess is this is an error')
113 flags.Common.isOnline =
True
116 print(
"Configuration Info".center(50))
118 print(f
"{'Partition:':30} {partitionName}")
119 print(f
"{'Max events:':30} {flags.Exec.MaxEvents}")
120 print(f
"{'Run numbers:':30} {flags.Input.RunNumbers}")
121 print(f
"{'Lumi block numbers:':30} {flags.Input.LumiBlockNumbers}")
125 print(
"Beam Info".center(50))
126 print(f
"{'Beam Energy:':30} {flags.Beam.Energy}")
127 print(f
"{'Beam Type:':30} {flags.Beam.Type}")
128 print(f
"{'Beam Number Of Collisions:':30} {flags.Beam.NumberOfCollisions}")
129 print(f
"{'Beam Estimated Luminosity:':30} {flags.Beam.estimatedLuminosity}")
130 print(f
"{'Beam Bunch Spacing:':30} {flags.Beam.BunchSpacing}")
134 flags.Input.isMC =
False
136 flags.InDet.useSctDCS =
False
137 flags.InDet.useDCS =
False
139 flags.DQ.doMonitoring =
True
140 flags.DQ.doPostProcessing =
True
142 flags.DQ.FileKey =
''
143 flags.DQ.Environment =
'online'
144 flags.Output.HISTFileName =
'monitoring.root'
145 flags.LAr.doHVCorr =
False
146 flags.Detector.EnableCalo =
True
152 flags.DQ.Steering.doGlobalMon =
False
154 flags.DQ.Steering.doHLTMon =
False
156 flags.DQ.Steering.doZDCMon =
False
158 flags.DQ.Steering.doLVL1CaloMon =
False
159 flags.DQ.Steering.doLVL1InterfacesMon =
False
161 flags.DQ.Steering.doDataFlowMon =
False
163 flags.DQ.Steering.doCTPMon =
False
164 if partitionName
not in [
'ATLAS',
'ATLAS_MP1'] :
165 flags.DQ.useTrigger =
False
166 flags.DQ.triggerDataAvailable =
False
167 flags.Reco.EnableTrigger =
False
169 log.info(
'FINAL CONFIG FLAGS SETTINGS FOLLOW')
170 if args.loglevel
is None or getattr(Constants, args.loglevel) <= Constants.INFO:
174 from AthenaConfiguration.ComponentFactory
import CompFactory
175 from SGComps.SGInputLoaderConfig
import SGInputLoaderCfg
178 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
180 acc.addService(CompFactory.ByteStreamCnvSvc(), primary=
True)
183 from ByteStreamCnvSvc.ByteStreamConfig
import ByteStreamReadCfg
186 if not args.offline
and not args.filesInput:
187 from ByteStreamEmonSvc.EmonByteStreamConfig
import EmonByteStreamCfg
189 bytestreamInput = acc.getService(
"ByteStreamInputSvc")
194 bytestreamInput.Partition = partitionName
196 bytestreamInput.Key =
"dcm"
197 bytestreamInput.KeyCount = 40
198 bytestreamInput.BufferSize = 120
204 bytestreamInput.Timeout = 600000
206 bytestreamInput.UpdatePeriod = 200
208 bytestreamInput.StreamNames = [
'express']
209 bytestreamInput.StreamType =
"physics"
210 bytestreamInput.StreamLogic =
"Or"
212 bytestreamInput.PublishName = os.environ.get(
"TDAQ_APPLICATION_NAME",
"GlobalMonitoring")
213 bytestreamInput.ISServer =
'Histogramming-Global-iss'
214 if partitionName !=
'ATLAS' and partitionName !=
'ATLAS_MP1':
215 bytestreamInput.ISServer =
'Histogramming'
218 if partitionName ==
'ATLAS' or partitionName ==
'ATLAS_MP1':
219 from PyUtils.OnlineISConfig
import GetAtlasReady
220 if beamType == BeamType.Cosmics:
221 bytestreamInput.StreamNames = [
'express',
'IDCosmic',
'HLT_IDCosmic',
'CosmicMuons',
'CosmicCalo']
225 bytestreamInput.StreamNames = [
'express']
227 bytestreamInput.StreamType =
"express"
230 bytestreamInput.StreamNames = [
'express',
'IDCosmic',
'HLT_IDCosmic',
'CosmicMuons',
'MinBias',
'Standby',
'Main',
'CosmicCalo']
233 bytestreamInput.StreamLogic =
'Ignore'
234 bytestreamInput.PublishName =
'GMT9_sdahbi_R55'
236 from xAODEventInfoCnv.xAODEventInfoCnvConfig
import EventInfoBeamSpotDecoratorAlgCfg
240 acc.flagPerfmonDomain(
'Calo')
241 if flags.Detector.EnableCalo:
242 from CaloRec.CaloRecoConfig
import CaloRecoCfg
246 acc.flagPerfmonDomain(
'CaloExtension')
247 if flags.Reco.EnableCaloExtension:
248 from TrackToCalo.CaloExtensionBuilderAlgCfg
import (
249 CaloExtensionBuilderCfg)
252 acc.flagPerfmonDomain(
'CaloRings')
253 if flags.Reco.EnableCaloRinger:
254 from CaloRingerAlgs.CaloRingerAlgsConfig
import CaloRingerSteeringCfg
257 acc.flagPerfmonDomain(
'ID')
258 if flags.Reco.EnableTracking:
259 from InDetConfig.TrackRecoConfig
import InDetTrackRecoCfg
263 acc.flagPerfmonDomain(
'Muon')
264 if flags.Detector.EnableMuon:
265 from MuonConfig.MuonReconstructionConfig
import MuonReconstructionCfg
269 acc.flagPerfmonDomain(
'CombinedMuon')
270 if flags.Reco.EnableCombinedMuon:
271 from MuonCombinedConfig.MuonCombinedReconstructionConfig
import (
272 MuonCombinedReconstructionCfg)
276 acc.flagPerfmonDomain(
'Jets')
277 if flags.Reco.EnableJet:
278 from JetRecConfig.JetRecoSteering
import JetRecoSteeringCfg
283 acc.flagPerfmonDomain(
'TrackCellAssociation')
284 if flags.Reco.EnableTrackCellAssociation:
285 from TrackParticleAssociationAlgs.TrackParticleAssociationAlgsConfig
import (
286 TrackParticleCellAssociationCfg)
289 acc.flagPerfmonDomain(
'Jets')
290 if flags.Reco.EnableGlobalFELinking:
294 from eflowRec.PFCfg
import PFGlobalFlowElementLinkingCfg
297 acc.flagPerfmonDomain(
'PFlow')
298 if flags.Reco.EnablePFlow:
299 from eflowRec.PFRun3Config
import PFCfg
300 acc.merge(
PFCfg(flags))
302 acc.flagPerfmonDomain(
'EGamma')
303 if flags.Reco.EnableEgamma:
304 from egammaConfig.egammaSteeringConfig
import EGammaSteeringCfg
307 acc.flagPerfmonDomain(
'Tau')
308 if flags.Reco.EnableTau:
309 from tauRec.TauConfig
import TauReconstructionCfg
313 acc.flagPerfmonDomain(
'Trigger')
314 if flags.Reco.EnableTrigger:
315 from TriggerJobOpts.TriggerRecoConfig
import TriggerRecoCfg
319 acc.flagPerfmonDomain(
'MET')
320 if flags.Reco.EnableMet:
321 from METReconstruction.METRecCfg
import METCfg
325 acc.flagPerfmonDomain(
'Isolation')
326 if flags.Reco.EnableIsolation:
327 from IsolationAlgs.IsolationSteeringConfig
import IsolationSteeringCfg
331 acc.flagPerfmonDomain(
'Lucid')
332 if flags.Detector.EnableLucid:
333 from ForwardRec.LucidRecConfig
import LucidRecCfg
337 acc.flagPerfmonDomain(
'HI')
338 if flags.Reco.EnableHI:
339 from HIRecConfig.HIRecConfig
import HIRecCfg
343 acc.flagPerfmonDomain(
'FTag')
344 if flags.Reco.EnableBTagging:
345 from BTagging.BTagConfig
import BTagRecoSplitCfg
354 if not args.offline :
356 acc.flagPerfmonDomain(
'DQM')
357 if flags.DQ.doMonitoring:
358 from AthenaMonitoring.AthenaMonitoringCfg
import (AthenaMonitoringCfg, AthenaMonitoringPostprocessingCfg)
360 if flags.DQ.doPostProcessing:
363 if flags.DQ.Steering.doInDetMon:
364 if flags.DQ.Steering.InDet.doGlobalMon:
366 from InDetGlobalMonitoringRun3Test.InDetGlobalMonitoringRun3TestConfig
import InDetGlobalMonitoringRun3TestConfig
368 if flags.DQ.Steering.InDet.doAlignMon:
370 from InDetAlignmentMonitoringRun3.InDetAlignmentMonitoringRun3Config
import InDetAlignmentMonitoringRun3Config
373 if flags.DQ.Steering.doPixelMon:
374 from PixelMonitoring.PixelMonitoringConfig
import PixelMonitoringConfig
377 if flags.DQ.Steering.doSCTMon:
379 from SCT_Monitoring.SCTMonitoringConfig
import SCTMonitoringConfig
382 if flags.DQ.Steering.doTRTMon:
384 from TRTMonitoringRun3.TRTMonitoringRun3Config
import TRTMonitoringRun3Cfg
387 if flags.DQ.Steering.doLArMon:
389 from LArConfiguration.LArMonitoringConfig
import LArMonitoringConfig
392 if flags.DQ.Steering.doTileMon:
394 from TileMonitoring.TileMonitoringConfig
import TileMonitoringCfg
397 if flags.DQ.Steering.doCaloGlobalMon:
399 from CaloMonitoring.CaloMonitoringConfig
import CaloMonitoringCfg
402 if flags.DQ.Steering.doMuonMon:
404 from MuonDQAMonitoring.MuonDQAMonitoringConfig
import MuonDQAMonitoringConfig
407 if flags.DQ.Steering.doHLTMon:
409 from TrigHLTMonitoring.TrigHLTMonitorAlgorithm
import TrigHLTMonTopConfig
412 if flags.DQ.Steering.doJetTagMon:
414 from JetTagMonitoring.JetTagMonitorAlgorithm
import JetTagMonitorConfig
417 if flags.DQ.Steering.doEgammaMon:
419 from egammaPerformance.egammaMonitoringConfig
import egammaMonitoringConfig
422 if flags.DQ.Steering.doJetMon:
424 from JetMonitoring.JetMonitoringStandard
import standardJetMonitoring
428 if flags.DQ.Environment !=
'tier0ESD':
430 if not flags.Reco.EnableHI
or (flags.Reco.EnableHI
and flags.Tracking.doUPC) :
431 from eflowRec.PFCfg
import PFGlobalFlowElementLinkingCfg
437 acc.getEventAlgo(
"AlgTRTMonitoringRun3RAW").doExpert =
True
441 from IOVDbSvc.IOVDbSvcConfig
import addOverride
442 acc.merge(
addOverride(flags,
"/TRT/Onl/Calib/PID_NN",
"TRTCalibPID_NN_v2", db=
""))
450 acc.getService(
"PoolSvc").ReadCatalog += [
"xmlcatalog_file:/det/dqm/GlobalMonitoring/PoolFileCatalog_M7/PoolFileCatalog.xml"]
456 sys.exit(0
if sc.isSuccess()
else 1)