X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=sharedrabundvector.cpp;h=6bf4916ea2ceb2a412a7833faa1386eb9d43d06f;hb=b7cce6e0a45013919e76a266533fcca4052cf157;hp=6bdeed0753e767de6616930a6cdc560c6e0f2610;hpb=20a2d0350a737a434c89f303662d64a8eeea7b05;p=mothur.git diff --git a/sharedrabundvector.cpp b/sharedrabundvector.cpp index 6bdeed0..6bf4916 100644 --- a/sharedrabundvector.cpp +++ b/sharedrabundvector.cpp @@ -7,25 +7,20 @@ * */ - -using namespace std; - #include "sharedrabundvector.h" -#include "datavector.hpp" -#include "utilities.hpp" -#include -#include "sharedrabundvector.h" #include "sabundvector.hpp" #include "ordervector.hpp" +#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++) { @@ -33,7 +28,7 @@ SharedRAbundVector::SharedRAbundVector(int n) : DataVector(), maxRank(0), numBin newGuy.abundance = 0; data.push_back(newGuy); } -}; +} /*********************************************************************** @@ -60,29 +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, hold; - individual newGuy; + globaldata = GlobalData::getInstance(); - f >> label >> hold; + 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"; @@ -96,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; @@ -121,6 +165,11 @@ void SharedRAbundVector::set(int binNumber, int newBinSize, string groupname){ exit(1); } } +/***********************************************************************/ + +void SharedRAbundVector::setData(vector newData){ + data = newData; +} /***********************************************************************/ @@ -128,14 +177,32 @@ int SharedRAbundVector::getAbundance(int index){ return data[index].abundance; } +/***********************************************************************/ +int SharedRAbundVector::numNZ(){ + int sum = 0; + for(int i = 1; i < numBins; i++) + if(data[i].abundance > 0) + sum++; + return sum; +} +/***********************************************************************/ + +void SharedRAbundVector::sortD(){ + struct individual indObj; + sort(data.begin()+1, data.end(), indObj); +} /***********************************************************************/ individual SharedRAbundVector::get(int index){ return data[index]; } +/***********************************************************************/ +vector SharedRAbundVector::getData(){ + return data; +} /***********************************************************************/ void SharedRAbundVector::push_back(int binSize, int otu, string groupName){ @@ -166,8 +233,64 @@ void SharedRAbundVector::push_back(int binSize, int otu, string groupName){ /***********************************************************************/ -void SharedRAbundVector::pop_back(){ +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); + } +} +/***********************************************************************/ + +void SharedRAbundVector::push_front(int binSize, int otu, string groupName){ + try { + individual newGuy; + newGuy.abundance = binSize; + newGuy.group = groupName; + newGuy.bin = otu; + + data.insert(data.begin(), newGuy); + numBins++; + + if(binSize > maxRank){ + maxRank = binSize; + } + + numSeqs += binSize; + } + catch(exception& e) { + cout << "Standard Error: " << e.what() << " has occurred in the SharedRAbundVector class Function push_front. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } + catch(...) { + cout << "An unknown error has occurred in the SharedRAbundVector class function push_front. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } +} + +/***********************************************************************/ +void SharedRAbundVector::pop_back(){ + numSeqs -= data[data.size()-1].abundance; + numBins--; return data.pop_back(); } @@ -201,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 { + RAbundVector rav(data.size()); + + for (int i = 0; i < data.size(); i++) { + rav.set(i, data[i].abundance); + } + + return rav; + } + catch(exception& e) { + cout << "Standard Error: " << e.what() << " has occurred in the SharedRAbundVector class Function getRAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } + catch(...) { + cout << "An unknown error has occurred in the SharedRAbundVector class function getRAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } +} +/***********************************************************************/ + +RAbundVector SharedRAbundVector::getRAbundVector2() { + try { + RAbundVector rav; + for(int i = 0; i < numBins; i++) + if(data[i].abundance != 0) + rav.push_back(data[i].abundance-1); + return rav; + } + catch(exception& e) { + cout << "Standard Error: " << e.what() << " has occurred in the SharedRAbundVector class Function getRAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } + catch(...) { + cout << "An unknown error has occurred in the SharedRAbundVector class function getRAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } +} +/***********************************************************************/ +SharedSAbundVector SharedRAbundVector::getSharedSAbundVector(){ + try { + SharedSAbundVector sav(maxRank+1); + + for(int i=0;i