HMSBEAGLE  1.0.0
BeagleImpl.h
1 /*
2  * BeagleImpl.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 __beagle_impl__
29 #define __beagle_impl__
30 
31 #include "libhmsbeagle/beagle.h"
32 
33 #ifdef DOUBLE_PRECISION
34 #define REAL double
35 #else
36 #define REAL float
37 #endif
38 
39 namespace beagle {
40 
42 {
43 public:
44  virtual ~BeagleImpl(){}
45 
46  virtual int createInstance(int tipCount,
47  int partialsBufferCount,
48  int compactBufferCount,
49  int stateCount,
50  int patternCount,
51  int eigenBufferCount,
52  int matrixBufferCount,
53  int categoryCount,
54  int scaleBufferCount,
55  int resourceNumber,
56  long preferenceFlags,
57  long requirementFlags) = 0;
58 
59  virtual int getInstanceDetails(BeagleInstanceDetails* returnInfo) = 0;
60 
61  virtual int setTipStates(int tipIndex,
62  const int* inStates) = 0;
63 
64  virtual int setTipPartials(int tipIndex,
65  const double* inPartials) = 0;
66 
67  virtual int setPartials(int bufferIndex,
68  const double* inPartials) = 0;
69 
70  virtual int getPartials(int bufferIndex,
71  int scaleIndex,
72  double* outPartials) = 0;
73 
74  virtual int setEigenDecomposition(int eigenIndex,
75  const double* inEigenVectors,
76  const double* inInverseEigenVectors,
77  const double* inEigenValues) = 0;
78 
79  virtual int setStateFrequencies(int stateFrequenciesIndex,
80  const double* inStateFrequencies) = 0;
81 
82  virtual int setCategoryWeights(int categoryWeightsIndex,
83  const double* inCategoryWeights) = 0;
84 
85  virtual int setPatternWeights(const double* inPatternWeights) = 0;
86 
87  virtual int setCategoryRates(const double* inCategoryRates) = 0;
88 
89  virtual int setTransitionMatrix(int matrixIndex,
90  const double* inMatrix,
91  double paddedValue) = 0;
92 
93  virtual int setTransitionMatrices(const int* matrixIndices,
94  const double* inMatrices,
95  const double* paddedValues,
96  int count) = 0;
97 
98  virtual int getTransitionMatrix(int matrixIndex,
99  double* outMatrix) = 0;
100 
101  virtual int updateTransitionMatrices(int eigenIndex,
102  const int* probabilityIndices,
103  const int* firstDerivativeIndices,
104  const int* secondDerivativeIndices,
105  const double* edgeLengths,
106  int count) = 0;
107 
108  virtual int updatePartials(const int* operations,
109  int operationCount,
110  int cumulativeScalingIndex) = 0;
111 
112  virtual int waitForPartials(const int* destinationPartials,
113  int destinationPartialsCount) = 0;
114 
115  virtual int accumulateScaleFactors(const int* scalingIndices,
116  int count,
117  int cumulativeScalingIndex) = 0;
118 
119  virtual int removeScaleFactors(const int* scalingIndices,
120  int count,
121  int cumulativeScalingIndex) = 0;
122 
123  virtual int resetScaleFactors(int cumulativeScalingIndex) = 0;
124 
125  virtual int copyScaleFactors(int destScalingIndex,
126  int srcScalingIndex) = 0;
127 
128  virtual int calculateRootLogLikelihoods(const int* bufferIndices,
129  const int* categoryWeightsIndices,
130  const int* stateFrequenciesIndices,
131  const int* scalingFactorsIndices,
132  int count,
133  double* outSumLogLikelihood) = 0;
134 
135  virtual int calculateEdgeLogLikelihoods(const int* parentBufferIndices,
136  const int* childBufferIndices,
137  const int* probabilityIndices,
138  const int* firstDerivativeIndices,
139  const int* secondDerivativeIndices,
140  const int* categoryWeightsIndices,
141  const int* stateFrequenciesIndices,
142  const int* scalingFactorsIndices,
143  int count,
144  double* outSumLogLikelihood,
145  double* outSumFirstDerivative,
146  double* outSumSecondDerivative) = 0;
147 
148  virtual int getSiteLogLikelihoods(double* outLogLikelihoods) = 0;
149 
150  virtual int getSiteDerivatives(double* outFirstDerivatives,
151  double* outSecondDerivatives) = 0;
152 //protected:
153  int resourceNumber;
154 };
155 
157 public:
158  virtual BeagleImpl* createImpl(int tipCount,
159  int partialsBufferCount,
160  int compactBufferCount,
161  int stateCount,
162  int patternCount,
163  int eigenBufferCount,
164  int matrixBufferCount,
165  int categoryCount,
166  int scaleBufferCount,
167  int resourceNumber,
168  long preferenceFlags,
169  long requirementFlags,
170  int* errorCode) = 0; // pure virtual
171 
172  virtual const char* getName() = 0; // pure virtual
173 
174  virtual const long getFlags() = 0; // pure virtual
175 };
176 
177 } // end namespace beagle
178 
179 #endif // __beagle_impl__