]> git.donarmstrong.com Git - mothur.git/blob - sequencedb.cpp
created mothurOut class to handle logfiles
[mothur.git] / sequencedb.cpp
1 /*
2  *  sequencedb.cpp
3  *  Mothur
4  *
5  *  Created by Thomas Ryabin on 4/13/09.
6  *  Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved.
7  *
8  */
9
10 #include "sequencedb.h"
11 #include "sequence.hpp"
12 #include "mothur.h"
13 #include "calculator.h"
14
15
16 /***********************************************************************/
17
18 SequenceDB::SequenceDB() {  m = MothurOut::getInstance();  }
19 /***********************************************************************/
20 //the clear function free's the memory
21 SequenceDB::~SequenceDB() { clear(); }
22
23 /***********************************************************************/
24
25 SequenceDB::SequenceDB(int newSize) {
26         data.resize(newSize, Sequence());
27 }
28
29 /***********************************************************************/
30
31 SequenceDB::SequenceDB(ifstream& filehandle) {
32         try{
33                                 
34                 //read through file
35                 while (!filehandle.eof()) {
36                         //input sequence info into sequencedb
37                         Sequence newSequence(filehandle);
38                         
39                         if (newSequence.getName() != "") {   data.push_back(newSequence);  }
40                         
41                         //takes care of white space
42                         gobble(filehandle);
43                 }
44
45                 filehandle.close();
46                 
47         }
48         catch(exception& e) {
49                 m->errorOut(e, "SequenceDB", "SequenceDB");
50                 exit(1);
51         }
52 }
53 /*******************************************************************************/
54 string SequenceDB::readName(ifstream& in) {
55         try{
56                 string name = "";
57                 int c;
58                 string temp;
59                 
60                 while ((c = in.get()) != EOF) {
61                         //if c is not a line return
62                         if (c != 10) {
63                                 name += c;
64                         }else { break;  }
65                 }
66                         
67                 return name;
68         }
69         catch(exception& e) {
70                 m->errorOut(e, "SequenceDB", "readName");
71                 exit(1);
72         }
73 }
74
75 /*******************************************************************************/
76 string SequenceDB::readSequence(ifstream& in) {
77         try{
78                 string sequence = "";
79                 string line;
80                 int pos, c;
81                 
82                 while (!in.eof()) {
83                         //save position in file in case next line is a new name.
84                         pos = in.tellg();
85                         line = "";
86                         in >> line;                     
87                         //if you are at a new name
88                         if (line[0] == '>') {
89                                 //put file pointer back since you are now at a new name
90                                 in.seekg(pos, ios::beg);
91                                 c = in.get();  //because you put it back to a newline char
92                                 break;
93                         }else {  sequence += line;      }
94                 }
95                         
96                 return sequence;
97         }
98         catch(exception& e) {
99                 m->errorOut(e, "SequenceDB", "readSequence");
100                 exit(1);
101         }
102 }
103         
104 /***********************************************************************/
105
106 int SequenceDB::getNumSeqs() {
107         return data.size();
108 }
109
110 /***********************************************************************/
111
112 void SequenceDB::set(int index, string newUnaligned) {
113         try {
114                 data[index] = Sequence(data[index].getName(), newUnaligned);
115         }
116         catch(exception& e) {
117                 m->errorOut(e, "SequenceDB", "set");
118                 exit(1);
119         }
120 }
121
122 /***********************************************************************/
123
124 void SequenceDB::set(int index, Sequence newSeq) {
125         try {
126                 data[index] = newSeq;
127         }
128         catch(exception& e) {
129                 m->errorOut(e, "SequenceDB", "set");
130                 exit(1);
131         }
132 }
133
134 /***********************************************************************/
135
136 Sequence SequenceDB::get(int index) {
137         return data[index];
138 }
139
140 /***********************************************************************/
141
142 void SequenceDB::resize(int newSize) {
143         try {
144                 data.resize(newSize);
145         }
146         catch(exception& e) {
147                 m->errorOut(e, "SequenceDB", "resize");
148                 exit(1);
149         }
150 }
151
152 /***********************************************************************/
153
154 void SequenceDB::clear() {
155         try {
156                 data.clear();
157         }
158         catch(exception& e) {
159                 m->errorOut(e, "SequenceDB", "clear");
160                 exit(1);
161         }
162 }
163
164 /***********************************************************************/
165
166 int SequenceDB::size() {
167         return data.size();
168 }
169
170 /***********************************************************************/
171
172 void SequenceDB::print(ostream& out) {
173         try {
174                 for(int i = 0; i < data.size(); i++) {
175                         data[i].printSequence(out);
176                 }
177         }
178         catch(exception& e) {
179                 m->errorOut(e, "SequenceDB", "print");
180                 exit(1);
181         }
182 }
183         
184 /***********************************************************************/
185
186 void SequenceDB::push_back(Sequence newSequence) {
187         try {
188                 data.push_back(newSequence);
189         }
190         catch(exception& e) {
191                 m->errorOut(e, "SequenceDB", "push_back");
192                 exit(1);
193         }
194 }
195
196 /***********************************************************************/
197