In psana-python we support two types of visualization: the standard python matplotlib, and a more interactive form of plotting that can also be used for real-time monitoring called "psmon".
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 /reg/g/psdm/tutorials/examplePython/psmonLocal.py:
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 plotimg = Image(0,"CsPad",img) publish.send('IMAGE',plotimg) plotxy = XYPlot(0,"Y vs. X",range(len(y)),y) publish.send('XY',plotxy)
The above example demonstrates the two most popular styles of plots: Image (with x,y,z coordinates) and XYPlot (with x,y coordinates).
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/examplePython/psmonRemote.py):
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
Then this plot can then be viewed (by multiple people, if desired) using:
psplot -s <hostname> IMAGE
The "-s <hostname>" argument does not need to be included if "psplot" is run on the same machine as the script that is providing the plot.
There are more sophisticated psmon examples demonstrating features like XYPlots, Multiplots etc. in /reg/g/psdm/sw/releases/ana-current/psmon/examples/.