Page History
...
Note that LCLS-II psana is not compatible with LCLS-I psana, so environments must activate one or the other, but not both.
Public Practice Data
Publicly accessible practice data is located in the directory /cds/data/psdm/prj/public01/xtc. Use of this data requires the additional "dir=" keyword to the DataSource object.
Experiment | Run | Comment |
---|---|---|
tmoc00118 | 222 | Generic TMO dark data |
Detector Names
Use this command to see non-epics detector names (see "Detector Interface" example below):
...
Standard (per-shot) detectors and the slower epics variables can be accessed as shown here using the names discovered with the commands above. You can use tab-completion in ipython or the jupyternotebook jupyter notebook to explore what you can do with the various detector objects:
...
Code Block | ||
---|---|---|
| ||
from psana import DataSource import numpy as np import os # OPTIONAL callback with "gathered" small data from mpi4py import MPI comm = MPI.COMM_WORLD rank = comm.Get_rank() all cores. # usually used for creating realtime plots when analyzing from # DAQ shared memory. Called back on each SRV node. def test_callback(data_dict): print(data_dict) # sets the number of h5 files to write. 1 is sufficient for 120Hz operation # optional: only needed if you are saving h5. os.environ['PS_SRV_NODES']='1' ds = DataSource(exp='tmoc00118', run=222, dir='/cds/data/psdm/prj/public01/xtc', max_events=10) # batch_size is optional. specifies how often the dictionary of small # user data is gathered smd = ds.smalldata(filename='mysmallh5.h5', batch_size=5, callbacks=[test_callback]) for run in ds.runs(): opal = run.Detector('tmo_opal1') ebeam = run.Detector('ebeam') runsum = 0 for evt in run.events(): img = opal.raw.image(evt) photonEnergy = ebeam.raw.ebeamPhotonEnergy(evt) if img is None or photonEnergy is None: continue evtsum = np.sum(img) # pass either dictionary or kwargs smd.event(evt, evtsum=evtsum, photonEnergy=photonEnergy) runsum += evtsum # beware of datatypes when summing: can overflow # optional summary data for whole run if smd.summary: smd.sum(runsum) # sum across all mpi cores # pass either dictionary or kwargs smd.save_summary({'sum_over_run' : runsum}, summary_int=1) smd.done() |
...
Overview
Content Tools