HMSBEAGLE  1.0.0
BeagleCPU4StateImpl.h
1 /*
2  * BeagleCPU4StateImpl.h
3  * BEAGLE
4  *
5  * Copyright 2009 Phylogenetic Likelihood Working Group
6  *
7  * This file is part of BEAGLE.
8  *
9  * BEAGLE is free software: you can redistribute it and/or modify
10  * it under the terms of the GNU Lesser General Public License as
11  * published by the Free Software Foundation, either version 3 of
12  * the License, or (at your option) any later version.
13  *
14  * BEAGLE is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with BEAGLE. If not, see
21  * <http://www.gnu.org/licenses/>.
22  *
23  * @author Andrew Rambaut
24  * @author Marc Suchard
25  * @author Daniel Ayres
26  */
27 
28 #ifndef __BeagleCPU4StateImpl__
29 #define __BeagleCPU4StateImpl__
30 
31 #ifdef HAVE_CONFIG_H
32 #include "libhmsbeagle/config.h"
33 #endif
34 
35 #include "libhmsbeagle/CPU/BeagleCPUImpl.h"
36 
37 #include <vector>
38 
39 namespace beagle {
40 namespace cpu {
41 
42 //const char* beagleCPU4StateImplDoubleName = "CPU-4State-Double";
43 //const char* beagleCPU4StateImplSingleName = "CPU-4State-Single";
44 
45 BEAGLE_CPU_TEMPLATE
46 class BeagleCPU4StateImpl : public BeagleCPUImpl<BEAGLE_CPU_GENERIC> {
47 
48 protected:
67 
68 public:
69  virtual ~BeagleCPU4StateImpl();
70  virtual const char* getName();
71 
72 
73  virtual void calcStatesStates(REALTYPE* destP,
74  const int* states1,
75  const REALTYPE* matrices1,
76  const int* states2,
77  const REALTYPE* matrices2);
78 
79  virtual void calcStatesPartials(REALTYPE* destP,
80  const int* states1,
81  const REALTYPE* matrices1,
82  const REALTYPE* partials2,
83  const REALTYPE* matrices2);
84 
85  virtual void calcPartialsPartials(REALTYPE* destP,
86  const REALTYPE* partials1,
87  const REALTYPE* matrices1,
88  const REALTYPE* partials2,
89  const REALTYPE* matrices2);
90 
91  virtual int calcRootLogLikelihoods(const int bufferIndex,
92  const int categoryWeightsIndex,
93  const int stateFrequenciesIndex,
94  const int scalingFactorsIndex,
95  double* outSumLogLikelihood);
96 
97  virtual int calcRootLogLikelihoodsMulti(const int* bufferIndices,
98  const int* categoryWeightsIndices,
99  const int* stateFrequenciesIndices,
100  const int* scaleBufferIndices,
101  int count,
102  double* outSumLogLikelihood);
103 
104  virtual int calcEdgeLogLikelihoods(const int parentBufferIndex,
105  const int childBufferIndex,
106  const int probabilityIndex,
107  const int categoryWeightsIndex,
108  const int stateFrequenciesIndex,
109  const int scalingFactorsIndex,
110  double* outSumLogLikelihood);
111 
112  virtual void calcStatesStatesFixedScaling(REALTYPE *destP,
113  const int *child0States,
114  const REALTYPE *child0TransMat,
115  const int *child1States,
116  const REALTYPE *child1TransMat,
117  const REALTYPE *scaleFactors);
118 
119  virtual void calcStatesPartialsFixedScaling(REALTYPE *destP,
120  const int *child0States,
121  const REALTYPE *child0TransMat,
122  const REALTYPE *child1Partials,
123  const REALTYPE *child1TransMat,
124  const REALTYPE *scaleFactors);
125 
126  virtual void calcPartialsPartialsFixedScaling(REALTYPE *destP,
127  const REALTYPE *child0Partials,
128  const REALTYPE *child0TransMat,
129  const REALTYPE *child1Partials,
130  const REALTYPE *child1TransMat,
131  const REALTYPE *scaleFactors);
132 
133  virtual void calcPartialsPartialsAutoScaling(REALTYPE *destP,
134  const REALTYPE *child0Partials,
135  const REALTYPE *child0TransMat,
136  const REALTYPE *child1Partials,
137  const REALTYPE *child1TransMat,
138  int *activateScaling);
139 
140 
141  inline int integrateOutStatesAndScale(const REALTYPE* integrationTmp,
142  const int stateFrequenciesIndex,
143  const int scalingFactorsIndex,
144  double* outSumLogLikelihood);
145 
146  virtual void rescalePartials(REALTYPE *destP,
147  REALTYPE *scaleFactors,
148  REALTYPE *cumulativeScaleFactors,
149  const int fillWithOnes);
150 
151 };
152 
153 BEAGLE_CPU_FACTORY_TEMPLATE
155 public:
156  virtual BeagleImpl* createImpl(int tipCount,
157  int partialsBufferCount,
158  int compactBufferCount,
159  int stateCount,
160  int patternCount,
161  int eigenBufferCount,
162  int matrixBufferCount,
163  int categoryCount,
164  int scaleBufferCount,
165  int resourceNumber,
166  long preferenceFlags,
167  long requirementFlags,
168  int* errorCode);
169 
170  virtual const char* getName();
171  virtual const long getFlags();
172 };
173 
174 } // namespace cpu
175 } // namespace beagle
176 
177 // now include the file containing template function implementations
178 #include "libhmsbeagle/CPU/BeagleCPU4StateImpl.hpp"
179 
180 #endif // __BeagleCPU4StateImpl__