def proc_data(**kwargs):

    DSNAME       = kwargs.get('dsname', '/reg/g/psdm/detector/data2_test/xtc/data-amox27716-r0100-acqiris-e000100.xtc2')
    DETNAME      = kwargs.get('detname','tmo_hexanode')
    NUM_CHANNELS = kwargs.get('numchs', 5)
    NUM_HITS     = kwargs.get('numhits', 16)
    EVSKIP       = kwargs.get('evskip', 0)
    EVENTS       = kwargs.get('events', 10) + EVSKIP
    EXP          = kwargs.get('exp', 'amox27716')
    RUN          = kwargs.get('run', 100)
    OFPREFIX     = kwargs.get('ofprefix','./')
    ofname       = '%s%s-r%04d-e%06d-single-node.h5' % (OFPREFIX, EXP, int(RUN), EVENTS)

    tname = sys.argv[1] if len(sys.argv) > 1 else '1'
    print('TEST %s' % tname)

    logger.info(str_kwargs(kwargs, title='Input parameters:'))

    peaks = WFPeaks(**kwargs)
    ofile = open_output_h5file(ofname, peaks, **kwargs)

    ds = DataSource(files=DSNAME)
    orun = next(ds.runs())
    det = orun.Detector(DETNAME)

    for nevt,evt in enumerate(orun.events()):
        if nevt<EVSKIP : continue
        if nevt>EVENTS : break
        print('Event %3d'%nevt)
        wts = det.raw.times(evt)
        wfs = det.raw.waveforms(evt)

        t0_sec = time()

        # ACCESS FOR TEST 1:
        if tname == '1' :
            nhits, pkinds, pkvals, pktns = peaks(wfs,wts)

        # ALTERNATIVE ACCESS:
        else :
            peaks.proc_waveforms(wfs, wts) 
            nhits  = peaks.number_of_hits(wfs, wts)
            pktns  = peaks.peak_times_ns(wfs, wts)
            pkvals = peaks.peak_values(wfs, wts)
            pkinds = peaks.peak_indexes(wfs, wts)

        print("  waveforms processing time = %.6f sec" % (time() - t0_sec))
        print_ndarr(wfs,   '  waveforms      : ', last=4)
        print_ndarr(nhits, '  number_of_hits : ')
        print_ndarr(wts,   '  times          : ', last=4)
        print_ndarr(pktns, '  peak_times_ns  : ', last=4)

        ofile.add_event_to_h5file()

    print('\n',usage())
    sys.exit('TEST %s EXIT' % tname)
Beispiel #2
0
def proc_data(**kwargs):

    logger.info(str_kwargs(kwargs, title='Input parameters:'))

    DSNAME = kwargs.get(
        'dsname',
        '/reg/g/psdm/detector/data2_test/xtc/data-amox27716-r0100-acqiris-e000100.xtc2'
    )
    DETNAME = kwargs.get('detname', 'tmo_quadanode')
    EVSKIP = kwargs.get('evskip', 0)
    EVENTS = kwargs.get('events', 100) + EVSKIP
    OFPREFIX = kwargs.get('ofprefix', './')
    VERBOSE = kwargs.get('verbose', False)

    ds = DataSource(files=DSNAME)
    orun = next(ds.runs())
    det = orun.Detector(DETNAME)

    kwargs['consts'] = det.calibconst

    peaks = WFPeaks(**kwargs)
    proc = DLDProcessor(**kwargs)
    stats = DLDStatistics(proc, **kwargs)

    for nev, evt in enumerate(orun.events()):
        if nev < EVSKIP: continue
        if nev > EVENTS: break

        if do_print(nev): logger.info('Event %3d' % nev)
        t0_sec = time()

        wts = det.raw.times(evt)
        wfs = det.raw.waveforms(evt)

        nhits, pkinds, pkvals, pktsec = peaks(wfs, wts)

        if VERBOSE:
            print("  waveforms processing time = %.6f sec" % (time() - t0_sec))
            print_ndarr(wfs, '  waveforms     : ', last=4)
            print_ndarr(wts, '  times         : ', last=4)
            print_ndarr(nhits, '  number_of_hits: ')
            print_ndarr(pktsec, '  peak_times_sec: ', last=4)

        proc.event_proc(nev, nhits, pktsec)

        stats.fill_data(nhits, pktsec)

        if VERBOSE:
            for i, (x, y, r,
                    t) in enumerate(proc.xyrt_list(nev, nhits, pktsec)):
                print('    hit:%2d x:%7.3f y:%7.3f t:%10.5g r:%7.3f' %
                      (i, x, y, t, r))

    draw_plots(stats, prefix=OFPREFIX, do_save=True, hwin_x0y0=(0, 10))
