Page History
...
Code Block | ||
---|---|---|
| ||
(ps-4.5.26) drp-srcf-eb009:lcls2$ python junk4.py nstep/nevent/nnorm/ndir 0 32399 200 3 nstep/nevent/nnorm/ndir 1 32283 200 3 nstep/nevent/nnorm/ndir 2 32399 200 3 nstep/nevent/nnorm/ndir 3 32284 200 3 nstep/nevent/nnorm/ndir 4 32298 200 4 (ps-4.5.26) drp-srcf-eb009:lcls2$ more junk4.py from psana import DataSource import datetime as dt import numpy as np import sys ds = DataSource(exp='rixx1003821',run=55,dir='/cds/data/psdm/prj/public01/xtc') myrun = next(ds.runs()) andor_norm = myrun.Detector('andor_norm') andor_dir = myrun.Detector('andor_dir') for nstep,step in enumerate(myrun.steps()): nnorm = 0 ndir = 0 for nevent,evt in enumerate(step.events()): norm_value = andor_norm.raw.value(evt) dir_value = andor_dir.raw.value(evt) if norm_value is not None: nnorm+=1 if dir_value is not None: ndir+=1 print('nstep/nevent/nnorm/ndir',nstep,nevent,nnorm,ndir) (ps-4.5.26) drp-srcf-eb009:lcls2$ |
Andor Normalization With Realtime Plotting
Run with "mpirun -n 5 python andor.py" with "psplot ANDOR" on the same node.
Code Block | ||
---|---|---|
| ||
from psana import DataSource
from psmon import publish
from psmon.plots import Image,XYPlot
import os
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()
os.environ['PS_SRV_NODES']='1'
if rank==4: # hack for now to eliminate use of publish.local below
publish.init()
# we will remove this for batch processing and use "psplot" instead
# publish.local = True
def my_smalldata(data_dict):
if 'unaligned_andor_norm' in data_dict:
andor_norm = data_dict['unaligned_andor_norm'][0]
myplot = XYPlot(0,"Andor (normalized)",range(len(andor_norm)),andor_norm)
publish.send('ANDOR',myplot)
ds = DataSource(exp='rixx1003821',run=46,dir='/cds/data/psdm/prj/public01/xtc',intg_det='andor_vls',batch_size=1)
for myrun in ds.runs():
andor = myrun.Detector('andor_vls')
timing = myrun.Detector('timing')
smd = ds.smalldata(filename='mysmallh5.h5',batch_size=1000, callbacks=[my_smalldata])
norm = 0
ndrop_inhibit = 0
for nstep,step in enumerate(myrun.steps()):
print('step:',nstep)
for nevt,evt in enumerate(step.events()):
andor_img = andor.raw.value(evt)
# also need to check for events missing due to damage
# (or compare against expected number of events)
ndrop_inhibit += timing.raw.inhibitCounts(evt)
smd.event(evt, mydata=nevt) # high rate data saved to h5
# need to check Matt's new timing-system data on every
# event to make sure we haven't missed normalization
# data due to deadtime
norm+=nevt # fake normalization
if andor_img is not None:
print('andor data on evt:',nevt,'ndrop_inhibit:',ndrop_inhibit)
# check that the high-read readout group (2) didn't
# miss any events due to deadtime
if ndrop_inhibit[2]!=0: print('*** data lost due to deadtime')
# need to prefix the name with "unaligned_" so
# the low-rate andor dataset doesn't get padded
# to align with the high rate datasets
smd.event(evt, mydata=nevt,
unaligned_andor_norm=(andor_img/norm))
norm=0
ndrop_inhibit=0 |
Overview
Content Tools