Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

(use the navigation panel on the left to go through the examples)

The model we believe to be way of the future for LCLS analysis (and FEL/lightsource analysis around the world) is that users be able to put together simple/short python "building blocks" to quickly express the complexity of their experiment.  Many of these building blocks are publicly available on the web, and so can be reused around the world.

...

All scripts shown in this section can be copied from this directory:

Code Block
/reg/g/psdm/tutorials/examplePython

They are maintained in the svn user repository named "examplePython".

For reference, here we include a 39-line example script that incorporates several of the building blocks (described with the comments after the "#" characterwith a command similar to this (note the "." at the end of the line):

Code Block
fromcp psana import *
ds  = DataSource('exp=xpptut15:run=54:idx') # run online/offline
det = Detector('cspad', ds.env()) # simple detector interface

from mpi4py import MPI # large-scale parallelization
rank = MPI.COMM_WORLD.Get_rank()
size = MPI.COMM_WORLD.Get_size()

img = None
for run in ds.runs():
    times = run.times()
    mylength = len(times)//size
    mytimes= times[rank*mylength:(rank+1)*mylength]
    for n,t in enumerate(mytimes):
        evt = run.event(t) # random access
        if img is None:
            img = det.image(evt) # many complex run-dependent calibrations
        else:
            img += det.image(evt)
        if n>5: break

import numpy as np
img_all = np.empty_like(img)
MPI.COMM_WORLD.Reduce(img,img_all)

if rank==0:
    from pypsalg.AngularIntegrationM import *  # algorithms
    ai = AngularIntegratorM()
    ai.setParameters(img_all.shape[0],img_all.shape[1],
                     mask=np.ones_like(img_all))
    bins,intensity = ai.getRadialHistogramArrays(img_all)

    from psmon import publish # real time plotting
    from psmon.plots import Image
    publish.local = True
    img = Image(0,"CsPad",img_all)
    publish.send('image',img)
MPI.Finalize()-r /sdf/group/lcls/ds/ana/tutorials/psana1_examples .
cd psana1_examples

Or you can find them in git here: https://github.com/chrisvam/psana1_examples.git.

These small scripts should be run from a "psana" machine in s3df (use "ssh -X psana") and are described in the following sections.