--- /dev/null
+//////////////////////////////////////////////////////////////////////////////////////
+// postProcessings.cpp
+//
+// several post process functions after aligning two profile stem candidate sequences
+//////////////////////////////////////////////////////////////////////////////////////
+
+#include <iostream>
+#include "scarna.hpp"
+#include "StemCandidate.hpp"
+#include <vector>
+#include <string>
+
+using namespace::MXSCARNA;
+
+void printStructure(std::vector<StemCandidate> *pscs1, std::vector<StemCandidate> *pscs2, std::vector<int> *matchPSCS1, std::vector<int> *matchPSCS2);
+
+void removeConflicts(std::vector<StemCandidate> *pscs1, std::vector<StemCandidate> *pscs2, std::vector<int> *matchPSCS1, std::vector<int> *matchPSCS2)
+{
+ int size = matchPSCS1->size();
+
+ std::vector<int> found(size, 0);
+ for(int k = size - 1; k >= 0; k--) {
+ int i = matchPSCS1->at(k);
+ int i_rv = pscs1->at(i).GetRvscnumber();
+ int j = matchPSCS2->at(k);
+ int j_rv = pscs2->at(j).GetRvscnumber();
+
+ found[k] = 0;
+
+ for(int m = size - 1; m >= 0; m--) {
+ if ( (matchPSCS1->at(m) == i_rv) && (matchPSCS2->at(m) == j_rv) ) {
+ found[k] = 1;
+ break;
+ }
+ }
+ }
+
+ int pt = 0;
+ for(int k = 0; k < size; k++) {
+ matchPSCS1->at(pt) = matchPSCS1->at(k);
+ matchPSCS2->at(pt) = matchPSCS2->at(k);
+ if(found[k] == 1) ++pt;
+ }
+
+ matchPSCS1->resize(pt);
+ matchPSCS2->resize(pt);
+
+ //printStructure (pscs1, pscs2, matchPSCS1, matchPSCS2);
+}
+
+void printStructure(std::vector<StemCandidate> *pscs1, std::vector<StemCandidate> *pscs2, std::vector<int> *matchPSCS1, std::vector<int> *matchPSCS2)
+{
+ int size = matchPSCS1->size();
+ int len = WORDLENGTH;
+ std::vector<char> structure1(100, '.');
+ std::vector<char> structure2(100, '.');
+ for(int k = 0; k < size; k++) {
+ int i = matchPSCS1->at(k);
+ int pos1 = pscs1->at(i).GetPosition();
+ int j = matchPSCS2->at(k);
+ int pos2 = pscs2->at(j).GetPosition();
+ for(int l = 0; l < len; l++) {
+ if(pscs1->at(i).GetDistance() > 0) {
+ structure1[pos1 + l] = '(';
+ }
+ else {
+ structure1[pos1 + l] = ')';
+ }
+
+ if(pscs2->at(j).GetDistance() > 0) {
+ structure2[pos2 + l] = '(';
+ }
+ else {
+ structure2[pos2 + l] = ')';
+ }
+ }
+ /*
+ 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;
+ */
+ }
+ size = structure1.size();
+ for(int k = 0; k < size; k++) {
+ std::cout << structure1[k];
+ }
+ std::cout << endl;
+ for(int k = 0; k < size; k++) {
+ std::cout << structure2[k];
+ }
+ std::cout << endl;
+}
+