Page History
In psana-python we support two three 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" (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 here) is in /reg/g/psdm/tutorials/examplePython3/psmonLocal.py:
Code Block |
---|
more psmonLocal.py from psana import * ds = DataSource('exp=xpptut15:run=54:smd') det = Detector('cspad',ds.env()) for nevent,evt in enumerate(ds.events()): #img includes pedestal subtraction, common-mode correction, bad-pixel # suppresion, and returns an "unassembled" 3D array of cspad panels calib_array = det.calib(evt) # this is the same as the above, but also uses geometry to # create an "assembled" 2D image (including "fake pixels" in gaps)= 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) |
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/examplePython3/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) break from psmon.plots import Image from psmon import publish publish.local = True plotimg = Image(0,"CsPad",img) publish.send('imageIMAGE',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:
Code Block |
---|
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 Multiplots (multiple plots that are updated at the same time), plot overlays etc. here: https://github.com/lcls-psana/psmon/tree/master/examples. The "formats" keyword to an XYPlot can be used to select plot markers (square, circle, etc.) following the matplotlib pattern here.