9using namespace numeric;
12Vdouble SingleProcessPhyloLikelihood::getPosteriorProbabilitiesForSitePerClass(
size_t pos)
const
16 if (!rates || rates->getNumberOfCategories() == 1)
20 auto probas = rates->getProbabilities();
21 std::vector<DataLik> vv(rates->getNumberOfCategories());
22 for (
size_t i = 0; i < vv.size(); i++)
28 Vdouble res(rates->getNumberOfCategories());
30 for (
size_t i = 0; i < vv.size(); i++)
45 if (!rates || rates->getNumberOfCategories() == 1)
54 Eigen::VectorXd probas;
58 for (
size_t i = 0; i < nbS; i++)
60 vv[i].resize(
size_t(vvLik.rows()));
86 vector<size_t> classes(nbSites);
87 for (
size_t i = 0; i < nbSites; ++i)
89 classes[i] = VectorTools::whichMax<DataLik>(l[i]);
106 for (
size_t i = 0; i < nbSites; i++)
108 for (
size_t j = 0; j < nbClasses; j++)
110 prates[i] +=
convert((pb[i][j] / l[i]) * probas[j] * rates[j]);
127 for (uint i = 0; i < (uint)nbSites; i++)
133 for (uint st = 0; st < (uint)
nbStates_; st++)
136 for (
size_t i = 0; i < (size_t)nbSites; i++)
138 s += pp[i][size_t(st)];
141 v[size_t(st)] = s / (double)nbSites;
VDataLik getLikelihoodPerSite() const
Get the likelihood for each site.
const ExtendedFloat & sum() const
std::shared_ptr< LikelihoodCalculationSingleProcess > getLikelihoodCalculationSingleProcess() const
size_t getNumberOfSites() const override
Get the number of sites in the dataset.
size_t getNumberOfClasses() const
Get the number of model classes.
VVdouble getPosteriorProbabilitiesPerSitePerClass() const
Get the posterior probabilities of each class, for each site.
VVDataLik getLikelihoodPerSitePerClass() const
Vdouble getPosteriorStateFrequencies(uint nodeId)
std::vector< size_t > getClassWithMaxPostProbPerSite() const
Vdouble getPosteriorRatePerSite() const
Defines the basic types of data flow nodes.
std::vector< double > Vdouble
template void copyEigenToBpp(const ExtendedFloatMatrixXd &eigenMatrix, std::vector< std::vector< double > > &bppMatrix)
template void copyBppToEigen(const std::vector< ExtendedFloat > &bppVector, Eigen::RowVectorXd &eigenVector)
std::vector< VDataLik > VVDataLik
double convert(const bpp::ExtendedFloat &ef)
std::vector< Vdouble > VVdouble