StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
TRDiagMatrix.h
1 #ifndef ROOT_TRDiagMatrix
2 #define ROOT_TRDiagMatrix
3 #include "TRArray.h"
4 class TRMatrix;
5 class TRVector;
6 class TRDiagMatrix : public TRArray {
7  public:
8  TRDiagMatrix(Int_t nrows=0) : TRArray(nrows), fNrows(nrows) {}
9  TRDiagMatrix(Int_t nrows,const Double_t *Array) : TRArray(nrows,Array), fNrows(nrows) {}
10  TRDiagMatrix(Int_t nrows,const Float_t *Array) : TRArray(nrows,Array), fNrows(nrows) {}
11  TRDiagMatrix(Int_t nrows,const Char_t *s) : TRArray(nrows,s), fNrows(nrows) {}
12  TRDiagMatrix(const TRDiagMatrix& W,ETRMatrixCreatorsOp kop);
13 #ifndef __CINT__
14  TRDiagMatrix (Int_t nrows, Double_t a0, ...);
15 #endif
16  virtual ~TRDiagMatrix() {}
17  void Inverse() { TCL::trsinv(fArray,fArray, fNrows);}
18  Int_t GetNrows() const {return fNrows;}
19  Int_t GetNcols() const {return GetNrows();}
20  virtual ETRMatrixType GetMatrixType() const {return kDiagonalMatrix;}
21  virtual Double_t Product(const TRVector& A,ETRMatrixCreatorsOp kop);
22  virtual void Print(Option_t *opt="") const;
23  Double_t &operator()(Int_t i) {return TRArray::operator[](i);}
24  Double_t operator()(Int_t i) const {return TRArray::operator[](i);}
25  Double_t &operator()(Int_t i,Int_t j);
26  Double_t operator()(Int_t i,Int_t j) const {return operator()(i,j);}
27  void AddRow(const Double_t *row) {
28  fNrows++; Set(fNrows*(fNrows+1)/2); memcpy(fArray+(fNrows-1)*fNrows/2, row, fNrows*sizeof(Double_t));
29  }
30  void AddRow(const Double_t row) {//Diagonal element only
31  fNrows++; Set(fNrows*(fNrows+1)/2); fArray[(fNrows+1)*fNrows/2-1] = row;
32  }
33  protected:
34  Int_t fNrows; // number of rows
35  public:
36  ClassDef(TRDiagMatrix,1) // TRDiagMatrix class (double precision)
37 };
38 ostream& operator<<(ostream& s,const TRDiagMatrix &target);
39 inline Double_t &TRDiagMatrix::operator()(Int_t i,Int_t j){
40  if (j < 0 || j >= fNrows) {
41  ::Error("TRDiagMatrix::operator()", "index j %d out of bounds (size: %d, this: %p)",
42  j, fNrows, this);
43  j = 0;
44  }
45  if (i < 0 || i >= fNrows) {
46  ::Error("TRDiagMatrix::operator()", "index i %d out of bounds (size: %d, this: %p)",
47  i, fNrows, this);
48  i = 0;
49  }
50  Int_t m = i;
51  Int_t l = j;
52  if (i > j) {m = j; l = i;}
53  return TArrayD::operator[](m + (l+1)*l/2);
54 }
55 #endif
56 
Definition: FJcore.h:367
static float * trsinv(const float *g, float *gi, int n)
Definition: TCernLib.cxx:1160