12#ifndef ROOT_TMatrixTSparse 
   13#define ROOT_TMatrixTSparse 
   20#include <vecLib/vBLAS.h> 
   33template<
class Element> 
class TMatrixT;
 
  114                                                                                                m.GetColUpb(),
m.GetNoElements()); }
 
  126                                           Int_t *pRowIndex,
Int_t *pColIndex,Element *pData);
 
  128                                           const Int_t *pRowIndex,
const Int_t *pColIndex,
const Element *pData)
 const 
  131                                                                                             const_cast<Int_t *
>(pRowIndex),
 
  132                                                                                             const_cast<Int_t *
>(pColIndex),
 
  133                                                                                             const_cast<Element *
>(pData))); }
 
  135                                           Int_t *pRowIndex,
Int_t *pColIndex,Element *pData);
 
  137                                           const Int_t *pRowIndex,
const Int_t *pColIndex,
const Element *pData) 
const;
 
  155   virtual Element 
RowNorm () 
const;
 
  156   virtual Element 
ColNorm () 
const;
 
  160                                              { 
MayNotUse(
"NormByDiag"); 
return *
this; }
 
  179                                                                                if (
this == &source) 
APlusB (tmp,tmp,1);
 
  180                                                                                else                 APlusB (tmp,source,1);
 
  183                                                                                APlusB(tmp,source,1); 
return *
this; }
 
  185                                                                                if (
this == &source) 
AMinusB (tmp,tmp,1);
 
  189                                                                                AMinusB(tmp,source,1); 
return *
this; }
 
  191                                                                                if (
this == &source) 
AMultB (tmp,tmp,1);
 
  192                                                                                else                 AMultB (tmp,source,1);
 
  222template <
class Element>
 
  224                                                                      Int_t *pRowIndex,
Int_t *pColIndex,Element *pData)
 
  225                                                                        { 
return Use(0,nrows-1,0,ncols-1,nr_nonzeros,pRowIndex,pColIndex,pData); }
 
  226template <
class Element>
 
  228                                                                      const Int_t *pRowIndex,
const Int_t *pColIndex,
const Element *pData)
 const 
  229                                                                        { 
return Use(0,nrows-1,0,ncols-1,nr_nonzeros,pRowIndex,pColIndex,pData); }
 
  230template <
class Element>
 
  233                                                                           return Use(
a.GetRowLwb(),
a.GetRowUpb(),
a.GetColLwb(),
a.GetColUpb(),
 
  234                                                                                      a.GetNoElements(),
a.GetRowIndexArray(),
 
  235                                                                                      a.GetColIndexArray(),
a.GetMatrixArray()); }
 
  236template <
class Element>
 
  239                                                                           return Use(
a.GetRowLwb(),
a.GetRowUpb(),
a.GetColLwb(),
a.GetColUpb(),
 
  240                                                                                      a.GetNoElements(),
a.GetRowIndexArray(),
 
  241                                                                                      a.GetColIndexArray(),
a.GetMatrixArray()); }
 
  243template <
class Element>
 
  248                                                                          this->GetSub(row_lwb,row_upb,col_lwb,col_upb,tmp,option);
 
#define ClassDef(name, id)
 
TMatrixTSparse< Element > & ElementDiv(TMatrixTSparse< Element > &target, const TMatrixTSparse< Element > &source)
Divide target by the source, element-by-element.
 
TMatrixTSparse< Element > operator*(const TMatrixTSparse< Element > &source1, const TMatrixTSparse< Element > &source2)
 
TMatrixTSparse< Element > operator-(const TMatrixTSparse< Element > &source1, const TMatrixTSparse< Element > &source2)
 
Bool_t AreCompatible(const TMatrixTSparse< Element > &m1, const TMatrixTSparse< Element > &m2, Int_t verbose=0)
 
TMatrixTSparse< Element > & Add(TMatrixTSparse< Element > &target, Element scalar, const TMatrixTSparse< Element > &source)
Modify addition: target += scalar * source.
 
TMatrixTSparse< Element > operator+(const TMatrixTSparse< Element > &source1, const TMatrixTSparse< Element > &source2)
 