Beispiel #3
0
def proc_data(**kwargs):

    logger.info(str_kwargs(kwargs, title='Input parameters:'))

    DSNAME = kwargs.get(
        'dsname',
        '/reg/g/psdm/detector/data2_test/xtc/data-amox27716-r0100-acqiris-e001000.xtc2'
    )
    DETNAME = kwargs.get('detname', 'tmo_quadanode')
    EVSKIP = kwargs.get('evskip', 0)
    EVENTS = kwargs.get('events', 10) + EVSKIP
    EXP = kwargs.get('exp', 'amox27716')
    RUN = kwargs.get('run', 100)
    VERBOSE = kwargs.get('verbose', False)
    OFPREFIX = kwargs.get('ofprefix', './')
    ofname = '%s%s-r%04d-e%06d-ex-22_lowerthresh.h5' % (OFPREFIX, EXP,
                                                        int(RUN), EVENTS)

    peaks = WFPeaks(**kwargs)
    ofile = open_output_h5file(ofname, peaks, **kwargs)

    ds = DataSource(files=DSNAME)
    orun = next(ds.runs())
    det = orun.Detector(DETNAME)

    for nev, evt in enumerate(orun.events()):

        if nev < EVSKIP: continue
        if nev > EVENTS: break

        if do_print(nev): logger.info('Event %4d' % nev)
        t0_sec = time()

        wts = det.raw.times(evt)
        wfs = det.raw.waveforms(evt)

        nhits, pkinds, pkvals, pktsec = peaks(wfs, wts)  # ACCESS TO PEAK INFO

        if VERBOSE:
            print("  ev:%4d waveforms processing time = %.6f sec" %
                  (nev, time() - t0_sec))
            print_ndarr(wfs, '    waveforms      : ', last=4)
            print_ndarr(wts, '    times          : ', last=4)
            print_ndarr(nhits, '    number_of_hits : ')
            print_ndarr(pktsec, '    peak_times_sec : ', last=4)

        ofile.add_event_to_h5file()
Beispiel #4
0
def proc_data(**kwargs):

    logger.info(str_kwargs(kwargs, title='Input parameters:'))

    DSNAME = kwargs.get(
        'dsname',
        '/reg/g/psdm/detector/data2_test/xtc/data-amox27716-r0100-acqiris-e000100.xtc2'
    )
    DETNAME = kwargs.get('detname', 'tmo_quadanode')
    EVSKIP = kwargs.get('evskip', 0)
    EVENTS = kwargs.get('events', 10) + EVSKIP
    VERBOSE = kwargs.get('verbose', False)

    ds = DataSource(files=DSNAME)
    orun = next(ds.runs())

    print('\nruninfo expt: %s  runnum: %d' % (orun.expt, orun.runnum))

    det = orun.Detector(DETNAME)
    #kwargs['detobj'] = det
    kwargs['consts'] = det.calibconst

    peaks = WFPeaks(**kwargs)
    proc = DLDProcessor(**kwargs)  #detobj=det to get cfg/calib constants

    for nev, evt in enumerate(orun.events()):
        if nev < EVSKIP: continue
        if nev > EVENTS: break

        if do_print(nev): logger.info('Event %3d' % nev)
        t0_sec = time()

        wts = det.raw.times(evt)
        wfs = det.raw.waveforms(evt)

        nhits, pkinds, pkvals, pktsec = peaks(wfs, wts)  # ACCESS TO PEAK INFO

        if VERBOSE:
            print("  waveforms processing time = %.6f sec" % (time() - t0_sec))
            print_ndarr(wfs, '  waveforms      : ', last=4)
            print_ndarr(wts, '  times          : ', last=4)
            print_ndarr(nhits, '  number_of_hits : ')
            print_ndarr(pktsec, '  peak_times_sec : ', last=4)

        for i, (x, y, r, t) in enumerate(proc.xyrt_list(nev, nhits, pktsec)):
            print('    hit:%2d x:%7.3f y:%7.3f t:%10.5g r:%7.3f' %
                  (i, x, y, t, r))
