55 const std::string& prefix) :
58 hiddenAlphabet_(hiddenAlphabet),
59 transitionMatrix_(transitionMatrix),
60 emissionProbabilities_(emissionProbabilities),
61 ownsPointers_(ownsPointers),
63 partialLogLikelihoods_(),
66 partialDLogLikelihoods_(),
68 partialD2LogLikelihoods_(),
70 backLogLikelihoodUpToDate_(false),
76 throw Exception(
"LogsumHmmLikelihood: null pointer passed for HmmStateAlphabet.");
77 if (!transitionMatrix)
78 throw Exception(
"LogsumHmmLikelihood: null pointer passed for HmmTransitionMatrix.");
79 if (!emissionProbabilities)
80 throw Exception(
"LogsumHmmLikelihood: null pointer passed for HmmEmissionProbabilities.");
83 throw Exception(
"LogsumHmmLikelihood: HmmTransitionMatrix and HmmEmissionProbabilities should point toward the same HmmStateAlphabet object.");
85 throw Exception(
"LogsumHmmLikelihood: HmmTransitionMatrix and HmmEmissionProbabilities should point toward the same HmmStateAlphabet object.");
121 if (alphabetChanged && !transitionsChanged)
123 if (alphabetChanged && !emissionChanged)
153 const vector<double>* emissions = &(*emissionProbabilities_)(0);
171 vector<size_t>::const_iterator bpIt =
breakPoints_.begin();
176 for (
size_t i = 1; i <
nbSites_; i++)
180 emissions = &(*emissionProbabilities_)(i);
235 sort(copy.begin(), copy.end());
236 for (
size_t i = copy.size(); i > 0; --i)
249 for (
size_t i = 0; i <
nbSites_; i++)
270 const vector<double>* emissions = 0;
271 size_t nextBrkPt = 0;
272 vector<size_t>::const_reverse_iterator bpIt =
breakPoints_.rbegin();
282 for (
size_t i =
nbSites_ - 1; i > 0; i--)
284 emissions = &(*emissionProbabilities_)(i);
300 for (
unsigned int j = 0; j <
nbStates_; j++)
324 x += probs[i] * (*emissionProbabilities_)(site, i);
332 std::vector< std::vector<double> > vv;
336 for (
size_t i = 0; i <
nbSites_; i++)
341 ret[i] += vv[i][j] * (*emissionProbabilities_)(i, j);
358 vector<size_t>::const_iterator bpIt =
breakPoints_.begin();
379 size_t offset = append ? probs.size() : 0;
381 for (
size_t i = 0; i <
nbSites_; i++)
390 vector<size_t>::const_iterator bpIt =
breakPoints_.begin();
395 for (
size_t i = 0; i <
nbSites_; i++)
423 for (
size_t i = 0; i <
nbSites_; i++)
437 const vector<double>* emissions = &(*emissionProbabilities_)(0);
447 vector<size_t>::const_iterator bpIt =
breakPoints_.begin();
452 for (
size_t i = 1; i <
nbSites_; i++)
456 emissions = &(*emissionProbabilities_)(i);
459 for (
size_t kp = 0; kp <
nbStates_; kp++)
495 for (
size_t kp = 0; kp <
nbStates_; kp++)
508 sort(copy.begin(), copy.end());
509 for (
size_t i = copy.size(); i > 0; --i)
531 for (
size_t i = 0; i <
nbSites_; i++)
545 const vector<double>* emissions = &(*emissionProbabilities_)(0);
551 d2LogLikelihood_[0][j] = (*d2Emissions)[j] / (*emissions)[j] - pow((*dEmissions)[j] / (*emissions)[j], 2);
556 vector<size_t>::const_iterator bpIt =
breakPoints_.begin();
561 for (
size_t i = 1; i <
nbSites_; i++)
565 emissions = &(*emissionProbabilities_)(i);
569 for (
size_t kp = 0; kp <
nbStates_; kp++)
601 d2LogLikelihood_[i][j] = (*d2Emissions)[j] / (*emissions)[j] - pow((*dEmissions)[j] / (*emissions)[j], 2);
614 for (
size_t kp = 0; kp <
nbStates_; kp++)
632 sort(copy.begin(), copy.end());
633 for (
size_t i = copy.size(); i > 0; --i)
double getFirstOrderDerivative(const std::string &variable) const
Get the derivative of the function at the current point.
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 size_t getNumberOfPositions() const =0
virtual const std::vector< double > & getDEmissionProbabilities(size_t pos) const
virtual const HmmStateAlphabet * getHmmStateAlphabet() const =0
virtual const std::vector< double > & getD2EmissionProbabilities(size_t pos) const
virtual size_t getNumberOfStates() const =0
virtual bool worksWith(const HmmStateAlphabet *stateAlphabet) const =0
Tell if this instance can work with the instance of alphabet given as input.
Describe the transition probabilities between hidden states of a Hidden Markov Model.
virtual const Matrix< double > & getPij() const =0
Get all transition probabilities as a matrix.
virtual const std::vector< double > & getEquilibriumFrequencies() const =0
virtual const HmmStateAlphabet * getHmmStateAlphabet() const =0
virtual double Pij(size_t i, size_t j) const =0
Get the transition probability between two states.
bool backLogLikelihoodUpToDate_
HmmStateAlphabet * hiddenAlphabet_
The alphabet describing the hidden states.
double getLikelihoodForASite(size_t site) const
Get the likelihood for a site, and its derivatives.
void computeBackward_() const
std::vector< size_t > breakPoints_
std::vector< double > partialD2LogLikelihoods_
Vdouble getLikelihoodForEachSite() const
Get the likelihood for each site.
std::vector< double > partialDLogLikelihoods_
double getDLogLikelihoodForASite(size_t site) const
void setNamespace(const std::string &nameSpace)
Set the namespace for the parameter names.
void getHiddenStatesPosteriorProbabilities(std::vector< std::vector< double > > &probs, bool append=false) const
void fireParameterChanged(const ParameterList &pl)
Notify the class when one or several parameters have changed.
HmmEmissionProbabilities * emissionProbabilities_
void computeDForward_() const
std::vector< std::vector< double > > backLogLikelihood_
backward logLikelihood
void computeD2Forward_() const
std::vector< double > partialLogLikelihoods_
std::vector< std::vector< double > > d2LogLikelihood_
LogsumHmmLikelihood(HmmStateAlphabet *hiddenAlphabet, HmmTransitionMatrix *transitionMatrix, HmmEmissionProbabilities *emissionProbabilities, bool ownsPointers_=true, const std::string &prefix="")
Build a new LogsumHmmLikelihood object.
HmmTransitionMatrix * transitionMatrix_
Vdouble getHiddenStatesPosteriorProbabilitiesForASite(size_t site) const
std::vector< double > logLikelihood_
The likelihood array.
std::vector< std::vector< double > > dLogLikelihood_
The DLogLikelihood arrays.
double getD2LogLikelihoodForASite(size_t site) const
The parameter list object.
virtual bool matchParametersValues(const ParameterList ¶meters)=0
Update the parameters from parameters.
virtual const ParameterList & getParameters() const =0
Get all parameters available.
virtual void setParametersValues(const ParameterList ¶meters)=0
Update the parameters from parameters.
virtual void setNamespace(const std::string &prefix)=0
Set the namespace for the parameter names.
std::vector< double > Vdouble