Page History
...
Of course MATLAB is much more than this, but here's what we've started with. Here are some examples with IPython based on matlab functions provided by XPP. Thanks to H. Lemke for matlab examples and advice. A python module pymatlab.py defines a number of functions to use in this analysis example.
Starting an interactive session
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
[ofte@psana0XXX myrelease]$ ipython Python 2.4.3 (#1, Nov 3 2010, 12:52:40) Type "copyright", "credits" or "license" for more information. IPython 0.9.1 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object'. ?object also works, ?? prints more. |
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
In [1]: from pymatlab import * |
Generally, it is recommended to load library modules with 'import pymatlab' and access all its methods and classes with pyamatlab.function. In an interactive session it may be easier to have access to the contents of pymatlab in your immediate workspace by doing 'from pymatlab import *'.
Code Block | |||||||||
---|---|---|---|---|---|---|---|---|---|
| |||||||||
In [2]: who H5getobjnames ScanInput ScanOutput filtvec findmovingmotor getSTDMEANfrac_from_startpoint get_filter get_limits get_limits_automatic get_limits_channelhist get_limits_correlation get_limits_corrfrac h5py np plt rdXPPdata runexpNO2fina scan scaninput In [3]: whos Variable Type Data/Info -------------------------------------------------------- H5getobjnames function <function H5getobjnames at 0x2b57de8> ScanInput type <class 'pymatlab.ScanInput'> ScanOutput type <class 'pymatlab.ScanOutput'> filtvec function <function filtvec at 0x2b57f50> findmovingmotor function <function findmovingmotor at 0x2b57d70> getSTDMEANfrac_from_startpoint function <function getSTDMEANfrac_<...>_startpoint at 0x2b581b8> get_filter function <function get_filter at 0x2b57ed8> get_limits function <function get_limits at 0x2b58050> get_limits_automatic function <function get_limits_automatic at 0x2b58230> get_limits_channelhist function <function get_limits_channelhist at 0x2b582a8> get_limits_correlation function <function get_limits_correlation at 0x2b580c8> get_limits_corrfrac function <function get_limits_corrfrac at 0x2b58140> 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 0x2b57c80> runexpNO2fina function <function runexpNO2fina at 0x2b57e60> scan ScanOutput <pymatlab.ScanOutput object at 0x2b60536bee90> scaninput ScanInput <pymatlab.ScanInput object at 0x2b60536b4e90> |
Like in MATLAB, who
gives you a short list of workspace contents, whos
gives you a longer list of workspace contents.
...
Plot filtered IPIMB data with limits from graphical input
...
:
Here's a log from a session that produces a loglog plot (blue dots) of two IPIMB channels, selects limits from graphical inpu (mouse click)
...
,
draws the selected events with red dots.
Code Block | ||||
---|---|---|---|---|
| ||||
| ||||
Code Block | ||||
none | none |
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()
|
Table of comparison (MATLAB vs MatPlotLib)
See also http://www.scipy.org/NumPy_for_Matlab_Users
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 | |||||
|
|
|
...