bpp-phyl3 3.0.0
AbstractWrappedModel.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: The Bio++ Development Group
2//
3// SPDX-License-Identifier: CECILL-2.1
4
5#ifndef BPP_PHYL_MODEL_ABSTRACTWRAPPEDMODEL_H
6#define BPP_PHYL_MODEL_ABSTRACTWRAPPEDMODEL_H
7
10
11#include "WrappedModel.h"
13
14namespace bpp
15{
22 public virtual AbstractParameterAliasable,
23 public virtual WrappedModelInterface
24{
25public:
26 AbstractWrappedModel(const std::string& prefix) :
28 {}
29
31
32public:
38 const std::vector<int>& getAlphabetStates() const override { return model().getAlphabetStates(); }
39
40 const StateMapInterface& stateMap() const override { return model().stateMap(); }
41
42 std::shared_ptr<const StateMapInterface> getStateMap() const override { return model().getStateMap(); }
43
44 int getAlphabetStateAsInt(size_t i) const override { return model().getAlphabetStateAsInt(i); }
45
46 std::string getAlphabetStateAsChar(size_t i) const override { return model().getAlphabetStateAsChar(i); }
47
48 std::vector<size_t> getModelStates(int code) const override { return model().getModelStates(code); }
49
50 std::vector<size_t> getModelStates(const std::string& code) const override { return model().getModelStates(code); }
51
52
53 const Alphabet& alphabet() const override { return model().alphabet(); }
54
55 std::shared_ptr<const Alphabet> getAlphabet() const override { return model().getAlphabet(); }
56
57 size_t getNumberOfStates() const override { return model().getNumberOfStates(); }
58
59 const FrequencySetInterface& frequencySet() const override
60 {
61 return model().frequencySet();
62 }
63
67 virtual std::string getName() const override
68 {
69 return model().getName();
70 }
71};
72
74 public virtual AbstractWrappedModel,
75 public virtual AbstractLkTransitionModel,
77{
78public:
79 AbstractWrappedTransitionModel(const std::string& prefix) :
81 {}
82
83protected:
85 {
86 return transitionModel_();
87 }
88
90
91public:
92 const FrequencySetInterface& frequencySet() const override
93 {
95 }
96
97 const BranchModelInterface& model() const override
98 {
99 return transitionModel();
100 }
101};
102
103
105 public virtual AbstractWrappedTransitionModel
106{
107public:
108 AbstractTotallyWrappedTransitionModel(const std::string& prefix) :
110
112
113public:
119 double freq(size_t i) const override { return transitionModel().freq(i); }
120
121 double Pij_t (size_t i, size_t j, double t) const override { return transitionModel().Pij_t(i, j, t); }
122 double dPij_dt (size_t i, size_t j, double t) const override { return transitionModel().dPij_dt (i, j, t); }
123 double d2Pij_dt2(size_t i, size_t j, double t) const override { return transitionModel().d2Pij_dt2(i, j, t); }
124
125 const Vdouble& getFrequencies() const override { return transitionModel().getFrequencies(); }
126
127 const Matrix<double>& getPij_t(double t) const override { return transitionModel().getPij_t(t); }
128
129 const Matrix<double>& getdPij_dt(double t) const override { return transitionModel().getdPij_dt(t); }
130
131 const Matrix<double>& getd2Pij_dt2(double t) const override { return transitionModel().getd2Pij_dt2(t); }
132
133 double getInitValue(size_t i, int state) const override
134 {
135 return transitionModel().getInitValue(i, state);
136 }
137
138 double getRate() const override
139 {
140 return transitionModel().getRate();
141 }
142
143 void setRate(double rate) override
144 {
145 return transitionModel_().setRate(rate);
146 }
147
148 void setFreqFromData(const SequenceDataInterface& data, double pseudoCount = 0) override
149 {
150 std::map<int, double> freqs;
151 SequenceContainerTools::getFrequencies(data, freqs, pseudoCount);
152 // Re-compute generator and eigen values:
153 transitionModel_().setFreq(freqs);
154 }
155
156 void setFreq(std::map<int, double>& frequencies) override
157 {
158 transitionModel_().setFreq(frequencies);
159 }
160
161 bool computeFrequencies() const override
162 {
164 }
165
170 void computeFrequencies(bool yn) override
171 {
173 }
174
179protected:
181 {
183 }
184};
185
186
188 public virtual AbstractWrappedTransitionModel,
190{
191public:
192 AbstractWrappedSubstitutionModel(const std::string& prefix) :
194 {}
195
197
199 {
200 return substitutionModel();
201 }
202
203protected:
205 {
206 return substitutionModel_();
207 }
208
210};
211
215{
216public:
217 AbstractTotallyWrappedSubstitutionModel(const std::string& prefix) :
220 {}
221
223
229 double Qij(size_t i, size_t j) const { return substitutionModel().Qij(i, j); }
230
232
234
235 double Sij(size_t i, size_t j) const { return substitutionModel().Sij(i, j); }
236
238
240
242
243 bool isNonSingular() const { return substitutionModel().isNonSingular(); }
244
246
248
250
252
253
257 bool isScalable() const
258 {
259 return substitutionModel().isScalable();
260 }
261
262 void setScalable(bool scalable)
263 {
265 }
266
268 {
270 }
271
273 {
275 }
276
277 double getScale() const
278 {
279 return substitutionModel().getScale();
280 }
281
282 void setScale(double scale)
283 {
285 }
286};
287} // end of namespace bpp.
288#endif // BPP_PHYL_MODEL_ABSTRACTWRAPPEDMODEL_H
Partial implementation of the TransitionModel interface, with function for likelihood computations.
void setDiagonal()
set the diagonal of the generator such that sum on each line equals 0.
void setScale(double scale)
Multiplies the current generator by the given scale.
void setScalable(bool scalable)
sets if model is scalable, ie scale can be changed. Default : true, set to false to avoid normalizati...
const Matrix< double > & exchangeabilityMatrix() const
bool isScalable() const
returns if model is scalable
bool enableEigenDecomposition()
Tell if eigenValues and Vectors must be computed.
double Qij(size_t i, size_t j) const
Methods to supersede SubstitutionModel methods.
const Matrix< double > & getRowLeftEigenVectors() const
const Matrix< double > & generator() const
const Matrix< double > & getColumnRightEigenVectors() const
void enableEigenDecomposition(bool yn)
Set if eigenValues and Vectors must be computed.
double getScale() const
Get the scalar product of diagonal elements of the generator and the frequencies vector....
AbstractTotallyWrappedSubstitutionModel(const std::string &prefix)
double getRate() const override
Get the rate.
void computeFrequencies(bool yn) override
Set if equilibrium frequencies should be computed from the generator.
double Pij_t(size_t i, size_t j, double t) const override
void setFreqFromData(const SequenceDataInterface &data, double pseudoCount=0) override
Set equilibrium frequencies equal to the frequencies estimated from the data.
double getInitValue(size_t i, int state) const override
const Matrix< double > & getd2Pij_dt2(double t) const override
double d2Pij_dt2(size_t i, size_t j, double t) const override
const Matrix< double > & getPij_t(double t) const override
double freq(size_t i) const override
Methods to supersede TransitionModel methods.
void setFreq(std::map< int, double > &frequencies) override
Set equilibrium frequencies.
const Vdouble & getFrequencies() const override
const Matrix< double > & getdPij_dt(double t) const override
void setRate(double rate) override
Set the rate of the model (must be positive).
AbstractTotallyWrappedTransitionModel(const std::string &prefix)
double dPij_dt(size_t i, size_t j, double t) const override
Abstract class of Wrapping model class, where all methods are redirected from model().
AbstractWrappedModel(const std::string &prefix)
std::shared_ptr< const StateMapInterface > getStateMap() const override
const Alphabet & alphabet() const override
const std::vector< int > & getAlphabetStates() const override
std::shared_ptr< const Alphabet > getAlphabet() const override
std::string getAlphabetStateAsChar(size_t i) const override
std::vector< size_t > getModelStates(const std::string &code) const override
Get the state in the model corresponding to a particular state in the alphabet.
virtual std::string getName() const override
Get the name of the model.
std::vector< size_t > getModelStates(int code) const override
Get the state in the model corresponding to a particular state in the alphabet.
const FrequencySetInterface & frequencySet() const override
const StateMapInterface & stateMap() const override
size_t getNumberOfStates() const override
Get the number of states.
int getAlphabetStateAsInt(size_t i) const override
virtual SubstitutionModelInterface & substitutionModel_()=0
const TransitionModelInterface & transitionModel() const
TransitionModelInterface & transitionModel_()
AbstractWrappedSubstitutionModel(const std::string &prefix)
const BranchModelInterface & model() const override
virtual TransitionModelInterface & transitionModel_()=0
const FrequencySetInterface & frequencySet() const override
AbstractWrappedTransitionModel(const std::string &prefix)
Interface for all Branch models.
virtual int getAlphabetStateAsInt(size_t index) const =0
virtual std::vector< size_t > getModelStates(int code) const =0
Get the state in the model corresponding to a particular state in the alphabet.
virtual const FrequencySetInterface & frequencySet() const =0
virtual const std::vector< int > & getAlphabetStates() const =0
virtual std::string getAlphabetStateAsChar(size_t index) const =0
virtual std::shared_ptr< const Alphabet > getAlphabet() const =0
virtual void setRate(double rate)=0
Set the rate of the model (must be positive).
virtual size_t getNumberOfStates() const =0
Get the number of states.
virtual std::string getName() const =0
Get the name of the model.
virtual double getRate() const =0
Get the rate.
virtual double getInitValue(size_t i, int state) const =0
virtual const Alphabet & alphabet() const =0
virtual std::shared_ptr< const StateMapInterface > getStateMap() const =0
virtual const StateMapInterface & stateMap() const =0
Parametrize a set of state frequencies.
Definition: FrequencySet.h:29
static void getFrequencies(const SequenceContainerInterface &sc, std::map< int, double > &f, double pseudoCount=0)
Map the states of a given alphabet which have a model state.
Definition: StateMap.h:25
Interface for all substitution models.
virtual bool isDiagonalizable() const =0
virtual void setScalable(bool scalable)=0
sets if model is scalable, ie scale can be changed. Default : true, set to false to avoid normalizati...
virtual const Matrix< double > & generator() const =0
virtual void enableEigenDecomposition(bool yn)=0
Set if eigenValues and Vectors must be computed.
virtual void normalize()=0
Normalize the generator.
virtual const Vdouble & getIEigenValues() const =0
virtual double getScale() const =0
Get the scalar product of diagonal elements of the generator and the frequencies vector....
virtual double Sij(size_t i, size_t j) const =0
virtual const Matrix< double > & getColumnRightEigenVectors() const =0
virtual bool isScalable() const =0
returns if model is scalable
virtual const Matrix< double > & exchangeabilityMatrix() const =0
virtual const Matrix< double > & getRowLeftEigenVectors() const =0
virtual void setDiagonal()=0
set the diagonal of the generator such that sum on each line equals 0.
virtual bool isNonSingular() const =0
virtual void setScale(double scale)=0
Multiplies the current generator by the given scale.
virtual double Qij(size_t i, size_t j) const =0
A method for computing all necessary matrices.
virtual const Vdouble & getEigenValues() const =0
Interface for all transition models.
virtual Vdouble & getFrequencies_()=0
virtual const Matrix< double > & getPij_t(double t) const =0
virtual const Matrix< double > & getdPij_dt(double t) const =0
virtual const Vdouble & getFrequencies() const =0
virtual double Pij_t(size_t i, size_t j, double t) const =0
virtual double freq(size_t i) const =0
virtual double d2Pij_dt2(size_t i, size_t j, double t) const =0
virtual const Matrix< double > & getd2Pij_dt2(double t) const =0
virtual void setFreq(std::map< int, double > &frequencies)=0
Set equilibrium frequencies.
virtual double dPij_dt(size_t i, size_t j, double t) const =0
virtual bool computeFrequencies() const =0
Wrapping model interface.
Definition: WrappedModel.h:19
virtual const BranchModelInterface & model() const =0
virtual const SubstitutionModelInterface & substitutionModel() const =0
virtual const TransitionModelInterface & transitionModel() const =0
Defines the basic types of data flow nodes.
std::vector< double > Vdouble