#ifndef ALIMATRIXSQ_H
#define ALIMATRIXSQ_H
+/**********************************************************************************************/
+/* Abstract class for matrix used for millepede2 operation. */
+/* Author: ruben.shahoyan@cern.ch */
+/* */
+/**********************************************************************************************/
#include <TMatrixDBase.h>
#include <TVectorD.h>
//
virtual void Clear(Option_t* option="") = 0;//{Error("Clear","Dummy");}
//
- virtual Double_t Querry(Int_t rown, Int_t coln) const {return operator()(rown,coln);}
+ virtual Double_t Query(Int_t rown, Int_t coln) const {return operator()(rown,coln);}
virtual Double_t operator()(Int_t rown, Int_t coln) const = 0;//{Error("(i,j)","Dummy");return 0;}
virtual Double_t& operator()(Int_t rown, Int_t coln) = 0;//{Error("(i,j)","Dummy");return 0;}
//
- virtual Double_t QuerryDiag(Int_t rc) const {return DiagElem(rc);}
+ virtual Double_t QueryDiag(Int_t rc) const {return DiagElem(rc);}
virtual Double_t DiagElem(Int_t r) const = 0;
virtual Double_t& DiagElem(Int_t r) = 0;
+ virtual void AddToRow(Int_t r, Double_t *valc,Int_t *indc,Int_t n) = 0;
//
virtual void Print(Option_t* option="") const = 0;//{Error("Print","Dummy");}
virtual void Reset() = 0;
virtual void PrintCOO() const; // print in COO format
//
- virtual void MultiplyByVec(Double_t* vecIn, Double_t* vecOut) const;
- virtual void MultiplyByVec(TVectorD &vecIn, TVectorD &vecOut) const;
+ virtual void MultiplyByVec(const Double_t* vecIn, Double_t* vecOut) const;
+ virtual void MultiplyByVec(const TVectorD &vecIn, TVectorD &vecOut) const;
//
Bool_t IsSymmetric() const {return fSymmetric;}
void SetSymmetric(Bool_t v=kTRUE) {fSymmetric = v;}
virtual void Allocate (Int_t ,Int_t ,Int_t , Int_t ,Int_t ,Int_t )
{Error("Allocate","Dummy"); return;}
//
+ static Bool_t IsZero(Double_t x,Double_t thresh=1e-64) {return x>0 ? (x<thresh) : (x>-thresh);}
+ //
protected:
//
void Swap(int &r,int &c) const {int t=r;r=c;c=t;}
//___________________________________________________________
-inline void AliMatrixSq::MultiplyByVec(TVectorD &vecIn, TVectorD &vecOut) const
+inline void AliMatrixSq::MultiplyByVec(const TVectorD &vecIn, TVectorD &vecOut) const
{
MultiplyByVec(vecIn.GetMatrixArray(), vecOut.GetMatrixArray());
}