TMatrixTSparse< Element > & ElementMult(TMatrixTSparse< Element > &target, const TMatrixTSparse< Element > &source)
Multiply target by the source, element-by-element.
 
TClass instances represent classes, structs and namespaces in the ROOT type system.
 
virtual Int_t NonZeros() const
Compute the number of elements != 0.0.
 
virtual ~TMatrixTSparse()
 
TMatrixTSparse< Element > & operator+=(Element val)
Add val to every element of the matrix.
 
TMatrixTBase< Element > & ResizeTo(const TMatrixTSparse< Element > &m)
 
TMatrixTSparse< Element > & SetSparseIndex(Int_t nelem_new)
Increase/decrease the number of non-zero elements to nelems_new.
 
virtual TMatrixTBase< Element > & ResizeTo(Int_t nrows, Int_t ncols, Int_t nr_nonzeros=-1)
Set size of the matrix to nrows x ncols with nr_nonzeros non-zero entries if nr_nonzeros > 0 .
 
TMatrixTSparse< Element > & Use(Int_t row_lwb, Int_t row_upb, Int_t col_lwb, Int_t col_upb, Int_t nr_nonzeros, Int_t *pRowIndex, Int_t *pColIndex, Element *pData)
 
Element operator()(Int_t rown, Int_t coln) const
 
virtual void Clear(Option_t *="")
 
TMatrixTSparse< Element > & operator+=(const TMatrixTSparse< Element > &source)
 
virtual void GetMatrix2Array(Element *data, Option_t *="") const
Copy matrix data to array . It is assumed that array is of size >= fNelems.
 
TMatrixTSparse< Element > & operator-=(const TMatrixTSparse< Element > &source)
 
void AMinusB(const TMatrixTSparse< Element > &a, const TMatrixTSparse< Element > &b, Int_t constr=0)
General matrix subtraction.
 
virtual TMatrixTBase< Element > & SetMatrixArray(const Element *data, Option_t *="")
Copy array data to matrix .
 
TMatrixTSparse< Element > & operator*=(Element val)
Multiply every element of the matrix with val.
 
void AMultB(const TMatrixTSparse< Element > &a, const TMatrixTSparse< Element > &b, Int_t constr=0)
 
virtual TMatrixTBase< Element > & SetRowIndexArray(Int_t *data)
 
