10#ifndef ROOT_Minuit2_LASymMatrix
11#define ROOT_Minuit2_LASymMatrix
29int Mndaxpy(
unsigned int,
double,
const double *,
int,
double *,
int);
30int Mndscal(
unsigned int,
double,
double *,
int);
74 std::memcpy(
fData,
v.Data(),
fSize *
sizeof(
double));
86 std::memcpy(
fData,
v.Data(),
fSize *
sizeof(
double));
97 std::memcpy(
fData,
v.Obj().Data(),
fSize *
sizeof(
double));
102 template <
class A,
class B,
class T>
107 (*this) =
sum.Obj().A();
108 (*this) +=
sum.Obj().B();
112 template <
class A,
class T>
121 (*this) =
sum.Obj().B();
123 (*this) +=
sum.Obj().A();
128 template <
class A,
class T>
133 (*this) = something.Obj();
134 (*this) *= something.f();
144 std::memcpy(
fData,
inv.Obj().Obj().Obj().Data(),
fSize *
sizeof(
double));
150 template <
class A,
class T>
152 const ABObj<
sym,
ABSum<
ABObj<
sym,
MatrixInverse<
sym,
ABObj<sym, LASymMatrix, T>, T>, T>,
ABObj<sym, A, T>>, T>
160 (*this) =
sum.Obj().B();
161 (*this) +=
sum.Obj().A();
168 template <
class A,
class T>
170 const ABObj<
sym,
ABSum<
ABObj<
sym,
VectorOuterProduct<
ABObj<vec, LAVector, T>, T>, T>,
ABObj<sym, A, T>>, T> &
sum)
177 (*this) =
sum.Obj().B();
178 (*this) +=
sum.Obj().A();
186 assert(
fSize ==
m.size());
194 assert(
fSize ==
m.size());
203 assert(
fSize ==
m.Obj().size());
204 if (
m.Obj().Data() ==
fData) {
213 template <
class A,
class T>
240 Outer_prod(*
this,
m.Obj().Obj().Obj(),
m.f() *
m.Obj().Obj().f() *
m.Obj().Obj().f());
254 return fData[col + row * (row + 1) / 2];
256 return fData[row + col * (col + 1) / 2];
263 return fData[col + row * (row + 1) / 2];
265 return fData[row + col * (col + 1) / 2];
293 assert(
fSize ==
v.Obj().size());
296 std::memcpy(
fData,
v.Obj().Data(),
fSize *
sizeof(
double));
301 template <
class A,
class T>
307 (*this) = something.Obj();
308 (*this) *= something.f();
311 tmp *= something.f();
312 assert(
fSize == tmp.size());
313 std::memcpy(
fData, tmp.Data(),
fSize *
sizeof(
double));
320 template <
class A,
class B,
class T>
327 (*this) =
sum.Obj().A();
328 (*this) +=
sum.Obj().B();
332 tmp +=
sum.Obj().B();
334 assert(
fSize == tmp.size());
335 std::memcpy(
fData, tmp.Data(),
fSize *
sizeof(
double));
340 template <
class A,
class T>
348 (*this) =
sum.Obj().B();
349 (*this) +=
sum.Obj().A();
354 tmp +=
sum.Obj().A();
356 assert(
fSize == tmp.size());
357 std::memcpy(
fData, tmp.Data(),
fSize *
sizeof(
double));
367 fSize =
inv.Obj().Obj().Obj().size();
368 fNRow =
inv.Obj().Obj().Obj().Nrow();
370 std::memcpy(
fData,
inv.Obj().Obj().Obj().Data(),
fSize *
sizeof(
double));
371 (*this) *=
inv.Obj().Obj().f();
378 assert(
fSize == tmp.size());
379 std::memcpy(
fData, tmp.Data(),
fSize *
sizeof(
double));
Class describing a symmetric matrix of size n.
LASymMatrix(const ABObj< sym, MatrixInverse< sym, ABObj< sym, LASymMatrix, T >, T >, T > &inv)
LASymMatrix & operator=(const ABObj< sym, LASymMatrix, T > &v)
LASymMatrix & operator-=(const LASymMatrix &m)
LASymMatrix(const ABObj< sym, ABSum< ABObj< sym, LASymMatrix, T >, ABObj< sym, A, T > >, T > &sum)
double & operator()(unsigned int row, unsigned int col)
const double * Data() const
unsigned int Ncol() const
double operator()(unsigned int row, unsigned int col) const
LASymMatrix & operator=(const LASymMatrix &v)
LASymMatrix & operator+=(const ABObj< sym, LASymMatrix, T > &m)
LASymMatrix(const ABObj< sym, ABSum< ABObj< sym, MatrixInverse< sym, ABObj< sym, LASymMatrix, T >, T >, T >, ABObj< sym, A, T > >, T > &sum)
LASymMatrix(const ABObj< sym, ABSum< ABObj< sym, A, T >, ABObj< sym, B, T > >, T > &sum)
LASymMatrix & operator*=(double scal)
LASymMatrix & operator+=(const ABObj< sym, A, T > &m)
LASymMatrix & operator=(const ABObj< sym, MatrixInverse< sym, ABObj< sym, LASymMatrix, T >, T >, T > &inv)
LASymMatrix(unsigned int n)
LASymMatrix(const ABObj< sym, LASymMatrix, T > &v)
LASymMatrix & operator=(const ABObj< sym, ABSum< ABObj< sym, A, T >, ABObj< sym, B, T > >, T > &sum)
LASymMatrix(const LASymMatrix &v)
unsigned int Nrow() const
LASymMatrix(const ABObj< sym, ABObj< sym, A, T >, T > &something)
LASymMatrix & operator+=(const ABObj< sym, MatrixInverse< sym, ABObj< sym, LASymMatrix, T >, T >, T > &m)
LASymMatrix & operator=(const ABObj< sym, ABSum< ABObj< sym, LASymMatrix, T >, ABObj< sym, A, T > >, T > &sum)
LASymMatrix(const ABObj< sym, ABSum< ABObj< sym, VectorOuterProduct< ABObj< vec, LAVector, T >, T >, T >, ABObj< sym, A, T > >, T > &sum)
LASymMatrix & operator+=(const LASymMatrix &m)
LASymMatrix & operator+=(const ABObj< sym, VectorOuterProduct< ABObj< vec, LAVector, T >, T >, T > &m)
unsigned int size() const
LASymMatrix & operator=(const ABObj< sym, ABObj< sym, A, T >, T > &something)
static StackAllocator & Get()
void * Allocate(size_t nBytes)
int Invert(LASymMatrix &)
int Mndaxpy(unsigned int, double, const double *, int, double *, int)
int Mndscal(unsigned int, double, double *, int)
void Outer_prod(LASymMatrix &, const LAVector &, double f=1.)
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
void inv(rsa_NUMBER *, rsa_NUMBER *, rsa_NUMBER *)
static uint64_t sum(uint64_t i)