* Dotur
*
* Created by Sarah Westcott on 12/9/08.
- * Copyright 2008 __MyCompanyName__. All rights reserved.
+ * Copyright 2008 Schloss Lab UMASS Amherst. All rights reserved.
*
*/
#include "sharedordervector.h"
-#include "datavector.hpp"
#include "utilities.hpp"
#include <exception>
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() {
try {
- int hold;
-
- f >> label;
- f >> hold;
-
- data.assign(hold, -1);
-
- int inputData;
-
- for(int i=0;i<hold;i++){
+ globaldata = GlobalData::getInstance();
+
+ if (globaldata->gGroupmap == 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<num;i++){
f >> inputData;
- set(i, inputData);
+ for (int j = 0; j < inputData; j++) {
+ push_back(i+1, i+1, 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<num;i++){
+ f >> inputData;
+ for (int j = 0; j < inputData; j++) {
+ push_back(i+1, i+1, 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();
}
exit(1);
}
}
-
/***********************************************************************/
-
int SharedOrderVector::getNumBins(){
if(needToUpdate == 1){ updateStats(); }
return numBins;
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);
+ }
+
+}
+/***********************************************************************/
+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);
+ }
+
}
/***********************************************************************/