//********************************************************************************************************************** int CorrAxesCommand::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 vector<string> newBinLabels; string snumBins = toString(thislookup[0]->getNumBins()); 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()); } //if there is a bin label use it otherwise make one string binLabel = "Otu"; string sbinNumber = toString(i+1); if (sbinNumber.length() < snumBins.length()) { int diff = snumBins.length() - sbinNumber.length(); for (int h = 0; h < diff; h++) { binLabel += "0"; } } binLabel += sbinNumber; if (i < m->currentBinLabels.size()) { binLabel = m->currentBinLabels[i]; } newBinLabels.push_back(binLabel); } } for (int j = 0; j < thislookup.size(); j++) { delete thislookup[j]; } thislookup = newLookup; m->currentBinLabels = newBinLabels; return 0; } catch(exception& e) { m->errorOut(e, "CorrAxesCommand", "eliminateZeroOTUS"); exit(1); } }
//this function is just used to convert files to test the differences between the metastats version and mothurs version int MetaStatsCommand::convertToShared(string filename) { try { ifstream in; m->openInputFile(filename, in); string header = m->getline(in); m->gobble(in); vector<string> groups = m->splitWhiteSpace(header); vector<SharedRAbundFloatVector*> newLookup; cout << groups.size() << endl; for (int i = 0; i < groups.size(); i++) { cout << "creating group " << groups[i] << endl; SharedRAbundFloatVector* temp = new SharedRAbundFloatVector(); temp->setLabel("0.03"); temp->setGroup(groups[i]); newLookup.push_back(temp); } int otuCount = 0; while (!in.eof()) { if (m->control_pressed) { break; } string otuname; in >> otuname; m->gobble(in); otuCount++; cout << otuname << endl; for (int i = 0; i < groups.size(); i++) { double temp; in >> temp; m->gobble(in); newLookup[i]->push_back(temp, groups[i]); } m->gobble(in); } in.close(); ofstream out; m->openOutputFile(filename+".shared", out); out << "label\tgroup\tnumOTUs\t"; string snumBins = toString(otuCount); for (int i = 0; i < otuCount; i++) { string binLabel = "Otu"; string sbinNumber = toString(i+1); if (sbinNumber.length() < snumBins.length()) { int diff = snumBins.length() - sbinNumber.length(); for (int h = 0; h < diff; h++) { binLabel += "0"; } } binLabel += sbinNumber; out << binLabel << '\t'; } out << endl; for (int i = 0; i < groups.size(); i++) { out << "0.03" << '\t' << groups[i] << '\t'; newLookup[i]->print(out); } out.close(); cout << filename+".shared" << endl; return 0; } catch(exception& e) { m->errorOut(e, "MetaStatsCommand", "convertToShared"); exit(1); } }
int CorrAxesCommand::getMetadata(){ try { vector<string> groupNames; ifstream in; m->openInputFile(metadatafile, in); string headerLine = m->getline(in); m->gobble(in); istringstream iss (headerLine,istringstream::in); //read the first label, because it refers to the groups string columnLabel; iss >> columnLabel; m->gobble(iss); //save names of columns you are reading while (!iss.eof()) { iss >> columnLabel; m->gobble(iss); metadataLabels.push_back(columnLabel); } int count = metadataLabels.size(); //read rest of file while (!in.eof()) { if (m->control_pressed) { in.close(); return 0; } string group = ""; in >> group; m->gobble(in); groupNames.push_back(group); SharedRAbundFloatVector* tempLookup = new SharedRAbundFloatVector(); tempLookup->setGroup(group); tempLookup->setLabel("1"); for (int i = 0; i < count; i++) { float temp = 0.0; in >> temp; tempLookup->push_back(temp, group); } lookupFloat.push_back(tempLookup); m->gobble(in); } in.close(); //remove any groups the user does not want, and set globaldata->groups with only valid groups SharedUtil* util; util = new SharedUtil(); Groups = m->getGroups(); util->setGroups(Groups, groupNames); m->setGroups(Groups); for (int i = 0; i < lookupFloat.size(); i++) { //if this sharedrabund is not from a group the user wants then delete it. if (util->isValidGroup(lookupFloat[i]->getGroup(), m->getGroups()) == false) { delete lookupFloat[i]; lookupFloat[i] = NULL; lookupFloat.erase(lookupFloat.begin()+i); i--; } } delete util; return 0; } catch(exception& e) { m->errorOut(e, "CorrAxesCommand", "getMetadata"); exit(1); } }