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