ATLAS Offline Software
Public Member Functions | Public Attributes | List of all members
python.spbfile.SpbFile Class Reference
Collaboration diagram for python.spbfile.SpbFile:

Public Member Functions

def __init__ (self, filename)
 
def getVersion (self)
 
def readMagicVersion (self)
 
def growBufToSize (self, size)
 
def getMsg (self)
 
def close (self)
 
def rewind (self)
 
def tell (self)
 
def getInfo (self)
 

Public Attributes

 info
 
 eispb
 
 buf
 
 blen
 
 bpos
 
 usize
 
 version
 

Detailed Description

Definition at line 32 of file spbfile.py.

Constructor & Destructor Documentation

◆ __init__()

def python.spbfile.SpbFile.__init__ (   self,
  filename 
)

Definition at line 34 of file spbfile.py.

34  def __init__(self, filename):
35 
36  self.info = {}
37  self.info['size'] = os.path.getsize(filename)
38 
39  try:
40  self.eispb = gzip.open(filename, 'rb')
41  except Exception:
42  raise
43 
44  # buffer to read file
45  self.buf = b"" # read buffer
46  self.blen = 0 # buffer length
47  self.bpos = 0 # buffer current read position
48  self.usize = 0 # aproximate uncompressed size
49  try:
50  self.version = self.readMagicVersion()
51  except Exception:
52  raise
53 

Member Function Documentation

◆ close()

def python.spbfile.SpbFile.close (   self)

Definition at line 99 of file spbfile.py.

99  def close(self):
100  self.eispb.close()
101 

◆ getInfo()

def python.spbfile.SpbFile.getInfo (   self)

Definition at line 115 of file spbfile.py.

115  def getInfo(self):
116 
117  self.info['guids'] = []
118  fileno = 0
119  tot_nevents = 0
120  tot_nuevents = 0
121  tot_nbytes = 0
122  nevents = 0
123  nuevents = 0
124  nbytes = 0
125  runevtRanges = RunEvtRanges()
126  runevt = {}
127  currentGUID = {}
128 
129  """
130  SPB file format is a stream of google's protocol buffer messages
131  Reading is sequential, no random read of messages is possible
132  """
133 
134  eipbof = EIPBof(self.version)
135  self.info['version'] = self.version
136 
137  while True:
138  (mtype_ver, mlen, msg) = self.getMsg()
139  mtype = (mtype_ver & 0x000fff00) >> 8
140  ver = (mtype_ver & 0x000000ff)
141  if (ver != eic.EI_PROTO_MSGVER):
142  raise Exception("Invalid message version found in EISPB file")
143 
144  if mtype == eic.EI_PROTO_HEADER: # Header
145  header = eipbof.Header()
146  header.ParseFromString(msg)
147  self.info['jobID'] = header.jobID
148  self.info['taskID'] = header.taskID
149  self.info['startProcTime'] = header.startProcTime
150  self.info['inputDsName'] = header.inputDsName
151  self.info['provenanceRef'] = header.provenanceRef
152  self.info['triggerInfo'] = header.triggerInfo
153  elif mtype == eic.EI_PROTO_BEGINGUID: # Begin GUID
154  beginGUID = eipbof.BeginGUID()
155  beginGUID.ParseFromString(msg)
156  currentGUID = {}
157  currentGUID['fileStartProcTime'] = beginGUID.startProcTime
158  currentGUID['guid'] = beginGUID.guid
159  currentGUID['fileno'] = fileno
160  fileno += 1
161  nevents = 0
162  nuevents = 0
163  nbytes = 0
164  # run-evt, used to calculate unique events
165  runevt = {}
166  # to calculate run evt ranges
167  runevtRanges = RunEvtRanges()
168  #
169  currentGUID['AMITag'] = beginGUID.AMITag
170  currentGUID['trigStream'] = beginGUID.trigStream
171  currentGUID['projName'] = beginGUID.projName
172  elif mtype == eic.EI_PROTO_ENDGUID: # End GUID
173  endGUID = eipbof.EndGUID()
174  endGUID.ParseFromString(msg)
175  currentGUID['nevents'] = nevents
176  currentGUID['nuevents'] = nuevents
177  currentGUID['fileEndProcTime'] = endGUID.endProcTime
178  currentGUID['runevtRanges'] = runevtRanges.getRanges()
179  self.info['guids'].append(currentGUID)
180  tot_nevents += nevents
181  tot_nuevents += nuevents
182  tot_nbytes += nbytes
183  elif mtype == eic.EI_PROTO_EIEVENT: # event
184  eventPB = eipbof.EIEvent()
185  eventPB.ParseFromString(msg)
186  nevents += 1
187  nbytes += mlen
188  runevtRanges.update(int(eventPB.runNumber),
189  int(eventPB.eventNumber))
190  runevtkey = "{0:08d}-{1:011d}".format(int(eventPB.runNumber),
191  int(eventPB.eventNumber))
192  if runevtkey not in runevt:
193  runevt[runevtkey] = 1
194  nuevents += 1
195  elif mtype == eic.EI_PROTO_TRIGGERMENU: # Trigger menu
196  triggerMenu = eipbof.TriggerMenu()
197  triggerMenu.ParseFromString(msg)
198  elif mtype == eic.EI_PROTO_TRAILER: # Trailer
199  trailer = eipbof.Trailer()
200  trailer.ParseFromString(msg)
201  self.info['endProcTime'] = trailer.endProcTime
202  self.info['nevents'] = trailer.nentries
203  self.info['nfiles'] = trailer.nfiles
204  break
205  else:
206  break
207 
208  self.info['usize'] = self.usize
209  self.info['nuevents'] = tot_nuevents
210  self.rewind()
211 
212  # checkings
213  if self.info['nfiles'] != fileno:
214  log.info("ERROR nfiles {} {}".format(fileno, self.info['nfiles']))
215  if self.info['nevents'] != tot_nevents:
216  log.info("ERROR tot_nevents {} {}".format(tot_nevents,
217  self.info['nevents']))
218 
219  return self.info

