5 * Created by Thomas Ryabin on 4/13/09.
6 * Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved.
10 #include "sequencedb.h"
11 #include "sequence.hpp"
13 #include "calculator.h"
16 /***********************************************************************/
18 SequenceDB::SequenceDB() {}
19 /***********************************************************************/
20 //the clear function free's the memory
21 SequenceDB::~SequenceDB() { clear(); }
23 /***********************************************************************/
25 SequenceDB::SequenceDB(int newSize) {
26 data.resize(newSize, Sequence());
29 /***********************************************************************/
31 SequenceDB::SequenceDB(ifstream& filehandle) {
33 string name, sequence, line;
40 while ((c = filehandle.get()) != EOF) {
41 name = ""; sequence = "";
44 name = readName(filehandle);
45 sequence = readSequence(filehandle);
46 }else { mothurOut("Error fasta in your file. Please correct."); mothurOutEndLine(); }
48 //input sequence info into sequencedb
49 Sequence newSequence(name, sequence);
50 data.push_back(newSequence);
52 //takes care of white space
60 errorOut(e, "SequenceDB", "SequenceDB");
64 /*******************************************************************************/
65 string SequenceDB::readName(ifstream& in) {
71 while ((c = in.get()) != EOF) {
72 //if c is not a line return
81 errorOut(e, "SequenceDB", "readName");
86 /*******************************************************************************/
87 string SequenceDB::readSequence(ifstream& in) {
94 //save position in file in case next line is a new name.
98 //if you are at a new name
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
104 }else { sequence += line; }
109 catch(exception& e) {
110 errorOut(e, "SequenceDB", "readSequence");
115 /***********************************************************************/
117 int SequenceDB::getNumSeqs() {
121 /***********************************************************************/
123 void SequenceDB::set(int index, string newUnaligned) {
125 data[index] = Sequence(data[index].getName(), newUnaligned);
127 catch(exception& e) {
128 errorOut(e, "SequenceDB", "set");
133 /***********************************************************************/
135 void SequenceDB::set(int index, Sequence newSeq) {
137 data[index] = newSeq;
139 catch(exception& e) {
140 errorOut(e, "SequenceDB", "set");
145 /***********************************************************************/
147 Sequence SequenceDB::get(int index) {
151 /***********************************************************************/
153 void SequenceDB::resize(int newSize) {
155 data.resize(newSize);
157 catch(exception& e) {
158 errorOut(e, "SequenceDB", "resize");
163 /***********************************************************************/
165 void SequenceDB::clear() {
169 catch(exception& e) {
170 errorOut(e, "SequenceDB", "clear");
175 /***********************************************************************/
177 int SequenceDB::size() {
181 /***********************************************************************/
183 void SequenceDB::print(ostream& out) {
185 for(int i = 0; i < data.size(); i++) {
186 data[i].printSequence(out);
189 catch(exception& e) {
190 errorOut(e, "SequenceDB", "print");
195 /***********************************************************************/
197 void SequenceDB::push_back(Sequence newSequence) {
199 data.push_back(newSequence);
201 catch(exception& e) {
202 errorOut(e, "SequenceDB", "push_back");
207 /***********************************************************************/