Exemplo n.º 1
0
Tree* TreeTools::MRPMultilabel(const vector<Tree*>& vecTr)
{
    // matrix representation
    VectorSiteContainer* sites = TreeTools::MRPEncode(vecTr);

    // starting bioNJ tree
    const DNA* alphabet = dynamic_cast<const DNA*>(sites->getAlphabet());
    JCnuc* jc = new JCnuc(alphabet);
    ConstantDistribution* constRate = new ConstantDistribution(1.);
    DistanceEstimation distFunc(jc, constRate, sites, 0, true);
    BioNJ bionjTreeBuilder(false, false);
    bionjTreeBuilder.setDistanceMatrix(*(distFunc.getMatrix()));
    bionjTreeBuilder.computeTree();
    if (ApplicationTools::message)
        ApplicationTools::message->endLine();
    TreeTemplate<Node>* startTree = new TreeTemplate<Node>(*bionjTreeBuilder.getTree());

    // MP optimization
    DRTreeParsimonyScore* MPScore = new DRTreeParsimonyScore(*startTree, *sites, false);
    MPScore = OptimizationTools::optimizeTreeNNI(MPScore, 0);
    delete startTree;
    Tree* retTree = new TreeTemplate<Node>(MPScore->getTree());
    delete MPScore;

    return retTree;
}