]> git.donarmstrong.com Git - mothur.git/blobdiff - database.cpp
fixed bug with aligner in database class, worked on chimeras
[mothur.git] / database.cpp
index 153876f9e147e038a72074b490c8028033a308ce..9784ef93035bbf896eb3ec2c7090cbda7a426227 100644 (file)
@@ -7,56 +7,88 @@
  *
  */
 
-using namespace std;
-
-#include <string>
-#include <vector>
-#include <fstream>
-#include <iostream>
-
+#include "mothur.h"
 #include "sequence.hpp"
 #include "database.hpp"
 
 /**************************************************************************************************/
 
-Database::Database(string fastaFileName){
+Database::Database(string fastaFileName){              //      This assumes that the template database is in fasta format, may 
+                                                                                               //      need to alter this in the future?
+       longest = 0;
        
-       ifstream fastaFile(fastaFileName.c_str());
-       if(!fastaFile) {
-               cerr << "Error: Could not open " << fastaFileName << endl;
-               exit(1);
-       }
-       cout << endl << "Reading in the " << fastaFileName << " template sequences...\t";       cout.flush();
+       ifstream fastaFile;
+       openInputFile(fastaFileName, fastaFile);
+       
+       mothurOutEndLine();
+       mothurOut("Reading in the " + fastaFileName + " template sequences...\t");      cout.flush();
 
-       numSeqs=count(istreambuf_iterator<char>(fastaFile),istreambuf_iterator<char>(), '>');
-       fastaFile.seekg(0);
+       //all of this is elsewhere already!
+       //numSeqs=count(istreambuf_iterator<char>(fastaFile),istreambuf_iterator<char>(), '>'); //      count the number of
+       //fastaFile.seekg(0);                                                                                                                                           //      sequences
        
-       templateSequences.resize(numSeqs);
+       //templateSequences.resize(numSeqs);
        
-       string seqName, sequence;
+       /*string seqName, sequence;
        for(int i=0;i<numSeqs;i++){
-               templateSequences[i] = new Sequence();
-               
                fastaFile >> seqName;
-               templateSequences[i]->setName(seqName);
-               
+               seqName = seqName.substr(1);
                char letter;
                string aligned;
                
                while(fastaFile && (letter=fastaFile.get()) != '>'){
                        if(isprint(letter)){
                                letter = toupper(letter);
+                               if(letter == 'U'){letter = 'T';}
                                aligned += letter;
                        }
                }
-               templateSequences[i]->setAligned(aligned);
-               templateSequences[i]->setUnaligned(aligned);
+               templateSequences[i] = Sequence(seqName, aligned);
+               
+               //necessary because Sequence constructor by default sets whatever it reads to unaligned
+               //the setUnaligned function remove gap char.
+               templateSequences[i].setUnaligned(templateSequences[i].getUnaligned());
+               
+               if (templateSequences[i].getUnaligned().length() > longest)  { longest = templateSequences[i].getUnaligned().length(); }
+               
                fastaFile.putback(letter);
+       }*/
+       
+       while (!fastaFile.eof()) {
+               Sequence temp(fastaFile);
+               
+               templateSequences.push_back(temp);
+               
+               //save longest base
+               if (temp.getUnaligned().length() > longest)  { longest = temp.getUnaligned().length(); }
+               
+               gobble(fastaFile);
        }
        
+       numSeqs = templateSequences.size();
+       
        fastaFile.close();
-       cout << "DONE." << endl;        cout.flush();
+       //all of this is elsewhere already!
+       
+       mothurOut("DONE.");
+       mothurOutEndLine();     cout.flush();
 
 }
+/**************************************************************************************************/
+
+Database::~Database(){                                                                                                         
+
+               templateSequences.clear();
+}
 
 /**************************************************************************************************/
+
+float Database::getSearchScore()       {       return searchScore;             }       //      we're assuming that the search is already done
+
+
+/**************************************************************************************************/
+
+int Database::getLongestBase() {       return longest+1;               }       
+
+/**************************************************************************************************/
+