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
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
00338 QVector operator*(double t, const QVector&v);
00339
00340 std::ostream& operator<<(std::ostream&s,const QVector&v);
00341
00342 Q_END_NAMESPACE
00343
00344 #endif