1 #ifndef CHIMERA_H
2 #define CHIMERA_H
3 
4 /*
5  *  mothurchimera.h
6  *  Mothur
7  *
8  *  Created by Sarah Westcott on 7/9/09.
9  *  Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved.
10  *
11  */
12 
13 
14 #include "mothur.h"
15 #include "sequence.hpp"
16 #include "currentfile.h"
17 #include "utils.hpp"
18 /***********************************************************************/
19 struct data_struct {
20 	float divr_qla_qrb;
21 	float divr_qlb_qra;
22 	float qla_qrb;
23 	float qlb_qra;
24 	float qla;
25 	float qrb;
26 	float ab;
27 	float qa;
28 	float qb;
29 	float lab;
30 	float rab;
31 	float qra;
32 	float qlb;
33 	int winLStart;
34 	int winLEnd;
35 	int winRStart;
36 	int winREnd;
37 	Sequence querySeq;
38 	Sequence parentA;
39 	Sequence parentB;
40 	float bsa;
41 	float bsb;
42 	float bsMax;
43 	float chimeraMax;
44 
45 };
46 /***********************************************************************/
47 struct data_results {
48 	vector<data_struct> results;
49 	string flag;
50 	Sequence trimQuery;
51 	//results malignerResults;
52 
data_resultsdata_results53 	data_results(vector<data_struct> d, string f, map<int, int> s, Sequence t) : results(d), flag(f), trimQuery(t) {}
data_resultsdata_results54 	data_results() {}
55 };
56 /***********************************************************************/
57 //sorts lowest to highest first by bsMax, then if tie by chimeraMax
compareDataStruct(data_struct left,data_struct right)58 inline bool compareDataStruct(data_struct left, data_struct right){
59 	if (left.bsMax < right.bsMax) { return true; }
60 	else if (left.bsMax == right.bsMax) {
61 		return (left.chimeraMax < right.chimeraMax);
62 	}else { return false;	}
63 }
64 /***********************************************************************/
65 struct Preference {
66 		string name;
67 		string leftParent; //keep the name of closest left
68 		string rightParent; //keep the name of closest
69 		float score;  //preference score
70 		float closestLeft;  //keep the closest left
71 		float closestRight; //keep the closest right
72 		int midpoint;
PreferencePreference73 		Preference() { name = ""; leftParent = ""; rightParent = ""; score = 0.0; closestLeft = 10000.0; closestRight = 10000.0; midpoint = 0;  }
~PreferencePreference74 		~Preference() {}
75 };
76 /***********************************************************************/
77 struct score_struct {
78 	int prev;
79 	int score;
80 	int row;
81 	int col;
82 //	int mismatches;
83 };
84 /***********************************************************************/
85 struct trace_struct {
86 	int col;
87 	int oldCol;
88 	int row;
89 };
90 /***********************************************************************/
91 struct results {
92 	int regionStart;
93 	int regionEnd;
94 	int nastRegionStart;
95 	int nastRegionEnd;
96 	string parent;
97 	string parentAligned;
98 	float queryToParent;
99 	float queryToParentLocal;
100 	float divR;
101 };
102 /***********************************************************************/
103 struct SeqDist {
104 	Sequence* seq;
105 	float dist;
106 	int index;
107 };
108 /***********************************************************************/
109 struct SeqCompare {
110 	Sequence seq;
111 	float dist;
112 	int index;
113 };
114 //********************************************************************************************************************
115 //sorts lowest to highest
compareRegionStart(results left,results right)116 inline bool compareRegionStart(results left, results right){
117 	return (left.nastRegionStart < right.nastRegionStart);
118 }
119 //********************************************************************************************************************
120 //sorts lowest to highest
compareSeqDist(SeqDist left,SeqDist right)121 inline bool compareSeqDist(SeqDist left, SeqDist right){
122 	return (left.dist < right.dist);
123 }
124 //********************************************************************************************************************
125 //sorts lowest to highest
compareSeqCompare(SeqCompare left,SeqCompare right)126 inline bool compareSeqCompare(SeqCompare left, SeqCompare right){
127 	return (left.dist < right.dist);
128 }
129 //********************************************************************************************************************
130 struct sim {
131 		string leftParent;
132 		string rightParent;
133 		float score;
134 		int midpoint;
135 };
136 /***********************************************************************/
137 
138 class MothurChimera {
139 
140 	public:
141 
MothurChimera()142     MothurChimera(){ m = MothurOut::getInstance(); current = CurrentFile::getInstance(); length = 0; unaligned = false;  byGroup = false; }
~MothurChimera()143 		virtual ~MothurChimera(){	for (int i = 0; i < templateSeqs.size(); i++) { delete templateSeqs[i];  } for (int i = 0; i < filteredTemplateSeqs.size(); i++) { delete filteredTemplateSeqs[i];  } };
getUnaligned()144 		virtual bool getUnaligned()				{	return unaligned;			}
getLength()145 		virtual int getLength()					{   return length;	}
146 		virtual vector<Sequence*> readSeqs(string);
147 		virtual void setMask(string);
148 		virtual map<int, int> runFilter(Sequence*);
149 		virtual string createFilter(vector<Sequence*>, float);
printHeader(ostream &)150 		virtual void printHeader(ostream&){};
getChimeras(Sequence *)151 		virtual int getChimeras(Sequence*){ return 0; }
getChimeras()152 		virtual int getChimeras(){ return 0; }
print(ostream &,ostream &)153 		virtual Sequence print(ostream&, ostream&){  Sequence temp; return temp; }
print(ostream &,ostream &,data_results,data_results)154 		virtual Sequence print(ostream&, ostream&, data_results, data_results) { Sequence temp; return temp; }
print(ostream &,ostream &,string)155 		virtual int print(ostream&, ostream&, string){  return 0; }
getNumNoParents()156 		virtual int getNumNoParents(){  return 0; }
getResults()157 		virtual data_results getResults() { data_results results; return results; }
158 
159 	protected:
160 
161 		vector<Sequence*> templateSeqs;
162 		vector<Sequence*> filteredTemplateSeqs;
163 		bool filter, unaligned, byGroup;
164 		int length;
165 		string seqMask, filterString, outputDir, templateFileName;
166 		Sequence* getSequence(string);  //find sequence from name
167 		MothurOut* m;
168         CurrentFile* current;
169         Utils util;
170 };
171 
172 /***********************************************************************/
173 
174 #endif
175 
176