1 //////////////////////////////////////////////////////////////////////////////////////
4 // several post process functions after aligning two profile stem candidate sequences
5 //////////////////////////////////////////////////////////////////////////////////////
9 #include "StemCandidate.hpp"
13 using namespace::MXSCARNA;
15 void printStructure(std::vector<StemCandidate> *pscs1, std::vector<StemCandidate> *pscs2, std::vector<int> *matchPSCS1, std::vector<int> *matchPSCS2);
17 void removeConflicts(std::vector<StemCandidate> *pscs1, std::vector<StemCandidate> *pscs2, std::vector<int> *matchPSCS1, std::vector<int> *matchPSCS2)
19 int size = matchPSCS1->size();
21 std::vector<int> found(size, 0);
22 for(int k = size - 1; k >= 0; k--) {
23 int i = matchPSCS1->at(k);
24 int i_rv = pscs1->at(i).GetRvscnumber();
25 int j = matchPSCS2->at(k);
26 int j_rv = pscs2->at(j).GetRvscnumber();
30 for(int m = size - 1; m >= 0; m--) {
31 if ( (matchPSCS1->at(m) == i_rv) && (matchPSCS2->at(m) == j_rv) ) {
39 for(int k = 0; k < size; k++) {
40 matchPSCS1->at(pt) = matchPSCS1->at(k);
41 matchPSCS2->at(pt) = matchPSCS2->at(k);
42 if(found[k] == 1) ++pt;
45 matchPSCS1->resize(pt);
46 matchPSCS2->resize(pt);
48 //printStructure (pscs1, pscs2, matchPSCS1, matchPSCS2);
51 void printStructure(std::vector<StemCandidate> *pscs1, std::vector<StemCandidate> *pscs2, std::vector<int> *matchPSCS1, std::vector<int> *matchPSCS2)
53 int size = matchPSCS1->size();
55 std::vector<char> structure1(100, '.');
56 std::vector<char> structure2(100, '.');
57 for(int k = 0; k < size; k++) {
58 int i = matchPSCS1->at(k);
59 int pos1 = pscs1->at(i).GetPosition();
60 int j = matchPSCS2->at(k);
61 int pos2 = pscs2->at(j).GetPosition();
62 for(int l = 0; l < len; l++) {
63 if(pscs1->at(i).GetDistance() > 0) {
64 structure1[pos1 + l] = '(';
67 structure1[pos1 + l] = ')';
70 if(pscs2->at(j).GetDistance() > 0) {
71 structure2[pos2 + l] = '(';
74 structure2[pos2 + l] = ')';
78 std::cout << i << "\t" << pscs1->at(i).GetLength() << "\t" << pscs1->at(i).GetPosition() << "\t" << pscs1->at(i).GetRvposition() << "\t" << pscs1->at(i).GetDistance() << "\t" << pscs1->at(i).GetContPos() << "\t" << pscs1->at(i).GetBeforePos() << "\t" << pscs1->at(i).GetRvscnumber() << endl;
81 size = structure1.size();
82 for(int k = 0; k < size; k++) {
83 std::cout << structure1[k];
86 for(int k = 0; k < size; k++) {
87 std::cout << structure2[k];