Page History
Info |
---|
Draft, in work. |
Table of Contents |
---|
Include Page | ||||
---|---|---|---|---|
|
iPython has several features useful for inspecting Python objects and object hierarchies, in particular Tab completion/expansion of attributes, very handy in this case for inspecting the structure of Xtc data.
Once you've cloned the LCLS2 PSDM repository and built the executables therein, generate sample Xtc data files and inspect with iPython and psana. These notes are current as of tag Ric-180309c.
Setting Up
Switch to PSDM conda Environment
Return to the PSDM conda environment, if necessary.
Code Block | ||
---|---|---|
| ||
# At the top of the PSDM lcls2 git repo user@host> bash user@host-BASH> source ./setup_env.sh (ps-0.1.2) [user@host-BASH]$ |
Generate a Sample Data File
Generate a file of simple Xtc-formatted dummy data.
In the current release, this generates a 2-event data file.
Code Block | ||
---|---|---|
| ||
# Usage: xtcwriter [-f <filename> -t -h] (ps-0.1.2) [user@host-BASH]$ xtcwriter -f test.xtc |
Create a Basic psana Data Import Script
We need a simple script, let's call it quick.py, to execute in the iPython session.
Code Block | ||||
---|---|---|---|---|
| ||||
from psana import DataSource ds = DataSource('test.xtc') for evt in ds.events(): pass |
Inspecting Xtc Data in iPython
Start iPython and Run Import Script
Start iPython.
Code Block (ps-0.1.2) [user@host-BASH]$ ipython Python 3.6.6 |Anaconda, Inc.| (default, Jun 28 2018, 17:14:51) Type 'copyright', 'credits' or 'license' for more information IPython 6.5.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
Run quick.py.
Code Block language py # In iPython session In [1]: run quick.py
Examine Data Per Event
With the import script executed, examine the events in the DataSource object. The iPython %who and %whos magic functions are useful at this stage.
Take a look at what's in scope.
Code Block language py # In iPython session In [2]: %whos Variable Type Data/Info ------------------------------------ DataSource type <class 'psana.datasource.DataSource'> ds DataSource <psana.datasource.DataSou<...>object at 0x7fa4e8838a58> evt Event <psana.event.Event object at 0x7fa4e8838ba8>
Query the psana DataSource object for the number of events read from the file.
Code Block language py # In iPython session In [3]: list(ds.events()) Out []: [<psana.event.Event at 0x7fa4d811d0f0>, <psana.event.Event at 0x7fa4d811d198>]
Store each event a couple events so we can inspect them.
Code Block language py # In iPython session In []: ev1 = next(ds.events()) In []: ev2 = next(ds.events())
Now use Tab completion to look at the psana representation of these events and drill down. Look at the structure inside ev1 (event1) by typing "ev1." at the console and hitting the Tab key to see a list of attributes and methods inside the ev1 object.
Code Block language py # In iPython session In []: evt. evt.dgrams evt.next evt.replace evt.to_bytes evt.from_bytes evt.offsets evt.seconds evt.nanoseconds evt.position evt.size
To access detector data inside this event, we'll drill down into the datagram datagrams associated with the event. Store the event datagram to continue drilling down.
Code Block language py # In iPython session In []: ev1.dgrams Out []: [<dgram.Dgram at 0x7f73938206c0>] # evt1.dgrams is a single-item list. Store the datagram. In []: ev1dg1 = ev1.dgrams[0] In []: ev1dg1 Out []: [<dgram.Dgram at 0x7f73938206c0>
Continue the drill-down into ev1dg1 with "ev1dg1." and the Tab key. Now we reach attributes that look like XPP science data.
Code Block language py # In iPython session In []: ev1dg1. ev1dg1.seq ev1dg1.xppcspad ev1dg1.xpphsd