X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=shhhercommand.cpp;h=a859d145b49e261bace85fb973d3aa9466bc1123;hb=3504e4e2feeb05aabb0c79aa42cb696522030924;hp=115e930969323ba4655e0b5ba5c2a8e1166a1397;hpb=d70a1c2d70c5a516e74880709e3b48cfc1ce0321;p=mothur.git diff --git a/shhhercommand.cpp b/shhhercommand.cpp index 115e930..a859d14 100644 --- a/shhhercommand.cpp +++ b/shhhercommand.cpp @@ -12,18 +12,18 @@ //********************************************************************************************************************** vector ShhherCommand::setParameters(){ try { - CommandParameter pflow("flow", "InputTypes", "", "", "none", "fileflow", "none",false,false); parameters.push_back(pflow); - CommandParameter pfile("file", "InputTypes", "", "", "none", "fileflow", "none",false,false); parameters.push_back(pfile); - CommandParameter plookup("lookup", "InputTypes", "", "", "none", "none", "none",false,false); parameters.push_back(plookup); - CommandParameter pcutoff("cutoff", "Number", "", "0.01", "", "", "",false,false); parameters.push_back(pcutoff); - CommandParameter pprocessors("processors", "Number", "", "1", "", "", "",false,false); parameters.push_back(pprocessors); - CommandParameter pmaxiter("maxiter", "Number", "", "1000", "", "", "",false,false); parameters.push_back(pmaxiter); - CommandParameter plarge("large", "Number", "", "-1", "", "", "",false,false); parameters.push_back(plarge); - CommandParameter psigma("sigma", "Number", "", "60", "", "", "",false,false); parameters.push_back(psigma); - CommandParameter pmindelta("mindelta", "Number", "", "0.000001", "", "", "",false,false); parameters.push_back(pmindelta); - CommandParameter porder("order", "String", "", "", "", "", "",false,false); parameters.push_back(porder); - CommandParameter pinputdir("inputdir", "String", "", "", "", "", "",false,false); parameters.push_back(pinputdir); - CommandParameter poutputdir("outputdir", "String", "", "", "", "", "",false,false); parameters.push_back(poutputdir); + CommandParameter pflow("flow", "InputTypes", "", "", "none", "fileflow", "none","fasta-name-group-counts-qfile",false,false,true); parameters.push_back(pflow); + CommandParameter pfile("file", "InputTypes", "", "", "none", "fileflow", "none","fasta-name-group-counts-qfile",false,false,true); parameters.push_back(pfile); + CommandParameter plookup("lookup", "InputTypes", "", "", "none", "none", "none","",false,false,true); parameters.push_back(plookup); + CommandParameter pcutoff("cutoff", "Number", "", "0.01", "", "", "","",false,false); parameters.push_back(pcutoff); + CommandParameter pprocessors("processors", "Number", "", "1", "", "", "","",false,false,true); parameters.push_back(pprocessors); + CommandParameter pmaxiter("maxiter", "Number", "", "1000", "", "", "","",false,false); parameters.push_back(pmaxiter); + CommandParameter plarge("large", "Number", "", "-1", "", "", "","",false,false); parameters.push_back(plarge); + CommandParameter psigma("sigma", "Number", "", "60", "", "", "","",false,false); parameters.push_back(psigma); + CommandParameter pmindelta("mindelta", "Number", "", "0.000001", "", "", "","",false,false); parameters.push_back(pmindelta); + CommandParameter porder("order", "String", "", "", "", "", "","",false,false); parameters.push_back(porder); + CommandParameter pinputdir("inputdir", "String", "", "", "", "", "","",false,false); parameters.push_back(pinputdir); + CommandParameter poutputdir("outputdir", "String", "", "", "", "", "","",false,false); parameters.push_back(poutputdir); vector myArray; for (int i = 0; i < parameters.size(); i++) { myArray.push_back(parameters[i].name); } @@ -47,28 +47,23 @@ string ShhherCommand::getHelpString(){ } } //********************************************************************************************************************** -string ShhherCommand::getOutputFileNameTag(string type, string inputName=""){ - try { - string outputFileName = ""; - map >::iterator it; - - //is this a type this command creates - it = outputTypes.find(type); - if (it == outputTypes.end()) { m->mothurOut("[ERROR]: this command doesn't create a " + type + " output file.\n"); } - else { - if (type == "fasta") { outputFileName = "shhh.fasta"; } - else if (type == "name") { outputFileName = "shhh.names"; } - else if (type == "group") { outputFileName = "shhh.groups"; } - else if (type == "counts") { outputFileName = "shhh.counts"; } - else if (type == "qfile") { outputFileName = "shhh.qual"; } - else { m->mothurOut("[ERROR]: No definition for type " + type + " output file tag.\n"); m->control_pressed = true; } - } - return outputFileName; - } - catch(exception& e) { - m->errorOut(e, "ShhherCommand", "getOutputFileNameTag"); - exit(1); - } +string ShhherCommand::getOutputPattern(string type) { + try { + string pattern = ""; + + if (type == "fasta") { pattern = "[filename],shhh.fasta"; } + else if (type == "name") { pattern = "[filename],shhh.names"; } + else if (type == "group") { pattern = "[filename],shhh.groups"; } + else if (type == "counts") { pattern = "[filename],shhh.counts"; } + else if (type == "qfile") { pattern = "[filename],shhh.qual"; } + else { m->mothurOut("[ERROR]: No definition for type " + type + " output pattern.\n"); m->control_pressed = true; } + + return pattern; + } + catch(exception& e) { + m->errorOut(e, "ShhherCommand", "getOutputPattern"); + exit(1); + } } //********************************************************************************************************************** @@ -776,8 +771,8 @@ int ShhherCommand::execute(){ if(compositeFASTAFileName != ""){ - outputNames.push_back(compositeFASTAFileName); - outputNames.push_back(compositeNamesFileName); + outputNames.push_back(compositeFASTAFileName); outputTypes["fasta"].push_back(compositeFASTAFileName); + outputNames.push_back(compositeNamesFileName); outputTypes["name"].push_back(compositeNamesFileName); } m->mothurOutEndLine(); @@ -801,8 +796,9 @@ string ShhherCommand::createNamesFile(){ for(int i=0;igetRootName(m->getSimpleName(flowFileName) + getOutputFileNameTag("name"); + map variables; + variables["[filename]"] = outputDir + m->getRootName(m->getSimpleName(flowFileName)); + string nameFileName = getOutputFileName("name",variables); ofstream nameFile; m->openOutputFile(nameFileName, nameFile); @@ -1039,7 +1035,12 @@ void ShhherCommand::getFlowData(){ float intensity; - flowFile >> numFlowCells; + string numFlowTest; + flowFile >> numFlowTest; + + if (!m->isContainingOnlyDigits(numFlowTest)) { m->mothurOut("[ERROR]: expected a number and got " + numFlowTest + ", quitting. Did you use the flow parameter instead of the file parameter?"); m->mothurOutEndLine(); exit(1); } + else { convert(numFlowTest, numFlowCells); } + int index = 0;//pcluster while(!flowFile.eof()){ @@ -1376,17 +1377,17 @@ string ShhherCommand::cluster(string distFileName, string namesFileName){ try { ReadMatrix* read = new ReadColumnMatrix(distFileName); - read->setCutoff(cutoff); - - NameAssignment* clusterNameMap = new NameAssignment(namesFileName); - clusterNameMap->readMap(); - read->read(clusterNameMap); - - ListVector* list = read->getListVector(); - SparseMatrix* matrix = read->getMatrix(); + read->setCutoff(cutoff); + + NameAssignment* clusterNameMap = new NameAssignment(namesFileName); + clusterNameMap->readMap(); + read->read(clusterNameMap); - delete read; - delete clusterNameMap; + ListVector* list = read->getListVector(); + SparseDistanceMatrix* matrix = read->getDMatrix(); + + delete read; + delete clusterNameMap; RAbundVector* rabund = new RAbundVector(list->getRAbundVector()); @@ -1646,7 +1647,9 @@ void ShhherCommand::writeQualities(vector otuCounts){ try { string thisOutputDir = outputDir; if (outputDir == "") { thisOutputDir += m->hasPath(flowFileName); } - string qualityFileName = thisOutputDir + m->getRootName(m->getSimpleName(flowFileName)) + getOutputFileNameTag("qfile"); + map variables; + variables["[filename]"] = outputDir + m->getRootName(m->getSimpleName(flowFileName)); + string qualityFileName = getOutputFileName("qfile",variables); ofstream qualityFile; m->openOutputFile(qualityFileName, qualityFile); @@ -1738,7 +1741,7 @@ void ShhherCommand::writeQualities(vector otuCounts){ } } qualityFile.close(); - outputNames.push_back(qualityFileName); + outputNames.push_back(qualityFileName); outputTypes["qfile"].push_back(qualityFileName); } catch(exception& e) { @@ -1753,7 +1756,9 @@ void ShhherCommand::writeSequences(vector otuCounts){ try { string thisOutputDir = outputDir; if (outputDir == "") { thisOutputDir += m->hasPath(flowFileName); } - string fastaFileName = thisOutputDir + m->getRootName(m->getSimpleName(flowFileName)) + getOutputFileNameTag("fasta"); + map variables; + variables["[filename]"] = thisOutputDir + m->getRootName(m->getSimpleName(flowFileName)); + string fastaFileName = getOutputFileName("fasta",variables); ofstream fastaFile; m->openOutputFile(fastaFileName, fastaFile); @@ -1783,7 +1788,7 @@ void ShhherCommand::writeSequences(vector otuCounts){ } fastaFile.close(); - outputNames.push_back(fastaFileName); + outputNames.push_back(fastaFileName); outputTypes["fasta"].push_back(fastaFileName); if(compositeFASTAFileName != ""){ m->appendFiles(fastaFileName, compositeFASTAFileName); @@ -1801,7 +1806,9 @@ void ShhherCommand::writeNames(vector otuCounts){ try { string thisOutputDir = outputDir; if (outputDir == "") { thisOutputDir += m->hasPath(flowFileName); } - string nameFileName = thisOutputDir + m->getRootName(m->getSimpleName(flowFileName)) + getOutputFileNameTag("name"); + map variables; + variables["[filename]"] = thisOutputDir + m->getRootName(m->getSimpleName(flowFileName)); + string nameFileName = getOutputFileName("name",variables); ofstream nameFile; m->openOutputFile(nameFileName, nameFile); @@ -1820,7 +1827,7 @@ void ShhherCommand::writeNames(vector otuCounts){ } } nameFile.close(); - outputNames.push_back(nameFileName); + outputNames.push_back(nameFileName); outputTypes["name"].push_back(nameFileName); if(compositeNamesFileName != ""){ @@ -1843,7 +1850,9 @@ void ShhherCommand::writeGroups(){ int pos = fileRoot.find_first_of('.'); string fileGroup = fileRoot; if (pos != string::npos) { fileGroup = fileRoot.substr(pos+1, (fileRoot.length()-1-(pos+1))); } - string groupFileName = thisOutputDir + fileRoot + getOutputFileNameTag("group"); + map variables; + variables["[filename]"] = thisOutputDir + fileRoot; + string groupFileName = getOutputFileName("group",variables); ofstream groupFile; m->openOutputFile(groupFileName, groupFile); @@ -1852,7 +1861,7 @@ void ShhherCommand::writeGroups(){ groupFile << seqNameVector[i] << '\t' << fileGroup << endl; } groupFile.close(); - outputNames.push_back(groupFileName); + outputNames.push_back(groupFileName); outputTypes["group"].push_back(groupFileName); } catch(exception& e) { @@ -1867,7 +1876,9 @@ void ShhherCommand::writeClusters(vector otuCounts){ try { string thisOutputDir = outputDir; if (outputDir == "") { thisOutputDir += m->hasPath(flowFileName); } - string otuCountsFileName = thisOutputDir + m->getRootName(m->getSimpleName(flowFileName)) +getOutputFileNameTag("counts"); + map variables; + variables["[filename]"] = thisOutputDir + m->getRootName(m->getSimpleName(flowFileName)); + string otuCountsFileName = getOutputFileName("counts",variables); ofstream otuCountsFile; m->openOutputFile(otuCountsFileName, otuCountsFile); @@ -1912,7 +1923,7 @@ void ShhherCommand::writeClusters(vector otuCounts){ } } otuCountsFile.close(); - outputNames.push_back(otuCountsFileName); + outputNames.push_back(otuCountsFileName); outputTypes["counts"].push_back(otuCountsFileName); } catch(exception& e) { @@ -1926,7 +1937,7 @@ void ShhherCommand::writeClusters(vector otuCounts){ int ShhherCommand::execute(){ try { - if (abort == true) { return 0; } + if (abort == true) { if (calledHelp) { return 0; } return 2; } getSingleLookUp(); if (m->control_pressed) { return 0; } getJointLookUp(); if (m->control_pressed) { return 0; } @@ -1943,8 +1954,8 @@ int ShhherCommand::execute(){ #endif if(compositeFASTAFileName != ""){ - outputNames.push_back(compositeFASTAFileName); - outputNames.push_back(compositeNamesFileName); + outputNames.push_back(compositeFASTAFileName); outputTypes["fasta"].push_back(compositeFASTAFileName); + outputNames.push_back(compositeNamesFileName); outputTypes["name"].push_back(compositeNamesFileName); } m->mothurOutEndLine(); @@ -2029,7 +2040,7 @@ int ShhherCommand::createProcesses(vector filenames){ //Windows version shared memory, so be careful when passing variables through the shhhFlowsData struct. //Above fork() will clone, so memory is separate, but that's not the case with windows, ////////////////////////////////////////////////////////////////////////////////////////////////////// - + /* vector pDataArray; DWORD dwThreadIdArray[processors-1]; HANDLE hThreadArray[processors-1]; @@ -2060,7 +2071,7 @@ int ShhherCommand::createProcesses(vector filenames){ CloseHandle(hThreadArray[i]); delete pDataArray[i]; } - + */ #endif for (int i=0;i filenames, string thisCompositeFASTAFil if (m->control_pressed) { break; } vector otuCounts(numOTUs, 0); - for(int i=0;i filenames, string thisCompositeFASTAFil if ((large) && (g == 0)) { flowFileName = filenames[i]; theseFlowFileNames[0] = filenames[i]; } string thisOutputDir = outputDir; if (outputDir == "") { thisOutputDir = m->hasPath(flowFileName); } - string qualityFileName = thisOutputDir + m->getRootName(m->getSimpleName(flowFileName)) + getOutputFileNameTag("qfile"); - string fastaFileName = thisOutputDir + m->getRootName(m->getSimpleName(flowFileName)) + getOutputFileNameTag("fasta"); - string nameFileName = thisOutputDir + m->getRootName(m->getSimpleName(flowFileName)) + getOutputFileNameTag("name"); - string otuCountsFileName = thisOutputDir + m->getRootName(m->getSimpleName(flowFileName)) + getOutputFileNameTag("counts"); + map variables; + variables["[filename]"] = thisOutputDir + m->getRootName(m->getSimpleName(flowFileName)); + string qualityFileName = getOutputFileName("qfile",variables); + string fastaFileName = getOutputFileName("fasta",variables); + string nameFileName = getOutputFileName("name",variables); + string otuCountsFileName = getOutputFileName("counts",variables); string fileRoot = m->getRootName(m->getSimpleName(flowFileName)); int pos = fileRoot.find_first_of('.'); string fileGroup = fileRoot; if (pos != string::npos) { fileGroup = fileRoot.substr(pos+1, (fileRoot.length()-1-(pos+1))); } - string groupFileName = thisOutputDir + fileRoot + getOutputFileNameTag("group"); + string groupFileName = getOutputFileName("group",variables); writeQualities(numOTUs, numFlowCells, qualityFileName, otuCounts, nSeqsPerOTU, seqNumber, singleTau, flowDataIntI, uniqueFlowgrams, cumNumSeqs, mapUniqueToSeq, seqNameVector, centroids, aaI); if (m->control_pressed) { break; } @@ -2337,15 +2350,16 @@ int ShhherCommand::driver(vector filenames, string thisCompositeFASTAFil if (large) { if (g > 0) { - m->appendFiles(qualityFileName, (thisOutputDir + m->getRootName(m->getSimpleName(theseFlowFileNames[0])) + getOutputFileNameTag("qfile"))); + variables["[filename]"] = thisOutputDir + m->getRootName(m->getSimpleName(theseFlowFileNames[0])); + m->appendFiles(qualityFileName, getOutputFileName("qfile",variables)); m->mothurRemove(qualityFileName); - m->appendFiles(fastaFileName, (thisOutputDir + m->getRootName(m->getSimpleName(theseFlowFileNames[0])) + getOutputFileNameTag("fasta"))); + m->appendFiles(fastaFileName, getOutputFileName("fasta",variables)); m->mothurRemove(fastaFileName); - m->appendFiles(nameFileName, (thisOutputDir + m->getRootName(m->getSimpleName(theseFlowFileNames[0])) + getOutputFileNameTag("name"))); + m->appendFiles(nameFileName, getOutputFileName("name",variables)); m->mothurRemove(nameFileName); - m->appendFiles(otuCountsFileName, (thisOutputDir + m->getRootName(m->getSimpleName(theseFlowFileNames[0])) + getOutputFileNameTag("counts"))); + m->appendFiles(otuCountsFileName, getOutputFileName("counts",variables)); m->mothurRemove(otuCountsFileName); - m->appendFiles(groupFileName, (thisOutputDir + m->getRootName(m->getSimpleName(theseFlowFileNames[0])) + getOutputFileNameTag("group"))); + m->appendFiles(groupFileName, getOutputFileName("group",variables)); m->mothurRemove(groupFileName); } m->mothurRemove(theseFlowFileNames[g]); @@ -2382,7 +2396,12 @@ int ShhherCommand::getFlowData(string filename, vector& thisSeqNameVecto thisFlowDataIntI.clear(); thisNameMap.clear(); - flowFile >> numFlowCells; + string numFlowTest; + flowFile >> numFlowTest; + + if (!m->isContainingOnlyDigits(numFlowTest)) { m->mothurOut("[ERROR]: expected a number and got " + numFlowTest + ", quitting. Did you use the flow parameter instead of the file parameter?"); m->mothurOutEndLine(); exit(1); } + else { convert(numFlowTest, numFlowCells); } + if (m->debug) { m->mothurOut("[DEBUG]: numFlowCells = " + toString(numFlowCells) + ".\n"); } int index = 0;//pcluster while(!flowFile.eof()){ @@ -2632,7 +2651,7 @@ int ShhherCommand::cluster(string filename, string distFileName, string namesFil read->read(clusterNameMap); ListVector* list = read->getListVector(); - SparseMatrix* matrix = read->getMatrix(); + SparseDistanceMatrix* matrix = read->getDMatrix(); delete read; delete clusterNameMap; @@ -3256,7 +3275,7 @@ void ShhherCommand::writeQualities(int numOTUs, int numFlowCells, string quality } } qualityFile.close(); - outputNames.push_back(qualityFileName); + outputNames.push_back(qualityFileName); outputTypes["qfile"].push_back(qualityFileName); } catch(exception& e) { @@ -3300,7 +3319,7 @@ void ShhherCommand::writeSequences(string thisCompositeFASTAFileName, int numOTU } fastaFile.close(); - outputNames.push_back(fastaFileName); + outputNames.push_back(fastaFileName); outputTypes["fasta"].push_back(fastaFileName); if(thisCompositeFASTAFileName != ""){ m->appendFiles(fastaFileName, thisCompositeFASTAFileName); @@ -3335,7 +3354,7 @@ void ShhherCommand::writeNames(string thisCompositeNamesFileName, int numOTUs, s } } nameFile.close(); - outputNames.push_back(nameFileName); + outputNames.push_back(nameFileName); outputTypes["name"].push_back(nameFileName); if(thisCompositeNamesFileName != ""){ @@ -3360,7 +3379,7 @@ void ShhherCommand::writeGroups(string groupFileName, string fileRoot, int numSe groupFile << seqNameVector[i] << '\t' << fileRoot << endl; } groupFile.close(); - outputNames.push_back(groupFileName); + outputNames.push_back(groupFileName); outputTypes["group"].push_back(groupFileName); } catch(exception& e) { @@ -3419,7 +3438,7 @@ void ShhherCommand::writeClusters(string otuCountsFileName, int numOTUs, int num } } otuCountsFile.close(); - outputNames.push_back(otuCountsFileName); + outputNames.push_back(otuCountsFileName); outputTypes["counts"].push_back(otuCountsFileName); } catch(exception& e) {