◆ getMsg()

def python.spbfile.SpbFile.getMsg (   self)

Definition at line 84 of file spbfile.py.

84  def getMsg(self):
85  self.growBufToSize(4)
86  mtype = struct.unpack('<I', self.buf[self.bpos:self.bpos+4])[0]
87  self.bpos += 4
88 
89  self.growBufToSize(4)
90  mlen = struct.unpack('<I', self.buf[self.bpos:self.bpos+4])[0]
91  self.bpos += 4
92 
93  self.growBufToSize(mlen)
94  msg = self.buf[self.bpos:self.bpos+mlen]
95  self.bpos += mlen
96 
97  return (mtype, mlen, msg)
98 

◆ getVersion()

def python.spbfile.SpbFile.getVersion (   self)

Definition at line 54 of file spbfile.py.

54  def getVersion(self):
55  return self.version
56 

◆ growBufToSize()

def python.spbfile.SpbFile.growBufToSize (   self,
  size 
)

Definition at line 67 of file spbfile.py.

67  def growBufToSize(self, size):
68  if self.bpos + size < self.blen:
69  return
70  # throw bytes away until current read position
71  self.buf = self.buf[self.bpos:]
72  self.bpos = 0
73  self.blen = len(self.buf)
74  # more bytes needed ?
75  if self.blen < size:
76  # read at least 40960
77  toread = size-self.blen
78  if toread < 40960:
79  toread = 40960
80  self.buf += self.eispb.read(toread)
81  self.usize += toread
82  self.blen = len(self.buf)
83 

◆ readMagicVersion()

def python.spbfile.SpbFile.readMagicVersion (   self)

Definition at line 57 of file spbfile.py.

57  def readMagicVersion(self):
58  self.growBufToSize(8)
59  magic = struct.unpack('<I', self.buf[self.bpos:self.bpos+4])[0]
60  self.bpos += 4
61  version = struct.unpack('<I', self.buf[self.bpos:self.bpos+4])[0]
62  self.bpos += 4
63  if magic != 0x6e56c8c7:
64  raise Exception("Invalid magic in EISPB file")
65  return version
66 

◆ rewind()

def python.spbfile.SpbFile.rewind (   self)

Definition at line 102 of file spbfile.py.

102  def rewind(self):
103  self.eispb.rewind()
104  self.buf = b"" # read buffer
105  self.blen = 0 # buffer length
106  self.bpos = 0 # buffer current read position
107  self.usize = 0 # aproximate uncompressed size
108  # skip magic and version
109  self.growBufToSize(8)
110  self.bpos += 8
111 

◆ tell()

def python.spbfile.SpbFile.tell (   self)

Definition at line 112 of file spbfile.py.

112  def tell(self):
113  self.eispb.tell()
114 

Member Data Documentation

◆ blen

python.spbfile.SpbFile.blen

Definition at line 46 of file spbfile.py.

◆ bpos

python.spbfile.SpbFile.bpos

Definition at line 47 of file spbfile.py.

◆ buf

python.spbfile.SpbFile.buf

Definition at line 45 of file spbfile.py.

◆ eispb

python.spbfile.SpbFile.eispb

Definition at line 40 of file spbfile.py.

◆ info

python.spbfile.SpbFile.info

Definition at line 36 of file spbfile.py.

◆ usize

python.spbfile.SpbFile.usize

Definition at line 48 of file spbfile.py.

◆ version

python.spbfile.SpbFile.version

Definition at line 50 of file spbfile.py.


The documentation for this class was generated from the following file:
read
IovVectorMap_t read(const Folder &theFolder, const SelectionCriterion &choice, const unsigned int limit=10)
Definition: openCoraCool.cxx:569
vtune_athena.format
format
Definition: vtune_athena.py:14
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
dumpHVPathFromNtuple.append
bool append
Definition: dumpHVPathFromNtuple.py:91
python.processes.powheg.ZZ.ZZ.__init__
def __init__(self, base_directory, **kwargs)
Constructor: all process options are set here.
Definition: ZZ.py:18