]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STEER/AliSymMatrix.h
Fix for report #64208 Missing OCDB (GRP/Calib/MeanVertex) object in GRP
[u/mrichter/AliRoot.git] / STEER / AliSymMatrix.h
index b154e329906c9c5e4964fb5c1cf3444976adb92c..1f0eaea9492932aa51a2e8de0dbb06c757871877 100644 (file)
@@ -1,5 +1,17 @@
 #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>
@@ -20,20 +32,28 @@ class AliSymMatrix : public AliMatrixSq {
   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;};
@@ -111,5 +131,10 @@ inline void AliSymMatrix::Scale(Double_t coeff)
   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