X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=summarycommand.cpp;h=95f42626c9b324a0622c1ff99806384184d42714;hb=202846c98b9eff0eca7b20a570bfffa8ee4a5f4e;hp=b086dff619d18046dd0d3cbaabf109a2976421b3;hpb=058715887611e00dc18324cb0bd4a4a8472530b3;p=mothur.git diff --git a/summarycommand.cpp b/summarycommand.cpp index b086dff..95f4262 100644 --- a/summarycommand.cpp +++ b/summarycommand.cpp @@ -44,7 +44,7 @@ SummaryCommand::SummaryCommand(string option) { else { //valid paramters for this command - string Array[] = {"label","calc","abund","size","outputdir","inputdir"}; + string Array[] = {"label","calc","abund","size","outputdir","groupmode","inputdir"}; vector myArray (Array, Array+(sizeof(Array)/sizeof(string))); OptionParser parser(option); @@ -94,6 +94,10 @@ SummaryCommand::SummaryCommand(string option) { temp = validParameter.validFile(parameters, "size", false); if (temp == "not found") { temp = "0"; } convert(temp, size); + + temp = validParameter.validFile(parameters, "groupmode", false); if (temp == "not found") { temp = "F"; } + groupMode = isTrue(temp); + } } @@ -108,12 +112,13 @@ void SummaryCommand::help(){ try { m->mothurOut("The summary.single command can only be executed after a successful read.otu WTIH ONE EXECEPTION.\n"); m->mothurOut("The summary.single command can be executed after a successful cluster command. It will use the .list file from the output of the cluster.\n"); - m->mothurOut("The summary.single command parameters are label, calc, abund. No parameters are required.\n"); + m->mothurOut("The summary.single command parameters are label, calc, abund and groupmode. No parameters are required.\n"); m->mothurOut("The summary.single command should be in the following format: \n"); m->mothurOut("summary.single(label=yourLabel, calc=yourEstimators).\n"); m->mothurOut("Example summary.single(label=unique-.01-.03, calc=sobs-chao-ace-jack-bootstrap-shannon-npshannon-simpson).\n"); validCalculator->printCalc("summary", cout); m->mothurOut("The default value calc is sobs-chao-ace-jack-shannon-npshannon-simpson\n"); + m->mothurOut("If you are running summary.single with a shared file and would like your summary results collated in one file, set groupmode=t. (Default=False).\n"); m->mothurOut("The label parameter is used to analyze specific labels in your input.\n"); m->mothurOut("Note: No spaces between parameter labels (i.e. label), '=' and parameters (i.e.yourLabels).\n\n"); } @@ -142,8 +147,14 @@ int SummaryCommand::execute(){ if (m->control_pressed) { if (hadShared != "") { globaldata->setSharedFile(hadShared); globaldata->setFormat("sharedfile"); } return 0; } + int numLines = 0; + int numCols = 0; + for (int p = 0; p < inputFileNames.size(); p++) { + numLines = 0; + numCols = 0; + string fileNameRoot = outputDir + getRootName(getSimpleName(inputFileNames[p])) + "summary"; globaldata->inputFileName = inputFileNames[p]; outputNames.push_back(fileNameRoot); @@ -221,9 +232,11 @@ int SummaryCommand::execute(){ for(int i=0;igetCols() == 1){ outputFileHandle << '\t' << sumCalculators[i]->getName(); + numCols++; } else{ outputFileHandle << '\t' << sumCalculators[i]->getName() << "\t" << sumCalculators[i]->getName() << "_lci\t" << sumCalculators[i]->getName() << "_hci"; + numCols += 3; } } outputFileHandle << endl; @@ -254,6 +267,7 @@ int SummaryCommand::execute(){ sumCalculators[i]->print(outputFileHandle); } outputFileHandle << endl; + numLines++; } if ((anyLabelsToProcess(sabund->getLabel(), userLabels, "") == true) && (processedLabels.count(lastLabel) != 1)) { @@ -276,6 +290,7 @@ int SummaryCommand::execute(){ sumCalculators[i]->print(outputFileHandle); } outputFileHandle << endl; + numLines++; //restore real lastlabel to save below sabund->setLabel(saveLabel); @@ -318,6 +333,7 @@ int SummaryCommand::execute(){ sumCalculators[i]->print(outputFileHandle); } outputFileHandle << endl; + numLines++; delete sabund; } @@ -337,6 +353,11 @@ int SummaryCommand::execute(){ if (m->control_pressed) { for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } return 0; } + //create summary file containing all the groups data for each label - this function just combines the info from the files already created. + if ((hadShared != "") && (groupMode)) { outputNames.push_back(createGroupSummaryFile(numLines, numCols, outputNames)); } + + if (m->control_pressed) { for (int i = 0; i < outputNames.size(); i++) { remove(outputNames[i].c_str()); } return 0; } + m->mothurOutEndLine(); m->mothurOut("Output File Names: "); m->mothurOutEndLine(); for (int i = 0; i < outputNames.size(); i++) { m->mothurOut(outputNames[i]); m->mothurOutEndLine(); } @@ -409,3 +430,72 @@ vector SummaryCommand::parseSharedFile(string filename) { } } //********************************************************************************************************************** +string SummaryCommand::createGroupSummaryFile(int numLines, int numCols, vector outputNames) { + try { + + ofstream out; + string combineFileName = outputDir + getRootName(getSimpleName(globaldata->inputFileName)) + "groups.summary"; + + //open combined file + openOutputFile(combineFileName, out); + + //open each groups summary file + string newLabel = ""; + ifstream* temp; + map filehandles; + for (int i=0; i> tempLabel; + + if (j == 1) { newLabel += "group\t" + tempLabel + '\t'; + }else{ newLabel += tempLabel + '\t'; } + } + }else{ for (int j = 0; j < numCols+1; j++) { *(temp) >> tempLabel; } } + + gobble(*(temp)); + } + + //output label line to new file + out << newLabel << endl; + + //for each label + for (int i = 0; i < numLines; i++) { + + //grab summary data for each group + for (int i=0; i> tempLabel; + + //print to combined file + if (j == 1) { out << groups[i] << '\t' << tempLabel << '\t'; } + else{ out << tempLabel << '\t'; } + } + + out << endl; + gobble(*(filehandles[outputNames[i]])); + } + } + + //close each groups summary file + for (int i=0; ierrorOut(e, "SummaryCommand", "createGroupSummaryFile"); + exit(1); + } +} +//**********************************************************************************************************************