X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=sharedordervector.cpp;h=d0c97f9ab5a16655a381ffb3390dbb4cf94d420a;hb=786d5631d9cd5baa6ed6ef16f8b4b384cbc7470f;hp=fc81febade9a6287dbedb24ef6504adf9f2445c2;hpb=20a2d0350a737a434c89f303662d64a8eeea7b05;p=mothur.git diff --git a/sharedordervector.cpp b/sharedordervector.cpp index fc81feb..d0c97f9 100644 --- a/sharedordervector.cpp +++ b/sharedordervector.cpp @@ -3,17 +3,12 @@ * Dotur * * Created by Sarah Westcott on 12/9/08. - * Copyright 2008 __MyCompanyName__. All rights reserved. + * Copyright 2008 Schloss Lab UMASS Amherst. All rights reserved. * */ -using namespace std; - - #include "sharedordervector.h" -#include "datavector.hpp" -#include "utilities.hpp" -#include +#include "sharedutilities.h" /***********************************************************************/ @@ -27,25 +22,80 @@ SharedOrderVector::SharedOrderVector(string id, vector ov) : updateStats(); } -/*********************************************************************** +/***********************************************************************/ +//This function is used to read a .shared file for the collect.shared, rarefaction.shared and summary.shared commands +//if you don't use a list and groupfile. -SharedOrderVector::SharedOrderVector(ifstream& f) : DataVector() { +SharedOrderVector::SharedOrderVector(ifstream& f) : DataVector() { //reads in a shared file try { - int hold; - - f >> label; - f >> hold; - - data.assign(hold, -1); - - int inputData; - - for(int i=0;igGroupmap == NULL) { groupmap = new GroupMap(); } + + int num, inputData, pos, count; + count = 0; numSeqs = 0; + string holdLabel, nextLabel, groupN; + individual newguy; + + //read in first row since you know there is at least 1 group. + f >> label >> groupN >> num; + holdLabel = label; + + if (globaldata->gGroupmap == NULL) { + //save group in groupmap + groupmap->namesOfGroups.push_back(groupN); + groupmap->groupIndex[groupN] = 0; + } + + for(int i=0;i> inputData; - set(i, inputData); + + for (int j = 0; j < inputData; j++) { + push_back(i, i, groupN); + numSeqs++; + } } + + //save position in file in case next line is a new label. + pos = f.tellg(); + + 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; + } + + for(int i=0;i> inputData; + + for (int j = 0; j < inputData; j++) { + push_back(i, i, groupN); + numSeqs++; + } + } + + //save position in file in case next line is a new label. + pos = f.tellg(); + if (f.eof() != true) { f >> nextLabel; } + + } + + //put file pointer back since you are now at a new distance label + f.seekg(pos, ios::beg); + + if (globaldata->gGroupmap == NULL) { globaldata->gGroupmap = groupmap; } + updateStats(); + } catch(exception& e) { cout << "Standard Error: " << e.what() << " has occurred in the SharedOrderVector class Function SharedOrderVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; @@ -56,26 +106,21 @@ SharedOrderVector::SharedOrderVector(ifstream& f) : DataVector() { exit(1); } } - /***********************************************************************/ - int SharedOrderVector::getNumBins(){ - if(needToUpdate == 1){ updateStats(); } return numBins; } /***********************************************************************/ int SharedOrderVector::getNumSeqs(){ - if(needToUpdate == 1){ updateStats(); } return numSeqs; } /***********************************************************************/ int SharedOrderVector::getMaxRank(){ - if(needToUpdate == 1){ updateStats(); } return maxRank; } @@ -89,8 +134,8 @@ void SharedOrderVector::set(int index, int binNumber, int abund, string groupNam data[index].group = groupName; data[index].bin = binNumber; data[index].abundance = abund; - needToUpdate = 1; - + //if (abund > maxRank) { maxRank = abund; } + updateStats(); } /***********************************************************************/ @@ -101,15 +146,18 @@ individual SharedOrderVector::get(int index){ /***********************************************************************/ - +//commented updateStats out to improve speed, but whoever calls this must remember to update when they are done with all the pushbacks they are doing void SharedOrderVector::push_back(int binNumber, int abund, string groupName){ individual newGuy; newGuy.group = groupName; newGuy.abundance = abund; newGuy.bin = binNumber; data.push_back(newGuy); - needToUpdate = 1; + //numSeqs++; + //numBins++; + //if (abund > maxRank) { maxRank = abund; } + //updateStats(); } /***********************************************************************/ @@ -221,11 +269,77 @@ SAbundVector SharedOrderVector::getSAbundVector(){ RAbundVector rav(this->getRAbundVector()); return rav.getSAbundVector(); +} +/***********************************************************************/ +SharedRAbundVector SharedOrderVector::getSharedRAbundVector(string group) { + try { + SharedRAbundVector sharedRav(data.size()); + + sharedRav.setLabel(label); + sharedRav.setGroup(group); + + for (int i = 0; i < data.size(); i++) { + if (data[i].group == group) { + sharedRav.set(data[i].abundance, sharedRav.getAbundance(data[i].abundance) + 1, data[i].group); + } + } + return sharedRav; + } + catch(exception& e) { + cout << "Standard Error: " << e.what() << " has occurred in the SharedOrderVector class Function getSharedRAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } + catch(...) { + cout << "An unknown error has occurred in the SharedOrderVector class function getSharedRAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } + +} +/***********************************************************************/ +vector SharedOrderVector::getSharedRAbundVector() { + try { + SharedUtil* util; + util = new SharedUtil(); + vector lookup; + + util->setGroups(globaldata->Groups, globaldata->gGroupmap->namesOfGroups); + util->getSharedVectors(globaldata->Groups, lookup, this); + + return lookup; + } + catch(exception& e) { + cout << "Standard Error: " << e.what() << " has occurred in the SharedOrderVector class Function getSharedRAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } + catch(...) { + cout << "An unknown error has occurred in the SharedOrderVector class function getSharedRAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } + +} +/***********************************************************************/ +SharedSAbundVector SharedOrderVector::getSharedSAbundVector(string group) { + try { + + SharedRAbundVector sharedRav(this->getSharedRAbundVector(group)); + return sharedRav.getSharedSAbundVector(); + + } + catch(exception& e) { + cout << "Standard Error: " << e.what() << " has occurred in the SharedOrderVector class Function getSharedRAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } + catch(...) { + cout << "An unknown error has occurred in the SharedOrderVector class function getSharedRAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + exit(1); + } + } /***********************************************************************/ SharedOrderVector SharedOrderVector::getSharedOrderVector(){ + random_shuffle(data.begin(), data.end()); return *this; } @@ -238,25 +352,18 @@ void SharedOrderVector::updateStats(){ numBins = 0; maxRank = 0; - for(int i=0;i hold(numSeqs); - + numSeqs = data.size(); + + vector hold(numSeqs, 0); for(int i=0;i numBins) { numBins = data[i].bin; } - if(data[i].abundance > maxRank) { maxRank = data[i].abundance; } + if(hold[i] > 0) { numBins++; } + if(hold[i] > maxRank) { maxRank = hold[i]; } } - numBins++; //if you have 10 bins largest .bin is 9 since we start at 0. + } catch(exception& e) { cout << "Standard Error: " << e.what() << " has occurred in the SharedOrderVector class Function updateStats. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";