ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
graphics
EventDisplaysOnline
python
EventDisplaysOnlineHelpers.py
Go to the documentation of this file.
1
# Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
2
from
ispy
import
ISObject, IPCPartition
3
import
time
4
from
AthenaCommon.Logging
import
logging
5
import
sys
6
7
def
GetBFields
():
8
mlog = logging.getLogger(
'EventDisplays'
)
9
10
#BFields are read from initial partition
11
partition=
'initial'
12
mlog.debug(
"Trying to read magnetic field configuration from partition %s"
, partition)
13
14
#now try and read the information from IS
15
try
:
16
#Get hold of the initial partition
17
ipcPart = IPCPartition(partition)
18
if
not
ipcPart.isValid():
19
raise
UserWarning(
"Partition %s invalid - cannot access magnetic field setting"
%partition)
20
#Get the current and valid status
21
toroidCurrent = ISObject(ipcPart,
'DCS_GENERAL.MagnetToroidsCurrent.value'
,
'DdcFloatInfo'
)
22
solenoidCurrent = ISObject(ipcPart,
'DCS_GENERAL.MagnetSolenoidCurrent.value'
,
'DdcFloatInfo'
)
23
toroidInvalid = ISObject(ipcPart,
'DCS_GENERAL.MagnetToroidsCurrent.invalid'
,
'DdcIntInfo'
)
24
solenoidInvalid = ISObject(ipcPart,
'DCS_GENERAL.MagnetSolenoidCurrent.invalid'
,
'DdcIntInfo'
)
25
toroidCurrent.checkout()
26
solenoidCurrent.checkout()
27
toroidInvalid.checkout()
28
solenoidInvalid.checkout()
29
#And calculate the flags
30
solenoidOn=((solenoidCurrent.value > 1000.)
and
(solenoidInvalid.value == 0))
31
toroidOn=((toroidCurrent.value > 1000.)
and
(toroidInvalid.value == 0))
32
except
UserWarning
as
err:
33
mlog.error(err)
34
#Should always be able to access initial parititon
35
mlog.fatal(
"Failed to read magnetic field configuration from IS, aborting"
)
36
sys.exit(1)
37
38
#print the result
39
mlog.info(
"Magnetic field in solenoid is %s"
, (solenoidOn
and
"ON"
)
or
"OFF"
)
40
mlog.info(
"Magnetic field in toroid is %s"
, (toroidOn
and
"ON"
)
or
"OFF"
)
41
42
#finally return our values
43
return
(solenoidOn,toroidOn)
44
45
46
def
WaitForPartition
(partitionName=None):
47
mlog = logging.getLogger(
'EventDisplays'
)
48
partitionUp =
False
49
while
not
partitionUp:
50
try
:
51
partition = IPCPartition(partitionName)
52
runParams = ISObject(partition,
"RunParams.RunParams"
,
"RunParams"
)
53
runParams.checkout()
54
partitionUp =
True
55
56
except
Exception:
57
mlog.info(
"%s partition is not up, sleeping for 30 seconds"
, partitionName)
58
time.sleep(30)
59
60
def
Ready4Physics
():
61
mlog = logging.getLogger(
'EventDisplays, Ready4Physics'
)
62
try
:
63
partition = IPCPartition(
'ATLAS'
)
64
physicsReady = ISObject(partition,
'RunParams.Ready4Physics'
,
'Ready4PhysicsInfo'
)
65
physicsReady.checkout()
66
return
bool(physicsReady.ready4physics)
67
68
except
Exception:
69
mlog.warning(
'Failed to get physicsReady bool, this is expected for offline test and GM test paritions'
)
70
return
False
71
72
def
EventCanBeSeenByPublic
(projectTags):
73
# Is the data allowed to be seen by the general public on atlas live and in the CCC
74
mlog = logging.getLogger(
'EventDisplays'
)
75
try
:
76
partition = IPCPartition(
'ATLAS'
)
77
RunParams = ISObject(partition,
'RunParams.RunParams'
,
'RunParams'
)
78
RunParams.checkout()
79
80
physicsReady = ISObject(partition,
'RunParams.Ready4Physics'
,
'Ready4PhysicsInfo'
)
81
physicsReady.checkout()
82
83
sendToPublicStream =
False
84
if
physicsReady.ready4physics
and
RunParams.T0_project_tag
in
projectTags:
85
sendToPublicStream =
True
86
87
return
sendToPublicStream
88
89
except
Exception:
90
mlog.warning(
'Failed to get bool for EventCanBeSeenByPublic, this is expected for offline test and GM test paritions'
)
91
return
False
92
93
def
GetUniqueJobID
():
94
# Setup unique output files (so that multiple Athena jobs on the same machine don't interfere)
95
import
os
96
jobId = os.environ.get(
'TDAQ_APPLICATION_NAME'
,
''
).
split
(
':'
)
97
if
not
len(jobId) == 5:
98
from
random
import
randint
99
jobId = [
'Athena-EventProcessor'
,
'Athena-EventDisplays-Segment'
,
'EventDisplays-Rack'
,
'tmp'
,
'%d'
% randint(0, 999)]
100
101
return
jobId
102
103
def
GetRunNumber
(partitionName):
104
part = IPCPartition(partitionName)
105
RunParams = ISObject(part,
'RunParams.RunParams'
,
'RunParams'
)
106
RunParams.checkout()
107
run_number = RunParams.getAttributeValue(
'run_number'
)
108
return
run_number
109
110
if
__name__ ==
"__main__"
:
111
runNumber=
GetRunNumber
()
112
print
(
"RunNumber: %s"
%runNumber)
113
bFields =
GetBFields
()
114
print
(
"BFields (Sol,Tor):"
, bFields)
115
isPublicEvent =
EventCanBeSeenByPublic
([
'data24_13p6TeV'
])
116
print
(
"isPublicEvent:"
, isPublicEvent)
print
void print(char *figname, TCanvas *c1)
Definition
TRTCalib_StrawStatusPlots.cxx:26
split
std::vector< std::string > split(const std::string &s, const std::string &t=":")
Definition
hcg.cxx:179
EventDisplaysOnlineHelpers.EventCanBeSeenByPublic
EventCanBeSeenByPublic(projectTags)
Definition
EventDisplaysOnlineHelpers.py:72
EventDisplaysOnlineHelpers.GetUniqueJobID
GetUniqueJobID()
Definition
EventDisplaysOnlineHelpers.py:93
EventDisplaysOnlineHelpers.Ready4Physics
Ready4Physics()
Definition
EventDisplaysOnlineHelpers.py:60
EventDisplaysOnlineHelpers.GetBFields
GetBFields()
Definition
EventDisplaysOnlineHelpers.py:7
EventDisplaysOnlineHelpers.GetRunNumber
GetRunNumber(partitionName)
Definition
EventDisplaysOnlineHelpers.py:103
EventDisplaysOnlineHelpers.WaitForPartition
WaitForPartition(partitionName=None)
Definition
EventDisplaysOnlineHelpers.py:46
Generated on
for ATLAS Offline Software by
1.17.0