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

Data.hxx

00001 // Copyright (C) 2003-2005 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://spacetown.free.fr/lib/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     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     // Calculus.
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 }  // namespace Data.
00486 
00487 
00488 #define FILE_SELDONDATA_DATA_HXX
00489 #endif

Generated on Wed Apr 25 11:21:07 2007 for SeldonData by  doxygen 1.4.2