def test_mask(args):
    ds, run, det = ds_run_det(args)
    #mask = det.raw._mask_from_status()
    #raw = det.raw.raw()
    #mask = det.raw._mask_calib()
    #mask_edges = det.raw._mask_edges(mask, edge_rows=20, edge_cols=10)
    #mask = det.raw._mask_edges(edge_rows=20, edge_cols=10, center_rows=4, center_cols=2)
    #mask = det.raw._mask(calib=True, status=True, edges=True,\
    #                     edge_rows=20, edge_cols=10, center_rows=4, center_cols=2)
    mask = det.raw._mask_comb(mbits=0o7,\
                              edge_rows=20, edge_cols=10, center_rows=4, center_cols=2)
    print(info_ndarr(mask, 'mask '))

    if args.dograph:
        from psana.detector.UtilsGraphics import gr, fleximage
        evnum, evt = None, None
        for evnum, evt in enumerate(run.events()):
            if evt is None:
                print('Event %d is None' % evnum)
                continue
            print('Found non-empty event %d' % evnum)
            break
        if evt is None: exit('ALL events are None')

        #arr = det.raw.raw(evt)
        arr = mask + 1
        img = det.raw.image(evt,
                            nda=arr,
                            pix_scale_size_um=args.pscsize,
                            mapmode=args.mapmode)
        flimg = fleximage(img, arr=None, h_in=8, amin=-1,
                          amax=2)  #, cmap='jet')
        gr.show()
        if args.ofname is not None:
            gr.save_fig(flimg.fig, fname=args.ofname, verb=True)
示例#2
0
def plot_image(nda, tit=''):
    """Plots averaged image
    """
    from psana.detector.UtilsGraphics import gr

    #img = det.image(evt, nda)
    img = reshape_to_2d(nda)
    if img is None:
        print('plot_image - image "%s" is not available.' % tit)
        return

    logger.info(info_ndarr(img, 'plot_image of %s' % tit))

    amin = np.quantile(img, 0.01, interpolation='lower')
    amax = np.quantile(img, 0.99, interpolation='higher')
    gr.plotImageLarge(img, amp_range=(amin, amax), title=tit)
    gr.show()
