Main Page | User's Guide | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members

/u/cergrene/0/mallet/codes/SeldonData-1.4/Data.hxx

00001 // Copyright (C) 2003-2004 Vivien Mallet 00002 // 00003 // This file is part of SeldonData library. 00004 // SeldonData library is a tool for data processing. 00005 // 00006 // SeldonData is free software; you can redistribute it and/or modify 00007 // it under the terms of the GNU General Public License as published by 00008 // the Free Software Foundation; either version 2 of the License, or 00009 // (at your option) any later version. 00010 // 00011 // SeldonData is distributed in the hope that it will be useful, 00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 // GNU General Public License (file "license") for more details. 00015 // 00016 // For more information, please see the SeldonData home page: 00017 // http://membres.lycos.fr/vmallet/seldondata/ 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 // Constructors. 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 // Destructor. 00111 00112 ~Data() throw(); 00113 00114 // Methods. 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 00179 int GetNbElements(); 00180 int GetNbDim(); 00181 int GetLength(int dim) const; 00182 00183 Grid<TG>* GetGrid(int i); 00184 Grid<TG>& operator [] (int i); 00185 const Grid<TG>& operator [] (int i) const; 00186 Array<Grid<TG>*, 1>& GetGrids(); 00187 00188 Array<T, N>& GetArray(); 00189 T* GetData(); 00190 const T* GetData() const; 00191 00192 template<class DTG, class R0> 00193 void SubData(Data<T, 1, DTG>&, R0 r0); 00194 template<class DTG, class R0, class R1> 00195 void SubData(Data<T, 2, DTG>&, R0 r0, R1 r1); 00196 template<class DTG, class R0, class R1, class R2> 00197 void SubData(Data<T, 3, DTG>&, R0 r0, R1 r1, R2 r2); 00198 template<class DTG, class R0, class R1, class R2, 00199 class R3> 00200 void SubData(Data<T, 4, DTG>&, R0 r0, R1 r1, R2 r2, 00201 R3 r3); 00202 template<class DTG, class R0, class R1, class R2, 00203 class R3, class R4> 00204 void SubData(Data<T, 5, DTG>&, R0 r0, R1 r1, R2 r2, 00205 R3 r3, R4 r4); 00206 template<class DTG, class R0, class R1, class R2, 00207 class R3, class R4, class R5> 00208 void SubData(Data<T, 6, DTG>&, R0 r0, R1 r1, R2 r2, 00209 R3 r3, R4 r4, R5 r5); 00210 template<class DTG, class R0, class R1, class R2, 00211 class R3, class R4, class R5, 00212 class R6> 00213 void SubData(Data<T, 7, DTG>&, R0 r0, R1 r1, R2 r2, 00214 R3 r3, R4 r4, R5 r5, R6 r6); 00215 template<class DTG, class R0, class R1, class R2, 00216 class R3, class R4, class R5, 00217 class R6, class R7> 00218 void SubData(Data<T, 8, DTG>&, R0 r0, R1 r1, R2 r2, 00219 R3 r3, R4 r4, R5 r5, R6 r6, 00220 R7 r7); 00221 template<class DTG, class R0, class R1, class R2, 00222 class R3, class R4, class R5, 00223 class R6, class R7, class R8> 00224 void SubData(Data<T, 9, DTG>&, R0 r0, R1 r1, R2 r2, 00225 R3 r3, R4 r4, R5 r5, R6 r6, 00226 R7 r7, R8 r8); 00227 template<class DTG, class R0, class R1, class R2, 00228 class R3, class R4, class R5, 00229 class R6, class R7, class R8, class R9> 00230 void SubData(Data<T, 10, DTG>&, R0 r0, R1 r1, R2 r2, 00231 R3 r3, R4 r4, R5 r5, R6 r6, 00232 R7 r7, R8 r8, R9 r9); 00233 00234 void ResizeGrid(); 00235 void ResizeGrid(Grid<TG>& G0); 00236 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1); 00237 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1, 00238 Grid<TG>& G2); 00239 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1, 00240 Grid<TG>& G2, Grid<TG>& G3); 00241 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1, 00242 Grid<TG>& G2, Grid<TG>& G3, 00243 Grid<TG>& G4); 00244 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1, 00245 Grid<TG>& G2, Grid<TG>& G3, 00246 Grid<TG>& G4, Grid<TG>& G5); 00247 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1, 00248 Grid<TG>& G2, Grid<TG>& G3, 00249 Grid<TG>& G4, Grid<TG>& G5, 00250 Grid<TG>& G6); 00251 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1, 00252 Grid<TG>& G2, Grid<TG>& G3, 00253 Grid<TG>& G4, Grid<TG>& G5, 00254 Grid<TG>& G6, Grid<TG>& G7); 00255 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1, 00256 Grid<TG>& G2, Grid<TG>& G3, 00257 Grid<TG>& G4, Grid<TG>& G5, 00258 Grid<TG>& G6, Grid<TG>& G7, 00259 Grid<TG>& G8); 00260 void ResizeGrid(Grid<TG>& G0, Grid<TG>& G1, 00261 Grid<TG>& G2, Grid<TG>& G3, 00262 Grid<TG>& G4, Grid<TG>& G5, 00263 Grid<TG>& G6, Grid<TG>& G7, 00264 Grid<TG>& G8, Grid<TG>& G9); 00265 00266 void ResizeGrid(int N0); 00267 void ResizeGrid(int N0, int N1); 00268 void ResizeGrid(int N0, int N1, 00269 int N2); 00270 void ResizeGrid(int N0, int N1, 00271 int N2, int N3); 00272 void ResizeGrid(int N0, int N1, 00273 int N2, int N3, 00274 int N4); 00275 void ResizeGrid(int N0, int N1, 00276 int N2, int N3, 00277 int N4, int N5); 00278 void ResizeGrid(int N0, int N1, 00279 int N2, int N3, 00280 int N4, int N5, 00281 int N6); 00282 void ResizeGrid(int N0, int N1, 00283 int N2, int N3, 00284 int N4, int N5, 00285 int N6, int N7); 00286 void ResizeGrid(int N0, int N1, 00287 int N2, int N3, 00288 int N4, int N5, 00289 int N6, int N7, 00290 int N8); 00291 void ResizeGrid(int N0, int N1, 00292 int N2, int N3, 00293 int N4, int N5, 00294 int N6, int N7, 00295 int N8, int N9); 00296 00297 void Resize(); 00298 void Resize(Grid<TG>& G0); 00299 void Resize(Grid<TG>& G0, Grid<TG>& G1); 00300 void Resize(Grid<TG>& G0, Grid<TG>& G1, 00301 Grid<TG>& G2); 00302 void Resize(Grid<TG>& G0, Grid<TG>& G1, 00303 Grid<TG>& G2, Grid<TG>& G3); 00304 void Resize(Grid<TG>& G0, Grid<TG>& G1, 00305 Grid<TG>& G2, Grid<TG>& G3, 00306 Grid<TG>& G4); 00307 void Resize(Grid<TG>& G0, Grid<TG>& G1, 00308 Grid<TG>& G2, Grid<TG>& G3, 00309 Grid<TG>& G4, Grid<TG>& G5); 00310 void Resize(Grid<TG>& G0, Grid<TG>& G1, 00311 Grid<TG>& G2, Grid<TG>& G3, 00312 Grid<TG>& G4, Grid<TG>& G5, 00313 Grid<TG>& G6); 00314 void Resize(Grid<TG>& G0, Grid<TG>& G1, 00315 Grid<TG>& G2, Grid<TG>& G3, 00316 Grid<TG>& G4, Grid<TG>& G5, 00317 Grid<TG>& G6, Grid<TG>& G7); 00318 void Resize(Grid<TG>& G0, Grid<TG>& G1, 00319 Grid<TG>& G2, Grid<TG>& G3, 00320 Grid<TG>& G4, Grid<TG>& G5, 00321 Grid<TG>& G6, Grid<TG>& G7, 00322 Grid<TG>& G8); 00323 void Resize(Grid<TG>& G0, Grid<TG>& G1, 00324 Grid<TG>& G2, Grid<TG>& G3, 00325 Grid<TG>& G4, Grid<TG>& G5, 00326 Grid<TG>& G6, Grid<TG>& G7, 00327 Grid<TG>& G8, Grid<TG>& G9); 00328 00329 void Resize(int N0); 00330 void Resize(int N0, int N1); 00331 void Resize(int N0, int N1, 00332 int N2); 00333 void Resize(int N0, int N1, 00334 int N2, int N3); 00335 void Resize(int N0, int N1, 00336 int N2, int N3, 00337 int N4); 00338 void Resize(int N0, int N1, 00339 int N2, int N3, 00340 int N4, int N5); 00341 void Resize(int N0, int N1, 00342 int N2, int N3, 00343 int N4, int N5, 00344 int N6); 00345 void Resize(int N0, int N1, 00346 int N2, int N3, 00347 int N4, int N5, 00348 int N6, int N7); 00349 void Resize(int N0, int N1, 00350 int N2, int N3, 00351 int N4, int N5, 00352 int N6, int N7, 00353 int N8); 00354 void Resize(int N0, int N1, 00355 int N2, int N3, 00356 int N4, int N5, 00357 int N6, int N7, 00358 int N8, int N9); 00359 00360 void Resize(const TinyVector<int, N>& shape); 00361 00362 // Calculus. 00363 void Mlt(T alpha); 00364 void Add(T alpha); 00365 void Apply(void function(T&)); 00366 template <class F> 00367 void Apply(F& function); 00368 void Apply(T (function)(const T&)); 00369 template <class T0, class TG0, class F> 00370 void Apply(Data<T0, N, TG0>&, F& function); 00371 00372 T GetMax() const; 00373 T GetMaxAbs() const; 00374 T GetSignedMaxAbs() const; 00375 T GetMin() const; 00376 00377 Array<int, 1> GetMaxIndex() const; 00378 Array<int, 1> GetMaxAbsIndex() const; 00379 Array<int, 1> GetMinIndex() const; 00380 00381 T Sum() const; 00382 T Mean() const; 00383 T Variance() const; 00384 T StandardDeviation() const; 00385 00386 T Norm1() const; 00387 T Norm2() const; 00388 T Norm(T p) const; 00389 00390 void Fill(); 00391 void Fill(T value); 00392 00393 void SetZero(); 00394 bool IsZero(); 00395 00396 void Threshold(T threshold_min, T threshold_max); 00397 void ThresholdAbs(T threshold); 00398 void ThresholdMin(T threshold); 00399 void ThresholdMax(T threshold); 00400 00401 template <class T0, class TG0> 00402 T NGE_interpolation(Data<T0, N, TG0>& data, T limit = T(0)); 00403 template <class T0, class TG0> 00404 T NGE(Data<T0, N, TG0>& data, T limit = T(0)); 00405 00406 template <class T0, class TG0> 00407 T Bias_interpolation(Data<T0, N, TG0>& data); 00408 template <class T0, class TG0> 00409 T Bias(Data<T0, N, TG0>& data); 00410 00411 template <class T0, class TG0> 00412 T RMS_interpolation(Data<T0, N, TG0>& data); 00413 template <class T0, class TG0> 00414 T RMS(Data<T0, N, TG0>& data); 00415 00416 template <class T0, class TG0> 00417 T RelativeRMS_interpolation(Data<T0, N, TG0>& data); 00418 template <class T0, class TG0> 00419 T RelativeRMS(Data<T0, N, TG0>& data); 00420 00421 template <class T0, class TG0> 00422 T Corr_interpolation(Data<T0, N, TG0>& data); 00423 template <class T0, class TG0> 00424 T Corr(Data<T0, N, TG0>& data); 00425 00426 template <class T0, class TG0> 00427 T ErrorLessThan_interpolation(Data<T0, N, TG0>& data, T threshold); 00428 template <class T0, class TG0> 00429 T ErrorLessThan(Data<T0, N, TG0>& data, T threshold); 00430 00431 void ReverseData(int dim = 0); 00432 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0); 00433 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0, 00434 Grid<TG>& G1); 00435 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0, 00436 Grid<TG>& G1, Grid<TG>& G2); 00437 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0, 00438 Grid<TG>& G1, Grid<TG>& G2, 00439 Grid<TG>& G3); 00440 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0, 00441 Grid<TG>& G1, Grid<TG>& G2, 00442 Grid<TG>& G3, Grid<TG>& G4); 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 Grid<TG>& G5); 00447 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0, 00448 Grid<TG>& G1, Grid<TG>& G2, 00449 Grid<TG>& G3, Grid<TG>& G4, 00450 Grid<TG>& G5, Grid<TG>& G6); 00451 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0, 00452 Grid<TG>& G1, Grid<TG>& G2, 00453 Grid<TG>& G3, Grid<TG>& G4, 00454 Grid<TG>& G5, Grid<TG>& G6, 00455 Grid<TG>& G7); 00456 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0, 00457 Grid<TG>& G1, Grid<TG>& G2, 00458 Grid<TG>& G3, Grid<TG>& G4, 00459 Grid<TG>& G5, Grid<TG>& G6, 00460 Grid<TG>& G7, Grid<TG>& G8); 00461 void SwitchDimensions(TinyVector<int, N> NewDim, Grid<TG>& G0, 00462 Grid<TG>& G1, Grid<TG>& G2, 00463 Grid<TG>& G3, Grid<TG>& G4, 00464 Grid<TG>& G5, Grid<TG>& G6, 00465 Grid<TG>& G7, Grid<TG>& G8, 00466 Grid<TG>& G9); 00467 00468 void ChangeCoords(FuncCoords_Base<TG>& f); 00469 void ChangeCoordsInPlace(Function_Base<TG>& f); 00470 00471 void Print() const; 00472 void PrintInfo() const; 00473 string InfoString() const; 00474 00475 private: 00476 void ClearGrids(); 00477 void SetVariables(); 00478 00479 }; 00480 00481 00482 } // namespace Data. 00483 00484 00485 #define FILE_SELDONDATA_DATA_HXX 00486 #endif

Generated on Tue Nov 9 09:32:18 2004 for SeldonData by doxygen 1.3.8