4#ifndef ROOT_Math_HelperOps
5#define ROOT_Math_HelperOps 1
28 template <
class T,
unsigned int D1,
unsigned int D2,
class R>
31 template <
class A,
class T,
unsigned int D1,
unsigned int D2,
class R>
34 template <
class T,
unsigned int D>
37 template <
class T,
unsigned int D1,
unsigned int D2>
45 unsigned int D1,
unsigned int D2,
46 class A,
class R1,
class R2>
59 for(
unsigned int i=0; i<
D1; ++i)
60 for(
unsigned int j=0;
j<
D2; ++
j) {
70 for(
unsigned int i=0; i<
D1; ++i)
71 for(
unsigned int j=0;
j<
D2; ++
j) {
76 for(
unsigned int i=0; i<
D1*
D2; ++i)
lhs.fRep[i] = tmp[i];
87 unsigned int D1,
unsigned int D2,
102 for(
unsigned int i=0; i<
D1; ++i)
104 for(
unsigned int j=0;
j<=i; ++
j) {
113 for(
unsigned int i=0; i<
D1; ++i)
114 for(
unsigned int j=0;
j<=i; ++
j) {
130 template <
class T,
unsigned int D1,
unsigned int D2,
class A>
160 for(
unsigned int i=0; i<D; ++i)
162 for(
unsigned int j=0;
j<=i; ++
j) {
175 for(
unsigned int i=0; i<D; ++i)
177 for(
unsigned int j=0;
j<=i; ++
j) {
193 template <
class T,
unsigned int D1,
unsigned int D2,
class A,
201 for(
unsigned int i=0; i<
D1; ++i)
202 for(
unsigned int j=0;
j<
D2; ++
j) {
210 for(
unsigned int i=0; i<
D1; ++i)
211 for(
unsigned int j=0;
j<
D2; ++
j) {
216 for(
unsigned int i=0; i<
D1*
D2; ++i)
lhs.fRep[i] += tmp[i];
230 unsigned int D1,
unsigned int D2,
234 static void Evaluate(
SMatrix<T,
D1,
D2,
MatRepSym<T,D1> >&
lhs,
const Expr<A,T,
D1,
D2,
MatRepSym<T,D1> >&
rhs)
238 for(
unsigned int i=0; i<
D1; ++i)
239 for(
unsigned int j=0;
j<=i; ++
j) {
247 for(
unsigned int i=0; i<
D1; ++i)
248 for(
unsigned int j=0;
j<=i; ++
j) {
260 template <
class T,
unsigned int D1,
unsigned int D2,
class A>
277 template <
class T,
unsigned int D1,
unsigned int D2,
class A,
285 for(
unsigned int i=0; i<
D1; ++i)
286 for(
unsigned int j=0;
j<
D2; ++
j) {
294 for(
unsigned int i=0; i<
D1; ++i)
295 for(
unsigned int j=0;
j<
D2; ++
j) {
300 for(
unsigned int i=0; i<
D1*
D2; ++i)
lhs.fRep[i] -= tmp[i];
313 unsigned int D1,
unsigned int D2,
317 static void Evaluate(
SMatrix<T,
D1,
D2,
MatRepSym<T,D1> >&
lhs,
const Expr<A,T,
D1,
D2,
MatRepSym<T,D1> >&
rhs)
321 for(
unsigned int i=0; i<
D1; ++i)
322 for(
unsigned int j=0;
j<=i; ++
j) {
330 for(
unsigned int i=0; i<
D1; ++i)
331 for(
unsigned int j=0;
j<=i; ++
j) {
344 template <
class T,
unsigned int D1,
unsigned int D2,
class A>
358 template <
class T,
unsigned int D1,
unsigned int D2,
359 unsigned int D3,
unsigned int D4,
364 unsigned int row,
unsigned int col) {
367 const unsigned int offset = row*
D2+col;
369 for(
unsigned int i=0; i<
D3*
D4; ++i) {
376 template <
class T,
unsigned int D1,
unsigned int D2,
377 unsigned int D3,
unsigned int D4,
378 class A,
class R1,
class R2>
381 unsigned int row,
unsigned int col) {
384 const unsigned int offset = row*
D2+col;
386 for(
unsigned int i=0; i<
D3*
D4; ++i) {
393 template <
class T,
unsigned int D1,
unsigned int D2,
394 unsigned int D3,
unsigned int D4 >
398 unsigned int ,
unsigned int )
405 template <
class T,
unsigned int D1,
unsigned int D2,
406 unsigned int D3,
unsigned int D4,
class A >
407 struct PlaceExpr<T,
D1,
D2,
D3,
D4, A,
MatRepSym<T,
D1>,
MatRepStd<T,
D3,
D4> > {
410 unsigned int ,
unsigned int )
418 template <
class T,
unsigned int D1,
unsigned int D2,
419 unsigned int D3,
unsigned int D4 >
423 unsigned int row,
unsigned int col )
428 for(
unsigned int i=0; i<
D3; ++i) {
429 for(
unsigned int j=0;
j<=i; ++
j)
436 template <
class T,
unsigned int D1,
unsigned int D2,
437 unsigned int D3,
unsigned int D4,
class A >
441 unsigned int row,
unsigned int col )
446 for(
unsigned int i=0; i<
D3; ++i) {
447 for(
unsigned int j=0;
j<=i; ++
j)
458 template <
class T,
unsigned int D1,
unsigned int D2,
459 unsigned int D3,
unsigned int D4,
464 unsigned int row,
unsigned int col) {
471 for(
unsigned int i=0; i<
D1; ++i) {
472 for(
unsigned int j=0;
j<
D2; ++
j)
479 template <
class T,
unsigned int D1,
unsigned int D2,
480 unsigned int D3,
unsigned int D4 >
484 unsigned int ,
unsigned int )
491 template <
class T,
unsigned int D1,
unsigned int D2,
492 unsigned int D3,
unsigned int D4 >
496 unsigned int row,
unsigned int col )
503 for(
unsigned int i=0; i<
D1; ++i) {
504 for(
unsigned int j=0;
j<=i; ++
j)
516 template <
class T,
unsigned int D1,
unsigned int D2,
class R>
518 template<
class Iterator>
524 Iterator
itr = begin;
526 for (
unsigned int i = 0; i <
D1; ++i)
527 for (
unsigned int j =0;
j <= i; ++
j) {
534 for (
unsigned int i = 0; i <
D1; ++i)
535 for (
unsigned int j = i;
j <
D2; ++
j) {
548 std::copy(begin, end,
lhs.fRep.Array() );
559 template <
class T,
unsigned int D1,
unsigned int D2>
561 template<
class Iterator>
568 std::copy(begin, end,
lhs.fRep.Array() );
571 Iterator
itr = begin;
572 for (
unsigned int i = 0; i <
D1; ++i)
573 for (
unsigned int j = i;
j <
D2; ++
j) {
#define STATIC_CHECK(expr, msg)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Expression wrapper class for Matrix objects.
MatRepSym Matrix storage representation for a symmetric matrix of dimension NxN This class is a templ...
SMatrix: a generic fixed size D1 x D2 Matrix class.
const_iterator begin() const
Namespace for new Math classes and functions.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...
#define R1(v, w, x, y, z, i)
#define R2(v, w, x, y, z, i)
static void Evaluate(SMatrix< T, D1, D2, MatRepSym< T, D1 > > &lhs, Iterator begin, Iterator end, bool, bool lower, bool check=true)
Structure for assignment to a general matrix from iterator.
static void Evaluate(SMatrix< T, D1, D2, R > &lhs, Iterator begin, Iterator end, bool triang, bool lower, bool check=true)
Force Expression evaluation from general to symmetric.
static void Evaluate(SMatrix< T, D, D, MatRepSym< T, D > > &lhs, const Expr< A, T, D, D, R > &rhs)
assign a symmetric matrix from an expression
static void Evaluate(SMatrix< T, D, D, MatRepSym< T, D > > &lhs, const SMatrix< T, D, D, R > &rhs)
assign the symmetric matric from a general matrix
static void Evaluate(SMatrix< T, D1, D2, MatRepSym< T, D1 > > &lhs, const Expr< A, T, D1, D2, MatRepSym< T, D1 > > &rhs)
Evaluate the expression from symmetric to symmetric matrices.
static void Evaluate(SMatrix< T, D1, D2, MatRepSym< T, D1 > > &, const Expr< A, T, D1, D2, MatRepStd< T, D1, D2 > > &)
Structure to assign from an expression based to general matrix to general matrix.
static void Evaluate(SMatrix< T, D1, D2, R1 > &lhs, const Expr< A, T, D1, D2, R2 > &rhs)
Evaluate the expression from general to general matrices.
static void Evaluate(SMatrix< T, D1, D2, MatRepSym< T, D1 > > &lhs, const Expr< A, T, D1, D2, MatRepSym< T, D1 > > &rhs)
static void Evaluate(SMatrix< T, D1, D2, MatRepSym< T, D1 > > &, const Expr< A, T, D1, D2, MatRepStd< T, D1, D2 > > &)
Evaluate the expression performing a -= operation Need to check whether creating a temporary object w...
static void Evaluate(SMatrix< T, D1, D2, R1 > &lhs, const Expr< A, T, D1, D2, R2 > &rhs)
ROOT::Math::PlaceExpr< T, D1, D2, D3, D4, A, MatRepSym< T, D1 >, MatRepStd< T, D3, D4 > >::Evaluate static void Evaluate(SMatrix< T, D1, D2, MatRepSym< T, D1 > > &, const Expr< A, T, D3, D4, MatRepStd< T, D3, D4 > > &, unsigned int, unsigned int)
static void Evaluate(SMatrix< T, D1, D2, MatRepSym< T, D1 > > &lhs, const Expr< A, T, D3, D4, MatRepSym< T, D3 > > &rhs, unsigned int row, unsigned int col)
static void Evaluate(SMatrix< T, D1, D2, R1 > &lhs, const Expr< A, T, D3, D4, R2 > &rhs, unsigned int row, unsigned int col)
static void Evaluate(SMatrix< T, D1, D2, MatRepSym< T, D1 > > &, const SMatrix< T, D3, D4, MatRepStd< T, D3, D4 > > &, unsigned int, unsigned int)
static void Evaluate(SMatrix< T, D1, D2, MatRepSym< T, D1 > > &lhs, const SMatrix< T, D3, D4, MatRepSym< T, D3 > > &rhs, unsigned int row, unsigned int col)
Structure to deal when a submatrix is placed in a matrix.
static void Evaluate(SMatrix< T, D1, D2, R1 > &lhs, const SMatrix< T, D3, D4, R2 > &rhs, unsigned int row, unsigned int col)
static void Evaluate(SMatrix< T, D1, D2, MatRepSym< T, D1 > > &, const Expr< A, T, D1, D2, MatRepStd< T, D1, D2 > > &)
static void Evaluate(SMatrix< T, D1, D2, MatRepSym< T, D1 > > &lhs, const Expr< A, T, D1, D2, MatRepSym< T, D1 > > &rhs)
Evaluate the expression performing a += operation Need to check whether creating a temporary object w...
static void Evaluate(SMatrix< T, D1, D2, R1 > &lhs, const Expr< A, T, D1, D2, R2 > &rhs)
static void Evaluate(SMatrix< T, D1, D2, MatRepSym< T, D1 > > &lhs, const SMatrix< T, D3, D4, MatRepSym< T, D3 > > &rhs, unsigned int row, unsigned int col)
static void Evaluate(SMatrix< T, D1, D2, MatRepSym< T, D1 > > &, const SMatrix< T, D3, D4, MatRepStd< T, D3, D4 > > &, unsigned int, unsigned int)
Structure for getting sub matrices We have different cases according to the matrix representations.
static void Evaluate(SMatrix< T, D1, D2, R1 > &lhs, const SMatrix< T, D3, D4, R2 > &rhs, unsigned int row, unsigned int col)