Example #1
0
def extract_ovl_vconfigs(rank_frames,
                         channame,
                         traindir,
                         start,
                         end,
                         metric='eff/dt'):
    """
    returns a dictionary mapping active vconfigs to segments
    does NOT include "none" channel
    """
    vconfigs = []
    for rnkfr in rank_frames:
        trained, calib = idq.extract_timeseries_ranges(rnkfr)
        classifier = idq.extract_fap_name(rnkfr)

        vetolist = glob.glob("%s/%d_%d/ovl/ovl/*vetolist.eval" %
                             (traindir, trained[0], trained[1]))
        if len(vetolist) != 1:
            raise ValueError(
                "trouble finding a single vetolist file for : %s" % rnkfr)
        vetolist = vetolist[0]
        v = event.loadstringtable(vetolist)

        rankmap = {0: [(None, None, None, None, 0, 0)]}

        for line in v:
            metric_exp = float(line[ovl.vD['metric_exp']])
            if metric == 'eff/dt':
                rnk = ovl.effbydt_to_rank(metric_exp)
            elif metric == 'vsig':
                rnk = ovl.vsig_to_rank(metric_exp)
            elif metric == 'useP':
                rnk = ovl.useP_to_rank(metric_exp)
            else:
                raise ValueError("metric=%s not understood" % metric)
            if rankmap.has_key(rnk):
                rankmap[rnk].append(
                    (line[ovl.vD['vchan']], float(line[ovl.vD['vthr']]),
                     float(line[ovl.vD['vwin']]), metric, metric_exp, rnk))
            else:
                rankmap[rnk] = [
                    (line[ovl.vD['vchan']], float(line[ovl.vD['vthr']]),
                     float(line[ovl.vD['vwin']]), metric, metric_exp, rnk)
                ]

        for key, value in rankmap.items():
            rankmap[key] = tuple(value)

        t, ts = idq.combine_gwf([rnkfr], [channame])
        t = t[0]
        truth = (start <= t) * (t <= end)
        t = t[truth]
        ts = ts[0][truth]
        if not len(ts):
            continue

        configs = rankmap[ts[0]]
        segStart = t[0]
        for T, TS in zip(t, ts):
            if rankmap[TS] != configs:
                vconfigs.append((configs, [segStart, T]))
                segStart = T
                configs = rankmap[TS]
            else:
                pass
        vconfigs.append((configs, [segStart, T + t[1] - t[0]]))

    configs = {}
    for vconfig, seg in vconfigs:
        if configs.has_key(vconfig):
            configs[vconfig].append(seg)
        else:
            configs[vconfig] = [seg]
    for key, value in configs.items():
        value = event.andsegments([event.fixsegments(value), [[start, end]]])
        if event.livetime(value):
            configs[key] = event.fixsegments(value)
        else:
            raise ValueError(
                "somehow picked up a config with zero livetime...")

    return vconfigs, configs, {
        "vchan": 0,
        "vthr": 1,
        "vwin": 2,
        "metric": 3,
        "metric_exp": 4,
        "rank": 5
    }
        thisD['%s livetime' % dq_name] = None
        thisD['start'] = None
        thisD['end'] = None

    ### extract Ng, Nc
    if flavor == "ovl":
        vetolist = glob.glob(
            "%s/%d_%d/%s/ovl/*vetolist.eval" %
            (traindir, train_start, train_end, opts.classifier))
        if len(vetolist) != 1:
            raise ValueError(
                "something odd with %s vetolists : %s/%d_%d/%s/ovl/" %
                (opts.classifier, traindir, train_start, train_end))
        else:
            thisD['Num glitches'] = int(
                event.loadstringtable(vetolist[0])[0][idq.ovl.vD['#gwtrg']])
    elif flavor in idq.mla_flavors:
        pat = glob.glob("%s/%d_%d/%s_mla*.pat" %
                        (traindir, train_start, train_end, ifo))
        if len(pat) != 1:
            raise ValueError(
                "something odd with %s patfile : %s/%d_%d/" %
                (opts.classifier, traindir, train_start, train_end))
        else:
            i = [
                float(i) for i in idq.slim_load_datfiles(pat[0], columns=['i'])
            ]
            Ng = np.sum(i)
            Nc = len(i) - Ng
            thisD['Num glitches'] = int(Ng)
            thisD['Num cleans'] = int(Nc)
