X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=shhhercommand.cpp;h=89d78288639e6cca3e8eebca34dd01174c3963da;hb=4f3d46bdb42c23468a534486fd105180b030fc65;hp=5d8263c86e2a1f3eae24da047897e2c642d243eb;hpb=d6c0a11d1cecfac18b323285e7ffadb7f58e848f;p=mothur.git diff --git a/shhhercommand.cpp b/shhhercommand.cpp index 5d8263c..89d7828 100644 --- a/shhhercommand.cpp +++ b/shhhercommand.cpp @@ -67,6 +67,13 @@ ShhherCommand::ShhherCommand(){ ShhherCommand::ShhherCommand(string option) { try { + +#ifdef USE_MPI + MPI_Comm_rank(MPI_COMM_WORLD, &pid); //find out who we are + MPI_Comm_size(MPI_COMM_WORLD, &ncpus); + + if(pid == 0){ +#endif abort = false; calledHelp = false; //allow user to run help @@ -121,8 +128,10 @@ ShhherCommand::ShhherCommand(string option) { if (path == "") { parameters["file"] = inputDir + it->second; } } } - - + + //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 = ""; } + //check for required parameters flowFileName = validParameter.validFile(parameters, "flow", true); flowFilesFileName = validParameter.validFile(parameters, "file", true); @@ -139,13 +148,15 @@ ShhherCommand::ShhherCommand(string option) { } else{ ofstream temp; - + + string thisoutputDir = m->hasPath(flowFilesFileName); //if user entered a file with a path then preserve it + //flow.files = 9 character offset - compositeFASTAFileName = flowFilesFileName.substr(0, flowFilesFileName.length()-10) + "shhh.fasta"; + compositeFASTAFileName = thisoutputDir + flowFilesFileName.substr(0, flowFilesFileName.length()-10) + "shhh.fasta"; m->openOutputFile(compositeFASTAFileName, temp); temp.close(); - compositeNamesFileName = flowFilesFileName.substr(0, flowFilesFileName.length()-10) + "shhh.names"; + compositeNamesFileName = thisoutputDir + flowFilesFileName.substr(0, flowFilesFileName.length()-10) + "shhh.names"; m->openOutputFile(compositeNamesFileName, temp); temp.close(); } @@ -207,17 +218,10 @@ ShhherCommand::ShhherCommand(string option) { if (flowFileVector.size() == 0) { m->mothurOut("[ERROR]: no valid files."); m->mothurOutEndLine(); abort = true; } } else{ + outputDir += m->hasPath(flowFileName); flowFileVector.push_back(flowFileName); } - - - //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 = ""; - outputDir += m->hasPath(flowFileName); //if user entered a file with a path then preserve it - } - - + //check for optional parameter and set defaults // ...at some point should added some additional type checking... string temp; @@ -314,6 +318,9 @@ ShhherCommand::ShhherCommand(string option) { } } +#ifdef USE_MPI + } +#endif } catch(exception& e) { m->errorOut(e, "ShhherCommand", "ShhherCommand"); @@ -328,9 +335,7 @@ int ShhherCommand::execute(){ int tag = 1976; MPI_Status status; - MPI_Comm_rank(MPI_COMM_WORLD, &pid); //find out who we are - MPI_Comm_size(MPI_COMM_WORLD, &ncpus); - + if(pid == 0){ for(int i=1;icontrol_pressed) { return 0; } getJointLookUp(); if (m->control_pressed) { return 0; } + vector flowFileVector; + if(flowFilesFileName != "not found"){ + string fName; + + ifstream flowFilesFile; + m->openInputFile(flowFilesFileName, flowFilesFile); + while(flowFilesFile){ + fName = m->getline(flowFilesFile); + flowFileVector.push_back(fName); + m->gobble(flowFilesFile); + } + } + else{ + flowFileVector.push_back(flowFileName); + } + int numFiles = flowFileVector.size(); for(int i=1;i duplicateNames(numUniques, ""); + for(int i=0;iopenOutputFile(nameFileName, nameFile); + + for(int i=0;icontrol_pressed) { break; } + + // nameFile << seqNameVector[mapUniqueToSeq[i]] << '\t' << duplicateNames[i].substr(0, duplicateNames[i].find_last_of(',')) << endl; + nameFile << mapUniqueToSeq[i] << '\t' << duplicateNames[i].substr(0, duplicateNames[i].find_last_of(',')) << endl; + } + + nameFile.close(); + return nameFileName; + } + catch(exception& e) { + m->errorOut(e, "ShhherCommand", "createNamesFile"); + exit(1); + } +} +/**************************************************************************************************/ string ShhherCommand::flowDistMPI(int startSeq, int stopSeq){ try{ @@ -1823,7 +1874,7 @@ int ShhherCommand::execute(){ if (numFiles < processors) { processors = numFiles; } -#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) +#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix) if (processors == 1) { driver(flowFileVector, compositeFASTAFileName, compositeNamesFileName, 0, flowFileVector.size()); } else { createProcesses(flowFileVector); } //each processor processes one file #else @@ -1869,7 +1920,7 @@ int ShhherCommand::createProcesses(vector filenames){ lines.push_back(linePair(startIndex, endIndex)); } - #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) + #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix) //loop through and create all the processes you want while (process != processors) { @@ -3012,11 +3063,12 @@ void ShhherCommand::writeQualities(int numOTUs, int numFlowCells, string filenam if(otuCounts[i] > 0){ qualityFile << '>' << seqNameVector[mapUniqueToSeq[i]] << endl; - + int j=4; //need to get past the first four bases while(qualities[i][j] != -1){ - qualityFile << qualities[i][j] << ' '; - j++; + qualityFile << qualities[i][j] << ' '; + if (j > qualities[i].size()) { break; } + j++; } qualityFile << endl; }