54 const std::string& prefix,
58 hiddenAlphabet_(hiddenAlphabet),
59 transitionMatrix_(transitionMatrix),
60 emissionProbabilities_(emissionProbabilities),
70 throw Exception(
"LowMemoryRescaledHmmLikelihood: null pointer passed for HmmStateAlphabet.");
71 if (!transitionMatrix)
72 throw Exception(
"LowMemoryRescaledHmmLikelihood: null pointer passed for HmmTransitionMatrix.");
73 if (!emissionProbabilities)
74 throw Exception(
"LowMemoryRescaledHmmLikelihood: null pointer passed for HmmEmissionProbabilities.");
76 throw Exception(
"LowMemoryRescaledHmmLikelihood: HmmTransitionMatrix and HmmEmissionProbabilities should point toward the same HmmStateAlphabet object.");
78 throw Exception(
"LowMemoryRescaledHmmLikelihood: HmmTransitionMatrix and HmmEmissionProbabilities should point toward the same HmmStateAlphabet object.");
112 if (alphabetChanged && !transitionsChanged)
114 if (alphabetChanged && !emissionChanged)
141 const vector<double>* emissions = &(*emissionProbabilities_)(0);
150 tmp[j] = (*emissions)[j] * x;
157 lScales[0] = log(scale);
163 vector<size_t>::const_iterator bpIt =
breakPoints_.begin();
171 for (
size_t i = 1; i <
nbSites_; i++)
174 tmpLikelihood = previousLikelihood;
175 previousLikelihood = currentLikelihood;
176 currentLikelihood = tmpLikelihood;
179 emissions = &(*emissionProbabilities_)(i);
188 a = trans[jj + k] * (*previousLikelihood)[k];
196 tmp[j] = (*emissions)[j] * x;
221 tmp[j] = (*emissions)[j] * x;
239 (*currentLikelihood)[j] = tmp[j] / scale;
241 (*currentLikelihood)[j] = 0;
243 lScales[i - offset] = log(scale);
248 double partialLogLik = 0;
249 sort(lScales.begin(), lScales.end(), cmp);
250 for (
size_t j = 0; j <
maxSize_; ++j)
252 partialLogLik += lScales[j];
258 sort(lScales.begin(), lScales.begin() +
static_cast<ptrdiff_t
>(
nbSites_ - offset), cmp);
259 double partialLogLik = 0;
260 for (
size_t i = 0; i <
nbSites_ - offset; ++i)
262 partialLogLik += lScales[i];
A partial implementation of the Parametrizable interface.
void setNamespace(const std::string &prefix)
Set the namespace for the parameter names.
virtual void addParameters_(const ParameterList ¶meters)
Exception base class. Overload exception constructor (to control the exceptions mechanism)....
Interface for computing emission probabilities in a Hidden Markov Model.
virtual const HmmStateAlphabet * getHmmStateAlphabet() const =0
Describe the transition probabilities between hidden states of a Hidden Markov Model.
virtual const HmmStateAlphabet * getHmmStateAlphabet() const =0
void setNamespace(const std::string &nameSpace)
Set the namespace for the parameter names.
std::unique_ptr< HmmStateAlphabet > hiddenAlphabet_
The alphabet describing the hidden states.
std::unique_ptr< HmmTransitionMatrix > transitionMatrix_
std::vector< size_t > breakPoints_
void fireParameterChanged(const ParameterList &pl)
Notify the class when one or several parameters have changed.
std::vector< double > likelihood1_
The likelihood array.
LowMemoryRescaledHmmLikelihood(HmmStateAlphabet *hiddenAlphabet, HmmTransitionMatrix *transitionMatrix, HmmEmissionProbabilities *emissionProbabilities, const std::string &prefix, size_t maxSize=1000000)
Build a new LowMemoryRescaledHmmLikelihood object.
std::unique_ptr< HmmEmissionProbabilities > emissionProbabilities_
std::vector< double > likelihood2_
The parameter list object.