ATLAS Offline Software
Functions | Variables
python.CTPfragment Namespace Reference

Functions

def _versioned (obj, name, version)
 
def _setBits32 (bitset, value, shift, mask)
 
def decodeTriggerBits (info)
 
def encodeTriggerBits (bits, len=1)
 
def ctpFormatVersion (rob)
 
def setCtpFormatVersion (rob, version)
 
def hltCounter (rob)
 
def setHltCounter (rob, hltCounter)
 
def lumiBlock (rob)
 
def setLumiBlock (rob, lb)
 
def numberExtraPayloadWords (rob)
 
def numberHltExtraPayloadWords (rob)
 
def hltExtraPayloadWords (rob)
 
def getExtraPayloadObject (rob)
 
def setHltExtraPayloadWords (rob, extraWords)
 
def lvl1AcceptBunch (rob)
 
def getTriggerWords (rob, name='TAV')
 
def main ()
 

Variables

 FolderEntry
 
 ExtraPayload
 

Function Documentation

◆ _setBits32()

def python.CTPfragment._setBits32 (   bitset,
  value,
  shift,
  mask 
)
private
Set value in bitset using mask and shifting n bits to the left

Definition at line 35 of file CTPfragment.py.

35 def _setBits32(bitset, value, shift, mask):
36  """Set value in bitset using mask and shifting n bits to the left"""
37  v = bitset & (0xffffffff ^ (mask << shift))
38  v = v | (value << shift)
39  return v
40 

◆ _versioned()

def python.CTPfragment._versioned (   obj,
  name,
  version 
)
private
Helper to return versioned members of CTPdataformat

Definition at line 24 of file CTPfragment.py.

24 def _versioned(obj, name, version):
25  """Helper to return versioned members of CTPdataformat"""
26  attr = ''
27  v = version
28  while v>=0: # decrement version until found
29  attr = '%s_v%d' % (name, v)
30  if hasattr(obj,attr):
31  break
32  v -= 1
33  return getattr(obj,attr)
34 

◆ ctpFormatVersion()

def python.CTPfragment.ctpFormatVersion (   rob)
Get CTP fragment format version

Definition at line 61 of file CTPfragment.py.

61 def ctpFormatVersion(rob):
62  """Get CTP fragment format version"""
63  v = (rob.rod_minor_version() >> CTPdataformat.CTPFormatVersionShift) & CTPdataformat.CTPFormatVersionMask
64  return v
65 

◆ decodeTriggerBits()

def python.CTPfragment.decodeTriggerBits (   info)
Return list of bits [0,1,1,0,...] from list of 32-bit trigger words

Definition at line 41 of file CTPfragment.py.

41 def decodeTriggerBits(info):
42  """Return list of bits [0,1,1,0,...] from list of 32-bit trigger words"""
43  if type(info)==int:
44  info=[info]
45  bits=[]
46  cnt=0
47  for word in info:
48  for i in range(32):
49  if word&(1<<i):
50  bits+=[cnt]
51  cnt+=1
52  return bits
53 

◆ encodeTriggerBits()

def python.CTPfragment.encodeTriggerBits (   bits,
  len = 1 
)
Return list of trigger words from list of bits

Definition at line 54 of file CTPfragment.py.

