]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/STEER/AliMatrixSq.h
Modifications needed to use PID framework based mass during tracking and
[u/mrichter/AliRoot.git] / STEER / STEER / AliMatrixSq.h
1 #ifndef ALIMATRIXSQ_H
2 #define ALIMATRIXSQ_H
3
4 /**********************************************************************************************/
5 /*                                                                                            */ 
6 /* Abstract class for matrix used for                                                         */
7 /* millepede2 operation.                                                                      */
8 /* Author: ruben.shahoyan@cern.ch                                                             */
9 /*                                                                                            */ 
10 /**********************************************************************************************/
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() {}
21   AliMatrixSq& operator=(const AliMatrixSq &src);
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   //
27   virtual       Double_t      Query(Int_t rown, Int_t coln)     const {return operator()(rown,coln);}
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   //
31   virtual       Double_t      QueryDiag(Int_t rc)               const {return DiagElem(rc);}
32   virtual       Double_t      DiagElem(Int_t r)                  const = 0;
33   virtual       Double_t&     DiagElem(Int_t r)                  = 0;
34   virtual       void          AddToRow(Int_t r, Double_t *valc,Int_t *indc,Int_t n) = 0;
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   //
40   virtual void  MultiplyByVec(const Double_t* vecIn, Double_t* vecOut) const;
41   virtual void  MultiplyByVec(const TVectorD &vecIn, TVectorD &vecOut) const;
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   //
63   static Bool_t       IsZero(Double_t x,Double_t thresh=1e-64) {return x>0 ? (x<thresh) : (x>-thresh);}
64   //
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 //___________________________________________________________
78 inline void AliMatrixSq::MultiplyByVec(const TVectorD &vecIn, TVectorD &vecOut) const
79 {
80   MultiplyByVec(vecIn.GetMatrixArray(), vecOut.GetMatrixArray());
81 }
82
83
84 #endif