virtual TMatrixTBase< Element > & SetSub(Int_t row_lwb, Int_t col_lwb, const TMatrixTBase< Element > &source)
Insert matrix source starting at [row_lwb][col_lwb], thereby overwriting the part [row_lwb....
 
virtual TMatrixTBase< Element > & Randomize(Element alpha, Element beta, Double_t &seed)
randomize matrix element values
 
virtual TMatrixTBase< Element > & UnitMatrix()
Make a unit matrix (matrix need not be a square one).
 
virtual const Int_t * GetRowIndexArray() const
 
virtual TMatrixTBase< Element > & InsertRow(Int_t row, Int_t col, const Element *v, Int_t n=-1)
Insert in row rown, n elements of array v at column coln.
 
virtual Int_t * GetRowIndexArray()
 
void AMultBt(const TMatrixTSparse< Element > &a, const TMatrixTSparse< Element > &b, Int_t constr=0)
General matrix multiplication.
 
virtual TMatrixTBase< Element > & GetSub(Int_t row_lwb, Int_t row_upb, Int_t col_lwb, Int_t col_upb, TMatrixTBase< Element > &target, Option_t *option="S") const
Get submatrix [row_lwb..row_upb][col_lwb..col_upb]; The indexing range of the returned matrix depends...
 
virtual void ExtractRow(Int_t row, Int_t col, Element *v, Int_t n=-1) const
Store in array v, n matrix elements of row rown starting at column coln.
 
TMatrixTSparse< Element > & Transpose(const TMatrixTSparse< Element > &source)
Transpose a matrix.
 
TMatrixTSparse< Element > & operator*=(const TMatrixTSparse< Element > &source)
 
virtual TMatrixTBase< Element > & SetColIndexArray(Int_t *data)
 
TMatrixTSparse< Element > & operator-=(Element val)
Subtract val from every element of the matrix.
 
virtual Element * GetMatrixArray()
 
TMatrixTSparse< Element > & operator+=(const TMatrixT< Element > &source)
 
virtual const Element * GetMatrixArray() const
 
void APlusB(const TMatrixT< Element > &a, const TMatrixTSparse< Element > &b, Int_t constr=0)
 
TMatrixTSparseRow< Element > operator[](Int_t rown)
 
virtual Int_t * GetColIndexArray()
 
virtual const Int_t * GetColIndexArray() const
 
TMatrixTSparse< Element > & operator*=(const TMatrixT< Element > &source)
 
const TMatrixTSparse< Element > & Use(const TMatrixTSparse< Element > &a) const
 
virtual Element RowNorm() const
Row matrix norm, MAX{ SUM{ |M(i,j)|, over j}, over i}.
 
void Allocate(Int_t nrows, Int_t ncols, Int_t row_lwb=0, Int_t col_lwb=0, Int_t init=0, Int_t nr_nonzeros=0)
Allocate new matrix.
 
virtual Element ColNorm() const
Column matrix norm, MAX{ SUM{ |M(i,j)|, over i}, over j}.
 
virtual TMatrixTBase< Element > & NormByDiag(const TVectorT< Element > &, Option_t *)
option:
 
void AMultB(const TMatrixT< Element > &a, const TMatrixTSparse< Element > &b, Int_t constr=0)
 
const TMatrixTSparseRow_const< Element > operator[](Int_t rown) const
 
void APlusB(const TMatrixTSparse< Element > &a, const TMatrixTSparse< Element > &b, Int_t constr=0)
General matrix addition.
 
const TMatrixTSparse< Element > & Use(Int_t row_lwb, Int_t row_upb, Int_t col_lwb, Int_t col_upb, Int_t nr_nonzeros, const Int_t *pRowIndex, const Int_t *pColIndex, const Element *pData) const
 
virtual TMatrixTSparse< Element > & RandomizePD(Element alpha, Element beta, Double_t &seed)
randomize matrix element values but keep matrix symmetric positive definite
 
TMatrixTSparse< Element > & Use(TMatrixTSparse< Element > &a)
 
TMatrixTSparse< Element > & operator=(const TMatrixT< Element > &source)
Notice that the sparsity of the matrix is NOT changed : its fRowIndex/fColIndex are used !
 
TMatrixTSparse< Element > & T()
 
void AMultB(const TMatrixTSparse< Element > &a, const TMatrixT< Element > &b, Int_t constr=0)
 
const TMatrixTSparse< Element > & Use(Int_t nrows, Int_t ncols, Int_t nr_nonzeros, const Int_t *pRowIndex, const Int_t *pColIndex, const Element *pData) const
 
virtual TMatrixTBase< Element > & Zero()
Set matrix elements to zero.
 
TMatrixTSparse< Element > & SetSparseIndexAB(const TMatrixTSparse< Element > &a, const TMatrixT< Element > &b)
 
TMatrixTSparse< Element > GetSub(Int_t row_lwb, Int_t row_upb, Int_t col_lwb, Int_t col_upb, Option_t *option="S") const
 
virtual Bool_t IsSymmetric() const
Check whether matrix is symmetric.
 
TMatrixTSparse< Element > & operator-=(const TMatrixT< Element > &source)
 
TMatrixTSparse< Element > & SetSparseIndexAB(const TMatrixTSparse< Element > &a, const TMatrixTSparse< Element > &b)
Set the row/column indices to the "sum" of matrices a and b It is checked that enough space has been ...
 
void Mult(const TMatrixTSparse< Element > &a, const TMatrixTSparse< Element > &b)
 
TMatrixTSparse< Element > & Use(Int_t nrows, Int_t ncols, Int_t nr_nonzeros, Int_t *pRowIndex, Int_t *pColIndex, Element *pData)
 
void MayNotUse(const char *method) const
Use this method to signal that a method (defined in a base class) may not be called in a derived clas...
 
double beta(double x, double y)
Calculates the beta function.
 
EvaluateInfo init(std::vector< RooRealProxy > parameters, std::vector< ArrayWrapper * > wrappers, std::vector< double * > arrays, size_t begin, size_t batchSize)
 
static constexpr double m2