5 * Created by westcott on 9/25/09.
6 * Copyright 2009 Schloss Lab. All rights reserved.
12 /***********************************************************************/
13 Slayer::Slayer(int win, int increment, int parentThreshold, float div) :
14 windowSize(win), windowStep(increment), parentFragmentThreshold(parentThreshold), divRThreshold(div) {}
15 /***********************************************************************/
16 void Slayer::getResults(Sequence* query, vector<Sequence*> refSeqs) {
19 for (int i = 0; i < refSeqs.size(); i++) {
21 for (int j = i+1; j < refSeqs.size(); j++) {
23 //make copies of query and each parent because runBellerophon removes gaps and messes them up
24 Sequence* q = new Sequence(query->getName(), query->getAligned());
25 Sequence* leftParent = new Sequence(refSeqs[i]->getName(), refSeqs[i]->getAligned());
26 Sequence* rightParent = new Sequence(refSeqs[j]->getName(), refSeqs[j]->getAligned());
28 vector<data_struct> divs = runBellerophon(q, leftParent, rightParent);
40 errorOut(e, "Slayer", "getResults");
44 /***********************************************************************/
45 vector<data_struct> Slayer::runBellerophon(Sequence* query, Sequence* parentA, Sequence* parentB) {
48 vector<data_struct> data;
51 vector<Sequence*> temp;
54 int alignLength = query->getAligned().length();
63 errorOut(e, "Slayer", "runBellerophon");
67 /***********************************************************************/
68 float Slayer::computePercentID(string queryFrag, string parent, int left, int right) {
73 for (int i = left; i <= right; i++) {
75 if (queryFrag[i] == parent[i]) {
80 float percentID =( matches/(float)total) * 100;
85 errorOut(e, "Slayer", "computePercentID");
89 /***********************************************************************/
90 //this is a vertical filter
91 void Slayer::verticalFilter(vector<Sequence*> seqs) {
93 vector<int> gaps; gaps.resize(seqs[0]->getAligned().length(), 0);
95 string filterString = (string(seqs[0]->getAligned().length(), '1'));
98 for (int i = 0; i < seqs.size(); i++) {
100 string seqAligned = seqs[i]->getAligned();
102 for (int j = 0; j < seqAligned.length(); j++) {
103 //if this spot is a gap
104 if ((seqAligned[j] == '-') || (seqAligned[j] == '.')) { gaps[j]++; }
108 //zero out spot where all sequences have blanks
109 int numColRemoved = 0;
110 for(int i = 0; i < seqs[0]->getAligned().length(); i++){
111 if(gaps[i] == seqs.size()) { filterString[i] = '0'; numColRemoved++; }
115 for (int i = 0; i < seqs.size(); i++) {
117 string seqAligned = seqs[i]->getAligned();
118 string newAligned = "";
120 for (int j = 0; j < seqAligned.length(); j++) {
121 //if this spot is not a gap
122 if (filterString[j] == '1') { newAligned += seqAligned[j]; }
125 seqs[i]->setAligned(newAligned);
128 catch(exception& e) {
129 errorOut(e, "Slayer", "verticalFilter");
133 /***********************************************************************/