Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The Matlab-like tools / library provided by PCDS

  • matlabpymatlab.py
    ... a module implementing in python some of the tools written by Henrik/XPP for matlab
    Code Block
    none
    none
    titleStarting iPython
    borderStylesolid
    [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.
    

    Loading the library. Normally 'import matlabpymatlab' would be recommended, but if you do 'from matlab pymatlab import *', all the functions defined in this module gets loaded in the current namespace, and you can see them in your workspace. This might be easier for interactive work.
    Code Block
    none
    none
    borderStylesolid
    In [1]: from matlabpymatlab import *
    Pretend this is matlab
    
    

    who gives you a short list of workspace contents
    Code Block
    none
    none
    borderStylesolid
    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
    

    whos gives you a longer list of workspace contents
    Code Block
    none
    none
    borderStylesolid
    In [3]: whos
    Variable                         Type          Data/Info
    --------------------------------------------------------
    H5getobjnames                    function      <function H5getobjnames at 0x2b57de8>
    ScanInput                        type          <class 'matlabpymatlab.ScanInput'>
    ScanOutput                       type          <class 'matlabpymatlab.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    <matlab<pymatlab.ScanOutput object at 0x2b60536bee90>
    scaninput                        ScanInput     <matlab<pymatlab.ScanInput object at 0x2b60536b4e90>
    
    

...

Code Block
none
none
In [1]: from matlabpymatlab import *
Pretend this is matlab

In [2]: whos
Variable                         Type        Data/Info
------------------------------------------------------
H5getobjnames                    function    <function H5getobjnames at 0x1379fde8>
ScanInput                        type        <class 'matlabpymatlab.ScanInput'>
ScanOutput                       type        <class 'matlabpymatlab.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()