string holdLabel, nextLabel, groupN;
individual newguy;
- for (int i = 0; i < lookup.size(); i++) { delete lookup[i]; lookup[i] = NULL; }
- lookup.clear();
+ 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; }
//read in first row since you know there is at least 1 group.
- f >> label >> groupN >> num;
+ f >> groupN >> num;
+
holdLabel = label;
//add new vector to lookup
//numSeqs += inputData;
//numBins++;
if (inputData > maxRank) { maxRank = inputData; }
-
}
- gobble(f);
-
- if (f.eof() != true) { f >> nextLabel; }
+ 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;
if (globaldata->gGroupmap == NULL) {
//save group in groupmap
+
groupmap->namesOfGroups.push_back(groupN);
groupmap->groupIndex[groupN] = count;
}
lookup[count]->push_back(inputData, groupN); //abundance, bin, group
}
- gobble(f);
+ m->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(); }
+
+ globaldata->saveNextLabel = nextLabel;
if (globaldata->gGroupmap == NULL) { globaldata->gGroupmap = groupmap; }
}
/***********************************************************************/
+void SharedRAbundVector::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();
+}
+/***********************************************************************/
+
void SharedRAbundVector::push_back(int binSize, string groupName){
try {
individual newGuy;
util = new SharedUtil();
util->setGroups(globaldata->Groups, globaldata->gGroupmap->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) {
+ remove = true;
delete lookup[i]; lookup[i] = NULL;
lookup.erase(lookup.begin()+i);
i--;
}
delete util;
+
+ if (remove) { eliminateZeroOTUS(lookup); }
return lookup;
}
exit(1);
}
}
+//**********************************************************************************************************************
+int SharedRAbundVector::eliminateZeroOTUS(vector<SharedRAbundVector*>& thislookup) {
+ try {
+
+ vector<SharedRAbundVector*> newLookup;
+ for (int i = 0; i < thislookup.size(); i++) {
+ SharedRAbundVector* temp = new SharedRAbundVector();
+ 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, "SharedRAbundVector", "eliminateZeroOTUS");
+ exit(1);
+ }
+ }
+
+/***********************************************************************/
+vector<SharedRAbundFloatVector*> SharedRAbundVector::getSharedRAbundFloatVectors(vector<SharedRAbundVector*> thislookup){
+ try {
+ vector<SharedRAbundFloatVector*> newLookupFloat;
+ for (int i = 0; i < lookup.size(); i++) {
+ SharedRAbundFloatVector* temp = new SharedRAbundFloatVector();
+ temp->setLabel(thislookup[i]->getLabel());
+ temp->setGroup(thislookup[i]->getGroup());
+ newLookupFloat.push_back(temp);
+ }
+
+ for (int i = 0; i < thislookup.size(); i++) {
+
+ for (int j = 0; j < thislookup[i]->getNumBins(); j++) {
+
+ if (m->control_pressed) { return newLookupFloat; }
+
+ int abund = thislookup[i]->getAbundance(j);
+
+ float relabund = abund / (float) thislookup[i]->getNumSeqs();
+
+ newLookupFloat[i]->push_back(relabund, thislookup[i]->getGroup());
+ }
+ }
+
+ return newLookupFloat;
+ }
+ catch(exception& e) {
+ m->errorOut(e, "SharedRAbundVector", "getSharedRAbundVectors");
+ exit(1);
+ }
+}
/***********************************************************************/
RAbundVector SharedRAbundVector::getRAbundVector() {
OrderVector SharedRAbundVector::getOrderVector(map<string,int>* nameMap = NULL) {
try {
OrderVector ov;
-
- for(int i=0;i<data.size();i++){
+ for(int i=0;i<numBins;i++){
for(int j=0;j<data[i].abundance;j++){
ov.push_back(i);
}
}
random_shuffle(ov.begin(), ov.end());
-
+
ov.setLabel(label);
+
return ov;
}
catch(exception& e) {