HMSBEAGLE  1.0.0
libhmsbeagle/CPU/EigenDecompositionCube.h
00001 /*
00002  * EigenDecompositionCube.h
00003  *
00004  *  Created on: Sep 24, 2009
00005  *      Author: msuchard
00006  */
00007 
00008 #ifndef EIGENDECOMPOSITIONCUBE_H_
00009 #define EIGENDECOMPOSITIONCUBE_H_
00010 
00011 #include "libhmsbeagle/CPU/EigenDecomposition.h"
00012 
00013 namespace beagle {
00014 namespace cpu {
00015 
00016 BEAGLE_CPU_EIGEN_TEMPLATE
00017 class EigenDecompositionCube : public EigenDecomposition<BEAGLE_CPU_EIGEN_GENERIC> {
00018 
00019         using EigenDecomposition<BEAGLE_CPU_EIGEN_GENERIC>::gEigenValues;
00020         using EigenDecomposition<BEAGLE_CPU_EIGEN_GENERIC>::kStateCount;
00021         using EigenDecomposition<BEAGLE_CPU_EIGEN_GENERIC>::kEigenDecompCount;
00022         using EigenDecomposition<BEAGLE_CPU_EIGEN_GENERIC>::kCategoryCount;
00023         using EigenDecomposition<BEAGLE_CPU_EIGEN_GENERIC>::matrixTmp;
00024         using EigenDecomposition<BEAGLE_CPU_EIGEN_GENERIC>::firstDerivTmp;
00025         using EigenDecomposition<BEAGLE_CPU_EIGEN_GENERIC>::secondDerivTmp;
00026         using EigenDecomposition<BEAGLE_CPU_EIGEN_GENERIC>::kFlags;
00027 
00028 protected:
00029     REALTYPE** gCMatrices;
00030 
00031 public:
00032         EigenDecompositionCube(int decompositionCount, 
00033                                                    int stateCount, 
00034                                                    int categoryCount,
00035                            long flags);
00036         
00037         virtual ~EigenDecompositionCube();
00038         
00039     virtual void setEigenDecomposition(int eigenIndex,
00040                               const double* inEigenVectors,
00041                               const double* inInverseEigenVectors,
00042                               const double* inEigenValues);
00043                 
00044     virtual void updateTransitionMatrices(int eigenIndex,
00045                                  const int* probabilityIndices,
00046                                  const int* firstDerivativeIndices,
00047                                  const int* secondDerivativeIndices,
00048                                  const double* edgeLengths,
00049                                  const double* categoryRates,
00050                                  REALTYPE** transitionMatrices,
00051                                  int count);
00052         
00053 };
00054 
00055 }
00056 }
00057 
00058 // Include the template implementation
00059 #include "libhmsbeagle/CPU/EigenDecompositionCube.hpp"
00060 
00061 #endif /* EIGENDECOMPOSITIONCUBE_H_ */