]> git.donarmstrong.com Git - mothur.git/blob - sequencedb.cpp
added logfile feature
[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() {}
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                 string name, sequence, line;
34                 sequence = "";
35                 int c;
36                 string temp;
37                 
38                 
39                 //read through file
40                 while ((c = filehandle.get()) != EOF) {
41                         name = ""; sequence = ""; 
42                         //is this a name
43                         if (c == '>') { 
44                                 name = readName(filehandle); 
45                                 sequence = readSequence(filehandle); 
46                         }else {  mothurOut("Error fasta in your file. Please correct."); mothurOutEndLine(); }
47
48                         //input sequence info into sequencedb
49                         Sequence newSequence(name, sequence);
50                         data.push_back(newSequence);
51                         
52                         //takes care of white space
53                         gobble(filehandle);
54                 }
55
56                 filehandle.close();
57                 
58         }
59         catch(exception& e) {
60                 errorOut(e, "SequenceDB", "SequenceDB");
61                 exit(1);
62         }
63 }
64 /*******************************************************************************/
65 string SequenceDB::readName(ifstream& in) {
66         try{
67                 string name = "";
68                 int c;
69                 string temp;
70                 
71                 while ((c = in.get()) != EOF) {
72                         //if c is not a line return
73                         if (c != 10) {
74                                 name += c;
75                         }else { break;  }
76                 }
77                         
78                 return name;
79         }
80         catch(exception& e) {
81                 errorOut(e, "SequenceDB", "readName");
82                 exit(1);
83         }
84 }
85
86 /*******************************************************************************/
87 string SequenceDB::readSequence(ifstream& in) {
88         try{
89                 string sequence = "";
90                 string line;
91                 int pos, c;
92                 
93                 while (!in.eof()) {
94                         //save position in file in case next line is a new name.
95                         pos = in.tellg();
96                         line = "";
97                         in >> line;                     
98                         //if you are at a new name
99                         if (line[0] == '>') {
100                                 //put file pointer back since you are now at a new name
101                                 in.seekg(pos, ios::beg);
102                                 c = in.get();  //because you put it back to a newline char
103                                 break;
104                         }else {  sequence += line;      }
105                 }
106                         
107                 return sequence;
108         }
109         catch(exception& e) {
110                 errorOut(e, "SequenceDB", "readSequence");
111                 exit(1);
112         }
113 }
114         
115 /***********************************************************************/
116
117 int SequenceDB::getNumSeqs() {
118         return data.size();
119 }
120
121 /***********************************************************************/
122
123 void SequenceDB::set(int index, string newUnaligned) {
124         try {
125                 data[index] = Sequence(data[index].getName(), newUnaligned);
126         }
127         catch(exception& e) {
128                 errorOut(e, "SequenceDB", "set");
129                 exit(1);
130         }
131 }
132
133 /***********************************************************************/
134
135 void SequenceDB::set(int index, Sequence newSeq) {
136         try {
137                 data[index] = newSeq;
138         }
139         catch(exception& e) {
140                 errorOut(e, "SequenceDB", "set");
141                 exit(1);
142         }
143 }
144
145 /***********************************************************************/
146
147 Sequence SequenceDB::get(int index) {
148         return data[index];
149 }
150
151 /***********************************************************************/
152
153 void SequenceDB::resize(int newSize) {
154         try {
155                 data.resize(newSize);
156         }
157         catch(exception& e) {
158                 errorOut(e, "SequenceDB", "resize");
159                 exit(1);
160         }
161 }
162
163 /***********************************************************************/
164
165 void SequenceDB::clear() {
166         try {
167                 data.clear();
168         }
169         catch(exception& e) {
170                 errorOut(e, "SequenceDB", "clear");
171                 exit(1);
172         }
173 }
174
175 /***********************************************************************/
176
177 int SequenceDB::size() {
178         return data.size();
179 }
180
181 /***********************************************************************/
182
183 void SequenceDB::print(ostream& out) {
184         try {
185                 for(int i = 0; i < data.size(); i++) {
186                         data[i].printSequence(out);
187                 }
188         }
189         catch(exception& e) {
190                 errorOut(e, "SequenceDB", "print");
191                 exit(1);
192         }
193 }
194         
195 /***********************************************************************/
196
197 void SequenceDB::push_back(Sequence newSequence) {
198         try {
199                 data.push_back(newSequence);
200         }
201         catch(exception& e) {
202                 errorOut(e, "SequenceDB", "push_back");
203                 exit(1);
204         }
205 }
206
207 /***********************************************************************/
208