]>
Commit | Line | Data |
---|---|---|
8a9ab0eb | 1 | #ifndef ALIMATRIXSQ_H |
2 | #define ALIMATRIXSQ_H | |
339fbe23 | 3 | |
7c3070ec | 4 | /**********************************************************************************************/ |
339fbe23 | 5 | /* */ |
6 | /* Abstract class for matrix used for */ | |
7 | /* millepede2 operation. */ | |
7c3070ec | 8 | /* Author: ruben.shahoyan@cern.ch */ |
9 | /* */ | |
10 | /**********************************************************************************************/ | |
8a9ab0eb | 11 | |
12 | #include <TMatrixDBase.h> | |
13 | #include <TVectorD.h> | |
14 | ||
15 | class AliMatrixSq : public TMatrixDBase { | |
16 | // | |
17 | public: | |
18 | AliMatrixSq(): fSymmetric(kFALSE) {} | |
19 | AliMatrixSq(const AliMatrixSq &src) : TMatrixDBase(src), fSymmetric(src.fSymmetric) {} | |
20 | virtual ~AliMatrixSq() {} | |
6d3c4556 | 21 | AliMatrixSq& operator=(const AliMatrixSq &src); |
8a9ab0eb | 22 | virtual Int_t GetSize() const {return fNcols;} |
23 | virtual Float_t GetDensity() const = 0; | |
24 | // | |
25 | virtual void Clear(Option_t* option="") = 0;//{Error("Clear","Dummy");} | |
26 | // | |
de34b538 | 27 | virtual Double_t Query(Int_t rown, Int_t coln) const {return operator()(rown,coln);} |
8a9ab0eb | 28 | virtual Double_t operator()(Int_t rown, Int_t coln) const = 0;//{Error("(i,j)","Dummy");return 0;} |
29 | virtual Double_t& operator()(Int_t rown, Int_t coln) = 0;//{Error("(i,j)","Dummy");return 0;} | |
30 | // | |
de34b538 | 31 | virtual Double_t QueryDiag(Int_t rc) const {return DiagElem(rc);} |
8a9ab0eb | 32 | virtual Double_t DiagElem(Int_t r) const = 0; |
33 | virtual Double_t& DiagElem(Int_t r) = 0; | |
de34b538 | 34 | virtual void AddToRow(Int_t r, Double_t *valc,Int_t *indc,Int_t n) = 0; |
8a9ab0eb | 35 | // |
36 | virtual void Print(Option_t* option="") const = 0;//{Error("Print","Dummy");} | |
37 | virtual void Reset() = 0; | |
38 | virtual void PrintCOO() const; // print in COO format | |
39 | // | |
551c9e69 | 40 | virtual void MultiplyByVec(const Double_t* vecIn, Double_t* vecOut) const; |
41 | virtual void MultiplyByVec(const TVectorD &vecIn, TVectorD &vecOut) const; | |
8a9ab0eb | 42 | // |
43 | Bool_t IsSymmetric() const {return fSymmetric;} | |
44 | void SetSymmetric(Bool_t v=kTRUE) {fSymmetric = v;} | |
45 | // | |
46 | // ---------------------------------- Dummy methods of MatrixBase | |
47 | virtual const Double_t *GetMatrixArray () const {Error("GetMatrixArray","Dummy"); return 0;}; | |
48 | virtual Double_t *GetMatrixArray () {Error("GetMatrixArray","Dummy"); return 0;}; | |
49 | virtual const Int_t *GetRowIndexArray() const {Error("GetRowIndexArray","Dummy"); return 0;}; | |
50 | virtual Int_t *GetRowIndexArray() {Error("GetRowIndexArray","Dummy"); return 0;}; | |
51 | virtual const Int_t *GetColIndexArray() const {Error("GetColIndexArray","Dummy"); return 0;}; | |
52 | virtual Int_t *GetColIndexArray() {Error("GetColIndexArray","Dummy"); return 0;}; | |
53 | virtual TMatrixDBase &SetRowIndexArray(Int_t *) {Error("SetRowIndexArray","Dummy"); return *this;} | |
54 | virtual TMatrixDBase &SetColIndexArray(Int_t *) {Error("SetColIndexArray","Dummy"); return *this;} | |
55 | virtual TMatrixDBase &GetSub(Int_t,Int_t,Int_t,Int_t,TMatrixDBase &,Option_t *) const {Error("GetSub","Dummy"); return *((TMatrixDBase*)this);} | |
56 | virtual TMatrixDBase &SetSub(Int_t,Int_t,const TMatrixDBase &) {Error("GetSub","Dummy"); return *this;} | |
57 | virtual TMatrixDBase &ResizeTo (Int_t,Int_t,Int_t) {Error("ResizeTo","Dummy"); return *this;} | |
58 | virtual TMatrixDBase &ResizeTo (Int_t,Int_t,Int_t,Int_t,Int_t) {Error("ResizeTo","Dummy"); return *this;} | |
59 | // | |
60 | virtual void Allocate (Int_t ,Int_t ,Int_t , Int_t ,Int_t ,Int_t ) | |
61 | {Error("Allocate","Dummy"); return;} | |
62 | // | |
7c185459 | 63 | static Bool_t IsZero(Double_t x,Double_t thresh=1e-64) {return x>0 ? (x<thresh) : (x>-thresh);} |
64 | // | |
8a9ab0eb | 65 | protected: |
66 | // | |
67 | void Swap(int &r,int &c) const {int t=r;r=c;c=t;} | |
68 | // | |
69 | protected: | |
70 | // | |
71 | Bool_t fSymmetric; // is the matrix symmetric? Only lower triangle is filled | |
72 | // | |
73 | ClassDef(AliMatrixSq,1) //Square Matrix Class | |
74 | }; | |
75 | ||
76 | ||
77 | //___________________________________________________________ | |
551c9e69 | 78 | inline void AliMatrixSq::MultiplyByVec(const TVectorD &vecIn, TVectorD &vecOut) const |
8a9ab0eb | 79 | { |
80 | MultiplyByVec(vecIn.GetMatrixArray(), vecOut.GetMatrixArray()); | |
81 | } | |
82 | ||
83 | ||
84 | #endif |