ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Trigger
TrigAnalysis
TrigBunchCrossingTool
python
StandaloneBunchgroupHandler.py
Go to the documentation of this file.
1
#!/bin/env python
2
3
# Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
4
#
5
# BunchgroupHandler
6
#
7
# David Berge - October 2010
8
#
9
# Contents:
10
# BunchgroupHandler - utility tool to access bunch-group information from COOL
11
#
12
13
from
builtins
import
object
14
import
sys
15
16
from
PyCool
import
cool
17
from
CoolConvUtilities.AtlCoolLib
import
indirectOpen
18
19
class
BunchgroupRunData
(object):
20
21
def
__init__
(self,run):
22
23
self.
run
= run
24
# physics bunch group BCIDs, keyed by LB
25
self.
physicsBunchgroupBcids
= {}
26
# BCID lookup, keyed by LB
27
self.
bcidLookupBefore
= {}
28
# BCID lookup, keyed by LB
29
self.
bcidLookupAfter
= {}
30
# LB lookup
31
self.
lbLookup
= {}
32
33
self.
verbose
=
False
34
35
def
createLookup
(self,lb,bcidRange):
36
if
self.
verbose
:
37
print
(
"createLookup called"
)
38
self.
bcidLookupBefore
[lb] = []
39
self.
bcidLookupAfter
[lb] = []
40
for
bcid
in
range(3564):
41
bcidListBefore = []
42
bcidListAfter = []
43
for
offset
in
range(1,bcidRange+1):
44
checkBcid = bcid + offset
45
if
checkBcid > 3563:
46
checkBcid -= 3564
47
if
checkBcid
in
self.
physicsBunchgroupBcids
[lb]:
48
bcidListAfter.append(1)
49
else
:
50
bcidListAfter.append(0)
51
self.
bcidLookupAfter
[lb].append(bcidListAfter)
52
53
for
offset
in
range(1,bcidRange+1):
54
checkBcid = bcid - offset
55
if
checkBcid < 0:
56
checkBcid += 3564
57
if
checkBcid
in
self.
physicsBunchgroupBcids
[lb]:
58
bcidListBefore.append(1)
59
else
:
60
bcidListBefore.append(0)
61
self.
bcidLookupBefore
[lb].append(bcidListBefore)
62
63
if
self.
verbose
:
64
print
(
"Bg run data, Run"
,self.
run
,
"LB"
,lb)
65
for
bcid
in
range(3564):
66
print
(
"BCID"
,bcid,
"before"
,self.
bcidLookupBefore
[lb][bcid])
67
print
(
"BCID"
,bcid,
"after"
,self.
bcidLookupAfter
[lb][bcid])
68
69
class
BunchgroupHandler
(object):
70
71
def
__init__
(self):
72
73
# Database parameters
74
self.
trigProdDbName
=
'COOLONL_TRIGGER/COMP200'
75
self.
bunchGroupContentFolder
=
'/TRIGGER/LVL1/BunchGroupContent'
76
self.
bunchGroupDescFolder
=
'/TRIGGER/LVL1/BunchGroupDescription'
77
78
# Database handle
79
self.
trigProdDb
=
None
80
81
# self.verbose = False
82
self.
verbose
=
True
83
84
# set physics bunch group
85
self.
physicsBunchgroupBit
= 1
86
87
# run objects
88
self.
runObjects
= dict()
89
90
# remember how many runs we have, keep only runsToArchive in memory
91
self.
runArchive
= []
92
# number of runs we keep in memory
93
self.
runsToArchive
= 20
94
95
# BCID range
96
self.
bcidRange
= 32
97
98
def
openDB
(self):
99
# Open the trigger COOL database
100
try
:
101
self.
trigProdDb
= indirectOpen(self.
trigProdDbName
,
True
,
False
)
102
if
self.
verbose
:
print
(
'Connected to'
, self.
trigProdDbName
,
'for Trigger data'
)
103
except
Exception
as
e:
104
print
(e)
105
return
False
106
return
True
107
108
def
closeDB
(self):
109
# Close the database
110
if
self.
trigProdDb
is
not
None
:
111
self.
trigProdDb
.closeDatabase()
112
self.
trigProdDb
=
None
113
114
def
loadRunData
(self, run):
115
self.
openDB
()
116
self.
loadBunchgroups
(run)
117
self.
closeDB
()
118
if
len(self.
runArchive
) > self.
runsToArchive
:
119
if
self.
verbose
:
120
print
(
"Remove run"
,self.
runArchive
[0],
"from memory"
)
121
del self.
runObjects
[self.
runArchive
[0]]
122
self.
runArchive
.pop(0)
123
124
def
loadBunchgroups
(self, run):
125
126
self.
runObjects
[run] =
BunchgroupRunData
(run)
127
self.
runArchive
.append(run)
128
self.
runObjects
[run].verbose = self.
verbose
129
130
if
self.
verbose
:
131
print
(
'loadBounchgroups called, run'
,run)
132
133
bgFolder = self.
trigProdDb
.getFolder(self.
bunchGroupContentFolder
)
134
itr = bgFolder.browseObjects(run << 32,(run+1) << 32,cool.ChannelSelection.all())
135
while
itr.goToNext() :
136
obj=itr.currentRef()
137
lb=(obj.since() & 0xffff)
138
self.
runObjects
[run].physicsBunchgroupBcids[lb] = []
139
bgcont = obj.payload()[
'BunchCode'
]
140
for
bcid
in
range(3564):
141
if
(bgcont[bcid]>>self.
physicsBunchgroupBit
& 1): self.
runObjects
[run].physicsBunchgroupBcids[lb].append(bcid)
142
self.
runObjects
[run].createLookup(lb,self.
bcidRange
)
143
if
self.
verbose
:
144
print
(
"LB"
,lb,
"BCIDs"
,self.
runObjects
[run].physicsBunchgroupBcids[lb])
145
146
def
getTrainPosition
(self,run,lb,bcid):
147
148
if
self.
verbose
:
149
print
(
'getTrainPosition called'
)
150
before, after = self.
getNeighbourBcids
(run,lb,bcid)
151
return
(len(before)+1)
152
153
def
getNeighbourBcids
(self,run,lb,bcid):
154
155
if
self.
verbose
:
156
print
(
'getNeighbourBcids called'
)
157
158
before, after = self.
getNeighbourPattern
(run,lb,bcid)
159
160
l1 = []
161
for
bcidOffset
in
range(len(before)):
162
checkBcid = bcid - (bcidOffset+1)
163
if
checkBcid < 0: checkBcid += 3564
164
if
before[bcidOffset]:
165
if
self.
verbose
:
166
print
(
"BCID"
,checkBcid,
"is filled"
)
167
l1.append(checkBcid)
168
l2 = []
169
for
bcidOffset
in
range(len(after)):
170
checkBcid = bcid + (bcidOffset+1)
171
if
checkBcid > 3563: checkBcid -= 3564
172
if
after[bcidOffset]:
173
if
self.
verbose
:
174
print
(
"BCID"
,checkBcid,
"is filled"
)
175
l2.append(checkBcid)
176
return
l1, l2
177
178
179
def
getNeighbourPattern
(self,run,lb,bcid):
180
181
if
self.
verbose
:
182
print
(
'getNeighbourPattern called'
)
183
184
lbList = []
185
try
:
186
lbList = list(self.
runObjects
[run].physicsBunchgroupBcids.keys())
187
except
KeyError:
188
self.
loadRunData
(run)
189
lbList = list(self.
runObjects
[run].physicsBunchgroupBcids.keys())
190
191
latestLb = -1
192
try
:
193
latestLb = self.
runObjects
[run].lbLookup[lb]
194
except
KeyError:
195
for
testLb
in
sorted(lbList):
196
if
latestLb < 0: latestLb = testLb
197
if
lb > testLb: latestLb = testLb
198
if
self.
verbose
:
199
print
(
"LB"
,lb,
"latest LB"
,latestLb)
200
self.
runObjects
[run].lbLookup[lb] = latestLb
201
202
return
(self.
runObjects
[run].bcidLookupBefore[latestLb][bcid], self.
runObjects
[run].bcidLookupAfter[latestLb][bcid])
203
204
if
__name__ ==
'__main__'
:
205
206
import
getopt
207
208
def
usage
():
209
print
(
"%s"
% sys.argv[0])
210
print
(
" --help this printout"
)
211
print
(
" --run <runNo> run number"
)
212
print
(
" --bcid <bcid> BCID"
)
213
print
(
" --lb <lb> LB"
)
214
215
try
:
216
longopts=[
'run='
,
'bcid='
,
'lb='
,
'help'
]
217
opts,args=getopt.getopt(sys.argv[1:],
''
,longopts)
218
except
getopt.GetoptError:
219
usage
()
220
sys.exit(2)
221
222
run = -1
223
lb = -1
224
bcid = -1
225
226
for
o,a
in
opts:
227
if
o
in
(
'-h'
,
'--help'
):
228
usage
()
229
sys.exit(0)
230
if
o ==
'--run'
:
231
run = int(a)
232
if
o ==
'--bcid'
:
233
bcid = int(a)
234
if
o ==
'--lb'
:
235
lb = int(a)
236
237
if
(run == -1
or
bcid == -1
or
lb == -1) :
238
usage
()
239
sys.exit(2)
240
241
bg =
BunchgroupHandler
()
242
bg.verbose =
False
243
bg.loadRunData(run)
244
245
l1, l2 = bg.getNeighbourBcids(run,lb,bcid)
246
print
(
"Run"
,run,
"neighbouring filled BCIDs for BCID"
,bcid,
":"
,sorted(l1), sorted(l2))
if
if(pathvar)
Definition
SealSharedLib.cxx:168
print
void print(char *figname, TCanvas *c1)
Definition
TRTCalib_StrawStatusPlots.cxx:26
StandaloneBunchgroupHandler.BunchgroupHandler
Definition
StandaloneBunchgroupHandler.py:69
StandaloneBunchgroupHandler.BunchgroupHandler.runObjects
runObjects
Definition
StandaloneBunchgroupHandler.py:88
StandaloneBunchgroupHandler.BunchgroupHandler.trigProdDb
trigProdDb
Definition
StandaloneBunchgroupHandler.py:79
StandaloneBunchgroupHandler.BunchgroupHandler.bunchGroupDescFolder
str bunchGroupDescFolder
Definition
StandaloneBunchgroupHandler.py:76
StandaloneBunchgroupHandler.BunchgroupHandler.loadBunchgroups
loadBunchgroups(self, run)
Definition
StandaloneBunchgroupHandler.py:124
StandaloneBunchgroupHandler.BunchgroupHandler.openDB
openDB(self)
Definition
StandaloneBunchgroupHandler.py:98
StandaloneBunchgroupHandler.BunchgroupHandler.bunchGroupContentFolder
str bunchGroupContentFolder
Definition
StandaloneBunchgroupHandler.py:75
StandaloneBunchgroupHandler.BunchgroupHandler.bcidRange
int bcidRange
Definition
StandaloneBunchgroupHandler.py:96
StandaloneBunchgroupHandler.BunchgroupHandler.closeDB
closeDB(self)
Definition
StandaloneBunchgroupHandler.py:108
StandaloneBunchgroupHandler.BunchgroupHandler.physicsBunchgroupBit
int physicsBunchgroupBit
Definition
StandaloneBunchgroupHandler.py:85
StandaloneBunchgroupHandler.BunchgroupHandler.getNeighbourPattern
getNeighbourPattern(self, run, lb, bcid)
Definition
StandaloneBunchgroupHandler.py:179
StandaloneBunchgroupHandler.BunchgroupHandler.getNeighbourBcids
getNeighbourBcids(self, run, lb, bcid)
Definition
StandaloneBunchgroupHandler.py:153
StandaloneBunchgroupHandler.BunchgroupHandler.runArchive
list runArchive
Definition
StandaloneBunchgroupHandler.py:91
StandaloneBunchgroupHandler.BunchgroupHandler.runsToArchive
int runsToArchive
Definition
StandaloneBunchgroupHandler.py:93
StandaloneBunchgroupHandler.BunchgroupHandler.__init__
__init__(self)
Definition
StandaloneBunchgroupHandler.py:71
StandaloneBunchgroupHandler.BunchgroupHandler.trigProdDbName
str trigProdDbName
Definition
StandaloneBunchgroupHandler.py:74
StandaloneBunchgroupHandler.BunchgroupHandler.getTrainPosition
getTrainPosition(self, run, lb, bcid)
Definition
StandaloneBunchgroupHandler.py:146
StandaloneBunchgroupHandler.BunchgroupHandler.verbose
bool verbose
Definition
StandaloneBunchgroupHandler.py:82
StandaloneBunchgroupHandler.BunchgroupHandler.loadRunData
loadRunData(self, run)
Definition
StandaloneBunchgroupHandler.py:114
StandaloneBunchgroupHandler.BunchgroupRunData
Definition
StandaloneBunchgroupHandler.py:19
StandaloneBunchgroupHandler.BunchgroupRunData.__init__
__init__(self, run)
Definition
StandaloneBunchgroupHandler.py:21
StandaloneBunchgroupHandler.BunchgroupRunData.createLookup
createLookup(self, lb, bcidRange)
Definition
StandaloneBunchgroupHandler.py:35
StandaloneBunchgroupHandler.BunchgroupRunData.verbose
bool verbose
Definition
StandaloneBunchgroupHandler.py:33
StandaloneBunchgroupHandler.BunchgroupRunData.bcidLookupAfter
dict bcidLookupAfter
Definition
StandaloneBunchgroupHandler.py:29
StandaloneBunchgroupHandler.BunchgroupRunData.physicsBunchgroupBcids
dict physicsBunchgroupBcids
Definition
StandaloneBunchgroupHandler.py:25
StandaloneBunchgroupHandler.BunchgroupRunData.bcidLookupBefore
dict bcidLookupBefore
Definition
StandaloneBunchgroupHandler.py:27
StandaloneBunchgroupHandler.BunchgroupRunData.lbLookup
dict lbLookup
Definition
StandaloneBunchgroupHandler.py:31
StandaloneBunchgroupHandler.BunchgroupRunData.run
run
Definition
StandaloneBunchgroupHandler.py:23
StandaloneBunchgroupHandler.usage
usage()
Definition
StandaloneBunchgroupHandler.py:208
Generated on
for ATLAS Offline Software by
1.17.0