X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=metastatscommand.cpp;h=81715e0abe84b485b96eb9997120dbe127dd6a5e;hb=6d12ed0ba66fb35e9e2781fe3ca361e2293f2476;hp=a94c72cb4649c9136175bb75cb3c49846dbcdb1e;hpb=b4d2979ffc1440ffeac9343cc60ceb80fff0e058;p=mothur.git diff --git a/metastatscommand.cpp b/metastatscommand.cpp index a94c72c..81715e0 100644 --- a/metastatscommand.cpp +++ b/metastatscommand.cpp @@ -11,6 +11,55 @@ #include "metastats.h" #include "sharedutilities.h" +//********************************************************************************************************************** +vector MetaStatsCommand::getValidParameters(){ + try { + string Array[] = {"groups","label","outputdir","iters","threshold","g","design","sets","processors","inputdir"}; + vector myArray (Array, Array+(sizeof(Array)/sizeof(string))); + return myArray; + } + catch(exception& e) { + m->errorOut(e, "MetaStatsCommand", "getValidParameters"); + exit(1); + } +} +//********************************************************************************************************************** +MetaStatsCommand::MetaStatsCommand(){ + try { + abort = true; + //initialize outputTypes + vector tempOutNames; + outputTypes["metastats"] = tempOutNames; + } + catch(exception& e) { + m->errorOut(e, "MetaStatsCommand", "MetaStatsCommand"); + exit(1); + } +} +//********************************************************************************************************************** +vector MetaStatsCommand::getRequiredParameters(){ + try { + string Array[] = {"design"}; + vector myArray (Array, Array+(sizeof(Array)/sizeof(string))); + return myArray; + } + catch(exception& e) { + m->errorOut(e, "MetaStatsCommand", "getRequiredParameters"); + exit(1); + } +} +//********************************************************************************************************************** +vector MetaStatsCommand::getRequiredFiles(){ + try { + string Array[] = {"shared"}; + vector myArray (Array, Array+(sizeof(Array)/sizeof(string))); + return myArray; + } + catch(exception& e) { + m->errorOut(e, "MetaStatsCommand", "getRequiredFiles"); + exit(1); + } +} //********************************************************************************************************************** MetaStatsCommand::MetaStatsCommand(string option) { @@ -39,6 +88,10 @@ MetaStatsCommand::MetaStatsCommand(string option) { if (validParameter.isValidParameter(it->first, myArray, it->second) != true) { abort = true; } } + //initialize outputTypes + vector tempOutNames; + outputTypes["metastats"] = tempOutNames; + //if the user changes the output directory command factory will send this info to us in the output parameter outputDir = validParameter.validFile(parameters, "outputdir", false); if (outputDir == "not found"){ outputDir = ""; @@ -66,7 +119,7 @@ MetaStatsCommand::MetaStatsCommand(string option) { //make sure the user has already run the read.otu command if ((globaldata->getSharedFile() == "")) { - m->mothurOut("You must read a list and a group, or a shared file before you can use the normalize.shared command."); m->mothurOutEndLine(); abort = true; + m->mothurOut("You must read a list and a group, or a shared file before you can use the metastats command."); m->mothurOutEndLine(); abort = true; } //check for optional parameter and set defaults @@ -177,7 +230,7 @@ int MetaStatsCommand::execute(){ int numGroups = Sets.size(); for (int a=0; a groups; groups.push_back(Sets[a]); groups.push_back(Sets[l]); namesOfGroupCombos.push_back(groups); } @@ -206,7 +259,7 @@ int MetaStatsCommand::execute(){ //as long as you are not at the end of the file or done wih the lines you want while((lookup[0] != NULL) && ((allLines == 1) || (userLabels.size() != 0))) { - if (m->control_pressed) { for (int i = 0; i < lookup.size(); i++) { delete lookup[i]; } globaldata->Groups.clear(); delete read; delete designMap; for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } return 0; } + if (m->control_pressed) { outputTypes.clear(); for (int i = 0; i < lookup.size(); i++) { delete lookup[i]; } globaldata->Groups.clear(); delete read; delete designMap; for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } return 0; } if(allLines == 1 || labels.count(lookup[0]->getLabel()) == 1){ @@ -237,13 +290,13 @@ int MetaStatsCommand::execute(){ //prevent memory leak for (int i = 0; i < lookup.size(); i++) { delete lookup[i]; lookup[i] = NULL; } - if (m->control_pressed) { globaldata->Groups.clear(); delete read; delete designMap; for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } return 0; } + if (m->control_pressed) { outputTypes.clear(); globaldata->Groups.clear(); delete read; delete designMap; for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } return 0; } //get next line to process lookup = input->getSharedRAbundVectors(); } - if (m->control_pressed) { globaldata->Groups.clear(); delete read; delete designMap; for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } return 0; } + if (m->control_pressed) { outputTypes.clear(); globaldata->Groups.clear(); delete read; delete designMap; for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } return 0; } //output error messages about any remaining user labels set::iterator it; @@ -276,7 +329,7 @@ int MetaStatsCommand::execute(){ delete read; delete designMap; - if (m->control_pressed) { for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } return 0;} + if (m->control_pressed) { outputTypes.clear(); for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } return 0;} m->mothurOutEndLine(); m->mothurOut("Output File Names: "); m->mothurOutEndLine(); @@ -294,7 +347,6 @@ int MetaStatsCommand::execute(){ int MetaStatsCommand::process(vector& thisLookUp){ try { - if (pickedGroups) { eliminateZeroOTUS(thisLookUp); } #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) if(processors == 1){ @@ -313,7 +365,11 @@ int MetaStatsCommand::process(vector& thisLookUp){ }else if (pid == 0){ driver(lines[process].start, lines[process].num, thisLookUp); exit(0); - }else { m->mothurOut("unable to spawn the necessary processes."); m->mothurOutEndLine(); exit(0); } + }else { + m->mothurOut("[ERROR]: unable to spawn the necessary processes."); m->mothurOutEndLine(); + for (int i = 0; i < processIDS.size(); i++) { kill (processIDS[i], SIGINT); } + exit(0); + } } //do my part @@ -350,7 +406,7 @@ int MetaStatsCommand::driver(int start, int num, vector& th //get filename string outputFileName = outputDir + m->getRootName(m->getSimpleName(globaldata->inputFileName)) + thisLookUp[0]->getLabel() + "." + setA + "-" + setB + ".metastats"; - outputNames.push_back(outputFileName); + outputNames.push_back(outputFileName); outputTypes["metastats"].push_back(outputFileName); int nameLength = outputFileName.length(); char * output = new char[nameLength]; strcpy(output, outputFileName.c_str()); @@ -389,7 +445,6 @@ int MetaStatsCommand::driver(int start, int num, vector& th } m->mothurOut("Comparing " + setA + " and " + setB + "..."); m->mothurOutEndLine(); - metastat_main(output, thisLookUp[0]->getNumBins(), subset.size(), threshold, iters, data, setACount); m->mothurOutEndLine(); @@ -410,45 +465,3 @@ int MetaStatsCommand::driver(int start, int num, vector& th } } //********************************************************************************************************************** -int MetaStatsCommand::eliminateZeroOTUS(vector& thislookup) { - try { - - vector 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, "MetaStatsCommand", "eliminateZeroOTUS"); - exit(1); - } -} -//**********************************************************************************************************************