bpp-phyl3 3.0.0
OnABranchPhyloLikelihood.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: The Bio++ Development Group
2//
3// SPDX-License-Identifier: CECILL-2.1
4
6
7using namespace bpp;
8using namespace std;
9using namespace numeric;
10
11
12// Vdouble OnABranchPhyloLikelihood::getPosteriorProbabilitiesForSitePerClass(size_t pos) const
13// {
14// auto rates = getLikelihoodCalculationSingleProcess()->substitutionProcess().getRateDistribution();
15
16// if (!rates || rates->getNumberOfCategories() == 1)
17// return Vdouble(1, 1);
18// else
19// {
20// auto probas = rates->getProbabilities();
21// std::vector<DataLik> vv(rates->getNumberOfCategories());
22// for (size_t i = 0; i < vv.size(); i++)
23// {
24// vv[i] = probas[i] * (getLikelihoodCalculationSingleProcess()->getSiteLikelihoodsForAClass(i))(Eigen::Index(pos));
25// }
26
27// auto sv = VectorTools::sum(vv);
28// Vdouble res(rates->getNumberOfCategories());
29
30// for (size_t i = 0; i < vv.size(); i++)
31// {
32// res[i] = convert(vv[i] / sv);
33// }
34// return res;
35// }
36// }
37
38// VVdouble OnABranchPhyloLikelihood::getPosteriorProbabilitiesPerSitePerClass() const
39// {
40// auto rates = getLikelihoodCalculationSingleProcess()->substitutionProcess().getRateDistribution();
41
42// auto nbS = getLikelihoodCalculationSingleProcess()->getNumberOfSites();
43// VVdouble vv(nbS);
44
45// if (!rates || rates->getNumberOfCategories() == 1)
46// {
47// for (auto& v:vv)
48// {
49// v.resize(1, 1);
50// }
51// }
52// else
53// {
54// Eigen::VectorXd probas;
55// copyBppToEigen(rates->getProbabilities(), probas);
56
57// auto vvLik = getLikelihoodCalculationSingleProcess()->getSiteLikelihoodsForAllClasses();
58// for (size_t i = 0; i < nbS; i++)
59// {
60// vv[i].resize(size_t(vvLik.rows()));
61// VectorLik sv(numeric::cwise(vvLik.col(Eigen::Index(i))) * probas.array());
62// sv /= sv.sum();
63// copyEigenToBpp(sv, vv[i]);
64// }
65// }
66
67// return vv;
68// }
69
70/******************************************************************************/
71
72VVDataLik OnABranchPhyloLikelihood::getLikelihoodPerSitePerClass() const
73{
74 VVDataLik vd;
75 auto eg = getLikelihoodCalculationOnABranch()->getSiteLikelihoodsForAllClasses();
76 copyEigenToBpp(eg.transpose(), vd);
77 return vd;
78}
79
80/******************************************************************************/
81
83{
84 size_t nbSites = getNumberOfSites();
86 vector<size_t> classes(nbSites);
87 for (size_t i = 0; i < nbSites; ++i)
88 {
89 classes[i] = VectorTools::whichMax<DataLik>(l[i]);
90 }
91 return classes;
92}
93
94/******************************************************************************/
95
96// Vdouble SingleProcessPhyloLikelihood::getPosteriorRatePerSite() const
97// {
98// auto probas = getLikelihoodCalculationSingleProcess()->substitutionProcess().getRateDistribution()->getProbabilities();
99// auto rates = getLikelihoodCalculationSingleProcess()->substitutionProcess().getRateDistribution()->getCategories();
100
101// size_t nbSites = getNumberOfSites();
102// size_t nbClasses = getNumberOfClasses();
103// auto pb = getLikelihoodPerSitePerClass();
104// auto l = getLikelihoodPerSite();
105// Vdouble prates(nbSites, 0.);
106// for (size_t i = 0; i < nbSites; i++)
107// {
108// for (size_t j = 0; j < nbClasses; j++)
109// {
110// prates[i] += convert((pb[i][j] / l[i]) * probas[j] * rates[j]);
111// }
112// }
113// return prates;
114// }
115
116
117/******************************************************************************/
118
119// Vdouble SingleProcessPhyloLikelihood::getPosteriorStateFrequencies(uint nodeId)
120// {
121// auto vv = getLikelihoodCalculationSingleProcess()->getLikelihoodsAtNode(nodeId)->targetValue();
122
123// size_t nbSites = getNumberOfSites();
124// VVdouble pp;
125// pp.resize(nbSites);
126
127// for (uint i = 0; i < (uint)nbSites; i++)
128// {
129// copyEigenToBpp(vv.col(i) / vv.col(i).sum(), pp[size_t(i)]);
130// }
131
132// Vdouble v(nbStates_);
133// for (uint st = 0; st < (uint)nbStates_; st++)
134// {
135// auto s = 0.0;
136// for (size_t i = 0; i < (size_t)nbSites; i++)
137// {
138// s += pp[i][size_t(st)];
139// }
140
141// v[size_t(st)] = s / (double)nbSites;
142// }
143// return v;
144// }
VVDataLik getLikelihoodPerSitePerClass() const
Get the posterior probabilities of each class, for each site.
std::vector< size_t > getClassWithMaxPostProbPerSite() const
std::shared_ptr< LikelihoodCalculationOnABranch > getLikelihoodCalculationOnABranch() const
size_t getNumberOfSites() const override
Get the number of sites in the dataset.
Defines the basic types of data flow nodes.
template void copyEigenToBpp(const ExtendedFloatMatrixXd &eigenMatrix, std::vector< std::vector< double > > &bppMatrix)
std::vector< VDataLik > VVDataLik
Definition: Definitions.h:24