X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=sharedrabundvector.cpp;h=6bf4916ea2ceb2a412a7833faa1386eb9d43d06f;hb=b7cce6e0a45013919e76a266533fcca4052cf157;hp=3d6a2debbc05540cb5d4cb38cba1dab5638c7346;hpb=2657127a3e1f3b5463f2b3a3b49bc19843f5c9d2;p=mothur.git diff --git a/sharedrabundvector.cpp b/sharedrabundvector.cpp index 3d6a2de..6bf4916 100644 --- a/sharedrabundvector.cpp +++ b/sharedrabundvector.cpp @@ -7,23 +7,20 @@ * */ - -using namespace std; - #include "sharedrabundvector.h" -#include "utilities.hpp" #include "sabundvector.hpp" #include "ordervector.hpp" -#include +#include "sharedutilities.h" /***********************************************************************/ -SharedRAbundVector::SharedRAbundVector() : DataVector(), maxRank(0), numBins(0), numSeqs(0) {}; +SharedRAbundVector::SharedRAbundVector() : DataVector(), maxRank(0), numBins(0), numSeqs(0) {globaldata = GlobalData::getInstance();} /***********************************************************************/ SharedRAbundVector::SharedRAbundVector(int n) : DataVector(), maxRank(0), numBins(n), numSeqs(0) { + globaldata = GlobalData::getInstance(); individual newGuy; //initialize data for (int i=0; i< n; i++) { @@ -31,7 +28,7 @@ SharedRAbundVector::SharedRAbundVector(int n) : DataVector(), maxRank(0), numBin newGuy.abundance = 0; data.push_back(newGuy); } -}; +} /*********************************************************************** @@ -58,30 +55,84 @@ SharedRAbundVector::SharedRAbundVector(string id, vector rav) : Data } -/*********************************************************************** - - +/***********************************************************************/ +//reads a shared file SharedRAbundVector::SharedRAbundVector(ifstream& f) : DataVector(), maxRank(0), numBins(0), numSeqs(0) { try { - int i, num; - string holdLabel, group - individual newGuy; + globaldata = GlobalData::getInstance(); - f >> label >> group >> num; + if (globaldata->gGroupmap == NULL) { groupmap = new GroupMap(); } - //initialize data - for (i=0; i> label >> groupN >> num; + holdLabel = label; + + //add new vector to lookup + SharedRAbundVector* temp = new SharedRAbundVector(); + lookup.push_back(temp); + lookup[0]->setLabel(label); + lookup[0]->setGroup(groupN); + + if (globaldata->gGroupmap == NULL) { + //save group in groupmap + groupmap->namesOfGroups.push_back(groupN); + groupmap->groupIndex[groupN] = 0; } - int inputData; - - for(int i=0;i> inputData; - set(i, inputData); + + lookup[0]->push_back(inputData, i, groupN); //abundance, bin, group + push_back(inputData, i, groupN); + numSeqs += inputData; + numBins++; + if (inputData > maxRank) { maxRank = inputData; } + } + + if (f.eof() != true) { f >> nextLabel; } + + //read the rest of the groups info in + while ((nextLabel == holdLabel) && (f.eof() != true)) { + f >> groupN >> num; + count++; + + if (globaldata->gGroupmap == NULL) { + //save group in groupmap + groupmap->namesOfGroups.push_back(groupN); + groupmap->groupIndex[groupN] = count; + } + + //add new vector to lookup + temp = new SharedRAbundVector(); + lookup.push_back(temp); + lookup[count]->setLabel(label); + lookup[count]->setGroup(groupN); + + //fill vector. + for(int i=0;i> inputData; + lookup[count]->push_back(inputData, i, groupN); //abundance, bin, group + } + + + if (f.eof() != true) { f >> nextLabel; } + } + + //put file pointer back since you are now at a new distance label + for (int i = 0; i < nextLabel.length(); i++) { f.unget(); } + + if (globaldata->gGroupmap == NULL) { globaldata->gGroupmap = groupmap; } + } catch(exception& e) { cout << "Standard Error: " << e.what() << " has occurred in the SharedRAbundVector class Function SharedRAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; @@ -95,12 +146,6 @@ SharedRAbundVector::SharedRAbundVector(ifstream& f) : DataVector(), maxRank(0), /***********************************************************************/ -SharedRAbundVector::~SharedRAbundVector() { - -} - -/***********************************************************************/ - void SharedRAbundVector::set(int binNumber, int newBinSize, string groupname){ try { int oldBinSize = data[binNumber].abundance; @@ -186,6 +231,33 @@ void SharedRAbundVector::push_back(int binSize, int otu, string groupName){ } } +/***********************************************************************/ + +void SharedRAbundVector::insert(int binSize, int otu, string groupName){ + try { + individual newGuy; + newGuy.abundance = binSize; + newGuy.group = groupName; + newGuy.bin = otu; + + data.insert(data.begin()+otu, newGuy); + numBins++; + + if(binSize > maxRank){ + maxRank = binSize; + } + + numSeqs += binSize; + } + catch(exception& e) { + cout << "Standard Error: " << e.what() << " has occurred in the SharedRAbundVector class Function insert. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } + catch(...) { + cout << "An unknown error has occurred in the SharedRAbundVector class function insert. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } +} /***********************************************************************/ @@ -217,7 +289,8 @@ void SharedRAbundVector::push_front(int binSize, int otu, string groupName){ /***********************************************************************/ void SharedRAbundVector::pop_back(){ - + numSeqs -= data[data.size()-1].abundance; + numBins--; return data.pop_back(); } @@ -251,7 +324,7 @@ void SharedRAbundVector::print(ostream& output){ try { output << numBins << '\t'; - for(int i=0;i SharedRAbundVector::getSharedRAbundVectors(){ + try { + SharedUtil* util; + util = new SharedUtil(); + + util->setGroups(globaldata->Groups, globaldata->gGroupmap->namesOfGroups); + + for (int i = 0; i < lookup.size(); i++) { + //if this sharedrabund is not from a group the user wants then delete it. + if (util->isValidGroup(lookup[i]->getGroup(), globaldata->Groups) == false) { + delete lookup[i]; + lookup.erase(lookup.begin()+i); + i--; + } + } + + delete util; + + return lookup; + } + catch(exception& e) { + cout << "Standard Error: " << e.what() << " has occurred in the SharedRAbundVector class Function getSharedRAbundVectors. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } + catch(...) { + cout << "An unknown error has occurred in the SharedRAbundVector class function getSharedRAbundVectors. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } +} +/***********************************************************************/ RAbundVector SharedRAbundVector::getRAbundVector() { try { @@ -402,6 +505,8 @@ SharedOrderVector SharedRAbundVector::getSharedOrderVector() { random_shuffle(ov.begin(), ov.end()); ov.setLabel(label); + ov.updateStats(); + return ov; } catch(exception& e) {