X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=reversecommand.cpp;fp=reversecommand.cpp;h=5eceb3049f0d6cbc41025c875843adce306a745c;hb=74d3aaf0f85080ea3cfb1f1871e706bab9f48392;hp=d20f4af0acd4861cea64688e6e05460e42cbaf75;hpb=03acfa01ede71b107817966fcf27cd728038b3c9;p=mothur.git diff --git a/reversecommand.cpp b/reversecommand.cpp index d20f4af..5eceb30 100644 --- a/reversecommand.cpp +++ b/reversecommand.cpp @@ -9,11 +9,12 @@ #include "reversecommand.h" #include "sequence.hpp" +#include "qualityscores.h" //********************************************************************************************************************** vector ReverseSeqsCommand::getValidParameters(){ try { - string Array[] = {"fasta", "outputdir","inputdir"}; + string Array[] = {"fasta", "qfile", "outputdir", "inputdir"}; vector myArray (Array, Array+(sizeof(Array)/sizeof(string))); return myArray; } @@ -28,6 +29,7 @@ ReverseSeqsCommand::ReverseSeqsCommand(){ abort = true; calledHelp = true; vector tempOutNames; outputTypes["fasta"] = tempOutNames; + outputTypes["qfile"] = tempOutNames; } catch(exception& e) { m->errorOut(e, "ReverseSeqsCommand", "ReverseSeqsCommand"); @@ -35,9 +37,10 @@ ReverseSeqsCommand::ReverseSeqsCommand(){ } } //********************************************************************************************************************** + vector ReverseSeqsCommand::getRequiredParameters(){ try { - string Array[] = {"fasta"}; + string Array[] = {"fasta", "qfile"}; vector myArray (Array, Array+(sizeof(Array)/sizeof(string))); return myArray; } @@ -46,7 +49,9 @@ vector ReverseSeqsCommand::getRequiredParameters(){ exit(1); } } + //********************************************************************************************************************** + vector ReverseSeqsCommand::getRequiredFiles(){ try { vector myArray; @@ -56,8 +61,7 @@ vector ReverseSeqsCommand::getRequiredFiles(){ m->errorOut(e, "ReverseSeqsCommand", "getRequiredFiles"); exit(1); } -} -//*************************************************************************************************************** +}//*************************************************************************************************************** ReverseSeqsCommand::ReverseSeqsCommand(string option) { try { @@ -68,7 +72,7 @@ ReverseSeqsCommand::ReverseSeqsCommand(string option) { else { //valid paramters for this command - string Array[] = {"fasta", "outputdir","inputdir"}; + string Array[] = {"fasta", "qfile", "outputdir","inputdir"}; vector myArray (Array, Array+(sizeof(Array)/sizeof(string))); OptionParser parser(option); @@ -85,7 +89,8 @@ ReverseSeqsCommand::ReverseSeqsCommand(string option) { //initialize outputTypes vector tempOutNames; outputTypes["fasta"] = tempOutNames; - + outputTypes["qfile"] = tempOutNames; + //if the user changes the input directory command factory will send this info to us in the output parameter string inputDir = validParameter.validFile(parameters, "inputdir", false); if (inputDir == "not found"){ inputDir = ""; } @@ -101,14 +106,24 @@ ReverseSeqsCommand::ReverseSeqsCommand(string option) { } //check for required parameters - fasta = validParameter.validFile(parameters, "fasta", true); - if (fasta == "not open") { abort = true; } - else if (fasta == "not found") { fasta = ""; m->mothurOut("fasta is a required parameter for the reverse.seqs command."); m->mothurOutEndLine(); abort = true; } + fastaFileName = validParameter.validFile(parameters, "fasta", true); + if (fastaFileName == "not open") { abort = true; } + else if (fastaFileName == "not found") { fastaFileName = "";}// m->mothurOut("fasta is a required parameter for the reverse.seqs command."); m->mothurOutEndLine(); abort = true; } + + qualFileName = validParameter.validFile(parameters, "qfile", true); + if (qualFileName == "not open") { abort = true; } + else if (qualFileName == "not found") { qualFileName = ""; }//m->mothurOut("fasta is a required parameter for the reverse.seqs command."); m->mothurOutEndLine(); abort = true; } + + if(fastaFileName == "not open" && qualFileName == "not open"){ + m->mothurOut("fasta or qfile is a required parameter for the reverse.seqs command."); + m->mothurOutEndLine(); + abort = true; + } //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(fasta); //if user entered a file with a path then preserve it + outputDir += m->hasPath(fastaFileName); //if user entered a file with a path then preserve it } } @@ -123,7 +138,7 @@ ReverseSeqsCommand::ReverseSeqsCommand(string option) { void ReverseSeqsCommand::help(){ try { m->mothurOut("The reverse.seqs command reads a fastafile and outputs a fasta file containing the reverse compliment.\n"); - m->mothurOut("The reverse.seqs command parameter is fasta and it is required.\n"); + m->mothurOut("The reverse.seqs command parameters fasta or qfile are required.\n"); m->mothurOut("The reverse.seqs command should be in the following format: \n"); m->mothurOut("reverse.seqs(fasta=yourFastaFile) \n"); } @@ -145,35 +160,61 @@ int ReverseSeqsCommand::execute(){ if (abort == true) { if (calledHelp) { return 0; } return 2; } - ifstream inFASTA; - m->openInputFile(fasta, inFASTA); - - ofstream outFASTA; - string reverseFile = outputDir + m->getRootName(m->getSimpleName(fasta)) + "rc" + m->getExtension(fasta); - m->openOutputFile(reverseFile, outFASTA); + string fastaReverseFileName; - while(!inFASTA.eof()){ - if (m->control_pressed) { inFASTA.close(); outFASTA.close(); remove(reverseFile.c_str()); return 0; } - - Sequence currSeq(inFASTA); m->gobble(inFASTA); - if (currSeq.getName() != "") { - currSeq.reverseComplement(); - currSeq.printSequence(outFASTA); + if(fastaFileName != ""){ + ifstream inFASTA; + m->openInputFile(fastaFileName, inFASTA); + + ofstream outFASTA; + fastaReverseFileName = outputDir + m->getRootName(m->getSimpleName(fastaFileName)) + "rc" + m->getExtension(fastaFileName); + m->openOutputFile(fastaReverseFileName, outFASTA); + + while(!inFASTA.eof()){ + if (m->control_pressed) { inFASTA.close(); outFASTA.close(); remove(fastaReverseFileName.c_str()); return 0; } + + Sequence currSeq(inFASTA); m->gobble(inFASTA); + if (currSeq.getName() != "") { + currSeq.reverseComplement(); + currSeq.printSequence(outFASTA); + } } + inFASTA.close(); + outFASTA.close(); + outputNames.push_back(fastaReverseFileName); } - inFASTA.close(); - outFASTA.close(); - if (m->control_pressed) { remove(reverseFile.c_str()); return 0; } + string qualReverseFileName; + + if(qualFileName != ""){ + QualityScores currQual; + + ifstream inQual; + m->openInputFile(qualFileName, inQual); + + ofstream outQual; + string qualReverseFileName = outputDir + m->getRootName(m->getSimpleName(qualFileName)) + "rc" + m->getExtension(qualFileName); + m->openOutputFile(qualReverseFileName, outQual); + + while(!inQual.eof()){ + if (m->control_pressed) { inQual.close(); outQual.close(); remove(qualReverseFileName.c_str()); return 0; } + currQual = QualityScores(inQual); m->gobble(inQual); + currQual.flipQScores(); + currQual.printQScores(outQual); + } + inQual.close(); + outQual.close(); + outputNames.push_back(qualReverseFileName); + } m->mothurOutEndLine(); m->mothurOut("Output File Name: "); m->mothurOutEndLine(); - m->mothurOut(reverseFile); m->mothurOutEndLine(); outputNames.push_back(reverseFile); outputTypes["fasta"].push_back(reverseFile); - m->mothurOutEndLine(); - + for(int i=0;imothurOut(outputNames[i]); + m->mothurOutEndLine(); + } return 0; - } catch(exception& e) { m->errorOut(e, "ReverseSeqsCommand", "execute");