Example #3
0
def extract_ovl_vconfigs( rank_frames, channame, traindir, start, end, metric='eff/dt' ):
    """
    returns a dictionary mapping active vconfigs to segments
    does NOT include "none" channel
    """
    vconfigs = []
    for rnkfr in rank_frames:
        trained, calib = idq.extract_timeseries_ranges( rnkfr )
        classifier = idq.extract_fap_name( rnkfr ) 

        vetolist = glob.glob( "%s/%d_%d/ovl/ovl/*vetolist.eval"%(traindir, trained[0], trained[1]) )        
        if len(vetolist) != 1:
            raise ValueError( "trouble finding a single vetolist file for : %s"%rnkfr )
        vetolist=vetolist[0]
        v = event.loadstringtable( vetolist )

        rankmap = { 0:[(None, None, None, None, 0, 0)] }

        for line in v:
            metric_exp = float(line[ovl.vD['metric_exp']])
            if metric == 'eff/dt':
                rnk = ovl.effbydt_to_rank( metric_exp )
            elif metric == 'vsig':
                rnk = ovl.vsig_to_rank( metric_exp )
            elif metric == 'useP': 
                rnk = ovl.useP_to_rank( metric_exp )
            else:
                raise ValueError("metric=%s not understood"%metric)
            if rankmap.has_key(rnk):
                rankmap[rnk].append( (line[ovl.vD['vchan']], float(line[ovl.vD['vthr']]), float(line[ovl.vD['vwin']]), metric, metric_exp, rnk ))
            else:
                rankmap[rnk] = [(line[ovl.vD['vchan']], float(line[ovl.vD['vthr']]), float(line[ovl.vD['vwin']]), metric, metric_exp, rnk )]

        for key, value in rankmap.items():
            rankmap[key] = tuple(value)

        t, ts = idq.combine_gwf( [rnkfr], [channame])
        t = t[0]
        truth = (start <= t)*(t <= end)
        t = t[truth]
        ts = ts[0][truth]
        if not len(ts):
            continue

        configs = rankmap[ts[0]]
        segStart = t[0]
        for T, TS in zip(t, ts):
            if rankmap[TS] != configs:
                vconfigs.append( (configs, [segStart, T] ) )
                segStart = T
                configs = rankmap[TS]
            else:
                pass 
        vconfigs.append( (configs, [segStart, T+t[1]-t[0]] ) )

    configs = {}
    for vconfig, seg in vconfigs:
        if configs.has_key( vconfig ):
            configs[vconfig].append( seg )
        else:
            configs[vconfig] = [ seg ]
    for key, value in configs.items():
        value = event.andsegments( [event.fixsegments( value ), [[start,end]] ] )
        if event.livetime( value ):
            configs[key] = event.fixsegments( value )
        else:
            raise ValueError("somehow picked up a config with zero livetime...")

    return vconfigs, configs, {"vchan":0, "vthr":1, "vwin":2, "metric":3, "metric_exp":4, "rank":5}
        thisD['%s livetime'%dq_name] = event.livetime( idq.extract_dq_segments( sciseg_files[0], dq_name)[0] )
        segstart, segend = idq.extract_start_stop( sciseg_files[0], suffix='.xml.gz')
        thisD['start'] = int(segstart)
        thisD['end'] = int(segend)
    else:
        thisD['%s livetime'%dq_name] = None
        thisD['start'] = None
        thisD['end'] = None

    ### extract Ng, Nc
    if flavor == "ovl":
        vetolist = glob.glob("%s/%d_%d/%s/ovl/*vetolist.eval"%(traindir, train_start, train_end, opts.classifier))
        if len(vetolist) != 1:
            raise ValueError("something odd with %s vetolists : %s/%d_%d/%s/ovl/"%(opts.classifier, traindir, train_start, train_end))
        else:
            thisD['Num glitches'] = int( event.loadstringtable( vetolist[0] )[0][idq.ovl.vD['#gwtrg']] ) 
    elif flavor in idq.mla_flavors:
        pat = glob.glob("%s/%d_%d/%s_mla*.pat"%(traindir, train_start, train_end, ifo))
        if len(pat) != 1:
            raise ValueError("something odd with %s patfile : %s/%d_%d/"%(opts.classifier, traindir, train_start, train_end))
        else:
            i = [float(i) for i in idq.slim_load_datfiles( pat[0], columns=['i'] )]
            Ng = np.sum( i )
            Nc = len(i) - Ng
            thisD['Num glitches'] = int(Ng)
            thisD['Num cleans'] = int(Nc)
    else:
        raise ValueError("do not know how to extract training information for flavor=%s"%(flavor))

    ### add to dictionary
    jsonD["%d_%d"%(train_start, train_end)] = thisD
        thisD['%s livetime'%dq_name] = event.livetime( idq.extract_dq_segments( sciseg_files[0], dq_name)[0] )
        segstart, segend = idq.extract_start_stop( sciseg_files[0], suffix='.xml.gz')
        thisD['start'] = int(segstart)
        thisD['end'] = int(segend)
    else:
        thisD['%s livetime'%dq_name] = None
        thisD['start'] = None
        thisD['end'] = None

    ### extract Ng, Nc
    if flavor == "ovl":
        vetolist = glob.glob("%s/%d_%d/%s/ovl/*vetolist.eval"%(traindir, train_start, train_end, opts.classifier))
        if len(vetolist) != 1:
            raise ValueError("something odd with %s vetolists : %s/%d_%d/%s/ovl/"%(opts.classifier, traindir, train_start, train_end))
        else:
            thisD['Num glitches'] = int( event.loadstringtable( vetolist[0] )[0][idq.ovl.vD['#gwtrg']] ) 
    elif flavor in idq.mla_flavors:
        pat = glob.glob("%s/%d_%d/%s_mla*.pat"%(traindir, train_start, train_end, ifo))
        if len(pat) != 1:
            raise ValueError("something odd with %s patfile : %s/%d_%d/"%(opts.classifier, traindir, train_start, train_end))
        else:
            i = [float(i) for i in idq.slim_load_datfiles( pat[0], columns=['i'] )]
            Ng = np.sum( i )
            Nc = len(i) - Ng
            thisD['Num glitches'] = int(Ng)
            thisD['Num cleans'] = int(Nc)
    else:
        raise ValueError("do not know how to extract training information for flavor=%s"%(flavor))

    ### add to dictionary
    jsonD["%d_%d"%(train_start, train_end)] = thisD