ROOT logo
// @(#)root/smatrix:$Id$
// Author: L. Moneta, J. Palacios    2006  

#ifndef ROOT_Math_MatrixRepresentationsStatic
#define ROOT_Math_MatrixRepresentationsStatic 1

// Include files

/** 
    @defgroup MatRep SMatrix Storage Representation 
    @ingroup SMatrixGroup
 
    @author Juan Palacios
    @date   2006-01-15
 
    Classes MatRepStd and MatRepSym for generic and symmetric matrix
    data storage and manipulation. Define data storage and access, plus
    operators =, +=, -=, ==.
 
 */

#ifndef ROOT_Math_StaticCheck
#include "Math/StaticCheck.h"
#endif

namespace ROOT {
   
namespace Math {

   //________________________________________________________________________________    
   /**
      MatRepStd
      Standard Matrix representation for a general D1 x D2 matrix. 
      This class is itself a template on the contained type T, the number of rows and the number of columns.
      Its data member is an array T[nrows*ncols] containing the matrix data. 
      The data are stored in the row-major C convention. 
      For example, for a matrix, M, of size 3x3, the data \f$ \left[a_0,a_1,a_2,.......,a_7,a_8 \right] \f$d are stored in the following order: 
      \f[
      M = \left( \begin{array}{ccc} 
      a_0 & a_1 & a_2  \\ 
      a_3 & a_4  & a_5  \\ 
      a_6 & a_7  & a_8   \end{array} \right)
      \f]

      @ingroup MatRep
   */


   template <class T, unsigned int D1, unsigned int D2=D1>
   class MatRepStd {

   public: 

      typedef T  value_type;

      inline const T& operator()(unsigned int i, unsigned int j) const {
         return fArray[i*D2+j];
      }
      inline T& operator()(unsigned int i, unsigned int j) {
         return fArray[i*D2+j];
      }
      inline T& operator[](unsigned int i) { return fArray[i]; }

      inline const T& operator[](unsigned int i) const { return fArray[i]; }

      inline T apply(unsigned int i) const { return fArray[i]; }

      inline T* Array() { return fArray; }  

      inline const T* Array() const { return fArray; }  

      template <class R>
      inline MatRepStd<T, D1, D2>& operator+=(const R& rhs) {
         for(unsigned int i=0; i<kSize; ++i) fArray[i] += rhs[i];
         return *this;
      }

      template <class R>
      inline MatRepStd<T, D1, D2>& operator-=(const R& rhs) {
         for(unsigned int i=0; i<kSize; ++i) fArray[i] -= rhs[i];
         return *this;
      }

      template <class R>
      inline MatRepStd<T, D1, D2>& operator=(const R& rhs) {
         for(unsigned int i=0; i<kSize; ++i) fArray[i] = rhs[i];
         return *this;
      }

      template <class R> 
      inline bool operator==(const R& rhs) const {
         bool rc = true;
         for(unsigned int i=0; i<kSize; ++i) {
            rc = rc && (fArray[i] == rhs[i]);
         }
         return rc;
      }

      enum {
         /// return no. of matrix rows
         kRows = D1,
         /// return no. of matrix columns
         kCols = D2,
         /// return no of elements: rows*columns
         kSize = D1*D2
      };
      
   private:
      //T __attribute__ ((aligned (16))) fArray[kSize];
      T  fArray[kSize];
   };
    
    
//     template<unigned int D>
//     struct Creator { 
//       static const RowOffsets<D> & Offsets() {
//          static RowOffsets<D> off;
//           return off;
//       }

   /**
      Static structure to keep the conversion from (i,j) to offsets in the storage data for a 
      symmetric matrix
   */

