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