PSCalib/include/GlobalMethods.h

Go to the documentation of this file.
00001 #ifndef PSCALIB_GLOBALMETHODS_H
00002 #define PSCALIB_GLOBALMETHODS_H
00003 
00004 //--------------------------------------------------------------------------
00005 // File and Version Information:
00006 //      $Id: GlobalMethods.h 9468 2015-01-09 22:15:08Z dubrovin@SLAC.STANFORD.EDU $
00007 //
00008 // $Revision: 9468 $
00009 //------------------------------------------------------------------------
00010 
00011 //-----------------
00012 // C/C++ Headers --
00013 //-----------------
00014 #include <iostream>
00015 #include <string>
00016 //#include <vector>
00017 //#include <map>
00018 //#include <fstream>  // open, close etc.
00019 
00020 //-------------------------------
00021 // Collaborating Class Headers --
00022 //-------------------------------
00023 #include "ndarray/ndarray.h"
00024 #include <cstddef>  // for size_t
00025 
00026 //-----------------------------
00027 
00028 namespace PSCalib {
00029 
00030 /// @addtogroup PSCalib PSCalib
00031 /**
00032  *  @ingroup PSCalib
00033  *
00034  *  @brief module GlobalMethods.h has Global Methods
00035  *
00036  */
00037 
00038 //-----------------------------
00039 
00040 static const size_t N2X1    = 2;
00041 static const size_t ROWS2X1 = 185;
00042 static const size_t COLS2X1 = 388;
00043 static const size_t SIZE2X1 = COLS2X1*ROWS2X1; 
00044 static const size_t SIZE2X2 = N2X1*SIZE2X1; 
00045 
00046 //-----------------------------
00047 /**
00048  * @brief Converts cspad2x2 ndarray data2x2[185,388,2] to two2x1[2,185,388] 
00049  * 
00050  * @param[in]  data2x2 - input ndarray shaped as [185,388,2]
00051  */
00052   template <typename T>
00053   ndarray<const T, 3> 
00054   data2x2ToTwo2x1(const ndarray<const T, 3>& data2x2)
00055   {
00056     ndarray<T, 3> two2x1 = make_ndarray<T>(N2X1, ROWS2X1, COLS2X1);
00057     
00058     for(size_t n=0; n<N2X1;    ++n) {
00059     for(size_t c=0; c<COLS2X1; ++c) {
00060     for(size_t r=0; r<ROWS2X1; ++r) {
00061 
00062       two2x1[n,r,c] = data2x2[r,c,n];  
00063 
00064     }
00065     }
00066     }
00067     return two2x1;
00068   }
00069 
00070 
00071 //-----------------------------
00072 /**
00073  * @brief Converts cspad2x2 ndarray two2x1[2,185,388] to data2x2[185,388,2]
00074  * 
00075  * @param[in]  two2x1 - input ndarray shaped as [2,185,388]
00076  */
00077   template <typename T>
00078   ndarray<const T, 3> 
00079   two2x1ToData2x2(const ndarray<const T, 3>& two2x1)
00080   {
00081     ndarray<T, 3> data2x2 = make_ndarray<T>(N2X1, ROWS2X1, COLS2X1);
00082     
00083     for(size_t n=0; n<N2X1;    ++n) {
00084     for(size_t c=0; c<COLS2X1; ++c) {
00085     for(size_t r=0; r<ROWS2X1; ++r) {
00086 
00087       data2x2[r,c,n] = two2x1[n,r,c];  
00088 
00089     }
00090     }
00091     }
00092     return data2x2;
00093   }
00094 
00095 //-----------------------------
00096 /**
00097  * @brief Converts cspad2x2 ndarray two2x1[2,185,388] to data2x2[185,388,2]
00098  * 
00099  * @param[in]  A - pointer to input array with data shaped as [2,185,388]
00100  */
00101   template <typename T>
00102   void two2x1ToData2x2(T* A)
00103   {
00104     unsigned int shape_in [3] = {N2X1, ROWS2X1, COLS2X1};
00105     unsigned int shape_out[3] =       {ROWS2X1, COLS2X1, N2X1};
00106 
00107     ndarray<T, 3> two2x1(A, shape_in);
00108     ndarray<T, 3> data2x2(shape_out);
00109 
00110     for(size_t n=0; n<N2X1;    ++n) {
00111     for(size_t c=0; c<COLS2X1; ++c) {
00112     for(size_t r=0; r<ROWS2X1; ++r) {
00113 
00114       data2x2[r][c][n] = two2x1[n][r][c];
00115 
00116     }
00117     }
00118     }
00119     std::memcpy(A, data2x2.data(), data2x2.size()*sizeof(T));
00120   }
00121 
00122 //-----------------------------
00123 
00124 } // namespace PSCalib
00125 //-----------------------------
00126 
00127 #endif // PSCALIB_GLOBALMETHODS_H

Generated on 19 Dec 2016 for PSANAmodules by  doxygen 1.4.7