00001 #ifndef PSCALIB_GLOBALMETHODS_H
00002 #define PSCALIB_GLOBALMETHODS_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include <iostream>
00015 #include <string>
00016
00017
00018
00019
00020
00021
00022
00023 #include "ndarray/ndarray.h"
00024 #include <cstddef>
00025
00026
00027
00028 namespace PSCalib {
00029
00030
00031
00032
00033
00034
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
00049
00050
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
00074
00075
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
00098
00099
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 }
00125
00126
00127 #endif // PSCALIB_GLOBALMETHODS_H