def wf_extremas(ax, wf, wt, rank=10): sh = wf.shape #mask = np.ones(sh, dtype=np.uint16).flatten() mask_min = np.array(wf < THR, dtype=np.uint16) #mask_max = np.array(wf>-THR, dtype=np.uint16) extrema = np.zeros(sh, dtype=np.uint16) t0_sec = time() #nmax = local_maxima_1d(wf, mask_max, rank, extrema) nmin = local_minima_1d(wf, mask_min, rank, extrema) #print ' consumed time = %10.6f(sec) nmin = %d' % (time()-t0_sec, nmin) #print ' consumed time = %10.6f(sec) nmin = %d nmax = %d' % (time()-t0_sec, nmin, nmax) inds = np.where(extrema > 1) amps = wf[inds] inds = inds[0] #print 'inds:', inds #print 'amps:', amps return np.array(zip(amps, inds))
def test01(tname='1', NUMBER_OF_EVENTS=10, DO_PRINT=False): print 'local extrema : %s' % ('minimums' if tname=='1'\ else 'maximums') from time import time from pyimgalgos.GlobalUtils import print_ndarr import pyimgalgos.GlobalGraphics as gg #sh, fs = (200,200), (11,10) sh, fs = (1000, 1000), (11, 10) #sh, fs = (185,388), (11,5) fig1, axim1, axcb1, imsh1 = gg.fig_axim_axcb_imsh(figsize=fs) fig2, axim2, axcb2, imsh2 = gg.fig_axim_axcb_imsh(figsize=fs) print 'Image shape: %s' % str(sh) mu, sigma = 200, 25 for evnum in range(NUMBER_OF_EVENTS): data = np.array(mu + sigma * np.random.standard_normal(sh), dtype=np.float64) mask = np.ones(sh, dtype=np.uint16).flatten() #mask = np.random.binomial(2, 0.80, data.size).astype(dtype=np.uint16) extrema = np.zeros(sh, dtype=np.uint16).flatten() rank = 5 nmax = 0 if DO_PRINT: print_ndarr(data, 'input data') t0_sec = time() #---------- if tname == '1': nmax = algos.local_minima_1d(data.flatten(), mask, rank, extrema) elif tname == '2': nmax = algos.local_maxima_1d(data.flatten(), mask, rank, extrema) #---------- print 'Event: %4d, consumed time = %10.6f(sec), nmax = %d' % ( evnum, time() - t0_sec, nmax) extrema.shape = sh if DO_PRINT: print_ndarr(extrema, 'output extrema') img1 = data img2 = extrema axim1.clear() if imsh1 is not None: del imsh1 imsh1 = None axim2.clear() if imsh2 is not None: del imsh2 imsh2 = None ave, rms = img1.mean(), img1.std() amin, amax = ave - 1 * rms, ave + 5 * rms gg.plot_imgcb(fig1, axim1, axcb1, imsh1, img1, amin=amin, amax=amax, title='Event: %d, Data' % evnum, cmap='inferno') gg.move_fig(fig1, x0=400, y0=30) gg.plot_imgcb(fig2, axim2, axcb2, imsh2, img2, amin=0, amax=5, title='Event: %d, Local extrema' % evnum, cmap='inferno') gg.move_fig(fig2, x0=0, y0=30) gg.show(mode='DO_NOT_HOLD') gg.show()