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
38void Dsinv1(int *idim, double *a, int *n, int *ifail);
39void Dsfact1(int *idim, double *a, int *n, int *ifail, double *det, int *jfail);
40
41namespace 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
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
TTree * t
Definition: check_shower.C:4
Definition: CMatrix.C:43
std::ostream & operator<<(std::ostream &os, const VtMatrix &t)
Definition: VtMatrix.hh:189