def test_image(args):

    import psana.detector.UtilsEpix10ka as ue
    from psana.detector.UtilsGraphics import gr, fleximage, flexhist, fleximagespec

    dograph = args.dograph.lower()
    flimg, flspe, flims = None, None, None

    ds, run, det = ds_run_det(args)
    peds = det.raw._pedestals(
    ) if args.grindex is None else det.raw._pedestals()[args.grindex, :]

    is_epix10ka = 'epix' in det.raw._uniqueid
    dcfg = ue.config_object_epix10ka(det) if is_epix10ka else None

    break_event_loop = False

    nframes = 0
    sum_arr, sum_sta = None, None
    med_vs_evt = np.zeros(args.events - args.evskip + 10, dtype=np.float64)
    nrec_med = 0

    for stepnum, step in enumerate(run.steps()):
        print('%s\nStep %1d' % (50 * '_', stepnum))

        if args.stepsel is not None and stepnum != args.stepsel:
            print('  skip - step selected in option -M is %1d' %
                  (args.stepsel))
            continue
        print('%s\n  begin event loop' % (50 * '_'))
        for evnum, evt in enumerate(step.events()):
            if evnum < args.evskip:
                print('Step %1d Event %04d - skip first %04d events' % (stepnum, evnum, args.evskip),\
                       end=('\r' if evnum<args.evskip-1 else '\n'))
                continue

            if evnum > args.events:
                print('break by number of events limit %d set in option -N' %
                      args.events)
                break_event_loop = True
                break
            if evnum > 2 and evnum % args.evjump != 0: continue
            print('%s\nStep %1d Event %04d' % (50 * '_', stepnum, evnum))

            if dcfg is not None:
                s = '    gain mode fractions for: FH       FM       FL'\
                    '       AHL-H    AML-M    AHL-L    AML-L\n%s' % (29*' ')
                #ue.info_pixel_gain_mode_for_fractions(dcfg, data=det.raw.raw(evt), msg=s))
                gmfracs = ue.pixel_gain_mode_fractions(dcfg,
                                                       data=det.raw.raw(evt))
                print(ue.info_pixel_gain_mode_for_fractions(gmfracs, msg=s))
                gmind = ue.gain_mode_index_from_fractions(gmfracs)
                gmname = ue.gain_mode_name_for_index(gmind).upper()
                print('  == major gain mode %d : %s' % (gmind, gmname))
                #print('  == gain mode: %s' % ue.find_gain_mode(dcfg, data=None).upper())

                if peds is None: peds = det.raw._pedestals()[gmind, :]

            #user_mask = np.ones_like(det.raw.raw(evt), dtype=DTYPE_MASK) #np.uint8
            #user_mask[0,100:150,200:250] = 0
            user_mask = None

            arr = None
            if args.show == 'raw-peds-med':
                arr = (det.raw.raw(evt) & 0x3fff) - peds
                med = np.median(arr)
                print('XXX from raw-peds subtract its median = %.3f' % med)
                arr -= med

            if arr is None:
                arr = det.raw.calib(evt, cmpars=(7,7,100,10),\
                                 mbits=0o7, mask=user_mask, edge_rows=10, edge_cols=10, center_rows=5, center_cols=5)\
                                                      if args.show == 'calibcm'  else\
                   det.raw.calib(evt, cmpars=(8,7,10,10))\
                                                      if args.show == 'calibcm8' else\
                   det.raw.calib(evt)                 if args.show == 'calib'    else\
                   peds                               if args.show == 'peds'     else\
                   det.raw._gain_range_index(evt)     if args.show == 'grind'    else\
                   (det.raw.raw(evt) & 0x3fff) - peds if args.show == 'raw-peds' else\
                   (det.raw.raw(evt) & 0x3fff)        if args.show == 'rawbm'    else\
                    np.ones_like(det.raw.raw(evt))    if args.show == 'ones'     else\
                   (det.raw.raw(evt) & args.bitmask)

            #if args.show == 'calibcm': arr += 1 # to see panel edges

            logger.info(info_ndarr(arr, 'arr '))
            if arr is None: continue

            med = np.median(arr)
            med_vs_evt[nrec_med] = med
            nrec_med += 1

            if args.cumulat:
                if (med > args.thrmin) and (med < args.thrmax):
                    nframes += 1
                    cond = arr > args.thrpix
                    if nframes != 1:
                        _ = np.add(sum_arr[cond], arr[cond], out=sum_arr[cond])
                        sum_sta[cond] += 1
                    else:
                        sum_arr = np.array(arr, dtype=np.float64)
                        sum_sta = np.zeros_like(arr, dtype=np.uint64)

                    #if nframes > 1: arr = sum_arr/float(nframes)
                    if nframes > 1: arr = divide_protected(sum_arr, sum_sta)
                    print('Step %1d event:%04d nframes:%04d arr median:%.3f' %
                          (stepnum, evnum, nframes, med))
                else:
                    continue

            t0_sec = time()
            img = det.raw.image(evt,
                                nda=arr,
                                pix_scale_size_um=args.pscsize,
                                mapmode=args.mapmode)
            print('image composition time = %.6f sec ' % (time() - t0_sec))

            logger.info(info_ndarr(img, 'img '))
            logger.info(info_ndarr(arr, 'arr '))
            if img is None: continue

            title = '%s %s run:%s ev:%d' % (args.detname, args.expname,
                                            args.runs, evnum)

            if 'i' in dograph:
                if flimg is None:
                    flimg = fleximage(img, arr=arr, fraclo=0.05, frachi=0.95)
                    flimg.move(10, 20)
                else:
                    flimg.update(img, arr=arr)
                    flimg.fig.canvas.set_window_title(title)
                    flimg.axtitle(title)

            if 'h' in dograph:
                if flspe is None:
                    flspe = flexhist(arr,
                                     bins=50,
                                     color='green',
                                     fraclo=0.001,
                                     frachi=0.999)
                    flspe.move(800, 20)
                else:
                    flspe.update(arr,
                                 bins=50,
                                 color='green',
                                 fraclo=0.001,
                                 frachi=0.999)
                    flspe.fig.canvas.set_window_title(title)
                    flspe.axtitle(title)

            if 'c' in dograph:
                if flims is None:
                    flims = fleximagespec(img, arr=arr, bins=100, color='lightgreen',\
                                          amin=args.gramin,   amax=args.gramax,\
                                          nneg=args.grnneg,   npos=args.grnpos,\
                                          fraclo=args.grfrlo, frachi=args.grfrhi,\
                    )
                    flims.move(10, 20)
                else:
                    #print(info_ndarr(arr, 'YYY before update arr: ', last=5))
                    flims.update(img, arr=arr)
                    flims.axtitle(title)

                gr.show(mode=1)

        if break_event_loop: break

    med_vs_evt = med_vs_evt[:nrec_med]
    med = np.median(med_vs_evt)
    q05 = np.quantile(med_vs_evt, 0.05, interpolation='linear')
    q95 = np.quantile(med_vs_evt, 0.95, interpolation='linear')

    print(info_ndarr(med_vs_evt, 'per event median  ', last=nrec_med - 1))
    print('  median over %d event-records: %.3f' % (nrec_med, med))
    print('  quantile(med_vs_evt, 0.05): %.3f' % q05)
    print('  quantile(med_vs_evt, 0.95): %.3f' % q95)

    if args.dograph:
        print(
            '\n  !!! TO EXIT - close graphical window(s) - click on [x] in the window corner'
        )
        gr.show()
        if args.ofname is not None:
            if 'i' in dograph:
                gr.save_fig(flimg.fig, fname=args.ofname + '-img', verb=True)
            if 'h' in dograph:
                gr.save_fig(flspe.fig, fname=args.ofname + '-spe', verb=True)
            if 'c' in dograph:
                gr.save_fig(flims.fig,
                            fname=args.ofname + '-imgspe',
                            verb=True)

    print(50 * '-')
