*
*/
-
-using namespace std;
-
#include "sharedrabundvector.h"
-#include "datavector.hpp"
-#include "utilities.hpp"
-#include <exception>
-#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() {
+ //for (int i = 0; i < lookup.size(); i++) { delete lookup[i]; }
+
+}
/***********************************************************************/
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++) {
newGuy.abundance = 0;
data.push_back(newGuy);
}
-};
+}
/***********************************************************************
}
}
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";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the SharedRAbundVector class function SharedRAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ errorOut(e, "SharedRAbundVector", "SharedRAbundVector");
exit(1);
}
}
-/***********************************************************************
-
-
+/***********************************************************************/
+//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<hold; i++) {
- newGuy = new individual;
- newGuy.abundance = 0;
- newGuy.bin = i;
- data.push_back(newGuy);
+ int num, inputData, count;
+ count = 0;
+ string holdLabel, nextLabel, groupN;
+ individual newguy;
+
+ for (int i = 0; i < lookup.size(); i++) { delete lookup[i]; }
+ lookup.clear();
+
+ //read in first row since you know there is at least 1 group.
+ f >> 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<hold;i++){
+
+ //fill vector. data = first sharedrabund in file
+ for(int i=0;i<num;i++){
f >> inputData;
- set(i, inputData);
+
+ lookup[0]->push_back(inputData, groupN); //abundance, bin, group
+ push_back(inputData, groupN);
+ numSeqs += inputData;
+ numBins++;
+ if (inputData > maxRank) { maxRank = inputData; }
+
}
+
+ gobble(f);
+
+ 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<num;i++){
+ f >> inputData;
+ lookup[count]->push_back(inputData, groupN); //abundance, bin, group
+ }
+
+ gobble(f);
+
+ 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";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the SharedRAbundVector class function SharedRAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ errorOut(e, "SharedRAbundVector", "SharedRAbundVector");
exit(1);
}
}
/***********************************************************************/
-SharedRAbundVector::~SharedRAbundVector() {
-
-}
-
-/***********************************************************************/
-
void SharedRAbundVector::set(int binNumber, int newBinSize, string groupname){
try {
int oldBinSize = data[binNumber].abundance;
numSeqs += (newBinSize - oldBinSize);
}
catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the SharedRAbundVector class Function set. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the SharedRAbundVector class function set. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ errorOut(e, "SharedRAbundVector", "set");
exit(1);
}
}
+/***********************************************************************/
+
+void SharedRAbundVector::setData(vector <individual> newData){
+ data = newData;
+}
/***********************************************************************/
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 <individual> SharedRAbundVector::getData(){
+ return data;
+}
/***********************************************************************/
-void SharedRAbundVector::push_back(int binSize, int otu, string groupName){
+void SharedRAbundVector::push_back(int binSize, string groupName){
try {
individual newGuy;
newGuy.abundance = binSize;
newGuy.group = groupName;
- newGuy.bin = otu;
+ newGuy.bin = data.size();
data.push_back(newGuy);
numBins++;
numSeqs += binSize;
}
catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the SharedRAbundVector class Function push_back. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ errorOut(e, "SharedRAbundVector", "push_back");
exit(1);
}
- catch(...) {
- cout << "An unknown error has occurred in the SharedRAbundVector class function push_back. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+}
+
+/***********************************************************************/
+
+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) {
+ errorOut(e, "SharedRAbundVector", "insert");
exit(1);
}
}
/***********************************************************************/
-void SharedRAbundVector::pop_back(){
+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) {
+ errorOut(e, "SharedRAbundVector", "push_front");
+ exit(1);
+ }
+}
+/***********************************************************************/
+void SharedRAbundVector::pop_back(){
+ numSeqs -= data[data.size()-1].abundance;
+ numBins--;
return data.pop_back();
}
try {
output << numBins << '\t';
- for(int i=0;i<numBins;i++){ output << data[i].abundance << '\t'; }
+ for(int i=0;i<data.size();i++){ output << data[i].abundance << '\t'; }
output << endl;
}
catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the SharedRAbundVector class Function print. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the SharedRAbundVector class function print. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ errorOut(e, "SharedRAbundVector", "print");
exit(1);
}
}
int SharedRAbundVector::getMaxRank(){
return maxRank;
}
-
/***********************************************************************/
SharedRAbundVector SharedRAbundVector::getSharedRAbundVector(){
return *this;
}
/***********************************************************************/
+vector<SharedRAbundVector*> 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) {
+ errorOut(e, "SharedRAbundVector", "getSharedRAbundVectors");
+ exit(1);
+ }
+}
+/***********************************************************************/
RAbundVector SharedRAbundVector::getRAbundVector() {
try {
- RAbundVector rav(data.size());
+ RAbundVector rav;
for (int i = 0; i < data.size(); i++) {
- rav.set(i, data[i].abundance);
+ if(data[i].abundance != 0) {
+ rav.push_back(data[i].abundance);
+ }
}
-
+
+ rav.setLabel(label);
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";
+ errorOut(e, "SharedRAbundVector", "getRAbundVector");
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";
+}
+/***********************************************************************/
+
+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) {
+ errorOut(e, "SharedRAbundVector", "getRAbundVector2");
exit(1);
}
}
-
/***********************************************************************/
SharedSAbundVector SharedRAbundVector::getSharedSAbundVector(){
return sav;
}
catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the SharedRAbundVector class Function getSharedSAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the SharedRAbundVector class function getSharedSAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ errorOut(e, "SharedRAbundVector", "getSharedSAbundVector");
exit(1);
}
}
return sav;
}
catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the SharedRAbundVector class Function getSAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the SharedRAbundVector class function getSAbundVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ errorOut(e, "SharedRAbundVector", "getSAbundVector");
exit(1);
}
}
random_shuffle(ov.begin(), ov.end());
ov.setLabel(label);
+ ov.updateStats();
+
return ov;
}
catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the SharedRAbundVector class Function getOrderVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the SharedRAbundVector class function getOrderVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ errorOut(e, "SharedRAbundVector", "getSharedOrderVector");
exit(1);
}
}
return ov;
}
catch(exception& e) {
- cout << "Standard Error: " << e.what() << " has occurred in the SharedRAbundVector class Function getOrderVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
- exit(1);
- }
- catch(...) {
- cout << "An unknown error has occurred in the SharedRAbundVector class function getOrderVector. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n";
+ errorOut(e, "SharedRAbundVector", "getOrderVector");
exit(1);
}
}