]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliMatrixSq.h
Previous commit had the bad side-effect of changing the behaviour of Raw QA to comput...
[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      Query(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      QueryDiag(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   virtual       void          AddToRow(Int_t r, Double_t *valc,Int_t *indc,Int_t n) = 0;
26   //
27   virtual void  Print(Option_t* option="")           const       = 0;//{Error("Print","Dummy");}
28   virtual void  Reset()                                          = 0;
29   virtual void  PrintCOO()                           const;          // print in COO format
30   //
31   virtual void  MultiplyByVec(Double_t* vecIn, Double_t* vecOut) const;
32   virtual void  MultiplyByVec(TVectorD &vecIn, TVectorD &vecOut) const;
33   //
34   Bool_t        IsSymmetric()                       const {return fSymmetric;}
35   void          SetSymmetric(Bool_t v=kTRUE)              {fSymmetric = v;}
36   //
37   // ---------------------------------- Dummy methods of MatrixBase
38   virtual       const Double_t   *GetMatrixArray  () const {Error("GetMatrixArray","Dummy"); return 0;};
39   virtual             Double_t   *GetMatrixArray  ()       {Error("GetMatrixArray","Dummy"); return 0;};
40   virtual       const Int_t      *GetRowIndexArray() const {Error("GetRowIndexArray","Dummy"); return 0;};
41   virtual             Int_t      *GetRowIndexArray()       {Error("GetRowIndexArray","Dummy"); return 0;};
42   virtual       const Int_t      *GetColIndexArray() const {Error("GetColIndexArray","Dummy"); return 0;};
43   virtual             Int_t      *GetColIndexArray()       {Error("GetColIndexArray","Dummy"); return 0;};
44   virtual             TMatrixDBase &SetRowIndexArray(Int_t *) {Error("SetRowIndexArray","Dummy"); return *this;}
45   virtual             TMatrixDBase &SetColIndexArray(Int_t *) {Error("SetColIndexArray","Dummy"); return *this;}
46   virtual             TMatrixDBase &GetSub(Int_t,Int_t,Int_t,Int_t,TMatrixDBase &,Option_t *) const {Error("GetSub","Dummy"); return *((TMatrixDBase*)this);}
47   virtual             TMatrixDBase &SetSub(Int_t,Int_t,const TMatrixDBase &) {Error("GetSub","Dummy"); return *this;}
48   virtual             TMatrixDBase &ResizeTo (Int_t,Int_t,Int_t) {Error("ResizeTo","Dummy"); return *this;}
49   virtual             TMatrixDBase &ResizeTo (Int_t,Int_t,Int_t,Int_t,Int_t) {Error("ResizeTo","Dummy"); return *this;}
50   //
51   virtual void Allocate      (Int_t ,Int_t ,Int_t , Int_t ,Int_t ,Int_t ) 
52   {Error("Allocate","Dummy"); return;}
53   //
54  protected:
55   //
56   void    Swap(int &r,int &c) const {int t=r;r=c;c=t;}
57   //
58  protected:
59   //
60   Bool_t        fSymmetric;     // is the matrix symmetric? Only lower triangle is filled
61   //
62   ClassDef(AliMatrixSq,1) //Square Matrix Class
63 };
64
65
66 //___________________________________________________________
67 inline void AliMatrixSq::MultiplyByVec(TVectorD &vecIn, TVectorD &vecOut) const
68 {
69   MultiplyByVec(vecIn.GetMatrixArray(), vecOut.GetMatrixArray());
70 }
71
72
73 #endif