...
Interactive access to XTC data
An interactive framework for LCLS data based on ipython is currently being explored, but does not exist yet.
You have the option of working with HDF5 files in an interactive ipython session. Be What you can do is load data arrays into an interactive ipython session. Since you cannot load the XTC file directly into ipython, you'll need to run pyana or similar to create the arrays first. Or, you also have the option loading arrays from the LCLS HDF5 files, but be aware that when you work with HDF5 files, arrays from different sources (detectors) may not be synchronized. You will need to time-order and/or synchronize them yourself if you want to correlate data from different sources! See e.g. How to access HDF5 data from Python for how to do this.
Benefits of working directly with the XTC files is that they are available immediately, and you can start analyzing before the run is done collecting. The benefits of using the LCLS framework(s) is that each event is easily extracted and you don't have to worry about time-ordering or synchronizing data from different devices.
...
- Write your own application, or be patient and wait for our interactive framework solution.
Data visualization with NumPy (arrays) and MatPlotLib (plots).
...
MatLab | MatPlotLib | Comments |
---|
Loglog plot of one array vs. another Code Block |
---|
%
%
%
a1 = subplot(121);
loglog(channels(:,1),channels(:,2),'o')
xlabel('CH0')
ylabel('CH1')
a2 = subplot(122);
loglog(channels(:,3),channels(:,4),'o')
xlabel('CH2')
ylabel('CH3')
|
| Loglog plot of one array vs. another Code Block |
---|
import matplotlib.pyplot as plt
import numpy as np
a1 = plt.subplot(221)
plt.loglog(channels[:,0],channels[:,1], 'o' )
plt.xlabel('CH0')
plt.ylabel('CH1')
a2 = plt.subplot(222)
plt.loglog(channels[:,2],channels[:,3], 'o' )
plt.xlabel('CH2')
plt.ylabel('CH3')
|
| channels is a 4xN array of floats, where N is the number of events. Each column corresponds to one out of four Ipimb channels.
Note that the arrays are indexed with 1,2,3,4 in MatLab and 0,1,2,3 in MatPlotLib/NumPy/Python.
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="9288547b9b018018-9f2b6188-40e34d47-ad6fbeef-daf3063cb53543ea12e8760a"><ac:plain-text-body><![CDATA[Note also the use of paranthesis, array() in MatLab, array[] in MatPlotLib. | ]]></ac:plain-text-body></ac:structured-macro> |
test | test | Test |
array of limits from graphical input | array of limits from graphical input | |
Code Block |
---|
axes(a1)
hold on
lims(1:2,:) = ginput(2);
axes(a2)
hold on
lims(3:4,:) = ginput(2);
|
| Code Block |
---|
lims = np.zeros((4,2),dtype="float")
plt.axes(a1)
plt.hold(True)
lims[0:2,:] = plt.ginput(2)
plt.axes(a2)
plt.hold(True)
lims[2:4,:] = plt.ginput(2)
|
| In MatLab, lims is an expandable array that holds limits as set by input from mouse click on the plot (ginput). NumPy arrays cannot be expanded, so I've declared a 4x2 array of zeros to start with, then fill it with ginput().
|
| | |
filter | filter | |
Code Block |
---|
fbool1 = (channels(:,1)>min(lims(1:2,1)))&(channels(:,1)<max(lims(1:2,1)))
fbool2 = (channels(:,2)>min(lims(1:2,2)))&(channels(:,2)<max(lims(1:2,2)));
fbool = fbool1&fbool2
loglog(channels(fbool,1),channels(fbool,2),'or')
fbool3 = (channels(:,3)>min(lims(3:4,3)))&(channels(:,3)<max(lims(3:4,3)))
fbool4 = (channels(:,4)>min(lims(3:4,4)))&(channels(:,4)<max(lims(3:4,4)));
fbool = fbool3&fbool4
loglog(channels(fbool,3),channels(fbool,4),'or') |
| Code Block |
---|
fbools0 = (channels[:,0]>lims[:,0].min())&(channels[:,0]<lims[:,0].max())
fbools1 = (channels[:,1]>lims[:,1].min())&(channels[:,1]<lims[:,1].max())
fbools = fbools0 & fbools1
fbools2 = (channels[:,2]>lims[:,2].min())&(channels[:,2]<lims[:,2].max())
fbools3 = (channels[:,3]>lims[:,3].min())&(channels[:,3]<lims[:,3].max())
fbools = fbools2&fbools3
|
| Comment |
| | |