00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef FILE_SELDONDATA_DATA_HXX
00020
00021 #include <iostream>
00022 using std::cout;
00023 using std::endl;
00024
00025 namespace SeldonData
00026 {
00027
00029 template<class T, int N, class TG = T>
00030 class Data
00031 {
00032
00033 protected:
00035 Array<T, N> data_;
00037 Array<Grid<TG>*, 1> grids_;
00038
00039 public:
00040
00041
00042
00043 Data() throw();
00044 Data(Grid<TG>& G0) throw();
00045 Data(Grid<TG>& G0, Grid<TG>& G1) throw();
00046 Data(Grid<TG>& G0, Grid<TG>& G1,
00047 Grid<TG>& G2) throw();
00048 Data(Grid<TG>& G0, Grid<TG>& G1,
00049 Grid<TG>& G2, Grid<TG>& G3) throw();
00050 Data(Grid<TG>& G0, Grid<TG>& G1,
00051 Grid<TG>& G2, Grid<TG>& G3,
00052 Grid<TG>& G4) throw();
00053 Data(Grid<TG>& G0, Grid<TG>& G1,
00054 Grid<TG>& G2, Grid<TG>& G3,
00055 Grid<TG>& G4, Grid<TG>& G5) throw();
00056 Data(Grid<TG>& G0, Grid<TG>& G1,
00057 Grid<TG>& G2, Grid<TG>& G3,
00058 Grid<TG>& G4, Grid<TG>& G5,
00059 Grid<TG>& G6) throw();
00060 Data(Grid<TG>& G0, Grid<TG>& G1,
00061 Grid<TG>& G2, Grid<TG>& G3,
00062 Grid<TG>& G4, Grid<TG>& G5,
00063 Grid<TG>& G6, Grid<TG>& G7) throw();
00064 Data(Grid<TG>& G0, Grid<TG>& G1,
00065 Grid<TG>& G2, Grid<TG>& G3,
00066 Grid<TG>& G4, Grid<TG>& G5,
00067 Grid<TG>& G6, Grid<TG>& G7,
00068 Grid<TG>& G8) throw();
00069 Data(Grid<TG>& G0, Grid<TG>& G1,
00070 Grid<TG>& G2, Grid<TG>& G3,
00071 Grid<TG>& G4, Grid<TG>& G5,
00072 Grid<TG>& G6, Grid<TG>& G7,
00073 Grid<TG>& G8, Grid<TG>& G9) throw();
00074 Data(int N0) throw();
00075 Data(int N0, int N1) throw();
00076 Data(int N0, int N1,
00077 int N2) throw();
00078 Data(int N0, int N1,
00079 int N2, int N3) throw();
00080 Data(int N0, int N1,
00081 int N2, int N3,
00082 int N4) throw();
00083 Data(int N0, int N1,
00084 int N2, int N3,
00085 int N4, int N5) throw();
00086 Data(int N0, int N1,
00087 int N2, int N3,
00088 int N4, int N5,
00089 int N6) throw();
00090 Data(int N0, int N1,
00091 int N2, int N3,
00092 int N4, int N5,
00093 int N6, int N7) throw();
00094 Data(int N0, int N1,
00095 int N2, int N3,
00096 int N4, int N5,
00097 int N6, int N7,
00098 int N8) throw();
00099 Data(int N0, int N1,
00100 int N2, int N3,
00101 int N4, int N5,
00102 int N6, int N7,
00103 int N8, int N9) throw();
00104 Data(const TinyVector<int, N>& shape) throw();
00105 Data(T* data, const TinyVector<int, N>& shape,
00106 preexistingMemoryPolicy policy = neverDeleteData) throw();
00107 template <class T0>
00108 Data(Data<T0, N, TG>& data) throw();
00109
00110
00111
00112 ~Data() throw();
00113
00114
00115
00116 T& operator() (int i0);
00117 T& operator() (int i0, int i1);
00118 T& operator() (int i0, int i1, int i2);
00119 T& operator() (int i0, int i1, int i2,
00120 int i3);
00121 T& operator() (int i0, int i1, int i2,
00122 int i3, int i4);
00123 T& operator() (int i0, int i1, int i2,
00124 int i3, int i4, int i5);
00125 T& operator() (int i0, int i1, int i2,
00126 int i3, int i4, int i5,
00127 int i6);
00128 T& operator() (int i0, int i1, int i2,
00129 int i3, int i4, int i5,
00130 int i6, int i7);
00131 T& operator() (int i0, int i1, int i2,
00132 int i3, int i4, int i5,
00133 int i6, int i7, int i8);
00134 T& operator() (int i0, int i1, int i2,
00135 int i3, int i4, int i5,
00136 int i6, int i7, int i8,
00137 int i9);
00138
00139 T operator() (int i0) const;
00140 T operator() (int i0, int i1) const;
00141 T operator() (int i0, int i1, int i2) const;
00142 T operator() (int i0, int i1, int i2,
00143 int i3) const;
00144 T operator() (int i0, int i1, int i2,
00145 int i3, int i4) const;
00146 T operator() (int i0, int i1, int i2,
00147 int i3, int i4, int i5) const;
00148 T operator() (int i0, int i1, int i2,
00149 int i3, int i4, int i5,
00150 int i6) const;
00151 T operator() (int i0, int i1, int i2,
00152 int i3, int i4, int i5,
00153 int i6, int i7) const;
00154 T operator() (int i0, int i1, int i2,
00155 int i3, int i4, int i5,
00156 int i6, int i7, int i8) const;
00157 T operator() (int i0, int i1, int i2,
00158 int i3, int i4, int i5,
00159 int i6, int i7, int i8,
00160 int i9) const;
00161
00162 T& operator() (const Array<int, 1>& indices);
00163
00164 T& Value(int i0, int i1 = -1,
00165 int i2 = -1, int i3 = -1,
00166 int i4 = -1, int i5 = -1,
00167 int i6 = -1, int i7 = -1,
00168 int i8 = -1, int i9 = -1);
00169
00170 T Value(int i0, int i1 = -1,
00171 int i2 = -1, int i3 = -1,
00172 int i4 = -1, int i5 = -1,
00173 int i6 = -1, int i7 = -1,
00174 int i8 = -1, int i9 = -1) const;
00175
00176 template <class T0>
00177 void Copy(Data<T0, N, TG>& data);
00178 template <class T0>
00179 void ReferenceCopy(Data<T0, N, TG>& data);
00180
00181 int GetNbElements();
00182 int GetNbDim();
00183 int GetLength(int dim) const;
00184
00185 Grid<TG>* GetGrid(int i);
00186 Grid<TG>& operator [] (int i);
00187 const Grid<TG>& operator [] (int i) const;
00188 Array<Grid<TG>*, 1>& GetGrids();
00189
00190 Array<T, N>& GetArray();
00191 Array<T, N>& operator() ();
00192 T* GetData();
00193 const T* GetData() const;
00194
00195 template<class DTG, class R0>
00196 void SubData(Data<T, 1, DTG>&, R0 r0);
00197 template<class DTG, class R0, class R1>
00198 void SubData(Data<T, 2, DTG>&, R0 r0, R1 r1);
00199 template<class DTG, class R0, class R1, class R2>
00200 void SubData(Data<T, 3, DTG>&, R0 r0, R1 r1, R2 r2);
00201 template<class DTG, class R0, class R1, class R2,
00202 class R3>
00203 void SubData(Data<T, 4, DTG>&, R0 r0, R1 r1, R2 r2,
00204 R3 r3);
00205 template<class DTG, class R0, class R1, class R2,
00206 class R3, class R4>
00207 void SubData(Data<T, 5, DTG>&, R0 r0, R1 r1, R2 r2,
00208 R3 r3, R4 r4);
00209 template<class DTG, class R0, class R1, class R2,
00210 class R3, class R4, class R5>
00211 void SubData(Data<T, 6, DTG>&, R0 r0, R1 r1, R2 r2,
00212 R3 r3, R4 r4, R5 r5);
00213 template<class DTG, class R0, class R1, class R2,
00214 class R3, class R4, class R5,
00215 class R6>
00216 void SubData(Data<T, 7, DTG>&, R0 r0, R1 r1, R2 r2,
00217 R3 r3, R4 r4, R5 r5, R6 r6);
00218 template<class DTG, class R0, class R1, class R2,
00219 class R3, class R4, class R5,
00220 class R6, class R7>
00221 void SubData(Data<T, 8, DTG>&, R0 r0, R1 r1, R2 r2,
00222 R3 r3, R4 r4, R5 r5, R6 r6,
00223 R7 r7);
00224 template<class DTG, class R0, class R1, class R2,
00225 class R3, class R4, class R5,
00226 class R6, class R7, class R8>
00227 void SubData(Data<T, 9, DTG>&, R0 r0, R1 r1, R2 r2,
00228 R3 r3, R4 r4, R5 r5, R6 r6,
00229 R7 r7, R8 r8);
00230 template<class DTG, class R0, class R1, class R2,
00231 class R3, class R4, class R5,
00232 class R6, class R7, class R8, class R9>
00233 void SubData(Data<T, 10, DTG>&, R0 r0, R1 r1, R2 r2,
00234 R3 r3, R4 r4, R5 r5, R6 r6,
00235 R7 r7, R8 r8, R9 r9);
00236
00237 void ResizeGrid();
00238 void ResizeGrid(Grid<TG>& G0);
00239 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1);
00240 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1,
00241 Grid<TG>& G2);
00242 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1,
00243 Grid<TG>& G2, Grid<TG>& G3);
00244 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1,
00245 Grid<TG>& G2, Grid<TG>& G3,
00246 Grid<TG>& G4);
00247 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1,
00248 Grid<TG>& G2, Grid<TG>& G3,
00249 Grid<TG>& G4, Grid<TG>& G5);
00250 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1,
00251 Grid<TG>& G2, Grid<TG>& G3,
00252 Grid<TG>& G4, Grid<TG>& G5,
00253 Grid<TG>& G6);
00254 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1,
00255 Grid<TG>& G2, Grid<TG>& G3,
00256 Grid<TG>& G4, Grid<TG>& G5,
00257 Grid<TG>& G6, Grid<TG>& G7);
00258 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1,
00259 Grid<TG>& G2, Grid<TG>& G3,
00260 Grid<TG>& G4, Grid<TG>& G5,
00261 Grid<TG>& G6, Grid<TG>& G7,
00262 Grid<TG>& G8);
00263 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1,
00264 Grid<TG>& G2, Grid<TG>& G3,
00265 Grid<TG>& G4, Grid<TG>& G5,
00266 Grid<TG>& G6, Grid<TG>& G7,
00267 Grid<TG>& G8, Grid<TG>& G9);
00268
00269 void ResizeGrid(int N0);
00270 void ResizeGrid(int N0, int N1);
00271 void ResizeGrid(int N0, int N1,
00272 int N2);
00273 void ResizeGrid(int N0, int N1,
00274 int N2, int N3);
00275 void ResizeGrid(int N0, int N1,
00276 int N2, int N3,
00277 int N4);
00278 void ResizeGrid(int N0, int N1,
00279 int N2, int N3,
00280 int N4, int N5);
00281 void ResizeGrid(int N0, int N1,
00282 int N2, int N3,
00283 int N4, int N5,
00284 int N6);
00285 void ResizeGrid(int N0, int N1,
00286 int N2, int N3,
00287 int N4, int N5,
00288 int N6, int N7);
00289 void ResizeGrid(int N0, int N1,
00290 int N2, int N3,
00291 int N4, int N5,
00292 int N6, int N7,
00293 int N8);
00294 void ResizeGrid(int N0, int N1,
00295 int N2, int N3,
00296 int N4, int N5,
00297 int N6, int N7,
00298 int N8, int N9);
00299
00300 void Resize();
00301 void Resize(Grid<TG>& G0);
00302 void Resize(Grid<TG>& G0, Grid<TG>& G1);
00303 void Resize(Grid<TG>& G0, Grid<TG>& G1,
00304 Grid<TG>& G2);
00305 void Resize(Grid<TG>& G0, Grid<TG>& G1,
00306 Grid<TG>& G2, Grid<TG>& G3);
00307 void Resize(Grid<TG>& G0, Grid<TG>& G1,
00308 Grid<TG>& G2, Grid<TG>& G3,
00309 Grid<TG>& G4);
00310 void Resize(Grid<TG>& G0, Grid<TG>& G1,
00311 Grid<TG>& G2, Grid<TG>& G3,
00312 Grid<TG>& G4, Grid<TG>& G5);
00313 void Resize(Grid<TG>& G0, Grid<TG>& G1,
00314 Grid<TG>& G2, Grid<TG>& G3,
00315 Grid<TG>& G4, Grid<TG>& G5,
00316 Grid<TG>& G6);
00317 void Resize(Grid<TG>& G0, Grid<TG>& G1,
00318 Grid<TG>& G2, Grid<TG>& G3,
00319 Grid<TG>& G4, Grid<TG>& G5,
00320 Grid<TG>& G6, Grid<TG>& G7);
00321 void Resize(Grid<TG>& G0, Grid<TG>& G1,
00322 Grid<TG>& G2, Grid<TG>& G3,
00323 Grid<TG>& G4, Grid<TG>& G5,
00324 Grid<TG>& G6, Grid<TG>& G7,
00325 Grid<TG>& G8);
00326 void Resize(Grid<TG>& G0, Grid<TG>& G1,
00327 Grid<TG>& G2, Grid<TG>& G3,
00328 Grid<TG>& G4, Grid<TG>& G5,
00329 Grid<TG>& G6, Grid<TG>& G7,
00330 Grid<TG>& G8, Grid<TG>& G9);
00331
00332 void Resize(int N0);
00333 void Resize(int N0, int N1);
00334 void Resize(int N0, int N1,
00335 int N2);
00336 void Resize(int N0, int N1,
00337 int N2, int N3);
00338 void Resize(int N0, int N1,
00339 int N2, int N3,
00340 int N4);
00341 void Resize(int N0, int N1,
00342 int N2, int N3,
00343 int N4, int N5);
00344 void Resize(int N0, int N1,
00345 int N2, int N3,
00346 int N4, int N5,
00347 int N6);
00348 void Resize(int N0, int N1,
00349 int N2, int N3,
00350 int N4, int N5,
00351 int N6, int N7);
00352 void Resize(int N0, int N1,
00353 int N2, int N3,
00354 int N4, int N5,
00355 int N6, int N7,
00356 int N8);
00357 void Resize(int N0, int N1,
00358 int N2, int N3,
00359 int N4, int N5,
00360 int N6, int N7,
00361 int N8, int N9);
00362
00363 void Resize(const TinyVector<int, N>& shape);
00364
00365
00366 void Mlt(T alpha);
00367 void Add(T alpha);
00368 void Apply(void function(T&));
00369 template <class F>
00370 void Apply(F& function);
00371 void Apply(T (function)(const T&));
00372 template <class T0, class TG0, class F>
00373 void Apply(Data<T0, N, TG0>&, F& function);
00374
00375 T GetMax() const;
00376 T GetMaxAbs() const;
00377 T GetSignedMaxAbs() const;
00378 T GetMin() const;
00379
00380 Array<int, 1> GetMaxIndex() const;
00381 Array<int, 1> GetMaxAbsIndex() const;
00382 Array<int, 1> GetMinIndex() const;
00383
00384 T Sum() const;
00385 T Mean() const;
00386 T Variance() const;
00387 T StandardDeviation() const;
00388
00389 T Norm1() const;
00390 T Norm2() const;
00391 T Norm(T p) const;
00392
00393 void Fill();
00394 void Fill(T value);
00395
00396 void SetZero();
00397 bool IsZero();
00398
00399 void Threshold(T threshold_min, T threshold_max);
00400 void ThresholdAbs(T threshold);
00401 void ThresholdMin(T threshold);
00402 void ThresholdMax(T threshold);
00403
00404 template <class T0, class TG0>
00405 T NGE_interpolation(Data<T0, N, TG0>& data, T limit = T(0));
00406 template <class T0, class TG0>
00407 T NGE(Data<T0, N, TG0>& data, T limit = T(0));
00408
00409 template <class T0, class TG0>
00410 T Bias_interpolation(Data<T0, N, TG0>& data);
00411 template <class T0, class TG0>
00412 T Bias(Data<T0, N, TG0>& data);
00413
00414 template <class T0, class TG0>
00415 T RMS_interpolation(Data<T0, N, TG0>& data);
00416 template <class T0, class TG0>
00417 T RMS(Data<T0, N, TG0>& data);
00418
00419 template <class T0, class TG0>
00420 T RelativeRMS_interpolation(Data<T0, N, TG0>& data);
00421 template <class T0, class TG0>
00422 T RelativeRMS(Data<T0, N, TG0>& data);
00423
00424 template <class T0, class TG0>
00425 T Corr_interpolation(Data<T0, N, TG0>& data);
00426 template <class T0, class TG0>
00427 T Corr(Data<T0, N, TG0>& data);
00428
00429 template <class T0, class TG0>
00430 T ErrorLessThan_interpolation(Data<T0, N, TG0>& data, T threshold);
00431 template <class T0, class TG0>
00432 T ErrorLessThan(Data<T0, N, TG0>& data, T threshold);
00433
00434 void ReverseData(int dim = 0);
00435 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0);
00436 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0,
00437 Grid<TG>& G1);
00438 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0,
00439 Grid<TG>& G1, Grid<TG>& G2);
00440 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0,
00441 Grid<TG>& G1, Grid<TG>& G2,
00442 Grid<TG>& G3);
00443 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0,
00444 Grid<TG>& G1, Grid<TG>& G2,
00445 Grid<TG>& G3, Grid<TG>& G4);
00446 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0,
00447 Grid<TG>& G1, Grid<TG>& G2,
00448 Grid<TG>& G3, Grid<TG>& G4,
00449 Grid<TG>& G5);
00450 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0,
00451 Grid<TG>& G1, Grid<TG>& G2,
00452 Grid<TG>& G3, Grid<TG>& G4,
00453 Grid<TG>& G5, Grid<TG>& G6);
00454 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0,
00455 Grid<TG>& G1, Grid<TG>& G2,
00456 Grid<TG>& G3, Grid<TG>& G4,
00457 Grid<TG>& G5, Grid<TG>& G6,
00458 Grid<TG>& G7);
00459 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0,
00460 Grid<TG>& G1, Grid<TG>& G2,
00461 Grid<TG>& G3, Grid<TG>& G4,
00462 Grid<TG>& G5, Grid<TG>& G6,
00463 Grid<TG>& G7, Grid<TG>& G8);
00464 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0,
00465 Grid<TG>& G1, Grid<TG>& G2,
00466 Grid<TG>& G3, Grid<TG>& G4,
00467 Grid<TG>& G5, Grid<TG>& G6,
00468 Grid<TG>& G7, Grid<TG>& G8,
00469 Grid<TG>& G9);
00470
00471 void ChangeCoords(FuncCoords_Base<TG>& f);
00472 void ChangeCoordsInPlace(Function_Base<TG>& f);
00473
00474 void Print() const;
00475 void PrintInfo() const;
00476 string InfoString() const;
00477
00478 private:
00479 void ClearGrids();
00480 void SetVariables();
00481
00482 };
00483
00484
00485 }
00486
00487
00488 #define FILE_SELDONDATA_DATA_HXX
00489 #endif