HMSBEAGLE
1.0.0
|
00001 /* 00002 * BeagleCPU4StateImpl.h 00003 * BEAGLE 00004 * 00005 * Copyright 2009 Phylogenetic Likelihood Working Group 00006 * 00007 * This file is part of BEAGLE. 00008 * 00009 * BEAGLE is free software: you can redistribute it and/or modify 00010 * it under the terms of the GNU Lesser General Public License as 00011 * published by the Free Software Foundation, either version 3 of 00012 * the License, or (at your option) any later version. 00013 * 00014 * BEAGLE is distributed in the hope that it will be useful, 00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 * GNU Lesser General Public License for more details. 00018 * 00019 * You should have received a copy of the GNU Lesser General Public 00020 * License along with BEAGLE. If not, see 00021 * <http://www.gnu.org/licenses/>. 00022 * 00023 * @author Andrew Rambaut 00024 * @author Marc Suchard 00025 * @author Daniel Ayres 00026 */ 00027 00028 #ifndef __BeagleCPU4StateImpl__ 00029 #define __BeagleCPU4StateImpl__ 00030 00031 #ifdef HAVE_CONFIG_H 00032 #include "libhmsbeagle/config.h" 00033 #endif 00034 00035 #include "libhmsbeagle/CPU/BeagleCPUImpl.h" 00036 00037 #include <vector> 00038 00039 namespace beagle { 00040 namespace cpu { 00041 00042 //const char* beagleCPU4StateImplDoubleName = "CPU-4State-Double"; 00043 //const char* beagleCPU4StateImplSingleName = "CPU-4State-Single"; 00044 00045 BEAGLE_CPU_TEMPLATE 00046 class BeagleCPU4StateImpl : public BeagleCPUImpl<BEAGLE_CPU_GENERIC> { 00047 00048 protected: 00049 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::kFlags; 00050 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::kTipCount; 00051 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::gPartials; 00052 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::integrationTmp; 00053 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::gTransitionMatrices; 00054 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::kPatternCount; 00055 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::kPaddedPatternCount; 00056 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::kExtraPatterns; 00057 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::kStateCount; 00058 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::gTipStates; 00059 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::kCategoryCount; 00060 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::gScaleBuffers; 00061 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::gStateFrequencies; 00062 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::gCategoryWeights; 00063 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::gPatternWeights; 00064 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::outLogLikelihoodsTmp; 00065 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::realtypeMin; 00066 using BeagleCPUImpl<BEAGLE_CPU_GENERIC>::scalingExponentThreshhold; 00067 00068 public: 00069 virtual ~BeagleCPU4StateImpl(); 00070 virtual const char* getName(); 00071 00072 00073 virtual void calcStatesStates(REALTYPE* destP, 00074 const int* states1, 00075 const REALTYPE* matrices1, 00076 const int* states2, 00077 const REALTYPE* matrices2); 00078 00079 virtual void calcStatesPartials(REALTYPE* destP, 00080 const int* states1, 00081 const REALTYPE* matrices1, 00082 const REALTYPE* partials2, 00083 const REALTYPE* matrices2); 00084 00085 virtual void calcPartialsPartials(REALTYPE* destP, 00086 const REALTYPE* partials1, 00087 const REALTYPE* matrices1, 00088 const REALTYPE* partials2, 00089 const REALTYPE* matrices2); 00090 00091 virtual int calcRootLogLikelihoods(const int bufferIndex, 00092 const int categoryWeightsIndex, 00093 const int stateFrequenciesIndex, 00094 const int scalingFactorsIndex, 00095 double* outSumLogLikelihood); 00096 00097 virtual int calcRootLogLikelihoodsMulti(const int* bufferIndices, 00098 const int* categoryWeightsIndices, 00099 const int* stateFrequenciesIndices, 00100 const int* scaleBufferIndices, 00101 int count, 00102 double* outSumLogLikelihood); 00103 00104 virtual int calcEdgeLogLikelihoods(const int parentBufferIndex, 00105 const int childBufferIndex, 00106 const int probabilityIndex, 00107 const int categoryWeightsIndex, 00108 const int stateFrequenciesIndex, 00109 const int scalingFactorsIndex, 00110 double* outSumLogLikelihood); 00111 00112 virtual void calcStatesStatesFixedScaling(REALTYPE *destP, 00113 const int *child0States, 00114 const REALTYPE *child0TransMat, 00115 const int *child1States, 00116 const REALTYPE *child1TransMat, 00117 const REALTYPE *scaleFactors); 00118 00119 virtual void calcStatesPartialsFixedScaling(REALTYPE *destP, 00120 const int *child0States, 00121 const REALTYPE *child0TransMat, 00122 const REALTYPE *child1Partials, 00123 const REALTYPE *child1TransMat, 00124 const REALTYPE *scaleFactors); 00125 00126 virtual void calcPartialsPartialsFixedScaling(REALTYPE *destP, 00127 const REALTYPE *child0Partials, 00128 const REALTYPE *child0TransMat, 00129 const REALTYPE *child1Partials, 00130 const REALTYPE *child1TransMat, 00131 const REALTYPE *scaleFactors); 00132 00133 virtual void calcPartialsPartialsAutoScaling(REALTYPE *destP, 00134 const REALTYPE *child0Partials, 00135 const REALTYPE *child0TransMat, 00136 const REALTYPE *child1Partials, 00137 const REALTYPE *child1TransMat, 00138 int *activateScaling); 00139 00140 00141 inline int integrateOutStatesAndScale(const REALTYPE* integrationTmp, 00142 const int stateFrequenciesIndex, 00143 const int scalingFactorsIndex, 00144 double* outSumLogLikelihood); 00145 00146 virtual void rescalePartials(REALTYPE *destP, 00147 REALTYPE *scaleFactors, 00148 REALTYPE *cumulativeScaleFactors, 00149 const int fillWithOnes); 00150 00151 }; 00152 00153 BEAGLE_CPU_FACTORY_TEMPLATE 00154 class BeagleCPU4StateImplFactory : public BeagleImplFactory { 00155 public: 00156 virtual BeagleImpl* createImpl(int tipCount, 00157 int partialsBufferCount, 00158 int compactBufferCount, 00159 int stateCount, 00160 int patternCount, 00161 int eigenBufferCount, 00162 int matrixBufferCount, 00163 int categoryCount, 00164 int scaleBufferCount, 00165 int resourceNumber, 00166 long preferenceFlags, 00167 long requirementFlags, 00168 int* errorCode); 00169 00170 virtual const char* getName(); 00171 virtual const long getFlags(); 00172 }; 00173 00174 } // namespace cpu 00175 } // namespace beagle 00176 00177 // now include the file containing template function implementations 00178 #include "libhmsbeagle/CPU/BeagleCPU4StateImpl.hpp" 00179 00180 #endif // __BeagleCPU4StateImpl__