Beispiel #5
0
def proc_data(**kwargs):

    DSNAME = kwargs.get(
        'dsname',
        '/reg/g/psdm/detector/data2_test/xtc/data-amox27716-r0100-acqiris-e000100.xtc2'
    )
    DETNAME = kwargs.get('detname', 'tmo_quadanode')
    EVSKIP = kwargs.get('evskip', 0)
    EVENTS = kwargs.get('events', 10) + EVSKIP
    VERBOSE = kwargs.get('verbose', False)

    ds = DataSource(files=DSNAME)
    orun = next(ds.runs())

    print('\nruninfo expt: %s  runnum: %d' % (orun.expt, orun.runnum))

    det = orun.Detector(DETNAME)
    kwargs['consts'] = det.calibconst

    peaks = WFPeaks(**kwargs)
    HF = HitFinder(kwargs)

    xs = np.empty([
        0,
    ])
    ys = np.empty([
        0,
    ])
    ts = np.empty([
        0,
    ])
    sm = {
        'u': np.empty([
            0,
        ]),
        'v': np.empty([
            0,
        ])
    }
    sb = {
        'u': np.empty([
            0,
        ]),
        'v': np.empty([
            0,
        ])
    }

    for nev, evt in enumerate(orun.events()):

        if nev < EVSKIP: continue
        if nev > EVENTS: break

        t0_sec = time()

        wts = det.raw.times(evt)
        wfs = det.raw.waveforms(evt)

        nhits, pkinds, pkvals, pktsec = peaks(wfs, wts)  # ACCESS TO PEAK INFO
        pktsec = pktsec * 1e9
        if VERBOSE:
            print("  waveforms processing time = %.6f sec" % (time() - t0_sec))
            print_ndarr(wfs, '  waveforms      : ', last=4)
            print_ndarr(wts, '  times          : ', last=4)
            print_ndarr(nhits, '  number_of_hits : ')
            print_ndarr(pktsec, '  peak_times_sec : ', last=4)

        HF.FindHits(pktsec[4, :nhits[4]], pktsec[0, :nhits[0]],
                    pktsec[1, :nhits[1]], pktsec[2, :nhits[2]],
                    pktsec[3, :nhits[3]])
        xs1, ys1, ts1 = HF.GetXYT()
        xs = np.concatenate([xs, xs1], axis=0)
        ys = np.concatenate([ys, ys1], axis=0)
        ts = np.concatenate([ts, ts1], axis=0)

        print(str(nev) + 'th event in 950 total events')

    xbins = np.linspace(-50, 50, 200)
    tbins = np.linspace(1500, 4000, 1250)
    plt.figure()

    plt.subplot(121)
    xy, _, _ = np.histogram2d(xs, ys, bins=[xbins, xbins])
    im = plt.imshow(xy + 1,
                    extent=[xbins[0], xbins[-1], xbins[0], xbins[-1]],
                    norm=LogNorm(vmin=1, vmax=xy.max() + 1))
    ax = plt.gca()
    divider = make_axes_locatable(ax)
    cax = divider.append_axes("right", size="5%", pad=0.05)
    plt.colorbar(im, cax=cax)
    ax.set_title('X - Y')
    ax.set_xlabel('X (mm)')
    ax.set_ylabel('Y (mm)')

    plt.subplot(122)
    ht, _ = np.histogram(ts, bins=tbins)
    plt.plot(tbins[:-1], ht)
    plt.title('Time of Flight')
    plt.xlabel('T (ns)')
    plt.ylabel('Yield (arb. units)')

    plt.tight_layout()
    plt.show()
