42 #include "../../App/ApplicationTools.h"
55 const std::string& prefix) :
58 hiddenAlphabet_(hiddenAlphabet),
59 transitionMatrix_(transitionMatrix),
60 emissionProbabilities_(emissionProbabilities),
65 backLikelihoodUpToDate_(false),
75 throw Exception(
"RescaledHmmLikelihood: null pointer passed for HmmStateAlphabet.");
76 if (!transitionMatrix)
77 throw Exception(
"RescaledHmmLikelihood: null pointer passed for HmmTransitionMatrix.");
78 if (!emissionProbabilities)
79 throw Exception(
"RescaledHmmLikelihood: null pointer passed for HmmEmissionProbabilities.");
81 throw Exception(
"RescaledHmmLikelihood: HmmTransitionMatrix and HmmEmissionProbabilities should point toward the same HmmStateAlphabet object.");
83 throw Exception(
"RescaledHmmLikelihood: HmmTransitionMatrix and HmmEmissionProbabilities should point toward the same HmmStateAlphabet object.");
118 if (alphabetChanged && !transitionsChanged)
120 if (alphabetChanged && !emissionChanged)
143 if (std::isnan(trans[ii + j]))
144 throw Exception(
"RescaledHmmLikelihood::computeForward_. NaN transition probability");
145 if (trans[ii + j] < 0)
152 const vector<double>* emissions = &(*emissionProbabilities_)(0);
162 tmp[j] = (*emissions)[j] * x;
174 vector<size_t>::const_iterator bpIt =
breakPoints_.begin();
179 for (
size_t i = 1; i <
nbSites_; i++)
184 emissions = &(*emissionProbabilities_)(i);
201 tmp[j] = (*emissions)[j] * x;
204 (*
ApplicationTools::warning <<
"Negative probability at " << i <<
", state " << j <<
": " << (*emissions)[j] <<
"\t" << x).endLine();
226 tmp[j] = (*emissions)[j] * x;
251 sort(lScales.begin(), lScales.end(), cmp);
253 for (
size_t i = 0; i <
nbSites_; ++i)
266 for (
size_t i = 0; i <
nbSites_; i++)
287 const vector<double>* emissions = 0;
288 size_t nextBrkPt = 0;
289 vector<size_t>::const_reverse_iterator bpIt =
breakPoints_.rbegin();
300 for (
size_t i =
nbSites_ - 1; i > 0; i--)
302 emissions = &(*emissionProbabilities_)(i);
341 x += probs[i] * (*emissionProbabilities_)(site, i);
349 std::vector< std::vector<double> > vv;
353 for (
size_t i = 0; i <
nbSites_; i++)
358 ret[i] += vv[i][j] * (*emissionProbabilities_)(i, j);
385 size_t offset = append ? probs.size() : 0;
387 for (
size_t i = 0; i <
nbSites_; i++)
395 for (
size_t i = 0; i <
nbSites_; i++)
413 for (
size_t i = 0; i <
nbSites_; i++)
430 const vector<double>* emissions = &(*emissionProbabilities_)(0);
452 vector<size_t>::const_iterator bpIt =
breakPoints_.begin();
456 for (
size_t i = 1; i <
nbSites_; i++)
462 emissions = &(*emissionProbabilities_)(i);
475 tmp[j] = (*emissions)[j] * x;
507 sort(dLScales.begin(), dLScales.end(), cmp);
509 for (
size_t i = 0; i <
nbSites_; ++i)
529 for (
size_t i = 0; i <
nbSites_; i++)
546 const vector<double>* emissions = &(*emissionProbabilities_)(0);
554 d2Tmp[j] = (*d2Emissions)[j] *
transitionMatrix_->getEquilibriumFrequencies()[j];
570 vector<size_t>::const_iterator bpIt =
breakPoints_.begin();
574 for (
size_t i = 1; i <
nbSites_; i++)
578 emissions = &(*emissionProbabilities_)(i);
594 tmp[j] = (*emissions)[j] * x;
608 d2Tmp[j] = (*d2Emissions)[j] *
transitionMatrix_->getEquilibriumFrequencies()[j];
630 sort(d2LScales.begin(), d2LScales.end(), cmp);
632 for (
size_t i = 0; i <
nbSites_; ++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)
Matrix storage by column.
const std::vector< Scalar > & getCol(size_t i) const
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
The parameter list object.
std::vector< double > dScales_
std::vector< double > likelihood_
The likelihood arrays.
std::vector< std::vector< double > > d2Likelihood_
std::vector< size_t > breakPoints_
std::vector< double > d2Scales_
double getDLogLikelihoodForASite(size_t site) const
std::vector< std::vector< double > > dLikelihood_
derivatec of forward likelihood
void computeBackward_() const
Vdouble getHiddenStatesPosteriorProbabilitiesForASite(size_t site) const
RescaledHmmLikelihood(HmmStateAlphabet *hiddenAlphabet, HmmTransitionMatrix *transitionMatrix, HmmEmissionProbabilities *emissionProbabilities, const std::string &prefix)
Build a new RescaledHmmLikelihood object.
std::unique_ptr< HmmTransitionMatrix > transitionMatrix_
bool backLikelihoodUpToDate_
void getHiddenStatesPosteriorProbabilities(std::vector< std::vector< double > > &probs, bool append=false) const
std::unique_ptr< HmmEmissionProbabilities > emissionProbabilities_
double getD2LogLikelihoodForASite(size_t site) const
double getLikelihoodForASite(size_t site) const
Get the likelihood for a site, and its derivatives.
void computeD2Forward_() const
void fireParameterChanged(const ParameterList &pl)
Notify the class when one or several parameters have changed.
std::vector< double > scales_
scales for likelihood computing
void setNamespace(const std::string &nameSpace)
Set the namespace for the parameter names.
std::vector< std::vector< double > > backLikelihood_
backward likelihood
Vdouble getLikelihoodForEachSite() const
Get the likelihood for each site.
std::unique_ptr< HmmStateAlphabet > hiddenAlphabet_
The alphabet describing the hidden states.
void computeDForward_() const
std::string toString(T t)
General template method to convert to a string.
std::vector< double > Vdouble