   template<unsigned int D>
   struct RowOffsets {
      inline RowOffsets() {
         int v[D];
         v[0]=0;
         for (unsigned int i=1; i<D; ++i)
            v[i]=v[i-1]+i;
         for (unsigned int i=0; i<D; ++i) { 
            for (unsigned int j=0; j<=i; ++j)
               fOff[i*D+j] = v[i]+j; 
            for (unsigned int j=i+1; j<D; ++j)
               fOff[i*D+j] = v[j]+i ;
         }
      }
      inline int operator()(unsigned int i, unsigned int j) const { return fOff[i*D+j]; }
      inline int apply(unsigned int i) const { return fOff[i]; }
      int fOff[D*D];
   };

// Make the lookup tables available at compile time:
// Add them to a namespace?
static const int fOff1x1[] = {0};
static const int fOff2x2[] = {0, 1, 1, 2};
static const int fOff3x3[] = {0, 1, 3, 1, 2, 4, 3, 4, 5};
static const int fOff4x4[] = {0, 1, 3, 6, 1, 2, 4, 7, 3, 4, 5, 8, 6, 7, 8, 9};
static const int fOff5x5[] = {0, 1, 3, 6, 10, 1, 2, 4, 7, 11, 3, 4, 5, 8, 12, 6, 7, 8, 9, 13, 10, 11, 12, 13, 14};
static const int fOff6x6[] = {0, 1, 3, 6, 10, 15, 1, 2, 4, 7, 11, 16, 3, 4, 5, 8, 12, 17, 6, 7, 8, 9, 13, 18, 10, 11, 12, 13, 14, 19, 15, 16, 17, 18, 19, 20};

static const int fOff7x7[] = {0, 1, 3, 6, 10, 15, 21, 1, 2, 4, 7, 11, 16, 22, 3, 4, 5, 8, 12, 17, 23, 6, 7, 8, 9, 13, 18, 24, 10, 11, 12, 13, 14, 19, 25, 15, 16, 17, 18, 19, 20, 26, 21, 22, 23, 24, 25, 26, 27};

static const int fOff8x8[] = {0, 1, 3, 6, 10, 15, 21, 28, 1, 2, 4, 7, 11, 16, 22, 29, 3, 4, 5, 8, 12, 17, 23, 30, 6, 7, 8, 9, 13, 18, 24, 31, 10, 11, 12, 13, 14, 19, 25, 32, 15, 16, 17, 18, 19, 20, 26, 33, 21, 22, 23, 24, 25, 26, 27, 34, 28, 29, 30, 31, 32, 33, 34, 35};

static const int fOff9x9[] = {0, 1, 3, 6, 10, 15, 21, 28, 36, 1, 2, 4, 7, 11, 16, 22, 29, 37, 3, 4, 5, 8, 12, 17, 23, 30, 38, 6, 7, 8, 9, 13, 18, 24, 31, 39, 10, 11, 12, 13, 14, 19, 25, 32, 40, 15, 16, 17, 18, 19, 20, 26, 33, 41, 21, 22, 23, 24, 25, 26, 27, 34, 42, 28, 29, 30, 31, 32, 33, 34, 35, 43, 36, 37, 38, 39, 40, 41, 42, 43, 44};

static const int fOff10x10[] = {0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 1, 2, 4, 7, 11, 16, 22, 29, 37, 46, 3, 4, 5, 8, 12, 17, 23, 30, 38, 47, 6, 7, 8, 9, 13, 18, 24, 31, 39, 48, 10, 11, 12, 13, 14, 19, 25, 32, 40, 49, 15, 16, 17, 18, 19, 20, 26, 33, 41, 50, 21, 22, 23, 24, 25, 26, 27, 34, 42, 51, 28, 29, 30, 31, 32, 33, 34, 35, 43, 52, 36, 37, 38, 39, 40, 41, 42, 43, 44, 53, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54};

template<>
   struct RowOffsets<1> {
      RowOffsets() {}
      int operator()(unsigned int , unsigned int ) const { return 0; } // Just one element
      int apply(unsigned int ) const { return 0; }
   };

template<>
   struct RowOffsets<2> {
      RowOffsets() {}
      int operator()(unsigned int i, unsigned int j) const { return i+j; /*fOff2x2[i*2+j];*/ }
      int apply(unsigned int i) const { return fOff2x2[i]; }
   };

template<>
   struct RowOffsets<3> {
      RowOffsets() {}
      int operator()(unsigned int i, unsigned int j) const { return fOff3x3[i*3+j]; }
      int apply(unsigned int i) const { return fOff3x3[i]; }
   };

template<>
   struct RowOffsets<4> {
     RowOffsets() {}
     int operator()(unsigned int i, unsigned int j) const { return fOff4x4[i*4+j]; }
     int apply(unsigned int i) const { return fOff4x4[i]; }
   };

