#ifndef ALISYMMATRIX_H
#define ALISYMMATRIX_H
+/**********************************************************************************************/
+/* Fast symmetric matrix with dynamically expandable size. */
+/* Only part can be used for matrix operations. It is defined as: */
+/* fNCols: rows built by constructor (GetSizeBooked) */
+/* fNRows: number of rows added dynamically (automatically added on assignment to row) */
+/* GetNRowAdded */
+/* fNRowIndex: total size (fNCols+fNRows), GetSize */
+/* fRowLwb : actual size to used for given operation, by default = total size, GetSizeUsed */
+/* */
+/* Author: ruben.shahoyan@cern.ch */
+/* */
+/**********************************************************************************************/
#include <string.h>
#include <TObject.h>
void Reset();
//
Int_t GetSize() const {return fNrowIndex;}
+ Int_t GetSizeUsed() const {return fRowLwb;}
+ Int_t GetSizeBooked() const {return fNcols;}
+ Int_t GetSizeAdded() const {return fNrows;}
Float_t GetDensity() const;
AliSymMatrix& operator=(const AliSymMatrix& src);
+ AliSymMatrix& operator+=(const AliSymMatrix& src);
Double_t operator()(Int_t rown, Int_t coln) const;
Double_t& operator()(Int_t rown, Int_t coln);
//
Double_t DiagElem(Int_t r) const {return (*(const AliSymMatrix*)this)(r,r);}
Double_t& DiagElem(Int_t r) {return (*this)(r,r);}
//
+ Double_t* GetRow(Int_t r);
+ //
void Print(Option_t* option="") const;
void AddRows(int nrows=1);
+ void SetSizeUsed(Int_t sz) {fRowLwb = sz;}
//
void Scale(Double_t coeff);
void MultiplyByVec(Double_t* vecIn, Double_t* vecOut) const;
void MultiplyByVec(TVectorD &vecIn, TVectorD &vecOut) const;
+ void AddToRow(Int_t r, Double_t *valc,Int_t *indc,Int_t n);
//
// ---------------------------------- Dummy methods of MatrixBase
virtual const Double_t *GetMatrixArray () const {return fElems;};
for (int i=fNrowIndex;i--;) for (int j=i;j--;) { double& el = operator()(i,j); if (el) el *= coeff;}
}
+//___________________________________________________________
+inline void AliSymMatrix::AddToRow(Int_t r, Double_t *valc,Int_t *indc,Int_t n)
+{
+ for (int i=n;i--;) (*this)(indc[i],r) += valc[i];
+}
#endif