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, NULL);
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 { cout << "Error fasta in your file. Please correct." << endl; }
48 //input sequence info into sequencedb
49 Sequence* newSequence = new Sequence(name, sequence);
50 data.push_back(newSequence);
52 //takes care of white space
60 cout << "Standard Error: " << e.what() << " has occurred in the SequenceDB class Function SequenceDB. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
64 cout << "An unknown error has occurred in the SequenceDB class function SequenceDB. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
68 /*******************************************************************************/
69 string SequenceDB::readName(ifstream& in) {
75 while ((c = in.get()) != EOF) {
76 //if c is not a line return
85 cout << "Standard Error: " << e.what() << " has occurred in the SequenceDB class Function readName. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
89 cout << "An unknown error has occurred in the SequenceDB class function readName. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
94 /*******************************************************************************/
95 string SequenceDB::readSequence(ifstream& in) {
102 //save position in file in case next line is a new name.
106 //if you are at a new name
107 if (line[0] == '>') {
108 //put file pointer back since you are now at a new name
109 in.seekg(pos, ios::beg);
110 c = in.get(); //because you put it back to a newline char
112 }else { sequence += line; }
117 catch(exception& e) {
118 cout << "Standard Error: " << e.what() << " has occurred in the SequenceDB class Function readSequence. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
122 cout << "An unknown error has occurred in the SequenceDB class function readSequence. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
127 /***********************************************************************/
129 int SequenceDB::getNumSeqs() {
133 /***********************************************************************/
135 void SequenceDB::set(int index, string newUnaligned) {
137 if (data[index] != NULL) { delete data[index]; } //free memory
139 Sequence* newSeq = new Sequence(data[index]->getName(), newUnaligned);
140 data[index] = newSeq;
142 catch(exception& e) {
143 cout << "Standard Error: " << e.what() << " has occurred in the SequenceDB class Function set. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
147 cout << "An unknown error has occurred in the SequenceDB class function set. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
152 /***********************************************************************/
154 void SequenceDB::set(int index, Sequence* newSeq) {
156 if (data[index] != NULL) { delete data[index]; } //free memory
157 data[index] = newSeq;
159 catch(exception& e) {
160 cout << "Standard Error: " << e.what() << " has occurred in the SequenceDB class Function set. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
164 cout << "An unknown error has occurred in the SequenceDB class function set. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
169 /***********************************************************************/
171 Sequence* SequenceDB::get(int index) {
175 /***********************************************************************/
177 void SequenceDB::resize(int newSize) {
179 int size = data.size();
181 for (int i = size; i > newSize; i--) { delete data[i]; }
182 data.resize(newSize);
184 catch(exception& e) {
185 cout << "Standard Error: " << e.what() << " has occurred in the SequenceDB class Function resize. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
189 cout << "An unknown error has occurred in the SequenceDB class function resize. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
194 /***********************************************************************/
196 void SequenceDB::clear() {
198 for (int i = 0; i < data.size(); i++) { delete data[i]; }
201 catch(exception& e) {
202 cout << "Standard Error: " << e.what() << " has occurred in the SequenceDB class Function clear. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
206 cout << "An unknown error has occurred in the SequenceDB class function clear. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
211 /***********************************************************************/
213 int SequenceDB::size() {
217 /***********************************************************************/
219 void SequenceDB::print(ostream& out) {
221 for(int i = 0; i < data.size(); i++) {
222 data[i]->printSequence(out);
225 catch(exception& e) {
226 cout << "Standard Error: " << e.what() << " has occurred in the SequenceDB class Function print. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
230 cout << "An unknown error has occurred in the SequenceDB class function print. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
235 /***********************************************************************/
237 void SequenceDB::push_back(Sequence* newSequence) {
239 data.push_back(newSequence);
241 catch(exception& e) {
242 cout << "Standard Error: " << e.what() << " has occurred in the SequenceDB class Function add. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
246 cout << "An unknown error has occurred in the SequenceDB class function add. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
251 /***********************************************************************/