Diana Software
QMatrix.hh
Go to the documentation of this file.
1 
11 #ifndef __QMATRIX_HH_
12 #define __QMATRIX_HH_
13 
14 
15 #include <gsl/gsl_matrix.h>
16 #include <map>
17 #include <iostream>
18 #include <QObject.hh>
19 
21 
22 class QVector;
23 
24 class QMatrix : public QObject {
25 public:
29  QMatrix() ;
35  QMatrix(UInt_t nrow,UInt_t ncol);
40  QMatrix(const QVector& vec);
45  QMatrix(const QMatrix& orig);
49  virtual ~QMatrix();
56  void Resize(UInt_t nrow,UInt_t ncol);
57 
58  void Clear();
63  UInt_t GetNRow() const {return fNCol ? fSize/fNCol : 0;};
68  UInt_t GetNCol() const {return fNCol;};
73  void Initialize(double val=0);
77  void SetToIdentity();
83  void SetCol(UInt_t ncol,const QVector& vec);
89  void SetRow(UInt_t nrow,const QVector& vec);
95  void Set(const std::map<int,int>& p);
104  QVector GetCol(UInt_t ncol);
113  QVector GetCol(UInt_t ncol) const;
122  QVector GetRow(UInt_t nrow);
131  QVector GetRow(UInt_t nrow) const;
145  QVector GetDiaganol() const;
146 
155  QVector GetRowByColumnIntValue(UInt_t col,int val) const;
162  double &operator()(UInt_t i,UInt_t j) { return GetElement(i,j); }
171  const double &operator()(UInt_t i,UInt_t j) const { return GetElement(i,j); }
180  const QMatrix& operator=(const QMatrix& orig);
184  QMatrix operator-();
193  const QMatrix & operator*=(double t);
205  const QMatrix & operator*=(const QMatrix& other);
214  const QMatrix & operator/=(double t);
223  const QMatrix & operator+=(const QMatrix& mat);
232  const QMatrix & operator-=(const QMatrix& mat);
244  const QMatrix& Mult(const QMatrix&mat);
256  const QMatrix& Div(const QMatrix& mat);
263  QMatrix operator*(const QMatrix& mat) const;
269  QMatrix operator*(double t) const;
275  QMatrix operator/(double t) const;
281  QMatrix operator+(const QMatrix& mat) const;
287  QMatrix operator-(const QMatrix& mat) const;
293  QVector operator*(const QVector& vec) const;
299  QMatrix T() const; //
311  const QMatrix &Transpose(); //
317  QMatrix Inv() const; //
329  const QMatrix &Invert();
338  double Det() const;
339 
367  const QMatrix &CholeskyDecompose();
368 
378  void CholeskySolveX(const QVector &Y,QVector &X) const;
379 
386  QMatrix GetSubMatrix(UInt_t nI,UInt_t nJ,UInt_t startI=0,UInt_t startJ=0);
387 
394  const QMatrix GetSubMatrix(UInt_t nI,UInt_t nJ,UInt_t startI=0,
395  UInt_t startJ=0) const;
396 
406 
407 
408  void SetElement(UInt_t i,UInt_t j,Double_t val) { GetElement(i,j) = val; }
409 
410 
411 protected:
416  QMatrix (const gsl_matrix* mat);
417  QMatrix(const double* orig);
418 
419  QMatrix(double *data,const UInt_t nrow,const UInt_t ncol,
420  const UInt_t tda=0);
421 
422 
423  void SetMat() const;
424 
425  double &GetElement(UInt_t i,UInt_t j);
426 
427  const double &GetElement(UInt_t i,UInt_t j) const;
428 
446  static void MatrixCopy(const double *orig,const UInt_t Nrow,
447  const UInt_t Ncol,double *dest,
448  UInt_t origTda=0,UInt_t destTda=0);
449 
450 
451  UInt_t MemRowElements() const { return (fTda>fNCol ? fTda : fNCol); }
452 
453 
454 private:
456  Bool_t fDataOwner;
457 
458  UInt_t fSize;
459  UInt_t fNCol;
460  UInt_t fTda;
461 
462  UInt_t fAllocSize;
463  Double_t *fData;//[fSize]
464  mutable gsl_matrix* fMat;
465 
466  friend class QVector;
467  friend class QMatrixC;
468 
470 };
471 
472 // operations other than member functions
480 // formatted printout
481 
483 Diana::QMatrix operator*(double t, const Diana::QMatrix&mat);
484 std::ostream& operator<<(std::ostream&s,const Diana::QMatrix& m);
485 #endif
QVector vec(3)
#define Q_END_NAMESPACE
Definition: QDiana.hh:22
#define Q_BEGIN_NAMESPACE
Definition: QDiana.hh:20
Q_END_NAMESPACE Diana::QMatrix operator*(double t, const Diana::QMatrix &mat)
scalar times QMatrix
Definition: QMatrix.cc:550
std::ostream & operator<<(std::ostream &s, const Diana::QMatrix &m)
Interface for complex matrices in Diana analysis.
Definition: QMatrixC.hh:27
Interface for matrices in Diana analysis.
Definition: QMatrix.hh:24
QMatrix GetSubMatrix(UInt_t nI, UInt_t nJ, UInt_t startI=0, UInt_t startJ=0)
Get a sub matrix of the matrix.
Definition: QMatrix.cc:495
QVector GetDiaganol()
Get the diaganol.
Definition: QMatrix.cc:246
gsl_matrix * fMat
Definition: QMatrix.hh:464
void Initialize(double val=0)
initialize all elements (default to 0)
Definition: QMatrix.cc:163
double & GetElement(UInt_t i, UInt_t j)
Definition: QMatrix.cc:268
UInt_t fNCol
Definition: QMatrix.hh:459
const QMatrix & operator+=(const QMatrix &mat)
add a QMatrix
Definition: QMatrix.cc:335
void Set(const std::map< int, int > &p)
get a QMatrix from a map
Definition: QMatrix.cc:205
void SetElement(UInt_t i, UInt_t j, Double_t val)
Definition: QMatrix.hh:408
const QMatrix & operator=(const QMatrix &orig)
copy the content of another matrix
Definition: QMatrix.cc:293
double Det() const
Determinant.
Definition: QMatrix.cc:454
double & operator()(UInt_t i, UInt_t j)
retrieve an element
Definition: QMatrix.hh:162
void Resize(UInt_t nrow, UInt_t ncol)
resize a QMatrix
Definition: QMatrix.cc:143
Double_t * fData
Definition: QMatrix.hh:463
UInt_t fTda
Definition: QMatrix.hh:460
QVector GetCol(UInt_t ncol)
get column
Definition: QMatrix.cc:221
UInt_t fAllocSize
Definition: QMatrix.hh:462
const QMatrix & operator-=(const QMatrix &mat)
subtract a QMatrix
Definition: QMatrix.cc:343
const QMatrix & Mult(const QMatrix &mat)
Multiply element by element.
Definition: QMatrix.cc:351
void CholeskySolveX(const QVector &Y, QVector &X) const
Solve for X using Cholesky decomposition.
Definition: QMatrix.cc:482
UInt_t MemRowElements() const
Definition: QMatrix.hh:451
void Clear()
reset members to default values
Definition: QMatrix.cc:139
QVector GetRowByColumnIntValue(UInt_t col, int val) const
get row matching the integer value val in column col if more than one value is found in column the fi...
Definition: QMatrix.cc:258
const QMatrix & Div(const QMatrix &mat)
Divide element by element.
Definition: QMatrix.cc:359
void SetCol(UInt_t ncol, const QVector &vec)
set column to specific vector
Definition: QMatrix.cc:179
static void MatrixCopy(const double *orig, const UInt_t Nrow, const UInt_t Ncol, double *dest, UInt_t origTda=0, UInt_t destTda=0)
Static method to copy a matrix from one data location to another.
Definition: QMatrix.cc:28
QObjectDef(QMatrix, 3)
void SetMat() const
Definition: QMatrix.cc:531
QMatrix operator-()
revert sign to all components
Definition: QMatrix.cc:304
UInt_t fSize
Definition: QMatrix.hh:458
void SetRow(UInt_t nrow, const QVector &vec)
set row to specific vectors
Definition: QMatrix.cc:192
QMatrix(const double *orig)
QMatrix operator/(double t) const
Division by scalar.
Definition: QMatrix.cc:381
QMatrix GetSummedAreaMatrix() const
Create a summed area matrix.
Definition: QMatrix.cc:519
QMatrix T() const
transpose returns a different matrix transposed wrt the original
Definition: QMatrix.cc:410
QMatrix operator+(const QMatrix &mat) const
sum matrix
Definition: QMatrix.cc:388
Bool_t fDataOwner
This owns the memory.
Definition: QMatrix.hh:456
QMatrix()
default constructor
Definition: QMatrix.cc:51
UInt_t GetNRow() const
get number rows
Definition: QMatrix.hh:63
QVector GetRow(UInt_t nrow)
get row
Definition: QMatrix.cc:234
const QMatrix & CholeskyDecompose()
Cholesky Decomposition.
Definition: QMatrix.cc:470
const double & operator()(UInt_t i, UInt_t j) const
retrieve an element
Definition: QMatrix.hh:171
const QMatrix & Transpose()
transpose
Definition: QMatrix.cc:417
const QMatrix & operator*=(double t)
multiplication by scalar
Definition: QMatrix.cc:309
const QMatrix & Invert()
inverse inverts the matrix itself
Definition: QMatrix.cc:436
const QMatrix & operator/=(double t)
division by scalar
Definition: QMatrix.cc:330
void SetToIdentity()
initialize to identity
Definition: QMatrix.cc:173
QMatrix operator*(const QMatrix &mat) const
Matrix product.
Definition: QMatrix.cc:367
QMatrix GetCholeskyDecomposition() const
Cholesky Decomposition.
Definition: QMatrix.cc:477
QMatrix Inv() const
inverse returns a different matrix inverted wrt the original
Definition: QMatrix.cc:429
virtual ~QMatrix()
destructor
Definition: QMatrix.cc:129
UInt_t GetNCol() const
get number of columns
Definition: QMatrix.hh:68
base class for objects handled by QEvent and QGlobalDataManager.
Definition: QObject.hh:76
Interface for vectors in Diana analysis.
Definition: QVector.hh:30