/***********************************************************************/
-SharedRAbundFloatVector::SharedRAbundFloatVector() : DataVector(), maxRank(0.0), numBins(0), numSeqs(0.0) {globaldata = GlobalData::getInstance();}
+SharedRAbundFloatVector::SharedRAbundFloatVector() : DataVector(), maxRank(0.0), numBins(0), numSeqs(0.0) {}
/***********************************************************************/
SharedRAbundFloatVector::~SharedRAbundFloatVector() {}
/***********************************************************************/
SharedRAbundFloatVector::SharedRAbundFloatVector(int n) : DataVector(), maxRank(0.0), numBins(n), numSeqs(0.0) {
- globaldata = GlobalData::getInstance();
+
individualFloat newGuy;
//initialize data
for (int i=0; i< n; i++) {
//reads a shared file
SharedRAbundFloatVector::SharedRAbundFloatVector(ifstream& f) : DataVector(), maxRank(0.0), numBins(0), numSeqs(0.0) {
try {
- globaldata = GlobalData::getInstance();
- if (globaldata->gGroupmap == NULL) { groupmap = new GroupMap(); }
+ m->namesOfGroups.clear();
int num, count;
float inputData;
for (int i = 0; i < lookup.size(); i++) { delete lookup[i]; lookup[i] = NULL; }
lookup.clear();
- if (globaldata->saveNextLabel == "") { f >> label; }
- else { label = globaldata->saveNextLabel; }
+ if (m->saveNextLabel == "") { f >> label; }
+ else { label = m->saveNextLabel; }
//read in first row since you know there is at least 1 group.
f >> groupN >> num;
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;
- }
+ m->namesOfGroups.push_back(groupN);
//fill vector. data = first sharedrabund in file
for(int i=0;i<num;i++){
f >> groupN >> num;
count++;
- if (globaldata->gGroupmap == NULL) {
- //save group in groupmap
- groupmap->namesOfGroups.push_back(groupN);
- groupmap->groupIndex[groupN] = count;
- }
+ m->namesOfGroups.push_back(groupN);
//add new vector to lookup
temp = new SharedRAbundFloatVector();
if (f.eof() != true) { f >> nextLabel; }
}
- globaldata->saveNextLabel = nextLabel;
+ m->saveNextLabel = nextLabel;
- if (globaldata->gGroupmap == NULL) { globaldata->gGroupmap = groupmap; }
-
}
catch(exception& e) {
m->errorOut(e, "SharedRAbundFloatVector", "SharedRAbundFloatVector");
numSeqs += (newBinSize - oldBinSize);
}
catch(exception& e) {
- m->errorOut(e, "SharedRAbundVector", "set");
+ m->errorOut(e, "SharedRAbundFloatVector", "set");
exit(1);
}
}
+/***********************************************************************/
+void SharedRAbundFloatVector::clear(){
+ numBins = 0;
+ maxRank = 0;
+ numSeqs = 0;
+ data.clear();
+ for (int i = 0; i < lookup.size(); i++) { delete lookup[i]; lookup[i] = NULL; }
+ lookup.clear();
+}
/***********************************************************************/
float SharedRAbundFloatVector::getAbundance(int index){
return data[index].abundance;
SharedUtil* util;
util = new SharedUtil();
- util->setGroups(globaldata->Groups, globaldata->gGroupmap->namesOfGroups);
-
+ util->setGroups(m->Groups, m->namesOfGroups);
+
+ bool remove = false;
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) {
+ if (util->isValidGroup(lookup[i]->getGroup(), m->Groups) == false) {
delete lookup[i]; lookup[i] = NULL;
lookup.erase(lookup.begin()+i);
i--;
+ remove = true;
}
}
delete util;
+
+ if (remove) { eliminateZeroOTUS(lookup); }
return lookup;
}
exit(1);
}
}
-
+//**********************************************************************************************************************
+int SharedRAbundFloatVector::eliminateZeroOTUS(vector<SharedRAbundFloatVector*>& thislookup) {
+ try {
+
+ vector<SharedRAbundFloatVector*> newLookup;
+ for (int i = 0; i < thislookup.size(); i++) {
+ SharedRAbundFloatVector* temp = new SharedRAbundFloatVector();
+ temp->setLabel(thislookup[i]->getLabel());
+ temp->setGroup(thislookup[i]->getGroup());
+ newLookup.push_back(temp);
+ }
+
+ //for each bin
+ for (int i = 0; i < thislookup[0]->getNumBins(); i++) {
+ if (m->control_pressed) { for (int j = 0; j < newLookup.size(); j++) { delete newLookup[j]; } return 0; }
+
+ //look at each sharedRabund and make sure they are not all zero
+ bool allZero = true;
+ for (int j = 0; j < thislookup.size(); j++) {
+ if (thislookup[j]->getAbundance(i) != 0) { allZero = false; break; }
+ }
+
+ //if they are not all zero add this bin
+ if (!allZero) {
+ for (int j = 0; j < thislookup.size(); j++) {
+ newLookup[j]->push_back(thislookup[j]->getAbundance(i), thislookup[j]->getGroup());
+ }
+ }
+ }
+
+ for (int j = 0; j < thislookup.size(); j++) { delete thislookup[j]; }
+
+ thislookup = newLookup;
+
+ return 0;
+
+ }
+ catch(exception& e) {
+ m->errorOut(e, "SharedRAbundFloatVector", "eliminateZeroOTUS");
+ exit(1);
+ }
+}
/***********************************************************************/