HMSBEAGLE
1.0.0
|
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_ */