   template<>
   struct RowOffsets<5> {
     inline RowOffsets() {}
     inline int operator()(unsigned int i, unsigned int j) const { return fOff5x5[i*5+j]; }
//   int operator()(unsigned int i, unsigned int j) const {
//     if(j <= i) return (i * (i + 1)) / 2 + j;
//      else return (j * (j + 1)) / 2 + i;
//     }  
   inline int apply(unsigned int i) const { return fOff5x5[i]; }
   };

template<>
   struct RowOffsets<6> {
     RowOffsets() {}
     int operator()(unsigned int i, unsigned int j) const { return fOff6x6[i*6+j]; }
     int apply(unsigned int i) const { return fOff6x6[i]; }
   };

template<>
   struct RowOffsets<7> {
     RowOffsets() {}
     int operator()(unsigned int i, unsigned int j) const { return fOff7x7[i*7+j]; }
     int apply(unsigned int i) const { return fOff7x7[i]; }
   };

template<>
   struct RowOffsets<8> {
     RowOffsets() {}
     int operator()(unsigned int i, unsigned int j) const { return fOff8x8[i*8+j]; }
     int apply(unsigned int i) const { return fOff8x8[i]; }
   };

template<>
   struct RowOffsets<9> {
     RowOffsets() {}
     int operator()(unsigned int i, unsigned int j) const { return fOff9x9[i*9+j]; }
     int apply(unsigned int i) const { return fOff9x9[i]; }
   };

template<>
   struct RowOffsets<10> {
     RowOffsets() {}
     int operator()(unsigned int i, unsigned int j) const { return fOff10x10[i*10+j]; }
     int apply(unsigned int i) const { return fOff10x10[i]; }
   };

//_________________________________________________________________________________
   /**
      MatRepSym
      Matrix storage representation for a symmetric matrix of dimension NxN
      This class is a template on the contained type and on the symmetric matrix size, N. 
      It has as data member an array of type T of size N*(N+1)/2, 
      containing the lower diagonal block of the matrix.
      The order follows the lower diagonal block, still in a row-major convention. 
      For example for a symmetric 3x3 matrix the order of the 6 elements 
      \f$ \left[a_0,a_1.....a_5 \right]\f$ is: 
      \f[
      M = \left( \begin{array}{ccc} 
      a_0 & a_1  & a_3  \\ 
      a_1 & a_2  & a_4  \\
      a_3 & a_4 & a_5   \end{array} \right)
      \f]

      @ingroup MatRep 
   */
   template <class T, unsigned int D>
   class MatRepSym {

   public: 

      MatRepSym() :fOff(0) { CreateOffsets(); } 

      typedef T  value_type;

      inline const T& operator()(unsigned int i, unsigned int j) const {
         return fArray[Offsets()(i,j)];
      }
      inline T& operator()(unsigned int i, unsigned int j) {
         return fArray[Offsets()(i,j)];
      }

      inline T& operator[](unsigned int i) { 
         return fArray[Offsets().apply(i) ];
//return fArray[Offsets()(i/D, i%D)];
      }

      inline const T& operator[](unsigned int i) const {
         return fArray[Offsets().apply(i) ];
//return fArray[Offsets()(i/D, i%D)];
      }

      inline T apply(unsigned int i) const {
         return fArray[Offsets().apply(i) ];
         //return operator()(i/D, i%D);
      }

      inline T* Array() { return fArray; }  

      inline const T* Array() const { return fArray; }  

