]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliMatrixSq.h
Base class (AliMisaligner); each detector will provide its derived class,
[u/mrichter/AliRoot.git] / STEER / AliMatrixSq.h
1 #ifndef ALIMATRIXSQ_H
2 #define ALIMATRIXSQ_H
3
4 #include <TMatrixDBase.h>
5 #include <TVectorD.h>
6
7 class 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 //___________________________________________________________
66 inline void AliMatrixSq::MultiplyByVec(TVectorD &vecIn, TVectorD &vecOut) const
67 {
68   MultiplyByVec(vecIn.GetMatrixArray(), vecOut.GetMatrixArray());
69 }
70
71
72 #endif