]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AliMatrixSq.h
Added AliMillePede2 + related matrix and solver classes
[u/mrichter/AliRoot.git] / STEER / AliMatrixSq.h
CommitLineData
8a9ab0eb 1#ifndef ALIMATRIXSQ_H
2#define ALIMATRIXSQ_H
3
4#include <TMatrixDBase.h>
5#include <TVectorD.h>
6
7class AliMatrixSq : public TMatrixDBase {
8 //
9 public:
10 AliMatrixSq(): fSymmetric(kFALSE) {}
11 AliMatrixSq(const AliMatrixSq &src) : TMatrixDBase(src), fSymmetric(src.fSymmetric) {}
12 virtual ~AliMatrixSq() {}
13 virtual Int_t GetSize() const {return fNcols;}
14 virtual Float_t GetDensity() const = 0;
15 //
16 virtual void Clear(Option_t* option="") = 0;//{Error("Clear","Dummy");}
17 //
18 virtual Double_t Querry(Int_t rown, Int_t coln) const {return operator()(rown,coln);}
19 virtual Double_t operator()(Int_t rown, Int_t coln) const = 0;//{Error("(i,j)","Dummy");return 0;}
20 virtual Double_t& operator()(Int_t rown, Int_t coln) = 0;//{Error("(i,j)","Dummy");return 0;}
21 //
22 virtual Double_t QuerryDiag(Int_t rc) const {return DiagElem(rc);}
23 virtual Double_t DiagElem(Int_t r) const = 0;
24 virtual Double_t& DiagElem(Int_t r) = 0;
25 //
26 virtual void Print(Option_t* option="") const = 0;//{Error("Print","Dummy");}
27 virtual void Reset() = 0;
28 virtual void PrintCOO() const; // print in COO format
29 //
30 virtual void MultiplyByVec(Double_t* vecIn, Double_t* vecOut) const;
31 virtual void MultiplyByVec(TVectorD &vecIn, TVectorD &vecOut) const;
32 //
33 Bool_t IsSymmetric() const {return fSymmetric;}
34 void SetSymmetric(Bool_t v=kTRUE) {fSymmetric = v;}
35 //
36 // ---------------------------------- Dummy methods of MatrixBase
37 virtual const Double_t *GetMatrixArray () const {Error("GetMatrixArray","Dummy"); return 0;};
38 virtual Double_t *GetMatrixArray () {Error("GetMatrixArray","Dummy"); return 0;};
39 virtual const Int_t *GetRowIndexArray() const {Error("GetRowIndexArray","Dummy"); return 0;};
40 virtual Int_t *GetRowIndexArray() {Error("GetRowIndexArray","Dummy"); return 0;};
41 virtual const Int_t *GetColIndexArray() const {Error("GetColIndexArray","Dummy"); return 0;};
42 virtual Int_t *GetColIndexArray() {Error("GetColIndexArray","Dummy"); return 0;};
43 virtual TMatrixDBase &SetRowIndexArray(Int_t *) {Error("SetRowIndexArray","Dummy"); return *this;}
44 virtual TMatrixDBase &SetColIndexArray(Int_t *) {Error("SetColIndexArray","Dummy"); return *this;}
45 virtual TMatrixDBase &GetSub(Int_t,Int_t,Int_t,Int_t,TMatrixDBase &,Option_t *) const {Error("GetSub","Dummy"); return *((TMatrixDBase*)this);}
46 virtual TMatrixDBase &SetSub(Int_t,Int_t,const TMatrixDBase &) {Error("GetSub","Dummy"); return *this;}
47 virtual TMatrixDBase &ResizeTo (Int_t,Int_t,Int_t) {Error("ResizeTo","Dummy"); return *this;}
48 virtual TMatrixDBase &ResizeTo (Int_t,Int_t,Int_t,Int_t,Int_t) {Error("ResizeTo","Dummy"); return *this;}
49 //
50 virtual void Allocate (Int_t ,Int_t ,Int_t , Int_t ,Int_t ,Int_t )
51 {Error("Allocate","Dummy"); return;}
52 //
53 protected:
54 //
55 void Swap(int &r,int &c) const {int t=r;r=c;c=t;}
56 //
57 protected:
58 //
59 Bool_t fSymmetric; // is the matrix symmetric? Only lower triangle is filled
60 //
61 ClassDef(AliMatrixSq,1) //Square Matrix Class
62};
63
64
65//___________________________________________________________
66inline void AliMatrixSq::MultiplyByVec(TVectorD &vecIn, TVectorD &vecOut) const
67{
68 MultiplyByVec(vecIn.GetMatrixArray(), vecOut.GetMatrixArray());
69}
70
71
72#endif