X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=sharedcommand.cpp;h=2c1b6af3004e7351085e4538f7023e342bc181f9;hb=260ae19c36cb11a53ddc5a75b5e507f8dd8b31d6;hp=91bb8e19604d3d9446016c4b9eaf82f566172c0a;hpb=762b3e4c83e1e8e8392c1199b6482d36ee89e50f;p=mothur.git diff --git a/sharedcommand.cpp b/sharedcommand.cpp index 91bb8e1..2c1b6af 100644 --- a/sharedcommand.cpp +++ b/sharedcommand.cpp @@ -21,12 +21,12 @@ SharedCommand::SharedCommand(string o) : outputDir(o) { //getting output filename filename = globaldata->inputFileName; - if (outputDir == "") { outputDir += hasPath(filename); } + if (outputDir == "") { outputDir += m->hasPath(filename); } - filename = outputDir + getRootName(getSimpleName(filename)); + filename = outputDir + m->getRootName(m->getSimpleName(filename)); filename = filename + "shared"; - openOutputFile(filename, out); + m->openOutputFile(filename, out); pickedGroups = false; groupMap = globaldata->gGroupmap; @@ -48,7 +48,7 @@ SharedCommand::SharedCommand(string o) : outputDir(o) { } //set fileroot - fileroot = outputDir + getRootName(getSimpleName(globaldata->getListFile())); + fileroot = outputDir + m->getRootName(m->getSimpleName(globaldata->getListFile())); //clears file before we start to write to it below for (int i=0; igetOrderGroupFile() != "") { readOrderFile(); } + //read in listfile read = new ReadOTUFile(globaldata->inputFileName); read->read(&*globaldata); @@ -116,9 +119,9 @@ int SharedCommand::execute(){ groups += globaldata->Groups[i] + "."; } - string newGroupFile = outputDir + getRootName(getSimpleName(globaldata->inputFileName)) + groups + "groups"; + string newGroupFile = outputDir + m->getRootName(m->getSimpleName(globaldata->inputFileName)) + groups + "groups"; ofstream outGroups; - openOutputFile(newGroupFile, outGroups); + m->openOutputFile(newGroupFile, outGroups); vector names = groupMap->getNamesSeqs(); string groupName; @@ -169,7 +172,7 @@ int SharedCommand::execute(){ userLabels.erase(SharedList->getLabel()); } - if ((anyLabelsToProcess(SharedList->getLabel(), userLabels, errorOff) == true) && (processedLabels.count(lastLabel) != 1)) { + if ((m->anyLabelsToProcess(SharedList->getLabel(), userLabels, errorOff) == true) && (processedLabels.count(lastLabel) != 1)) { string saveLabel = SharedList->getLabel(); delete SharedList; @@ -280,18 +283,46 @@ int SharedCommand::execute(){ void SharedCommand::printSharedData(vector thislookup) { try { - sort(thislookup.begin(), thislookup.end(), compareSharedRabunds); - - //initialize bin values - for (int i = 0; i < thislookup.size(); i++) { -//cout << "in printData " << thislookup[i]->getLabel() << '\t' << thislookup[i]->getGroup() << endl; - out << thislookup[i]->getLabel() << '\t' << thislookup[i]->getGroup() << '\t'; - thislookup[i]->print(out); + if (order.size() == 0) { //user has not specified an order so do aplabetically + sort(thislookup.begin(), thislookup.end(), compareSharedRabunds); + + //initialize bin values + for (int i = 0; i < thislookup.size(); i++) { + out << thislookup[i]->getLabel() << '\t' << thislookup[i]->getGroup() << '\t'; + thislookup[i]->print(out); + + RAbundVector rav = thislookup[i]->getRAbundVector(); + m->openOutputFileAppend(fileroot + thislookup[i]->getGroup() + ".rabund", *(filehandles[thislookup[i]->getGroup()])); + rav.print(*(filehandles[thislookup[i]->getGroup()])); + (*(filehandles[thislookup[i]->getGroup()])).close(); + } + }else{ + //create a map from groupName to each sharedrabund + map myMap; + map::iterator myIt; + + for (int i = 0; i < thislookup.size(); i++) { + myMap[thislookup[i]->getGroup()] = thislookup[i]; + } + - RAbundVector rav = thislookup[i]->getRAbundVector(); - openOutputFileAppend(fileroot + thislookup[i]->getGroup() + ".rabund", *(filehandles[thislookup[i]->getGroup()])); - rav.print(*(filehandles[thislookup[i]->getGroup()])); - (*(filehandles[thislookup[i]->getGroup()])).close(); + //loop through ordered list and print the rabund + for (int i = 0; i < order.size(); i++) { + myIt = myMap.find(order[i]); + + if(myIt != myMap.end()) { //we found it + out << (myIt->second)->getLabel() << '\t' << (myIt->second)->getGroup() << '\t'; + (myIt->second)->print(out); + + RAbundVector rav = (myIt->second)->getRAbundVector(); + m->openOutputFileAppend(fileroot + (myIt->second)->getGroup() + ".rabund", *(filehandles[(myIt->second)->getGroup()])); + rav.print(*(filehandles[(myIt->second)->getGroup()])); + (*(filehandles[(myIt->second)->getGroup()])).close(); + }else{ + m->mothurOut("Can't find shared info for " + order[i] + ", skipping."); m->mothurOutEndLine(); + } + } + } } @@ -346,14 +377,14 @@ int SharedCommand::eliminateZeroOTUS(vector& thislookup) { int SharedCommand::createMisMatchFile() { try { ofstream outMisMatch; - string outputMisMatchName = outputDir + getRootName(getSimpleName(globaldata->inputFileName)); + string outputMisMatchName = outputDir + m->getRootName(m->getSimpleName(globaldata->inputFileName)); //you have sequences in your list file that are not in your group file if (SharedList->getNumSeqs() > groupMap->getNumSeqs()) { outputMisMatchName += "missing.group"; m->mothurOut("For a list of names that are in your list file and not in your group file, please refer to " + outputMisMatchName + "."); m->mothurOutEndLine(); - openOutputFile(outputMisMatchName, outMisMatch); + m->openOutputFile(outputMisMatchName, outMisMatch); map listNames; map::iterator itList; @@ -427,7 +458,7 @@ int SharedCommand::createMisMatchFile() { map::iterator itMatch; - openOutputFile(outputMisMatchName, outMisMatch); + m->openOutputFile(outputMisMatchName, outMisMatch); //loop through names in seqNames and if they aren't in namesIn list output them for (int i = 0; i < seqNames.size(); i++) { @@ -458,7 +489,32 @@ SharedCommand::~SharedCommand(){ } - +//********************************************************************************************************************** +int SharedCommand::readOrderFile() { + try { + //remove old names + order.clear(); + + ifstream in; + m->openInputFile(globaldata->getOrderGroupFile(), in); + string thisGroup; + + while(!in.eof()){ + in >> thisGroup; m->gobble(in); + + order.push_back(thisGroup); + + if (m->control_pressed) { order.clear(); break; } + } + in.close(); + + return 0; + } + catch(exception& e) { + m->errorOut(e, "SharedCommand", "readOrderFile"); + exit(1); + } +} //********************************************************************************************************************** bool SharedCommand::isValidGroup(string groupname, vector groups) {