FEDRA emulsion software from the OPERA Collaboration
VtSymMatrix.hh
Go to the documentation of this file.
1 #ifndef __VTSYMMATRIX
2 #define __VTSYMMATRIX
3 // *****************************************************************************
4 //
5 // source:
6 //
7 // type: source code
8 //
9 // created: 21. Aug 2000
10 //
11 // author: Thorsten Glebe
12 // HERA-B Collaboration
13 // Max-Planck-Institut fuer Kernphysik
14 // Saupfercheckweg 1
15 // 69117 Heidelberg
16 // Germany
17 // E-mail: T.Glebe@mpi-hd.mpg.de
18 //
19 // Description: class for symmetric matrices
20 //
21 // changes:
22 // 21 Aug 2000 (TG) creation
23 // 04 Sep 2000 (TG) modified return type of dsinv()
24 // 10 Okt 2000 (TG) copy() member function added.
25 // 17 Okt 2000 (TG) copy constructor added, comments added
26 // 24 Okt 2000 (TG) added operator+=, operator-= (on matrices)
27 // 27 Okt 2000 (TG) modified operator<< for CINT
28 // 05 Feb 2001 (TG) renamed Assert() to VtAssert()
29 //
30 // *****************************************************************************
31 
32 #include "VtSqMatrix.hh"
33 
34 #ifdef WIN32
35 # include "Rtypes.h"
36 #endif
37 
38 void Dsinv1(int *idim, double *a, int *n, int *ifail);
39 void Dsfact1(int *idim, double *a, int *n, int *ifail, double *det, int *jfail);
40 
41 namespace MATRIX {
42  class VtVector;
43 
46  //============================================================================
47  // Class VtSymMatrix: base class for covariance matrices (symm, pos. def.)
48  //============================================================================
49  class VtSymMatrix : public VtSqMatrix {
50  public:
53  VtSymMatrix(const unsigned int dim) : VtSqMatrix(dim) {}
55  VtSymMatrix(const unsigned int dim, double diag);
57  VtSymMatrix(const VtSymMatrix& rhs);
59  VtSymMatrix(const VtSqMatrix& rhs) : VtSqMatrix(rhs) {
60  // Assert();
61  }
63  VtSymMatrix(const VtMatrix& rhs) : VtSqMatrix(rhs) {
64  // Assert();
65  }
66  virtual ~VtSymMatrix();
67 
70  bool invert(const bool use_momentum);
72  bool VtDsinv(int dim = 0);
74  const VtSymMatrix dsinv(int dim = 0) const;
76  virtual double det() const;
78  double product(const VtVector& rhs, unsigned int dim = 0) const;
80  const VtSymMatrix product(const VtMatrix& rhs) const;
82  virtual void place_at(const VtMatrix& rhs,
83  const unsigned int row,
84  const unsigned int col);
86  void copy(const VtSymMatrix& rhs);
87 
89  const VtSymMatrix& operator=(const VtSymMatrix& rhs);
90 
92  const VtSymMatrix& operator+=(const double rhs);
94  const VtSymMatrix& operator-=(const double rhs);
96  const VtSymMatrix& operator*=(const double rhs);
98  const VtSymMatrix& operator/=(const double rhs);
100  const VtSymMatrix& operator+=(const VtSymMatrix& rhs);
102  const VtSymMatrix& operator-=(const VtSymMatrix& rhs);
103 
105  const VtSymMatrix operator+(const VtSymMatrix& rhs) const;
107  const VtSqMatrix operator+(const VtSqMatrix& rhs) const;
109  const VtMatrix operator+(const VtMatrix& rhs) const;
111  const VtSymMatrix operator-(const VtSymMatrix& rhs) const;
113  const VtSymMatrix operator-(void) const;
115  const VtSqMatrix operator-(const VtSqMatrix& rhs) const;
117  const VtMatrix operator-(const VtMatrix& rhs) const;
119  const VtSqMatrix operator*(const VtSymMatrix& rhs) const;
121  const VtSqMatrix operator*(const VtSqMatrix& rhs) const;
123  const VtMatrix operator*(const VtMatrix& rhs) const;
125  const VtVector operator*(const VtVector& rhs) const;
126 
129  virtual void print(std::ostream& os) const;
130 
131  private:
132  void VtAssert(void);
133 
134 #ifdef WIN32
135  ClassDef(VtSymMatrix,0)
136 #endif
137  };
138 
139  //============================================================================
140  // operator<<
141  //============================================================================
142  inline std::ostream& operator<< ( std::ostream& os, const VtSymMatrix& t ) {
143  t.print(os);
144  return os;
145  }
146 
147 } // end of namespace MATRIX
148 #endif
void Dsinv1(int *idim, double *a, int *n, int *ifail)
Definition: VtSymMatrix.C:92
void Dsfact1(int *idim, double *a, int *n, int *ifail, double *det, int *jfail)
Definition: VtSymMatrix.C:43
void a()
Definition: check_aligned.C:59
TTree * t
Definition: check_shower.C:4
Definition: VtMatrix.hh:49
Definition: VtSqMatrix.hh:50
Definition: VtSymMatrix.hh:49
void copy(const VtSymMatrix &rhs)
in case matrix dimensions differ
Definition: VtSymMatrix.C:649
const VtSymMatrix operator-(void) const
Definition: VtSymMatrix.C:451
const VtSymMatrix & operator+=(const double rhs)
$\textbf{A} = (a_{\mu\nu} + \alpha)$
Definition: VtSymMatrix.C:472
const VtSymMatrix dsinv(int dim=0) const
return inverse
Definition: VtSymMatrix.C:275
const VtSymMatrix & operator*=(const double rhs)
$\textbf{A} = (a_{\mu\nu} \cdot\alpha)$
Definition: VtSymMatrix.C:571
virtual void place_at(const VtMatrix &rhs, const unsigned int row, const unsigned int col)
copy a smaller matrix at a certain place
Definition: VtSymMatrix.C:412
virtual double det() const
compute determinant via CERNLIB dsfact()
Definition: VtSymMatrix.C:329
const VtSymMatrix & operator/=(const double rhs)
$\textbf{A} = (a_{\mu\nu} / \alpha)$
Definition: VtSymMatrix.C:585
const VtSymMatrix & operator-=(const double rhs)
$\textbf{A} = (a_{\mu\nu} - \alpha)$
Definition: VtSymMatrix.C:522
VtSymMatrix(const unsigned int dim)
Definition: VtSymMatrix.hh:53
bool invert(const bool use_momentum)
calc inverse using momentum or not
Definition: VtSymMatrix.C:265
double product(const VtVector &rhs, unsigned int dim=0) const
compute $v^t*A*v$
Definition: VtSymMatrix.C:351
const VtSymMatrix operator+(const VtSymMatrix &rhs) const
Definition: VtSymMatrix.C:505
virtual void print(std::ostream &os) const
Definition: VtSymMatrix.C:666
VtSymMatrix(const VtSqMatrix &rhs)
Definition: VtSymMatrix.hh:59
VtSymMatrix(const VtMatrix &rhs)
Definition: VtSymMatrix.hh:63
void VtAssert(void)
Definition: VtSymMatrix.C:242
const VtSymMatrix & operator=(const VtSymMatrix &rhs)
copy
Definition: VtSymMatrix.C:215
virtual ~VtSymMatrix()
Definition: VtSymMatrix.C:210
bool VtDsinv(int dim=0)
transform to inverse
Definition: VtSymMatrix.C:292
const VtSqMatrix operator*(const VtSymMatrix &rhs) const
Definition: VtSymMatrix.C:616
Definition: VtVector.hh:45
Definition: CMatrix.C:43
std::ostream & operator<<(std::ostream &os, const VtMatrix &t)
Definition: VtMatrix.hh:189