expmon documentation

Module HexUtils a set of generic methods for hexanode project

Usage

import expmon.HexUtils as hu
hu.print_kwargs(d) 
d = hu.dict_from_str_srcchs(s)
See:
References:

Created on 2017-12-08 by Mikhail Dubrovin

HexUtils.dict_from_str_srcchs(s)[source]

Converts string like “{‘AmoETOF.0:Acqiris.0’:(6,7,8,9,10,11),’AmoITOF.0:Acqiris.0’:(0,)}” to the dictionary

Module HexCalib a set of generic methods for hexanode project

Created on 2017-12-08 by Mikhail Dubrovin

class HexCalib.Store[source]

Store of shared parameters.

HexCalib.h1d(hlst, bins=None, amp_range=None, weights=None, color=None, show_stat=True, log=False, figsize=(6, 5), axwin=(0.15, 0.12, 0.78, 0.8), title='Title', xlabel='x', ylabel='y', titwin=None, fnm='hist.png')[source]

Wrapper for hist1d, move, and save methods, using common store parameters

HexCalib.plot_histograms(prefix='plot', do_save=True, hwin_x0y0=(0, 400))[source]

Plots/saves histograms

HexCalib.plot_image(img, figsize=(11, 10), axwin=(0.1, 0.08, 0.88, 0.88), cmap='inferno', title='x-y image', xlabel='x', ylabel='y', titwin=None, fnm='img.png', amp_range=None, img_range=None, origin='upper')[source]

Class HexDataIO a set of methods to access psana data of hexanode detector

HexDataIO - a set of methods to access data, resembling hexanode/src/LMF_IO.cpp

Usage

Create object and access methods
--------------------------------
from expmon.HexDataIO import HexDataIO

o = HexDataIO(srcchs={'AmoETOF.0:Acqiris.0':(6,7,8,9,10,11),'AmoITOF.0:Acqiris.0':(0,)}, numchs=7, numhits=16)

o.open_input_dataset('exp=xpptut15:run=390')

# OR:
o.open_input_h5file(ofname='./test.h5')

# OR:
ds = psana.MPIDataSource('exp=xpptut15:run=390')
o.use_psana_dataset(ds, pbits=1022)


status = o.read_next_event()           # gets next event from dataset, returns True if event is available

nhits   = o.get_number_of_hits_array() # number of hits per channel, shape=(NUM_CHANNELS,)
tdc_ns  = o.get_tdc_data_array()       # array of hit time [ns], shape=(NUM_CHANNELS, NUM_HITS)
tdc_ind = o.get_tdc_index_array()      # array of hit index, shape=(NUM_CHANNELS, NUM_HITS)
wf      = o.get_wf(channel=1)          # per channel array of intensities
wt      = o.get_wt(channel=1)          # per channel array of times [s]
nch     = o.get_number_of_channels()   # returns a number of channels
t_ns    = o.tdc_resolution()           # returns TDC bin width in ns

t_sec   = o.start_time_sec()           # returns (loatr) run start time
t_sec   = o.stop_time_sec()            # returns (float) run start time
tstamp  = o.start_time()               # returns (str) time stamp like '2017-10-23T17:00:00'
tstamp  = o.stop_time()                # returns (str) time stamp like '2017-10-23T17:00:00'

o.open_output_h5file(ofname='./test.h5')
o.close_output_h5file()
o.close_input_h5file()
o.add_event_to_h5file()

o.print_tdc_data()
o.print_times()

Created on 2017-10-23 by Mikhail Dubrovin

Class HexDataIOExt - extension of HexDataIO for data processing with “3-line example”

Usage

# Example 1 - dataset created outside object
#-------------------------------------------
from expmon.HexDataIOExt import HexDataIOExt  # Line 0 - import

# dictionary of input parameters
kwargs = {'command'  : 1,
          'srcchs'   : {'AmoETOF.0:Acqiris.0':(6,7,8,9,10,11),'AmoITOF.0:Acqiris.0':(0,)},
          'numchs'   : 7,
          'numhits'  : 16,
          'dsname'   : 'exp=xpptut15:run=390:smd',
          'evskip'   : 0,
          'events'   : 500,
          'verbose'  : False,
          'cfd_base'        :  0.  ,        
          'cfd_thr'         : -0.04,         
          'cfd_cfr'         :  0.9 ,         
          'cfd_deadtime'    :  5.0 ,    
          'cfd_leadingedge' :  True, 
          'cfd_ioffsetbeg'  :  0   ,  
          'cfd_ioffsetend'  :  1000, 
         }

ds = psana.MPIDataSource(kwargs['dsname'])
o = HexDataIOExt(ds, **kwargs)                # Line 1 - initialization

for evt in ds.events() :
    if o.skip_event(evt) : continue           # Line 2 - loop control method passes evt to the object
    if o.event_number() > o.EVENTS : break

    #x, y, t = o.hits_xyt()                   # Line 3 - get arrays x, y, t of hits' coordinates and time
    o.print_hits()                            # prints x, y, time for all hits in the event

o.print_summary() # print total number of events, processing time, frequency, etc


# Example 2 - dataset created inside object
#------------------------------------------
from expmon.HexDataIOExt import HexDataIOExt # Line 0 - import

# dictionary of input (non-default) parameters
kwargs = {'srcchs' : {'AmoETOF.0:Acqiris.0':(6,7,8,9,10,11),'AmoITOF.0:Acqiris.0':(0,)},
          'numchs' : 7,
          'numhits': 16,
          'dsname' : 'exp=xpptut15:run=390:smd',
         }

o = HexDataIOExt(**kwargs)             # Line 1 - initialization, dataset is defined inside the object 
while o.read_next_event() :            # Line 2 - event loop
    o.print_sparsed_event_info()       # print sparsed event number and time consumption 
    if o.skip_event()       : continue # event loop control, skip events with zero hits
    if o.break_event_loop() : break    # event loop control, break ate teh end or when smth went wrong
    o.print_hits()                     # prints x, y, time, method for found in event hits
    x, y, t = o.hits_xyt()             # Line 3 - get arrays x, y, t of hits' coordinates and time

#-------------
# Make object
#-------------
o = HexDataIOExt(ds=None, **kwargs)

# Event loop control methods
#---------------------------
status = o.read_next_event()
stat = o.break_event_loop(
stat = o.skip_event()
stat = o.skip_event(evt) # pass evt for external dataset

# Methods per event
#-------------------
o.print_sparsed_event_info()
o.print_summary()
o.print_hits()
o.calib_command2() # for calibration with command 2
o.calib_command3() # for calibration with command 3

# Access sorted data info, hit coordinates, times, hit finding method
#--------------------------------------------------------------------
x, y, t = o.hits_xyt()
x = o.hits_x()
y = o.hits_y()
t = o.hits_t()
m = o.hits_method()

Created on 2017-12-14 by Mikhail Dubrovin.

Module HexDataPreProc - hexanode LCLS data processing using MPI and creating “small data” hdf5 file

Created on 2017-12-08 by Mikhail Dubrovin

Indices and tables