Versions Compared

Key

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

In psana-python we support three types of visualization: the standard python matplotlib, a more interactive form of plotting that can also be used for real-time monitoring called "psmon" (see https://github.com/lcls-psana/psmon) and the graphical analysis tool "psocake" which is described here.

A simple matplotlib script can be seen in this example.  A corresponding version in psmon (which allows much more "interaction" with the plot) is in is in /reg/g/psdm/tutorials/examplePythonexamplePython3/psmonLocal.py:

Code Block
from psana import *
ds = DataSource('exp=xpptut15:run=54:smd')
det = Detector('cspad')
for nevent,evt in enumerate(ds.events()):
    img = det.image(evt)
    y = img.sum(axis=0)
    break
from psmon.plots import Image,XYPlot
from psmon import publish
publish.local = True
publish.plot_opts.aspect = 1 # needed to get images with correct 1:1 aspect ratio
plotimg = Image(0,"CsPad",img)
publish.send('IMAGE',plotimg)
plotxy = XYPlot(0,"Y vs. X",range(len(y)),y)
publish.send('XY',plotxy)

...

psmon is also able to send plots over the network, which is useful for real-time monitoring.  To do this, do not set publish.local=True (see script in /reg/g/psdm/tutorials/examplePythonexamplePython3/psmonRemote.py):

Code Block
from psana import *
from psmon.plots import Image
from psmon import publish
ds = DataSource('exp=xpptut15:run=54:smd')
det = Detector('cspad')
for nevent,evt in enumerate(ds.events()):
    img = det.image(evt)
    plotimg = Image(0,"CsPad",img)
    publish.send('IMAGE',plotimg)
    raw_input('Hit <CR> for next event')
    if nevent>=2: break

...