#include "likelihoodComputationGL.h" #include "definitions.h" #include "tree.h" #include "likelihoodComputation.h" #include #include using namespace likelihoodComputationGL; // account for RateCat, GainCat,LossCat // - For each RateCat an "external" multiplication is conducted - copy_et.multipleAllBranchesByFactor // - the GainCat*LossCat SPs are covered by the "internal" mechanism of PijGam /******************************************************************************************** *********************************************************************************************/ MDOUBLE likelihoodComputationGL::getTreeLikelihoodAllPosAlphTheSame(const tree& tr, const sequenceContainer& sc, const vector >& spVVec, const distribution * distGain, const distribution * distLoss, const Vdouble * const weights, unObservableData *unObservableData_p) { int numOfRateCategories = spVVec[0][0]->categories(); vector pi_vec(numOfRateCategories); vector ssc_vec(numOfRateCategories); vector cup_vec(numOfRateCategories); likelihoodComputationGL::fillPijAndUp(tr,sc,spVVec,distGain,distLoss,pi_vec,ssc_vec,cup_vec); MDOUBLE logLforMissingData; MDOUBLE LforMissingData = 0; if(unObservableData_p){ logLforMissingData = unObservableData_p->getlogLforMissingData(); LforMissingData = exp(logLforMissingData); } MDOUBLE res = 0.0; for (int k=0; k < sc.seqLen(); ++k) { MDOUBLE lnL = 0; MDOUBLE resGivenRate = 0.0; for(int rateIndex=0 ; rateIndexratesProb(rateIndex); } if(unObservableData_p){ // conditioning on observability for all rateCat. resGivenRate = resGivenRate / (1- LforMissingData); } LOG(20,<<"pos= "<=0.0); // tmp+=tmpLcat; // } //// cout<<"likelihoodComputation::getLofPos: tmp = "; tmp.outputn(cout); // DEBUG EP // if (!(tmp>0.0)){ // LOG(5,<<"likelihoodComputation::getLofPos: "<< tmp<