]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/STEER/AliMatrixSq.h
Get QA object only upon successful opening of the QA.root
[u/mrichter/AliRoot.git] / STEER / STEER / AliMatrixSq.h
CommitLineData
8a9ab0eb 1#ifndef ALIMATRIXSQ_H
2#define ALIMATRIXSQ_H
339fbe23 3
7c3070ec 4/**********************************************************************************************/
339fbe23 5/* */
6/* Abstract class for matrix used for */
7/* millepede2 operation. */
7c3070ec 8/* Author: ruben.shahoyan@cern.ch */
9/* */
10/**********************************************************************************************/
8a9ab0eb 11
12#include <TMatrixDBase.h>
13#include <TVectorD.h>
14
15class AliMatrixSq : public TMatrixDBase {
16 //
17 public:
18 AliMatrixSq(): fSymmetric(kFALSE) {}
19 AliMatrixSq(const AliMatrixSq &src) : TMatrixDBase(src), fSymmetric(src.fSymmetric) {}
20 virtual ~AliMatrixSq() {}
6d3c4556 21 AliMatrixSq& operator=(const AliMatrixSq &src);
8a9ab0eb 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 //
de34b538 27 virtual Double_t Query(Int_t rown, Int_t coln) const {return operator()(rown,coln);}
8a9ab0eb 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 //
de34b538 31 virtual Double_t QueryDiag(Int_t rc) const {return DiagElem(rc);}
8a9ab0eb 32 virtual Double_t DiagElem(Int_t r) const = 0;
33 virtual Double_t& DiagElem(Int_t r) = 0;
de34b538 34 virtual void AddToRow(Int_t r, Double_t *valc,Int_t *indc,Int_t n) = 0;
8a9ab0eb 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 //
551c9e69 40 virtual void MultiplyByVec(const Double_t* vecIn, Double_t* vecOut) const;
41 virtual void MultiplyByVec(const TVectorD &vecIn, TVectorD &vecOut) const;
8a9ab0eb 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 //
7c185459 63 static Bool_t IsZero(Double_t x,Double_t thresh=1e-64) {return x>0 ? (x<thresh) : (x>-thresh);}
64 //
8a9ab0eb 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//___________________________________________________________
551c9e69 78inline void AliMatrixSq::MultiplyByVec(const TVectorD &vecIn, TVectorD &vecOut) const
8a9ab0eb 79{
80 MultiplyByVec(vecIn.GetMatrixArray(), vecOut.GetMatrixArray());
81}
82
83
84#endif