-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmultiple_alignment.cpp
More file actions
66 lines (54 loc) · 1.44 KB
/
multiple_alignment.cpp
File metadata and controls
66 lines (54 loc) · 1.44 KB
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
#include <iostream>
#include <vector>
#include <string>
#include "genome.hpp"
#include "multiple_alignment.hpp"
#include "pairwise_alignment.hpp"
using namespace std;
// Void constructor
MultipleAlignment::MultipleAlignment() { }
// Default constructor
MultipleAlignment::MultipleAlignment(vector< vector<float> > rGuideTreeMat,
vector< Genome > rGenomes)
{
N = rGuideTreeMat[0].size();
n = (N + 1) / 2;
mGuideTree = vector< vector<float> >(N-n);
for (int i = 0; i < N - n; ++i) {
mGuideTree[i] = rGuideTreeMat[i];
}
mAlignment = vector<string>(n);
mVectAlign = vector< vector<Genome> >(N, vector<Genome>(1));
for (int i = 0; i < n; ++i) {
mVectAlign[i] = vector<Genome>(1, rGenomes[i]);
}
}
MultipleAlignment::~MultipleAlignment() { }
void MultipleAlignment::Align()
{
for (int i = 0; i < mGuideTree.size(); ++i) {
// Find nodes to be aligned
int node1, node2;
int j = 0;
for (; j < mGuideTree[0].size(); ++j) {
if (mGuideTree[i][j] != -1.0) {
node1 = j;
++j;
break;
}
}
for (; j < mGuideTree[0].size(); ++j) {
if (mGuideTree[i][j] != -1.0) {
node2 = j;
break;
}
}
// Align both sequences
PairwiseAlignment curr_alignment(mVectAlign[node1], mVectAlign[node2]);
mVectAlign[i+n] = curr_alignment.Output();
}
}
vector< Genome > MultipleAlignment::Output()
{
return mVectAlign[N-1];
}