Source code for alphatwirl.heppyresult.ReadCounter
# Tai Sakuma <tai.sakuma@cern.ch>
##__________________________________________________________________||
import re
import collections
import ast
import os
##__________________________________________________________________||
[docs]class ReadCounter(object):
def __call__(self, path):
if not os.path.isfile(path): return None
file = open(path)
return self._readImp(file)
def _readImp(self, file):
counter = collections.OrderedDict()
file.readline() # skip the 1st line
for line in file:
level, content = self._readLine(line)
if level is None: continue
counter[level] = content
return counter
def _readLine(self, line):
# a line is written in the format '\t {level:<40} {count:>9} \t {eff1:4.2f} \t {eff2:6.4f}\n'
# https://github.com/cms-sw/cmssw/blob/CMSSW_7_4_0/PhysicsTools/HeppyCore/python/statistics/counter.py
exp = r'^\t (.*?) *([0-9e+-.]*) \t ([0-9e+-.]*) \t ([0-9e+-.]*)$'
exp = exp.encode()
match = re.search(exp, line)
if not match: return None, None
level = match.group(1)
count = match.group(2)
eff1 = match.group(3)
eff2 = match.group(4)
count = count.decode()
return level, dict(count = ast.literal_eval(count), eff1 = float(eff1), eff2 = float(eff2))
##__________________________________________________________________||