def _get_maxlevel(self): """ Overall level of the table : INFO, WARNING, ERROR or FATAL based on the maximum level of the lines """ levs = map(lambda dv: dv.lev.level, self.dvs) mxl = max(levs) if len(levs) > 0 else None return Level.FromLevel(mxl) if mxl is not None else None
def dvlev(self, dvn): levk = self.dvk(dvn, "level") levn = self[levk] return Level.FromName(levn)
def init(self): self.lev = None if self.level is None else Level.FromLevel(self.level)
def __init__(self, tab, idx, sel, dv, ndv, lcu, dvmax, msg=""): """ :param tab: QDVTab instance :param idx: unskipped orignal seqhis line index :param sel: single line selection eg 'TO BT BT SA' :param dv: photon max deviations within seqhis code selection :param ndv: number of elements aggregated in the max :param lcu: list of length 3 with (seqhis-bigint, a-count, b-count) :param dvmax: triplet of floats for warn/error/fatal deviation levels Access an Dv instance in ipython:: In [12]: ab.ox_dv.dvs[2] Out[12]: 0002 : TO BT BR BT SA : 561 527 : 27 324/ 14: 0.043 mx/mn/av 0.00238/ 0/3.823e-05 eps:0.0002 Get at the values:: In [16]: av,bv = ab.ox_dv.dvs[2].av, ab.ox_dv.dvs[2].bv Change in meaning of fractions -------------------------------- The transition from dv.py to qdv.py changes the meaning of the warning fractions : it used to be fraction of compared elements with deviation exceeding cut it is now fraction of photons with aggregated max deviation exceeding cut This tends to reduce the fractions, but its more meaningful as single elements dont go wrong on there own : usually its the photon that goes wrong with many elements deviating together. So a fraction of deviant photons is more pertinent. """ label = self.LMT % (idx, msg, sel, lcu[1], lcu[2]) assert len(dvmax) == 3 nitem = len(dv) npoi = len(sel.split()) nelem = ndv * npoi * nitem if nelem > 0: mx = dv.max() mn = dv.min() avg = dv.sum() / float(nelem) disc = [dv[dv > dvmax[0]], dv[dv > dvmax[1]], dv[dv > dvmax[2]]] ndisc = map(len, disc) # elements, not items fdisc = map(lambda _: float(_) / float(nelem), ndisc) else: mx = None mn = None avg = None ndisc = None fdisc = None pass self.tab = tab self.label = label self.nitem = nitem self.nelem = nelem self.mx = mx self.mn = mn self.avg = avg self.ndisc = ndisc self.fdisc = fdisc self.ismax = False # set from DvTab self.dv = dv self.ndv = ndv self.lcu = lcu self.dvmax = dvmax self.msg = msg if self.mx > self.dvmax[2]: lev = Level.FromName("FATAL") lmsg = " > dvmax[2] %.4f " % self.dvmax[2] elif self.mx > self.dvmax[1]: lev = Level.FromName("ERROR") lmsg = " > dvmax[1] %.4f " % self.dvmax[1] elif self.mx > self.dvmax[0]: lev = Level.FromName("WARNING") lmsg = " > dvmax[0] %.4f " % self.dvmax[0] else: lev = Level.FromName("INFO") lmsg = "" pass self.fn_ = lev.fn_ self.lev = lev self.lmsg = lmsg