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)
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 * '-')
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)
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