Beispiel #6
0
        'cfd_base': 0,
        'cfd_thr': -0.05,
        'cfd_cfr': 0.85,
        'cfd_deadtime': 10.0,
        'cfd_leadingedge': True,
        'cfd_ioffsetbeg': 1000,
        'cfd_ioffsetend': 2000,
        'cfd_wfbinbeg': binmin,
        'cfd_wfbinend': binmax,
    })

from psana.pyalgos.generic.Utils import str_kwargs
print(str_kwargs(kwargs, title='Input parameters:'))

# algorithm initialization in global scope
peaks = WFPeaks(**kwargs)

# global parameters for graphics

tbin_ns = 0.25 * 1e-9
#time_range_sec=(0.0000014,0.0000056)
time_range_sec = (binmin * tbin_ns, binmax * tbin_ns)
#time_range_sec=(0.0000000,0.0000111) # entire wf duration in this experiment

naxes = 5  # 5 for quad- or 7 for hex-anode
# assumes that lcls2 detector data returns channels
# in desired order for u1, u2, v1, v2, [w1, w2,] mcp

#gfmt = ('b-', 'r-', 'g-', 'k-', 'm-', 'y-', 'c-', )
gfmt = (
    'b-',
Beispiel #7
0
         histtype='step',
         **kwargs)

print('XXXX pkinds', pkinds)

for p in pkinds:
    pt = p + binmin
    gr.drawLine(ax0, (pt, pt), (0, wf[p]), s=10, linewidth=2, color='r')

#----------

if True:

    print('===== test WFPeaks =====')

    peaks = WFPeaks(**kwa)
    #peaks.proc_waveforms(wfs, wts)

    t0_sec = time()

    #======== peak-finding algorithm ============
    #wfs, wts = array_of_selected_channels(wfs), array_of_selected_channels(wts)
    nhits, pkinds, pkvals, pktsec = peaks(wfs, wts)
    dt_sec = time() - t0_sec
    wfssel, wtssel = peaks.waveforms_preprocessed(
        wfs, wts)  # selected time range and subtracted offset

    print_ndarr(wtssel, '  wtssel: ', last=4)
    print('  wf processing time(sec) = %8.6f' % dt_sec)
    print_ndarr(nhits, '  nhits : ', last=10)
    print_ndarr(pktsec, '  pktsec: ', last=4)
#----------

# parameters for CFD descriminator - waveform processing algorithm
cfdpars= {'cfd_base'       :  0.,
          'cfd_thr'        : -0.05,
          'cfd_cfr'        :  0.85,
          'cfd_deadtime'   :  10.0,
          'cfd_leadingedge':  True,
          'cfd_ioffsetbeg' :  1000,
          'cfd_ioffsetend' :  2000,
          'cfd_wfbinbeg'   :  6000,
          'cfd_wfbinend'   : 22000,
         }

# algorithm initialization in global scope
peaks = WFPeaks(**cfdpars)

#----------
# global parameters for graphics

time_range_sec=(0.0000014,0.0000056)
#time_range_sec=(0.0000000,0.0000111) # entire wf duration in this experiment

naxes = 5 # 5 for quad- or 7 for hex-anode
# assumes that lcls2 detector data returns channels 
# in desired order for u1, u2, v1, v2, [w1, w2,] mcp

gfmt = ('b-', 'r-', 'g-', 'k-', 'm-', 'y-', 'c-', )
ylab = ('X1', 'X2', 'Y1', 'Y2', 'MCP', 'XX', 'YY', )

dy = 1./naxes