File: terrace.cpp

package info (click to toggle)
iqtree 2.0.7%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 14,620 kB
  • sloc: cpp: 142,571; ansic: 57,789; sh: 275; python: 242; makefile: 95
file content (84 lines) | stat: -rw-r--r-- 2,772 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/***************************************************************************
 *   Copyright (C) 2018 by Lukasz Reszczynski                              *
 *   lukasz.reszczynski@univie.ac.at                                       *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
 ***************************************************************************/
#include "terrace.h"

Terrace::Terrace(PhyloTree &tree, SuperAlignment* saln) : 
    coverage(tree.aln->getSeqNames().size(), saln->taxa_index[0].size())
{
    stringstream nwk;
    tree.printTree(nwk, 0);
    
    terraces::index cols{};
    terraces::index rows{};

    terraces::bitmatrix coverage_matrix{rows, cols};

    vector<string> labels = tree.aln->getSeqNames();

    names.resize(labels.size());

    for (int i=0; i<labels.size(); i++) {
        string label = labels[i];

        names[i] = label;
        indices[label] = i;
    }

    auto terraphast_nwk = terraces::parse_nwk(nwk.str(), indices);

    int n_partitions = saln->taxa_index[0].size();

    for (int i=0; i<labels.size(); i++) {
        for (int j=0; j<n_partitions; j++) {
            bool value = (saln->taxa_index[i][j] != -1);
            coverage.set(i, j, value);
        }
    }

    supertree = terraces::create_supertree_data(terraphast_nwk, coverage);

    init();  
}

void Terrace::init() 
{

}

uint64_t Terrace::getSize()
{
    return terraces::count_terrace(supertree);
}

void Terrace::printTrees(ostream &out)
{
    terraces::print_terrace(supertree, names, out);
}

void Terrace::printTreesCompressed(ostream &out)
{
    terraces::print_terrace_compressed(supertree, names, out);
}

Terrace::~Terrace()
{
}