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