      /**
         assignment : only symmetric to symmetric allowed
       */
      template <class R>
      inline MatRepSym<T, D>& operator=(const R&) {
         STATIC_CHECK(0==1,
                      Cannot_assign_general_to_symmetric_matrix_representation);
         return *this;
      }
      inline MatRepSym<T, D>& operator=(const MatRepSym& rhs) {
         for(unsigned int i=0; i<kSize; ++i) fArray[i] = rhs.Array()[i];
         return *this;
      }

      /**
         self addition : only symmetric to symmetric allowed
       */
      template <class R>
      inline MatRepSym<T, D>& operator+=(const R&) {
         STATIC_CHECK(0==1,
                      Cannot_add_general_to_symmetric_matrix_representation);
         return *this;
      }
      inline MatRepSym<T, D>& operator+=(const MatRepSym& rhs) {
         for(unsigned int i=0; i<kSize; ++i) fArray[i] += rhs.Array()[i];
         return *this;
      }

      /**
         self subtraction : only symmetric to symmetric allowed
       */
      template <class R>
      inline MatRepSym<T, D>& operator-=(const R&) {
         STATIC_CHECK(0==1,
                      Cannot_substract_general_to_symmetric_matrix_representation);
         return *this;
      }
      inline MatRepSym<T, D>& operator-=(const MatRepSym& rhs) {
         for(unsigned int i=0; i<kSize; ++i) fArray[i] -= rhs.Array()[i];
         return *this;
      }
      template <class R> 
      inline bool operator==(const R& rhs) const {
         bool rc = true;
         for(unsigned int i=0; i<D*D; ++i) {
            rc = rc && (operator[](i) == rhs[i]);
         }
         return rc;
      }
      
      enum {
         /// return no. of matrix rows
         kRows = D,
         /// return no. of matrix columns
         kCols = D,
         /// return no of elements: rows*columns
         kSize = D*(D+1)/2
      };

      
      void CreateOffsets() {
         const static RowOffsets<D> off;
         fOff = &off;
      }
      
      inline const RowOffsets<D> & Offsets() const {
         return *fOff;
      }

   private:
      //T __attribute__ ((aligned (16))) fArray[kSize];
      T fArray[kSize];

      const RowOffsets<D> * fOff;   //! transient

   };


 
} // namespace Math
} // namespace ROOT


