X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=sharedordervector.cpp;h=80b8fb9bd45a8596e91afe30fdec3984b2411de6;hp=575ae18ea050e90c416efa480181773799a25af5;hb=499f4ac6e321f9f03d4c3aa25c3b6880892c8b83;hpb=fd282e6b4be2560f5b1bd154a9e8d24b798eefaf diff --git a/sharedordervector.cpp b/sharedordervector.cpp index 575ae18..80b8fb9 100644 --- a/sharedordervector.cpp +++ b/sharedordervector.cpp @@ -7,12 +7,8 @@ * */ -using namespace std; - - #include "sharedordervector.h" -#include "utilities.hpp" -#include +#include "sharedutilities.h" /***********************************************************************/ @@ -26,57 +22,134 @@ SharedOrderVector::SharedOrderVector(string id, vector ov) : updateStats(); } -/*********************************************************************** - -//does not work since we don't have a shared order file format yet. +/***********************************************************************/ +//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;isaveNextLabel == "") { + f >> label; + + //is this a shared file that has headers + if (label == "label") { + //gets "group" + f >> label; m->gobble(f); + + //gets "numOtus" + f >> label; m->gobble(f); + + //eat rest of line + label = m->getline(f); m->gobble(f); + + //parse labels to save + istringstream iStringStream(label); + m->sharedBinLabelsInFile.clear(); + while(!iStringStream.eof()){ + if (m->control_pressed) { break; } + string temp; + iStringStream >> temp; m->gobble(iStringStream); + + m->sharedBinLabelsInFile.push_back(temp); + } + + f >> label; + } + }else { label = m->saveNextLabel; } + + //reset labels, currentLabels may have gotten changed as otus were eliminated because of group choices or sampling + m->currentSharedBinLabels = m->sharedBinLabelsInFile; + + //read in first row since you know there is at least 1 group. + f >> groupN >> num; + + holdLabel = label; + + + vector allGroups; + //save group in groupmap + allGroups.push_back(groupN); + groupmap->groupIndex[groupN] = 0; + + + for(int i=0;i> inputData; - set(i, inputData, inputData, group); + + for (int j = 0; j < inputData; j++) { + push_back(i, i, groupN); + numSeqs++; + } } - + + m->gobble(f); + + if (!(f.eof())) { f >> nextLabel; } + + //read the rest of the groups info in + while ((nextLabel == holdLabel) && (f.eof() != true)) { + f >> groupN >> num; + count++; + + + //save group in groupmap + allGroups.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++; + } + } + + m->gobble(f); + + if (f.eof() != true) { f >> nextLabel; } + + } + + m->saveNextLabel = nextLabel; + + groupmap->setNamesOfGroups(allGroups); + m->setAllGroups(allGroups); + 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"; - exit(1); - } - catch(...) { - cout << "An unknown error has occurred in the SharedOrderVector class function SharedOrderVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + m->errorOut(e, "SharedOrderVector", "SharedOrderVector"); 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; } @@ -90,8 +163,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(); } /***********************************************************************/ @@ -102,15 +175,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(); } /***********************************************************************/ @@ -125,20 +201,23 @@ void SharedOrderVector::print(ostream& output){ output << endl; } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the SharedOrderVector class Function print. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - catch(...) { - cout << "An unknown error has occurred in the SharedOrderVector class function print. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + m->errorOut(e, "SharedOrderVector", "print"); exit(1); } } +/***********************************************************************/ +void SharedOrderVector::clear(){ + numBins = 0; + maxRank = 0; + numSeqs = 0; + data.clear(); +} /***********************************************************************/ void SharedOrderVector::resize(int){ - cout << "resize() did nothing in class SharedOrderVector"; + m->mothurOut("resize() did nothing in class SharedOrderVector"); } /***********************************************************************/ @@ -181,13 +260,9 @@ RAbundVector SharedOrderVector::getRAbundVector(){ return rav; } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the SharedOrderVector class Function getRAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + m->errorOut(e, "SharedOrderVector", "getRAbundVector"); exit(1); } - catch(...) { - cout << "An unknown error has occurred in the SharedOrderVector class function getRAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } } /***********************************************************************/ @@ -205,11 +280,7 @@ OrderVector SharedOrderVector::getOrderVector(map* nameMap = NULL) { return ov; } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the SharedOrderVector class Function getOrderVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - catch(...) { - cout << "An unknown error has occurred in the SharedOrderVector class function getOrderVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + m->errorOut(e, "SharedOrderVector", "getOrderVector"); exit(1); } } @@ -239,14 +310,30 @@ SharedRAbundVector SharedOrderVector::getSharedRAbundVector(string 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"; + m->errorOut(e, "SharedOrderVector", "getSharedRAbundVector"); 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"; +} +/***********************************************************************/ +vector SharedOrderVector::getSharedRAbundVector() { + try { + SharedUtil* util; + util = new SharedUtil(); + vector lookup; + + vector Groups = m->getGroups(); + vector allGroups = m->getAllGroups(); + util->setGroups(Groups, allGroups); + util->getSharedVectors(Groups, lookup, this); + m->setGroups(Groups); + m->setAllGroups(allGroups); + + return lookup; + } + catch(exception& e) { + m->errorOut(e, "SharedOrderVector", "getSharedRAbundVector"); exit(1); } - } /***********************************************************************/ SharedSAbundVector SharedOrderVector::getSharedSAbundVector(string group) { @@ -257,19 +344,15 @@ SharedSAbundVector SharedOrderVector::getSharedSAbundVector(string group) { } 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"; + m->errorOut(e, "SharedOrderVector", "getSharedSAbundVector"); exit(1); } - } /***********************************************************************/ SharedOrderVector SharedOrderVector::getSharedOrderVector(){ + random_shuffle(data.begin(), data.end()); return *this; } @@ -282,34 +365,23 @@ 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"; + m->errorOut(e, "SharedOrderVector", "updateStats"); exit(1); } - catch(...) { - cout << "An unknown error has occurred in the SharedOrderVector class function updateStats. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } } /***********************************************************************/