示例#4
0
def test_single_image(args):
    ds, run, det = ds_run_det(args)
    #mask = det.raw._mask_from_status()
    #raw = det.raw.raw()
    #mask = det.raw._mask_calib()
    #mask_edges = det.raw._mask_edges(mask, edge_rows=20, edge_cols=10)
    #mask = det.raw._mask_edges(edge_rows=20, edge_cols=10, center_rows=4, center_cols=2)
    #mask = det.raw._mask(calib=True, status=True, edges=True,\
    #                     edge_rows=20, edge_cols=10, center_rows=4, center_cols=2)

    tname = args.tname
    grindex = 0 if args.grindex is None else args.grindex

    arr, amin, amax, title = None, None, None, '%s for --grindex=%d ' % (
        tname, grindex)
    if tname == 'mask':

        umask = np.ones((4, 352, 384), dtype=np.uint8)
        umask[3, 100:120, 160:200] = 0
        arr = 1 + det.raw._mask(status=True, status_bits=0xffff, gain_range_inds=(0,1,2,3,4),\
                                neighbors=True, rad=5, ptrn='r',\
                                edges=True, edge_rows=10, edge_cols=5,\
                                center=True, center_rows=5, center_cols=3,\
                                calib=False,\
                                umask=umask,\
                                force_update=False)
        amin, amax = 0, 2
        title = 'mask+1'
    elif tname == 'peds':
        arr = det.raw._pedestals()[grindex, :]
    elif tname == 'status':
        arr = det.raw._status()[grindex, :]
    elif tname == 'rms':
        arr = det.raw._rms()[grindex, :]
    elif tname == 'gain':
        arr = det.raw._gain()[grindex, :]
    elif tname == 'xcoords':
        arr = det.raw._pixel_coords(do_tilt=True, cframe=args.cframe)[0]
    elif tname == 'ycoords':
        arr = det.raw._pixel_coords(do_tilt=True, cframe=args.cframe)[1]
    elif tname == 'zcoords':
        arr = det.raw._pixel_coords(do_tilt=True, cframe=args.cframe)[2]
    else:
        arr = det.raw._mask_calib()

    geo = det.raw._det_geo()
    pscsize = geo.get_pixel_scale_size()

    print(info_ndarr(arr, 'array for %s' % tname))

    if args.dograph:
        from psana.detector.UtilsGraphics import gr, fleximage
        evnum, evt = None, None
        for evnum, evt in enumerate(run.events()):
            if evt is None:
                print('Event %d is None' % evnum)
                continue
            print('Found non-empty event %d' % evnum)
            break
        if evt is None: sys.exit('ALL events are None')

        img = det.raw.image(evt,
                            nda=arr,
                            pix_scale_size_um=pscsize,
                            mapmode=args.mapmode)
        print(info_ndarr(img, 'image for %s' % tname))

        flimg = fleximage(img,
                          arr=arr,
                          h_in=args.fighig,
                          w_in=args.figwid,
                          amin=amin,
                          amax=amax)  #, cmap='jet')
        flimg.fig.canvas.set_window_title(title)
        flimg.move(10, 20)
        gr.show()
        if args.ofname is not None:
            gr.save_fig(flimg.fig, fname=args.ofname, verb=True)
示例#5
0
            arr = img[:352, :192]

        print(info_ndarr(img, '  img'))

        if flims is None:
            flims = fleximagespec(img,
                                  arr=arr,
                                  bins=100,
                                  w_in=11,
                                  h_in=8,
                                  amin=AMIN,
                                  amax=AMAX)  #fraclo=0.01, frachi=0.99
            flims.move(10, 20)
        else:
            fname = '%s-%s.png' % (prefix, suffix)
            flims.update(img, arr=arr, amin=AMIN, amax=AMAX)
            flims.axtitle('Event %d %s' % (nevt, fname))

        gr.show(mode=1)

        if tname in ('0', '9') and args.saveimg:
            flims.save(fname)

gr.show()

if args.saveimg: flims.save(fname)

sys.exit('END OF %s -t %s' % (SCRNAME, tname))

# EOF