Versions Compared

Key

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

...

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

For reference, here we include a 39-line example script that incorporates several of the building blocks (described with the comments after the "#" character).  See the topics available by expanding the topics box on the left of this confluence page to learn more about the individual building blocks.

Code Block
from 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()