54 def encodeTriggerBits(bits,len=1):
55  """Return list of trigger words from list of bits"""
56  words = [0] * len
57  for bit in bits:
58  words[bit//32] |= 1<<(bit%32)
59  return words
60 

◆ getExtraPayloadObject()

def python.CTPfragment.getExtraPayloadObject (   rob)
Return CTPfragment::ExtraPayload object created from CTP ROB

Definition at line 110 of file CTPfragment.py.

110 def getExtraPayloadObject(rob):
111  """Return CTPfragment::ExtraPayload object created from CTP ROB"""
112  v = cppyy.gbl.std.vector('unsigned int')()
113  for p in hltExtraPayloadWords(rob):
114  v.push_back(p)
115 
116  x = _CTPfragment.ExtraPayload(v)
117  return x
118 

◆ getTriggerWords()

def python.CTPfragment.getTriggerWords (   rob,
  name = 'TAV' 
)
Get trigger words

Definition at line 157 of file CTPfragment.py.

157 def getTriggerWords(rob,name='TAV'):
158  """Get trigger words"""
159 
160  name = name.upper()
161  v = ctpFormatVersion(rob)
162  pos = _versioned(CTPdataformat,name+'pos',min(v,4))
163  words = _versioned(CTPdataformat,name+'words',min(v,4))
164  # No TAP in RoI ROB
165  if v>4 and rob.source_id().module_id()==1:
166  pos = _versioned(CTPdataformat,name+'pos',5)
167  if name=='TAP':
168  return []
169 
170  l1abunch = 0 if rob.source_id().module_id()==1 else lvl1AcceptBunch(rob)
171 
172  data = [d for d in rob.rod_data()]
173  pos = l1abunch*_versioned(CTPdataformat,'DAQwordsPerBunch',v) + pos
174  return data[pos:pos+words]
175 
176 #
177 # For testing
178 #
179 

◆ hltCounter()

def python.CTPfragment.hltCounter (   rob)
Get HLT counter

Definition at line 72 of file CTPfragment.py.

72 def hltCounter(rob):
73  """Get HLT counter"""
74  v = ctpFormatVersion(rob)
75  return (rob.rod_detev_type() >> _versioned(CTPdataformat,'HltCounterShift',v) & _versioned(CTPdataformat,'HltCounterMask',v))
76 

◆ hltExtraPayloadWords()

def python.CTPfragment.hltExtraPayloadWords (   rob)

Definition at line 103 of file CTPfragment.py.

103 def hltExtraPayloadWords(rob):
105  offset = 0
106  if ctpFormatVersion(rob)>=3:
107  offset = 1 # for turn counter
108  return rob.rod_data()[-numberHltExtraPayloadWords(rob)+offset:] if n>0 else []
109 

◆ lumiBlock()

def python.CTPfragment.lumiBlock (   rob)

Definition at line 83 of file CTPfragment.py.

83 def lumiBlock(rob):
84  return (rob.rod_detev_type() >> CTPdataformat.LumiBlockShift & CTPdataformat.LumiBlockMask)
85 

◆ lvl1AcceptBunch()

def python.CTPfragment.lvl1AcceptBunch (   rob)
Get position of LVL1-Accept Bunch from ROD Fragment

Definition at line 147 of file CTPfragment.py.

147 def lvl1AcceptBunch(rob):
148  """Get position of LVL1-Accept Bunch from ROD Fragment"""
149 
150  v = ctpFormatVersion(rob)
151  shift = _versioned(CTPdataformat,'L1APositionShift',v)
152  if v==0:
153  return (rob.rod_detev_type() >> shift) & CTPdataformat.L1APositionMask
154  else:
155  return (rob.rod_minor_version() >> shift) & CTPdataformat.L1APositionMask
156 

◆ main()

def python.CTPfragment.main ( )

Definition at line 180 of file CTPfragment.py.

180 def main():
181  from optparse import OptionParser
182  import eformat
183 
184  parser = OptionParser(usage='%prog FILE')
185  parser.add_option('-m', '--moduleid', type='int', action='store', default=0,
186  help='Module ID of CTP fragment [%default]')
187 
188  (opt, args) = parser.parse_args()
189  if len(args)!=1:
190  parser.print_help()
191  return 1
192 
193  for event in eformat.istream(args[0]):
194  ctp_robs = [rob for rob in event.children()
195  if rob.source_id().subdetector_id() == eformat.helper.SubDetector.TDAQ_CTP
196  and rob.source_id().module_id() == opt.moduleid]
197 
198  if len(ctp_robs)==0:
199  print("Cannot find CTP ROB with module ID %d" % opt.moduleid)
200  continue
201 
202  rob = ctp_robs[0]
203  fe = _CTPfragment.FolderEntry()
204  fe.folderIndex = 1
205  fe.lumiBlock = 54
206 
207  fe2 = _CTPfragment.FolderEntry()
208  fe2.folderIndex = 2
209  fe2.lumiBlock = 59
210 
211  #x = getExtraPayloadObject(rob)
212  x = _CTPfragment.ExtraPayload()
213  x.setL1PSK(255)
214  x.updateFolder(fe)
215  x.updateFolder(fe2)
216  new_ctp_rob = setHltExtraPayloadWords(rob, [d for d in x.serialize()])
217  new_event = eformat.write.FullEventFragment()
218  new_event.copy_header(event)
219  for r in event.children():
220  if r.source_id().subdetector_id() != eformat.helper.SubDetector.TDAQ_CTP:
221  new_event.append(eformat.write.ROBFragment(r))
222 
223  new_event.append(eformat.write.ROBFragment(new_ctp_rob))
224 
225  event = new_event.readonly()
226  #new_ctp_rob = eformat.write.ROBFragment(new_ctp_rob)
227  #setHltCounter(new_ctp_rob,100)
228  rob = new_ctp_rob
229 
230  x = getExtraPayloadObject(rob)
231  folderUpdates = _CTPfragment.getFolderUpdates(x)
232  upd = ''
233  for f in folderUpdates:
234  upd += ('[%d,%d]' % (f.second.folderIndex,f.second.lumiBlock))
235 
236  print("L1ID %10d, LB %4d, Version %d, Bunch %d, HLT counter: %3d, Payload #%d %s L1PSK %d BGK %d COOLUPD %s" % (
237  event.lvl1_id(),
238  event.lumi_block(),
239  ctpFormatVersion(rob),
240  lvl1AcceptBunch(rob),
241  hltCounter(rob),
244  x.getL1PSK(),
245  x.getBGK(),
246  upd
247  ))
248 

◆ numberExtraPayloadWords()

def python.CTPfragment.numberExtraPayloadWords (   rob)
Number extra payload words (this includes the time since last L1A)

Definition at line 90 of file CTPfragment.py.

91  """Number extra payload words (this includes the time since last L1A)"""
92  v = ctpFormatVersion(rob)
93  if v < 2:
94  return 0
95  else:
96  return ((rob.rod_minor_version() >> _versioned(CTPdataformat,'ProgrammableExtraWordsShift',v)
97  & _versioned(CTPdataformat,'ProgrammableExtraWordsMask',v)))
98 

◆ numberHltExtraPayloadWords()

def python.CTPfragment.numberHltExtraPayloadWords (   rob)
Number extra payload words (this does NOT include the time since last L1A)

Definition at line 99 of file CTPfragment.py.

100  """Number extra payload words (this does NOT include the time since last L1A)"""
101  return max(numberExtraPayloadWords(rob)-1, 0)
102 

◆ setCtpFormatVersion()

def python.CTPfragment.setCtpFormatVersion (   rob,
  version 
)
Set CTP fragment format version

Definition at line 66 of file CTPfragment.py.

66 def setCtpFormatVersion(rob, version):
67  """Set CTP fragment format version"""
68  V = _setBits32(rob.rod_minor_version(), version,
69  CTPdataformat.CTPFormatVersionShift, CTPdataformat.CTPFormatVersionMask)
70  rob.rod_minor_version(V)
71 

◆ setHltCounter()

def python.CTPfragment.setHltCounter (   rob,
  hltCounter 
)
Set HLT counter

Definition at line 77 of file CTPfragment.py.

77 def setHltCounter(rob, hltCounter):
78  """Set HLT counter"""
79  v = ctpFormatVersion(rob)
80  c = _setBits32(rob.rod_detev_type(), hltCounter, _versioned(CTPdataformat,'HltCounterShift',v), _versioned(CTPdataformat,'HltCounterMask',v))
81  rob.rod_detev_type(c)
82 

◆ setHltExtraPayloadWords()

def python.CTPfragment.setHltExtraPayloadWords (   rob,
  extraWords 
)

Definition at line 119 of file CTPfragment.py.

119 def setHltExtraPayloadWords(rob, extraWords):
120 
121  # Make writable ROB
122  wrob = eformat.write.ROBFragment(rob)
123  # Copy ROD data, except extra words
124  data = [d for d in wrob.rod_data()]
126  if n>0:
127  data = data[:-n]
128  # Append new extra words and set in ROB
129  v = ctpFormatVersion(wrob)
130  if v<2:
131  setCtpFormatVersion(wrob, 2) # need at least V2
132  data.extend([0]) # time since last L1A
133  data.extend(extraWords)
134  wrob.rod_data(data)
135 
136  # Set new payload length (including words reserved by CTP)
137  ctp_extras = 1 # time since last L1A
138  if v>=3:
139  ctp_extras = 2 # turn counter
140  V = _setBits32(wrob.rod_minor_version(), len(extraWords)+ctp_extras,
141  _versioned(CTPdataformat,'ProgrammableExtraWordsShift',v),
142  _versioned(CTPdataformat,'ProgrammableExtraWordsMask',v))
143  wrob.rod_minor_version(V)
144 
145  return wrob.readonly()
146 

◆ setLumiBlock()

def python.CTPfragment.setLumiBlock (   rob,
  lb 
)

Definition at line 86 of file CTPfragment.py.

86 def setLumiBlock(rob, lb):
87  lbits = _setBits32(rob.rod_detev_type(), lb, CTPdataformat.LumiBlockShift, CTPdataformat.LumiBlockMask)
88  rob.rod_detev_type(lbits)
89 

Variable Documentation

◆ ExtraPayload

python.CTPfragment.ExtraPayload

Definition at line 22 of file CTPfragment.py.

◆ FolderEntry

python.CTPfragment.FolderEntry

Definition at line 21 of file CTPfragment.py.

python.CTPfragment.setHltExtraPayloadWords
def setHltExtraPayloadWords(rob, extraWords)
Definition: CTPfragment.py:119
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
python.CTPfragment._versioned
def _versioned(obj, name, version)
Definition: CTPfragment.py:24
python.CTPfragment.numberExtraPayloadWords
def numberExtraPayloadWords(rob)
Definition: CTPfragment.py:90
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
python.CTPfragment.setCtpFormatVersion
def setCtpFormatVersion(rob, version)
Definition: CTPfragment.py:66
python.CTPfragment.getExtraPayloadObject
def getExtraPayloadObject(rob)
Definition: CTPfragment.py:110
python.CTPfragment._setBits32
def _setBits32(bitset, value, shift, mask)
Definition: CTPfragment.py:35
python.CTPfragment.getTriggerWords
def getTriggerWords(rob, name='TAV')
Definition: CTPfragment.py:157
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
python.CTPfragment.main
def main()
Definition: CTPfragment.py:180
python.CTPfragment.setHltCounter
def setHltCounter(rob, hltCounter)
Definition: CTPfragment.py:77
python.CTPfragment.decodeTriggerBits
def decodeTriggerBits(info)
Definition: CTPfragment.py:41
print
void print(char *figname, TCanvas *c1)
Definition: TRTCalib_StrawStatusPlots.cxx:25
python.CTPfragment.numberHltExtraPayloadWords
def numberHltExtraPayloadWords(rob)
Definition: CTPfragment.py:99
python.CTPfragment.ctpFormatVersion
def ctpFormatVersion(rob)
Definition: CTPfragment.py:61
python.CTPfragment.setLumiBlock
def setLumiBlock(rob, lb)
Definition: CTPfragment.py:86
python.CTPfragment.lvl1AcceptBunch
def lvl1AcceptBunch(rob)
Definition: CTPfragment.py:147
python.CTPfragment.hltCounter
def hltCounter(rob)
Definition: CTPfragment.py:72
python.CTPfragment.hltExtraPayloadWords
def hltExtraPayloadWords(rob)
Definition: CTPfragment.py:103
python.CTPfragment.encodeTriggerBits
def encodeTriggerBits(bits, len=1)
Definition: CTPfragment.py:54
python.CTPfragment.lumiBlock
def lumiBlock(rob)
Definition: CTPfragment.py:83