QVector.hh

Go to the documentation of this file.
00001 
00015 #ifndef __QVECTOR_HH_
00016 #define __QVECTOR_HH_
00017 
00018 #include <gsl/gsl_vector.h>
00019 #include <iostream>
00020 #include <string>
00021 #include "QObject.hh"
00022 
00023 Q_BEGIN_NAMESPACE
00024 
00025 class QMatrix;
00026 
00027 class QVector : public QObject {
00028         public:
00032                 QVector();
00037                 QVector(size_t size);
00042                 QVector(const QVector& orig);
00049                 QVector(const QVector& orig, size_t size, size_t ioff = 0);
00056                 QVector(const QMatrix& mat);
00060                 virtual ~QVector();
00065                 inline size_t Size() const {return fMathVec  ? fMathVec->size : 0;}
00070                 void Initialize(double val = 0);
00076                 double& operator[](size_t i);
00077                 inline double& operator()(size_t i){return operator[](i);}
00085                 double operator[] (size_t i) const;
00086                 inline double operator() (size_t i) const { return operator[](i);}
00091                 const QVector& operator = (const QVector& orig);
00092                 // MV levare?
00096                 QVector  operator-() const;
00104                 const QVector& Mult(const QVector& other);
00112                 const QVector& Div(const QVector& other);
00118                 const QVector& operator*=(double t);
00124                 const QVector & operator/=(double v);
00130                 const QVector & operator+=(const QVector&v);
00136                 const QVector & operator-=(const QVector&v);
00142                 double operator*(const QVector& other) const;
00148                 QVector operator+(const QVector& other) const;
00154                 QVector operator-(const QVector& other) const;
00160                 QVector operator*(double t) const;
00166                 QVector operator/(double t) const;
00173                 QMatrix T();
00179         const QVector& Shift(int nstep);
00187         const QVector& ShiftReal(double fstep);
00191         const QVector& Differentiate();
00196         QVector Derivative3P(const double delta = 1.) const;
00201         QVector Derivative5P(const double delta = 1.) const;
00206         const QVector& Sort(bool asc=true);
00211         const QVector& Integrate(double constTerm = 0);
00216         void Resize(size_t newsize);
00223                 void Append(double val);
00229                 double Norma() const;
00233                 double Sum(size_t nelem, size_t first = 0) const; 
00239                 double GetRMS(size_t nelem, size_t first = 0) const; 
00243         double GetMedian() const;
00247         double GetMedianAbsoluteDeviation() const;
00251                 inline double GetMax() const {return gsl_vector_max(fMathVec);}
00255                 inline double GetMin() const {return gsl_vector_min(fMathVec);}
00259                 int GetMaxIndex(size_t nelem, size_t first) const;
00263                 int GetMinIndex(size_t nelem, size_t first) const;
00267                 inline size_t GetMaxIndex() const {return gsl_vector_max_index(fMathVec);}
00271                 inline size_t GetMinIndex() const {return gsl_vector_min_index(fMathVec);}
00275                 double* GetArray() const;
00282         const double* GetConstArray() const {return fMathVec ? fMathVec->data : NULL;}
00294                 void SetArray(const double *orig, size_t size);
00298                 void Clear() {Resize(0);}
00302         void Consolidate();
00306         std::string sqlString() const;
00307 
00308     protected: 
00313         QVector (const gsl_vector* vec);
00314         QVector(const QVector& orig, bool dataOwner);
00320         void SetMathRange(size_t start, size_t size);
00321 
00323         gsl_vector* fVec;
00325         gsl_vector* fMathVec;
00327         bool fDataOwner;
00328 
00329    private:
00330         void InitCopy(const QVector& orig, bool copyData);
00331 
00332         friend class QVectorView;
00333         friend class QVectorConstView;
00334         friend class QMatrix;
00335 };
00336 
00337 // operations other than member functions
00338 QVector operator*(double t, const QVector&v);
00339 // formatted printout
00340 std::ostream& operator<<(std::ostream&s,const QVector&v);
00341 
00342 Q_END_NAMESPACE
00343 
00344 #endif

Generated on Fri Mar 6 13:40:39 2009 for CUORE Software by  doxygen 1.5.1