Diana Software
QVector.hh
Go to the documentation of this file.
1 
13 #ifndef __QVECTOR_HH_
14 #define __QVECTOR_HH_
15 
16 #include <gsl/gsl_vector.h>
17 #include <iostream>
18 #include <string>
19 #include "QObject.hh"
20 #include <vector>
21 
22 class TGraph;
24 
25 //FIXME CMT: Mult and Div definition has changed
26 
27 class QMatrix;
28 class QVectorI;
29 
30 class QVector : public QObject {
31 public:
35  QVector();
40  explicit QVector(const UInt_t size);
45  QVector(const QVector& orig);
49  virtual ~QVector();
54  inline UInt_t Size() const {return fSize;}
59  void Initialize(const double val = 0);
65  double& operator[](const UInt_t i);
66  double& operator()(const UInt_t i){return operator[](i);}
74  const double &operator[] (const UInt_t i) const;
75 
76  const double &operator() (const UInt_t i) const { return operator[](i);}
81  const QVector& operator = (const QVector& orig);
85  const QVector& operator = (const QVectorI& orig);
86 
90  const QVector& operator = (const std::vector<double>& orig);
94  QVector operator-() const;
102  //was: const QVector& Mult(const QVector& other);
103  QVector Mult(const QVector& other) const;
111  //was: const QVector& Div(const QVector& other);
112  QVector Div(const QVector& other) const;
118  const QVector& operator*=(const double t);
124  const QVector & operator/=(const double v);
130  const QVector & operator+=(const double v);
136  const QVector & operator-=(const double v);
137 
138 
144  const QVector & operator+=(const QVector&v);
150  const QVector & operator-=(const QVector&v);
156  const QVector & operator*=(const QVector &v);
162  const QVector & operator/=(const QVector &v);
163 
169  double operator*(const QVector& other) const;
175  QVector operator+(const QVector& other) const;
181  QVector operator-(const QVector& other) const;
187  QVector operator+(double t) const;
193  QVector operator-(double t) const;
199  QVector operator*(double t) const;
205  QVector operator/(double t) const;
212  QMatrix T() const;
213 
219  QMatrix Reshape(UInt_t n,UInt_t m);
225  const QMatrix Reshape(UInt_t n,UInt_t m) const;
226 
233  const QVector& Rebin(const int rebin,bool sum=false);
234 
240  const QVector& Shift(const int nstep);
245  const QVector& Reverse();
246 
254  const QVector& ShiftReal(const double fstep);
258  const QVector& Differentiate();
259 
261  QVector Derivative2P(const double delta = 1.) const;
263  QVector Derivative2PF(const double delta = 1.) const;
264 
266  QVector Derivative3P(const double delta = 1.) const;
267 
269  QVector Derivative3PB(const double delta = 1.) const;
271  QVector Derivative3PF(const double delta = 1.) const;
272 
274  QVector Derivative5P(const double delta = 1.) const;
275 
277  QVector Derivative5PB(const double delta = 1.) const;
278 
280  QVector DerivativeEulero(const double delta = 1.) const;
282  QVector Abs() const;
283 
288  const QVector& Sort(const bool asc=true);
293  const QVector& Integrate(const double constTerm = 0);
298  void Resize(const UInt_t newsize);
305  void Append(const double val);
311  double Norma() const;
315  double Sum(UInt_t nelem, UInt_t first = 0) const;
319  double Sum() const { return fSize*GetMean(); }
320 
326  double GetMean(const UInt_t nelem,const UInt_t first = 0) const {
327  return Sum(nelem,first)/nelem;
328  }
329  double GetMean() const {
330  return GetMean(fSize);
331  }
337  double GetRMS(const UInt_t nelem,const UInt_t first = 0) const;
341  double GetRMS() const {
342  return GetRMS(fSize);
343  }
347  double GetMedian() const;
351  double GetMedianAbsoluteDeviation() const;
355  double GetMax() const
356  { SetMathVector(); return gsl_vector_max(fMathVec); }
360  double GetMin() const
361  { SetMathVector(); return gsl_vector_min(fMathVec); }
365  int GetMaxIndex(const UInt_t nelem,const UInt_t first) const;
369  int GetMinIndex(const UInt_t nelem,const UInt_t first) const;
373  UInt_t GetMaxIndex() const
374  {SetMathVector(); return gsl_vector_max_index(fMathVec);}
378  UInt_t GetMinIndex() const {SetMathVector(); return gsl_vector_min_index(fMathVec);}
382  double* GetArray() const;
389  std::vector<double> GetArrayVector()const{return std::vector<double>(fData,fData + Size());}
390  const double* GetConstArray() const { return fData;}
402  void SetArray(const double *orig,const UInt_t size);
406  virtual void Clear() {Resize(0);}
410  std::string sqlString() const;
411 
413  virtual void Dump(std::ostream& o) const;
414 
416  void Draw(Option_t* option=""); // *MENU*
417 
419  TGraph* GetGraph(double samplingFrequency = 1., double scale = 1.) const;
420 
421  QVector GetSubVector(UInt_t size,UInt_t start=0,UInt_t stride=1);
422 
423  const QVector GetSubVector(UInt_t size,UInt_t start=0,UInt_t stride=1) const;
424 
425 protected:
427  QVector(const QVector& orig,const bool dataOwner);
428 
430  QVector(double* vec,const UInt_t size,const UInt_t stride);
431 
433  const bool fDataOwner;
434 
436  UInt_t fSize;
437 
438  UInt_t fAllocSize;
439 
441  UInt_t fStride;
442 
444  Double_t *fData; //[fSize]
445 
447  mutable gsl_vector* fMathVec;
448 
449 private:
450  void SetMathVector() const;
451  static double * ArrayAlloc(const UInt_t size);
452  static void ArrayCopy(const double* orig,const UInt_t origStride, double* dest,const UInt_t destStride,const UInt_t size);
453  static void ArrayFree(double* array);
454 
455  friend class QVectorView;
456  friend class QVectorConstView;
457  friend class QVectorC;
458  friend class QMatrix;
459  friend class QMatrixC;
460  friend class QMatrixCArray;
461  friend class QRealComplexFFTW3;
462  friend class QFFTWRealComplexPlan;
464 };
465 
466 
468 
469 // operations other than member functions
470 Diana::QVector operator+(double t, const Diana::QVector&v);
471 Diana::QVector operator-(double t, const Diana::QVector&v);
472 Diana::QVector operator*(double t, const Diana::QVector&v);
473 Diana::QVector operator/(double t, const Diana::QVector&v);
474 Diana::QVector abs(const Diana::QVector &v);
475 Diana::QVector sin(const Diana::QVector &v);
476 Diana::QVector cos(const Diana::QVector &v);
477 Diana::QVector tan(const Diana::QVector &v);
478 Diana::QVector exp(const Diana::QVector &v);
479 Diana::QVector log(const Diana::QVector &v);
480 Diana::QVector log10(const Diana::QVector &v);
481 Diana::QVector pow(const Diana::QVector &v,double p);
482 Diana::QVector pow(double p,const Diana::QVector &v);
483 Diana::QVector pow(const Diana::QVector &u,const Diana::QVector &v);
484 double max(const Diana::QVector &v);
485 double min(const Diana::QVector &v);
486 
487 
488 
489 #endif
QVector vec(3)
#define Q_END_NAMESPACE
Definition: QDiana.hh:22
#define Q_BEGIN_NAMESPACE
Definition: QDiana.hh:20
Diana::QVector operator/(double t, const Diana::QVector &v)
Definition: QVector.cc:804
Diana::QVector tan(const Diana::QVector &v)
Definition: QVector.cc:827
Diana::QVector operator-(double t, const Diana::QVector &v)
Definition: QVector.cc:793
Diana::QVector pow(const Diana::QVector &v, double p)
Definition: QVector.cc:852
Diana::QVector log(const Diana::QVector &v)
Definition: QVector.cc:839
Diana::QVector operator*(double t, const Diana::QVector &v)
Definition: QVector.cc:798
Diana::QVector sin(const Diana::QVector &v)
Definition: QVector.cc:815
Diana::QVector abs(const Diana::QVector &v)
Definition: QVector.cc:811
Q_END_NAMESPACE Diana::QVector operator+(double t, const Diana::QVector &v)
Definition: QVector.cc:787
Diana::QVector log10(const Diana::QVector &v)
Definition: QVector.cc:845
double min(const Diana::QVector &v)
Definition: QVector.cc:878
Diana::QVector cos(const Diana::QVector &v)
Definition: QVector.cc:821
Diana::QVector exp(const Diana::QVector &v)
Definition: QVector.cc:833
double max(const Diana::QVector &v)
Definition: QVector.cc:874
Interface to FFTW's FFT plans.
Definition: QFFTWPlan.hh:33
An array of complex matrices that have been laid out in memory.
Interface for complex matrices in Diana analysis.
Definition: QMatrixC.hh:27
Interface for matrices in Diana analysis.
Definition: QMatrix.hh:24
base class for objects handled by QEvent and QGlobalDataManager.
Definition: QObject.hh:76
Real to complex FFT using FFTW3.
Interface for complex vectors in Diana analysis.
Definition: QVectorC.hh:25
QVectorView for const QVector.
Definition: QVectorView.hh:52
Interface for raw daq vectors in Diana.
Definition: QVectorI.hh:19
subview of an existing QVector, useful to operate on a QVector slice
Definition: QVectorView.hh:18
Interface for vectors in Diana analysis.
Definition: QVector.hh:30
const QVector & Rebin(const int rebin, bool sum=false)
Rebin the vector.
Definition: QVector.cc:383
const QVector & operator*=(const double t)
multiplication by scalar
Definition: QVector.cc:272
QVector Derivative3PF(const double delta=1.) const
compute derivative with 3 point interpolation, forward mode
Definition: QVector.cc:493
QVector operator-() const
revert sign to all components
Definition: QVector.cc:244
QVector Div(const QVector &other) const
multiplication element by element
Definition: QVector.cc:258
static void ArrayCopy(const double *orig, const UInt_t origStride, double *dest, const UInt_t destStride, const UInt_t size)
Definition: QVector.cc:60
const QVector & Differentiate()
make vector derivative
Definition: QVector.cc:442
UInt_t Size() const
size of QVector
Definition: QVector.hh:54
virtual void Clear()
clear the vector
Definition: QVector.hh:406
QVector operator+(const QVector &other) const
sum vector
Definition: QVector.cc:360
const QVector & operator+=(const double v)
sum scalar to all elements
Definition: QVector.cc:280
virtual ~QVector()
destructor
Definition: QVector.cc:156
QVector DerivativeEulero(const double delta=1.) const
compute derivative with Eulero interpolation, backward mode
Definition: QVector.cc:540
UInt_t fSize
size of the array
Definition: QVector.hh:436
static void ArrayFree(double *array)
Definition: QVector.cc:72
QVector Mult(const QVector &other) const
multiplication element by element
Definition: QVector.cc:250
double GetRMS() const
Get RMS.
Definition: QVector.hh:341
QVector Derivative5P(const double delta=1.) const
compute derivative with 5 point interpolation, symmetric
Definition: QVector.cc:508
void Draw(Option_t *option="")
Draw root.
Definition: QVector.cc:744
double & operator[](const UInt_t i)
retrieve an element
Definition: QVector.cc:223
const double * GetConstArray() const
Definition: QVector.hh:390
QVector Derivative2P(const double delta=1.) const
compute derivative with 2 point interpolation, uses Differentiate()
Definition: QVector.cc:451
virtual void Dump(std::ostream &o) const
Dump object to stream.
Definition: QVector.cc:772
void SetMathVector() const
Definition: QVector.cc:207
double GetMax() const
get maximum element
Definition: QVector.hh:355
double GetMean(const UInt_t nelem, const UInt_t first=0) const
Get Mean.
Definition: QVector.hh:326
const bool fDataOwner
if this vector onws its data
Definition: QVector.hh:433
QVector Derivative3PB(const double delta=1.) const
compute derivative with 3 point interpolation, backward mode
Definition: QVector.cc:481
UInt_t fStride
data stride
Definition: QVector.hh:441
Double_t * fData
array
Definition: QVector.hh:444
QMatrix T() const
transpose
Definition: QVector.cc:561
TGraph * GetGraph(double samplingFrequency=1., double scale=1.) const
Get a root TGraph (owned by the caller)
Definition: QVector.cc:761
static double * ArrayAlloc(const UInt_t size)
Definition: QVector.cc:32
const QVector & Reverse()
time reversal of the vector
Definition: QVector.cc:374
QVector GetSubVector(UInt_t size, UInt_t start=0, UInt_t stride=1)
Definition: QVector.cc:701
double * GetArray() const
get an array of doubles, owned by the caller!
Definition: QVector.cc:696
double GetMedian() const
Get median.
Definition: QVector.cc:641
QVector Derivative2PF(const double delta=1.) const
compute derivative with forward 2 point interpolation
Definition: QVector.cc:459
const QVector & ShiftReal(const double fstep)
Cyclic shift of vector by a real number, first shift by the integer part of fstep then linear interpo...
Definition: QVector.cc:413
QVector Abs() const
Return a vector of the absolute values.
Definition: QVector.cc:427
const QVector & Shift(const int nstep)
Cyclic shift of vector.
Definition: QVector.cc:395
double GetMean() const
Definition: QVector.hh:329
void Append(const double val)
append
Definition: QVector.cc:597
QMatrix Reshape(UInt_t n, UInt_t m)
reshape the vector into a matrix
Definition: QVector.cc:568
double Norma() const
norma
Definition: QVector.cc:618
double operator*(const QVector &other) const
scalar product
Definition: QVector.cc:324
QObjectDef(QVector, 4)
void SetArray(const double *orig, const UInt_t size)
get a constant pointer to the content
Definition: QVector.cc:719
QVector()
default constructor
Definition: QVector.cc:84
QVector Derivative5PB(const double delta=1.) const
compute derivative with 5 point interpolation, backward mode
Definition: QVector.cc:524
double GetMedianAbsoluteDeviation() const
Get median absolute deviation.
Definition: QVector.cc:666
const QVector & operator=(const QVector &orig)
copy the content from another QVector
Definition: QVector.cc:188
const QVector & Integrate(const double constTerm=0)
Integrate vector.
Definition: QVector.cc:553
std::vector< double > GetArrayVector() const
get a pointer to the content
Definition: QVector.hh:389
const QVector & Sort(const bool asc=true)
sort this vector
Definition: QVector.cc:434
QVector Derivative3P(const double delta=1.) const
compute derivative with 3 point interpolation, symmetric
Definition: QVector.cc:469
double Sum() const
sum elements
Definition: QVector.hh:319
QVector operator/(double t) const
divide by scalar
Definition: QVector.cc:353
double & operator()(const UInt_t i)
Definition: QVector.hh:66
const QVector & operator/=(const double v)
divide by scalar
Definition: QVector.cc:267
void Resize(const UInt_t newsize)
resize a QVector
Definition: QVector.cc:170
double GetMin() const
get minimum element
Definition: QVector.hh:360
std::string sqlString() const
Definition: QVector.cc:726
UInt_t fAllocSize
Definition: QVector.hh:438
const QVector & operator-=(const double v)
subtract scalar to all elements
Definition: QVector.cc:287
void Initialize(const double val=0)
initialize elements (default to 0)
Definition: QVector.cc:218
gsl_vector * fMathVec
temporary gsl_vector to use the gsl library
Definition: QVector.hh:447
UInt_t GetMaxIndex() const
get maximum element index
Definition: QVector.hh:373
UInt_t GetMinIndex() const
get minimum element index
Definition: QVector.hh:378