#endif // MATH_MATRIXREPRESENTATIONSSTATIC_H
 MatrixRepresentationsStatic.h:1
 MatrixRepresentationsStatic.h:2
 MatrixRepresentationsStatic.h:3
 MatrixRepresentationsStatic.h:4
 MatrixRepresentationsStatic.h:5
 MatrixRepresentationsStatic.h:6
 MatrixRepresentationsStatic.h:7
 MatrixRepresentationsStatic.h:8
 MatrixRepresentationsStatic.h:9
 MatrixRepresentationsStatic.h:10
 MatrixRepresentationsStatic.h:11
 MatrixRepresentationsStatic.h:12
 MatrixRepresentationsStatic.h:13
 MatrixRepresentationsStatic.h:14
 MatrixRepresentationsStatic.h:15
 MatrixRepresentationsStatic.h:16
 MatrixRepresentationsStatic.h:17
 MatrixRepresentationsStatic.h:18
 MatrixRepresentationsStatic.h:19
 MatrixRepresentationsStatic.h:20
 MatrixRepresentationsStatic.h:21
 MatrixRepresentationsStatic.h:22
 MatrixRepresentationsStatic.h:23
 MatrixRepresentationsStatic.h:24
 MatrixRepresentationsStatic.h:25
 MatrixRepresentationsStatic.h:26
 MatrixRepresentationsStatic.h:27
 MatrixRepresentationsStatic.h:28
 MatrixRepresentationsStatic.h:29
 MatrixRepresentationsStatic.h:30
 MatrixRepresentationsStatic.h:31
 MatrixRepresentationsStatic.h:32
 MatrixRepresentationsStatic.h:33
 MatrixRepresentationsStatic.h:34
 MatrixRepresentationsStatic.h:35
 MatrixRepresentationsStatic.h:36
 MatrixRepresentationsStatic.h:37
 MatrixRepresentationsStatic.h:38
 MatrixRepresentationsStatic.h:39
 MatrixRepresentationsStatic.h:40
 MatrixRepresentationsStatic.h:41
 MatrixRepresentationsStatic.h:42
 MatrixRepresentationsStatic.h:43
 MatrixRepresentationsStatic.h:44
 MatrixRepresentationsStatic.h:45
 MatrixRepresentationsStatic.h:46
 MatrixRepresentationsStatic.h:47
 MatrixRepresentationsStatic.h:48
 MatrixRepresentationsStatic.h:49
 MatrixRepresentationsStatic.h:50
 MatrixRepresentationsStatic.h:51
 MatrixRepresentationsStatic.h:52
 MatrixRepresentationsStatic.h:53
 MatrixRepresentationsStatic.h:54
 MatrixRepresentationsStatic.h:55
 MatrixRepresentationsStatic.h:56
 MatrixRepresentationsStatic.h:57
 MatrixRepresentationsStatic.h:58
 MatrixRepresentationsStatic.h:59
 MatrixRepresentationsStatic.h:60
 MatrixRepresentationsStatic.h:61
 MatrixRepresentationsStatic.h:62
 MatrixRepresentationsStatic.h:63
 MatrixRepresentationsStatic.h:64
 MatrixRepresentationsStatic.h:65
 MatrixRepresentationsStatic.h:66
 MatrixRepresentationsStatic.h:67
 MatrixRepresentationsStatic.h:68
 MatrixRepresentationsStatic.h:69
 MatrixRepresentationsStatic.h:70
 MatrixRepresentationsStatic.h:71
 MatrixRepresentationsStatic.h:72
 MatrixRepresentationsStatic.h:73
 MatrixRepresentationsStatic.h:74
 MatrixRepresentationsStatic.h:75
 MatrixRepresentationsStatic.h:76
 MatrixRepresentationsStatic.h:77
 MatrixRepresentationsStatic.h:78
 MatrixRepresentationsStatic.h:79
 MatrixRepresentationsStatic.h:80
 MatrixRepresentationsStatic.h:81
 MatrixRepresentationsStatic.h:82
 MatrixRepresentationsStatic.h:83
 MatrixRepresentationsStatic.h:84
 MatrixRepresentationsStatic.h:85
 MatrixRepresentationsStatic.h:86
 MatrixRepresentationsStatic.h:87
 MatrixRepresentationsStatic.h:88
 MatrixRepresentationsStatic.h:89
 MatrixRepresentationsStatic.h:90
 MatrixRepresentationsStatic.h:91
 MatrixRepresentationsStatic.h:92
 MatrixRepresentationsStatic.h:93
 MatrixRepresentationsStatic.h:94
 MatrixRepresentationsStatic.h:95
 MatrixRepresentationsStatic.h:96
 MatrixRepresentationsStatic.h:97
 MatrixRepresentationsStatic.h:98
 MatrixRepresentationsStatic.h:99
 MatrixRepresentationsStatic.h:100
 MatrixRepresentationsStatic.h:101
 MatrixRepresentationsStatic.h:102
 MatrixRepresentationsStatic.h:103
 MatrixRepresentationsStatic.h:104
 MatrixRepresentationsStatic.h:105
 MatrixRepresentationsStatic.h:106
 MatrixRepresentationsStatic.h:107
 MatrixRepresentationsStatic.h:108
 MatrixRepresentationsStatic.h:109
 MatrixRepresentationsStatic.h:110
 MatrixRepresentationsStatic.h:111
 MatrixRepresentationsStatic.h:112
 MatrixRepresentationsStatic.h:113
 MatrixRepresentationsStatic.h:114
 MatrixRepresentationsStatic.h:115
 MatrixRepresentationsStatic.h:116
 MatrixRepresentationsStatic.h:117
 MatrixRepresentationsStatic.h:118
 MatrixRepresentationsStatic.h:119
 MatrixRepresentationsStatic.h:120
 MatrixRepresentationsStatic.h:121
 MatrixRepresentationsStatic.h:122
 MatrixRepresentationsStatic.h:123
 MatrixRepresentationsStatic.h:124
 MatrixRepresentationsStatic.h:125
 MatrixRepresentationsStatic.h:126
 MatrixRepresentationsStatic.h:127
 MatrixRepresentationsStatic.h:128
 MatrixRepresentationsStatic.h:129
 MatrixRepresentationsStatic.h:130
 MatrixRepresentationsStatic.h:131
 MatrixRepresentationsStatic.h:132
 MatrixRepresentationsStatic.h:133
 MatrixRepresentationsStatic.h:134
 MatrixRepresentationsStatic.h:135
 MatrixRepresentationsStatic.h:136
 MatrixRepresentationsStatic.h:137
 MatrixRepresentationsStatic.h:138
 MatrixRepresentationsStatic.h:139
 MatrixRepresentationsStatic.h:140
 MatrixRepresentationsStatic.h:141
 MatrixRepresentationsStatic.h:142
 MatrixRepresentationsStatic.h:143
 MatrixRepresentationsStatic.h:144
 MatrixRepresentationsStatic.h:145
 MatrixRepresentationsStatic.h:146
 MatrixRepresentationsStatic.h:147
 MatrixRepresentationsStatic.h:148
 MatrixRepresentationsStatic.h:149
 MatrixRepresentationsStatic.h:150
 MatrixRepresentationsStatic.h:151
 MatrixRepresentationsStatic.h:152
 MatrixRepresentationsStatic.h:153
 MatrixRepresentationsStatic.h:154
 MatrixRepresentationsStatic.h:155
 MatrixRepresentationsStatic.h:156
 MatrixRepresentationsStatic.h:157
 MatrixRepresentationsStatic.h:158
 MatrixRepresentationsStatic.h:159
 MatrixRepresentationsStatic.h:160
 MatrixRepresentationsStatic.h:161
 MatrixRepresentationsStatic.h:162
 MatrixRepresentationsStatic.h:163
 MatrixRepresentationsStatic.h:164
 MatrixRepresentationsStatic.h:165
 MatrixRepresentationsStatic.h:166
 MatrixRepresentationsStatic.h:167
 MatrixRepresentationsStatic.h:168
 MatrixRepresentationsStatic.h:169
 MatrixRepresentationsStatic.h:170
 MatrixRepresentationsStatic.h:171
 MatrixRepresentationsStatic.h:172
 MatrixRepresentationsStatic.h:173
 MatrixRepresentationsStatic.h:174
 MatrixRepresentationsStatic.h:175
 MatrixRepresentationsStatic.h:176
 MatrixRepresentationsStatic.h:177
 MatrixRepresentationsStatic.h:178
 MatrixRepresentationsStatic.h:179
 MatrixRepresentationsStatic.h:180
 MatrixRepresentationsStatic.h:181
 MatrixRepresentationsStatic.h:182
 MatrixRepresentationsStatic.h:183
 MatrixRepresentationsStatic.h:184
 MatrixRepresentationsStatic.h:185
 MatrixRepresentationsStatic.h:186
 MatrixRepresentationsStatic.h:187
 MatrixRepresentationsStatic.h:188
 MatrixRepresentationsStatic.h:189
 MatrixRepresentationsStatic.h:190
 MatrixRepresentationsStatic.h:191
 MatrixRepresentationsStatic.h:192
 MatrixRepresentationsStatic.h:193
 MatrixRepresentationsStatic.h:194
 MatrixRepresentationsStatic.h:195
 MatrixRepresentationsStatic.h:196
 MatrixRepresentationsStatic.h:197
 MatrixRepresentationsStatic.h:198
 MatrixRepresentationsStatic.h:199
 MatrixRepresentationsStatic.h:200
 MatrixRepresentationsStatic.h:201
 MatrixRepresentationsStatic.h:202
 MatrixRepresentationsStatic.h:203
 MatrixRepresentationsStatic.h:204
 MatrixRepresentationsStatic.h:205
 MatrixRepresentationsStatic.h:206
 MatrixRepresentationsStatic.h:207
 MatrixRepresentationsStatic.h:208
 MatrixRepresentationsStatic.h:209
 MatrixRepresentationsStatic.h:210
 MatrixRepresentationsStatic.h:211
 MatrixRepresentationsStatic.h:212
 MatrixRepresentationsStatic.h:213
 MatrixRepresentationsStatic.h:214
 MatrixRepresentationsStatic.h:215
 MatrixRepresentationsStatic.h:216
 MatrixRepresentationsStatic.h:217
 MatrixRepresentationsStatic.h:218
 MatrixRepresentationsStatic.h:219
 MatrixRepresentationsStatic.h:220
 MatrixRepresentationsStatic.h:221
 MatrixRepresentationsStatic.h:222
 MatrixRepresentationsStatic.h:223
 MatrixRepresentationsStatic.h:224
 MatrixRepresentationsStatic.h:225
 MatrixRepresentationsStatic.h:226
 MatrixRepresentationsStatic.h:227
 MatrixRepresentationsStatic.h:228
 MatrixRepresentationsStatic.h:229
 MatrixRepresentationsStatic.h:230
 MatrixRepresentationsStatic.h:231
 MatrixRepresentationsStatic.h:232
 MatrixRepresentationsStatic.h:233
 MatrixRepresentationsStatic.h:234
 MatrixRepresentationsStatic.h:235
 MatrixRepresentationsStatic.h:236
 MatrixRepresentationsStatic.h:237
 MatrixRepresentationsStatic.h:238
 MatrixRepresentationsStatic.h:239
 MatrixRepresentationsStatic.h:240
 MatrixRepresentationsStatic.h:241
 MatrixRepresentationsStatic.h:242
 MatrixRepresentationsStatic.h:243
 MatrixRepresentationsStatic.h:244
 MatrixRepresentationsStatic.h:245
 MatrixRepresentationsStatic.h:246
 MatrixRepresentationsStatic.h:247
 MatrixRepresentationsStatic.h:248
 MatrixRepresentationsStatic.h:249
 MatrixRepresentationsStatic.h:250
 MatrixRepresentationsStatic.h:251
 MatrixRepresentationsStatic.h:252
 MatrixRepresentationsStatic.h:253
 MatrixRepresentationsStatic.h:254
 MatrixRepresentationsStatic.h:255
 MatrixRepresentationsStatic.h:256
 MatrixRepresentationsStatic.h:257
 MatrixRepresentationsStatic.h:258
 MatrixRepresentationsStatic.h:259
 MatrixRepresentationsStatic.h:260
 MatrixRepresentationsStatic.h:261
 MatrixRepresentationsStatic.h:262
 MatrixRepresentationsStatic.h:263
 MatrixRepresentationsStatic.h:264
 MatrixRepresentationsStatic.h:265
 MatrixRepresentationsStatic.h:266
 MatrixRepresentationsStatic.h:267
 MatrixRepresentationsStatic.h:268
 MatrixRepresentationsStatic.h:269
 MatrixRepresentationsStatic.h:270
 MatrixRepresentationsStatic.h:271
 MatrixRepresentationsStatic.h:272
 MatrixRepresentationsStatic.h:273
 MatrixRepresentationsStatic.h:274
 MatrixRepresentationsStatic.h:275
 MatrixRepresentationsStatic.h:276
 MatrixRepresentationsStatic.h:277
 MatrixRepresentationsStatic.h:278
 MatrixRepresentationsStatic.h:279
 MatrixRepresentationsStatic.h:280
 MatrixRepresentationsStatic.h:281
 MatrixRepresentationsStatic.h:282
 MatrixRepresentationsStatic.h:283
 MatrixRepresentationsStatic.h:284
 MatrixRepresentationsStatic.h:285
 MatrixRepresentationsStatic.h:286
 MatrixRepresentationsStatic.h:287
 MatrixRepresentationsStatic.h:288
 MatrixRepresentationsStatic.h:289
 MatrixRepresentationsStatic.h:290
 MatrixRepresentationsStatic.h:291
 MatrixRepresentationsStatic.h:292
 MatrixRepresentationsStatic.h:293
 MatrixRepresentationsStatic.h:294
 MatrixRepresentationsStatic.h:295
 MatrixRepresentationsStatic.h:296
 MatrixRepresentationsStatic.h:297
 MatrixRepresentationsStatic.h:298
 MatrixRepresentationsStatic.h:299
 MatrixRepresentationsStatic.h:300
 MatrixRepresentationsStatic.h:301
 MatrixRepresentationsStatic.h:302
 MatrixRepresentationsStatic.h:303
 MatrixRepresentationsStatic.h:304
 MatrixRepresentationsStatic.h:305
 MatrixRepresentationsStatic.h:306
 MatrixRepresentationsStatic.h:307
 MatrixRepresentationsStatic.h:308
 MatrixRepresentationsStatic.h:309
 MatrixRepresentationsStatic.h:310
 MatrixRepresentationsStatic.h:311
 MatrixRepresentationsStatic.h:312
 MatrixRepresentationsStatic.h:313
 MatrixRepresentationsStatic.h:314
 MatrixRepresentationsStatic.h:315
 MatrixRepresentationsStatic.h:316
 MatrixRepresentationsStatic.h:317
 MatrixRepresentationsStatic.h:318
 MatrixRepresentationsStatic.h:319
 MatrixRepresentationsStatic.h:320
 MatrixRepresentationsStatic.h:321
 MatrixRepresentationsStatic.h:322
 MatrixRepresentationsStatic.h:323
 MatrixRepresentationsStatic.h:324
 MatrixRepresentationsStatic.h:325
 MatrixRepresentationsStatic.h:326
 MatrixRepresentationsStatic.h:327
 MatrixRepresentationsStatic.h:328
 MatrixRepresentationsStatic.h:329
 MatrixRepresentationsStatic.h:330
 MatrixRepresentationsStatic.h:331
 MatrixRepresentationsStatic.h:332
 MatrixRepresentationsStatic.h:333
 MatrixRepresentationsStatic.h:334
 MatrixRepresentationsStatic.h:335
 MatrixRepresentationsStatic.h:336
 MatrixRepresentationsStatic.h:337
 MatrixRepresentationsStatic.h:338
 MatrixRepresentationsStatic.h:339
 MatrixRepresentationsStatic.h:340
 MatrixRepresentationsStatic.h:341
 MatrixRepresentationsStatic.h:342
 MatrixRepresentationsStatic.h:343
 MatrixRepresentationsStatic.h:344
 MatrixRepresentationsStatic.h:345
 MatrixRepresentationsStatic.h:346
 MatrixRepresentationsStatic.h:347
 MatrixRepresentationsStatic.h:348
 MatrixRepresentationsStatic.h:349
 MatrixRepresentationsStatic.h:350
 MatrixRepresentationsStatic.h:351
 MatrixRepresentationsStatic.h:352
 MatrixRepresentationsStatic.h:353
 MatrixRepresentationsStatic.h:354
 MatrixRepresentationsStatic.h:355
 MatrixRepresentationsStatic.h:356
 MatrixRepresentationsStatic.h:357
 MatrixRepresentationsStatic.h:358
 MatrixRepresentationsStatic.h:359
 MatrixRepresentationsStatic.h:360
 MatrixRepresentationsStatic.h:361
 MatrixRepresentationsStatic.h:362
 MatrixRepresentationsStatic.h:363
 MatrixRepresentationsStatic.h:364
 MatrixRepresentationsStatic.h:365
 MatrixRepresentationsStatic.h:366
 MatrixRepresentationsStatic.h:367
 MatrixRepresentationsStatic.h:368
 MatrixRepresentationsStatic.h:369
 MatrixRepresentationsStatic.h:370
 MatrixRepresentationsStatic.h:371
 MatrixRepresentationsStatic.h:372
 MatrixRepresentationsStatic.h:373