Page History
...
Code Block | ||||
---|---|---|---|---|
| ||||
In [1]: from pymatlab import * Pretend this is matlab In [2]: whos Variable Type Data/Info ------------------------------------------------------ H5getobjnames function <function H5getobjnames at 0x1379fde8> ScanInput type <class 'pymatlab.ScanInput'> ScanOutput type <class 'pymatlab.ScanOutput'> filtvec function <function filtvec at 0x1379ff50> findmovingmotor function <function findmovingmotor at 0x1379fd70> getSTDMEANfrac_from_startpoint function <function getSTDMEANfrac_<...>startpoint at 0x137a01b8> get_filter function <function get_filter at 0x1379fed8> get_limits function <function get_limits at 0x137a0050> get_limits_automatic function <function get_limits_automatic at 0x137a0230> get_limits_channelhist function <function get_limits_channelhist at 0x137a02a8> get_limits_correlation function <function get_limits_correlation at 0x137a00c8> get_limits_corrfrac function <function get_limits_corrfrac at 0x137a0140> h5py module <module 'h5py' from '/reg<...>ython/h5py/__init__.pyc'> np module <module 'numpy' from '/re<...>thon/numpy/__init__.pyc'> plt module <module 'matplotlib.pyplo<...>n/matplotlib/pyplot.pyc'> rdXPPdata function <function rdXPPdata at 0x1379fc80> runexpNO2fina function <function runexpNO2fina at 0x1379fe60> In [3]: scaninput = ScanInput() In [4]: scaninput.fina = "/reg/d/psdm/XPP/xpp23410/hdf5/xpp23410-r0107.h5" In [5]: scan = rdXPPdata(scaninput) Reading XPP data from /reg/d/psdm/XPP/xpp23410/hdf5/xpp23410-r0107.h5 Found pv control object fs2:ramp_angsft_target Found scan vector [ 2800120. 2800240. 2800360. 2800480. 2800600. 2800720. 2800840. 2800960. 2801080. 2801200. 2801320. 2801440. 2801560. 2801680. 2801800. 2801920. 2802040. 2802160. 2802280. 2802400. 2802520. 2802640. 2802760. 2802880. 2803000. 2803120. 2803240. 2803360. 2803480. 2803600. 2803720. 2803840. 2803960. 2804080. 2804200. 2804320. 2804440. 2804560. 2804680. 2804800. 2804920. 2805040. 2805160. 2805280.] Fetching data to correlate with motor ['IPM1', 'IPM2'] (44, 120, 4) In [6]: channels = np.concatenate(scan.scandata,axis=0) In [7]: channels.shape Out[7]: (5280, 4) In [8]: get_limits(channels,1,"correlation") 4 channels a 5280 events indexes that pass filter: (array([ 1, 5, 8, ..., 5266, 5272, 5273]),) Out[8]: array([[ 0.00086654, 0.01604564], [ 0.67172102, 0.71968567], [ 0.00194716, 0.01447819], [ 0.80365403, 0.73463468]]) In [9]: plt.draw() |
Data visualization with NumPy (arrays) and MatPlotLib (plots).
Saving (and loading) a numpy array (e.g. image) to (from) a file
If you want to save one array (max 2 dimensions), you can use binary numpy file or ascii file:
Code Block |
---|
import numpy as np
# binary file .npy format
np.save("filename.npy", array)
array = np.load("filename.npy")
# txt file
np.savetxt("filename.dat", array)
array = loadtxt("filename.dat")
|
If you need to save multiple events/shots in the same file you will need to do some tricks (e.g. flatten the array and stack 1d arrays into 2d arrays where axis2 represent event number). Or you could save as an HDF5 file.
You can save an array or several into an HDF5 file (example from pyana):
Code Block |
---|
import h5py
def beginjob(self,evt,env):
self.ofile = h5py.File("outputfile.hdf5", 'w') # open for writing (overwrites existing file)
self.shot_counter = 0
def event(self,evt,env)
# example: store several arrays from one shot in a group labeled with shot (event) number
self.shot_counter += 1
group = self.ofile.create_group("Shot%d" % self.shot_counter)
image1_source = "CxiSc1-0|TM6740-1"
image2_source = "CxiSc1-0|TM6740-2"
frame = evt.getFrameValue(image1_source)
image1 = frame.data()
frame = evt.getFrameValue(image2_source)
image2 = frame.data()
dataset1 = group.create_dataset("%s"%image1_source,data=image1)
dataset2 = group.create_dataset("%s"%image2_source,data=image2)
def endjob(self,env)
self.ofile.close()
|
Or you can group your datasets any other way you find useful, of course.
A comparison with MatLab.
MatLab | MatPlotLib | Comments | |||||
---|---|---|---|---|---|---|---|
Loglog plot of one array vs. another
| Loglog plot of one array vs. another
| channels is a 4xN array of floats, where N is the number of events. Each column corresponds to one out of four Ipimb channels. | ]]></ac:plain-text-body></ac:structured-macro> | ||||
test | test | Test | |||||
array of limits from graphical input | array of limits from graphical input |
| |||||
|
| In MatLab, | |||||
|
|
| |||||
filter | filter |
| |||||
|
| Comment | |||||
|
|
|