]> git.donarmstrong.com Git - mothur.git/blobdiff - sffinfocommand.cpp
added sequence name to error string in fastq.info. Changed np_shannon to npshannon.
[mothur.git] / sffinfocommand.cpp
index fda9604fc9fd1128094076d315549accb77fab5e..4965cfd75e06c9f8ba8157056922514581e3e10e 100644 (file)
@@ -47,7 +47,7 @@ string SffInfoCommand::getHelpString(){
                helpString += "The trim parameter allows you to indicate if you would like a sequences and quality scores trimmed to the clipQualLeft and clipQualRight values.  Default=True. \n";
                helpString += "The accnos parameter allows you to provide a accnos file containing the names of the sequences you would like extracted. You may enter multiple files by separating them by -'s. \n";
                helpString += "Example sffinfo(sff=mySffFile.sff, trim=F).\n";
-               helpString += "Note: No spaces between parameter labels (i.e. sff), '=' and parameters (i.e.yourSffFileName).\n\n";
+               helpString += "Note: No spaces between parameter labels (i.e. sff), '=' and parameters (i.e.yourSffFileName).\n";
                return helpString;
        }
        catch(exception& e) {
@@ -82,6 +82,7 @@ SffInfoCommand::SffInfoCommand(string option)  {
                
                //allow user to run help
                if(option == "help") { help(); abort = true; calledHelp = true; }
+               else if(option == "citation") { citation(); abort = true; calledHelp = true;}
                
                else {
                        //valid paramters for this command
@@ -116,46 +117,60 @@ SffInfoCommand::SffInfoCommand(string option)  {
                                
                                //go through files and make sure they are good, if not, then disregard them
                                for (int i = 0; i < filenames.size(); i++) {
-                                       if (inputDir != "") {
-                                               string path = m->hasPath(filenames[i]);
-                                               //if the user has not given a path then, add inputdir. else leave path alone.
-                                               if (path == "") {       filenames[i] = inputDir + filenames[i];         }
-                                       }
-       
-                                       ifstream in;
-                                       int ableToOpen = m->openInputFile(filenames[i], in, "noerror");
-                               
-                                       //if you can't open it, try default location
-                                       if (ableToOpen == 1) {
-                                               if (m->getDefaultPath() != "") { //default path is set
-                                                       string tryPath = m->getDefaultPath() + m->getSimpleName(filenames[i]);
-                                                       m->mothurOut("Unable to open " + filenames[i] + ". Trying default " + tryPath); m->mothurOutEndLine();
-                                                       ifstream in2;
-                                                       ableToOpen = m->openInputFile(tryPath, in2, "noerror");
-                                                       in2.close();
-                                                       filenames[i] = tryPath;
+                                       bool ignore = false;
+                                       if (filenames[i] == "current") { 
+                                               filenames[i] = m->getSFFFile(); 
+                                               if (filenames[i] != "") {  m->mothurOut("Using " + filenames[i] + " as input file for the sff parameter where you had given current."); m->mothurOutEndLine(); }
+                                               else {  
+                                                       m->mothurOut("You have no current sfffile, ignoring current."); m->mothurOutEndLine(); ignore=true; 
+                                                       //erase from file list
+                                                       filenames.erase(filenames.begin()+i);
+                                                       i--;
                                                }
                                        }
                                        
-                                       //if you can't open it, try default location
-                                       if (ableToOpen == 1) {
-                                               if (m->getOutputDir() != "") { //default path is set
-                                                       string tryPath = m->getOutputDir() + m->getSimpleName(filenames[i]);
-                                                       m->mothurOut("Unable to open " + filenames[i] + ". Trying output directory " + tryPath); m->mothurOutEndLine();
-                                                       ifstream in2;
-                                                       ableToOpen = m->openInputFile(tryPath, in2, "noerror");
-                                                       in2.close();
-                                                       filenames[i] = tryPath;
+                                       if (!ignore) {
+                                               if (inputDir != "") {
+                                                       string path = m->hasPath(filenames[i]);
+                                                       //if the user has not given a path then, add inputdir. else leave path alone.
+                                                       if (path == "") {       filenames[i] = inputDir + filenames[i];         }
                                                }
-                                       }
-                                       
-                                       in.close();
+               
+                                               ifstream in;
+                                               int ableToOpen = m->openInputFile(filenames[i], in, "noerror");
                                        
-                                       if (ableToOpen == 1) { 
-                                               m->mothurOut("Unable to open " + filenames[i] + ". It will be disregarded."); m->mothurOutEndLine();
-                                               //erase from file list
-                                               filenames.erase(filenames.begin()+i);
-                                               i--;
+                                               //if you can't open it, try default location
+                                               if (ableToOpen == 1) {
+                                                       if (m->getDefaultPath() != "") { //default path is set
+                                                               string tryPath = m->getDefaultPath() + m->getSimpleName(filenames[i]);
+                                                               m->mothurOut("Unable to open " + filenames[i] + ". Trying default " + tryPath); m->mothurOutEndLine();
+                                                               ifstream in2;
+                                                               ableToOpen = m->openInputFile(tryPath, in2, "noerror");
+                                                               in2.close();
+                                                               filenames[i] = tryPath;
+                                                       }
+                                               }
+                                               
+                                               //if you can't open it, try default location
+                                               if (ableToOpen == 1) {
+                                                       if (m->getOutputDir() != "") { //default path is set
+                                                               string tryPath = m->getOutputDir() + m->getSimpleName(filenames[i]);
+                                                               m->mothurOut("Unable to open " + filenames[i] + ". Trying output directory " + tryPath); m->mothurOutEndLine();
+                                                               ifstream in2;
+                                                               ableToOpen = m->openInputFile(tryPath, in2, "noerror");
+                                                               in2.close();
+                                                               filenames[i] = tryPath;
+                                                       }
+                                               }
+                                               
+                                               in.close();
+                                               
+                                               if (ableToOpen == 1) { 
+                                                       m->mothurOut("Unable to open " + filenames[i] + ". It will be disregarded."); m->mothurOutEndLine();
+                                                       //erase from file list
+                                                       filenames.erase(filenames.begin()+i);
+                                                       i--;
+                                               }else { m->setSFFFile(filenames[i]); }
                                        }
                                }
                                
@@ -171,44 +186,59 @@ SffInfoCommand::SffInfoCommand(string option)  {
                                
                                //go through files and make sure they are good, if not, then disregard them
                                for (int i = 0; i < accnosFileNames.size(); i++) {
-                                       if (inputDir != "") {
-                                               string path = m->hasPath(accnosFileNames[i]);
-                                               //if the user has not given a path then, add inputdir. else leave path alone.
-                                               if (path == "") {       accnosFileNames[i] = inputDir + accnosFileNames[i];             }
-                                       }
-       
-                                       ifstream in;
-                                       int ableToOpen = m->openInputFile(accnosFileNames[i], in, "noerror");
-                               
-                                       //if you can't open it, try default location
-                                       if (ableToOpen == 1) {
-                                               if (m->getDefaultPath() != "") { //default path is set
-                                                       string tryPath = m->getDefaultPath() + m->getSimpleName(accnosFileNames[i]);
-                                                       m->mothurOut("Unable to open " + accnosFileNames[i] + ". Trying default " + tryPath); m->mothurOutEndLine();
-                                                       ifstream in2;
-                                                       ableToOpen = m->openInputFile(tryPath, in2, "noerror");
-                                                       in2.close();
-                                                       accnosFileNames[i] = tryPath;
+                                       bool ignore = false;
+                                       if (accnosFileNames[i] == "current") { 
+                                               accnosFileNames[i] = m->getAccnosFile(); 
+                                               if (accnosFileNames[i] != "") {  m->mothurOut("Using " + accnosFileNames[i] + " as input file for the accnos parameter where you had given current."); m->mothurOutEndLine(); }
+                                               else {  
+                                                       m->mothurOut("You have no current accnosfile, ignoring current."); m->mothurOutEndLine(); ignore=true; 
+                                                       //erase from file list
+                                                       accnosFileNames.erase(accnosFileNames.begin()+i);
+                                                       i--;
                                                }
                                        }
-                                       //if you can't open it, try default location
-                                       if (ableToOpen == 1) {
-                                               if (m->getOutputDir() != "") { //default path is set
-                                                       string tryPath = m->getOutputDir() + m->getSimpleName(accnosFileNames[i]);
-                                                       m->mothurOut("Unable to open " + accnosFileNames[i] + ". Trying output directory " + tryPath); m->mothurOutEndLine();
-                                                       ifstream in2;
-                                                       ableToOpen = m->openInputFile(tryPath, in2, "noerror");
-                                                       in2.close();
-                                                       accnosFileNames[i] = tryPath;
+                                       
+                                       if (!ignore) {
+                                       
+                                               if (inputDir != "") {
+                                                       string path = m->hasPath(accnosFileNames[i]);
+                                                       //if the user has not given a path then, add inputdir. else leave path alone.
+                                                       if (path == "") {       accnosFileNames[i] = inputDir + accnosFileNames[i];             }
                                                }
-                                       }
-                                       in.close();
+               
+                                               ifstream in;
+                                               int ableToOpen = m->openInputFile(accnosFileNames[i], in, "noerror");
                                        
-                                       if (ableToOpen == 1) { 
-                                               m->mothurOut("Unable to open " + accnosFileNames[i] + ". It will be disregarded."); m->mothurOutEndLine();
-                                               //erase from file list
-                                               accnosFileNames.erase(accnosFileNames.begin()+i);
-                                               i--;
+                                               //if you can't open it, try default location
+                                               if (ableToOpen == 1) {
+                                                       if (m->getDefaultPath() != "") { //default path is set
+                                                               string tryPath = m->getDefaultPath() + m->getSimpleName(accnosFileNames[i]);
+                                                               m->mothurOut("Unable to open " + accnosFileNames[i] + ". Trying default " + tryPath); m->mothurOutEndLine();
+                                                               ifstream in2;
+                                                               ableToOpen = m->openInputFile(tryPath, in2, "noerror");
+                                                               in2.close();
+                                                               accnosFileNames[i] = tryPath;
+                                                       }
+                                               }
+                                               //if you can't open it, try default location
+                                               if (ableToOpen == 1) {
+                                                       if (m->getOutputDir() != "") { //default path is set
+                                                               string tryPath = m->getOutputDir() + m->getSimpleName(accnosFileNames[i]);
+                                                               m->mothurOut("Unable to open " + accnosFileNames[i] + ". Trying output directory " + tryPath); m->mothurOutEndLine();
+                                                               ifstream in2;
+                                                               ableToOpen = m->openInputFile(tryPath, in2, "noerror");
+                                                               in2.close();
+                                                               accnosFileNames[i] = tryPath;
+                                                       }
+                                               }
+                                               in.close();
+                                               
+                                               if (ableToOpen == 1) { 
+                                                       m->mothurOut("Unable to open " + accnosFileNames[i] + ". It will be disregarded."); m->mothurOutEndLine();
+                                                       //erase from file list
+                                                       accnosFileNames.erase(accnosFileNames.begin()+i);
+                                                       i--;
+                                               }
                                        }
                                }
                                
@@ -253,7 +283,7 @@ SffInfoCommand::SffInfoCommand(string option)  {
                        }
                        
                        if ((sfftxtFilename == "") && (filenames.size() == 0)) {  
-                               //if there is a current fasta file, use it
+                               //if there is a current sff file, use it
                                string filename = m->getSFFFile(); 
                                if (filename != "") { filenames.push_back(filename); m->mothurOut("Using " + filename + " as input file for the sff parameter."); m->mothurOutEndLine(); }
                                else {  m->mothurOut("[ERROR]: you must provide a valid sff or sfftxt file."); m->mothurOutEndLine(); abort=true;  }
@@ -273,7 +303,7 @@ int SffInfoCommand::execute(){
                
                for (int s = 0; s < filenames.size(); s++) {
                        
-                       if (m->control_pressed) {  for (int i = 0; i < outputNames.size(); i++) {       remove(outputNames[i].c_str());         } return 0; }
+                       if (m->control_pressed) {  for (int i = 0; i < outputNames.size(); i++) {       m->mothurRemove(outputNames[i]);        } return 0; }
                        
                        int start = time(NULL);
                        
@@ -289,7 +319,7 @@ int SffInfoCommand::execute(){
                
                if (sfftxtFilename != "") {  parseSffTxt(); }
                
-               if (m->control_pressed) {  for (int i = 0; i < outputNames.size(); i++) {       remove(outputNames[i].c_str());         } return 0; }
+               if (m->control_pressed) {  for (int i = 0; i < outputNames.size(); i++) {       m->mothurRemove(outputNames[i]);        } return 0; }
                
                //set fasta file as new current fastafile
                string current = "";
@@ -301,7 +331,12 @@ int SffInfoCommand::execute(){
                itTypes = outputTypes.find("qfile");
                if (itTypes != outputTypes.end()) {
                        if ((itTypes->second).size() != 0) { current = (itTypes->second)[0]; m->setQualFile(current); }
-               }       
+               }
+               
+               itTypes = outputTypes.find("flow");
+               if (itTypes != outputTypes.end()) {
+                       if ((itTypes->second).size() != 0) { current = (itTypes->second)[0]; m->setFlowFile(current); }
+               }
                
                //report output filenames
                m->mothurOutEndLine();
@@ -431,7 +466,7 @@ int SffInfoCommand::readCommonHeader(ifstream& in, CommonHeader& header){
                        //read offset
                        char buffer2 [8];
                        in.read(buffer2, 8);
-                       header.indexOffset =  be_int8(*(unsigned long int *)(&buffer2));
+                       header.indexOffset =  be_int8(*(unsigned long long *)(&buffer2));
                        
                        //read index length
                        char buffer3 [4];
@@ -478,8 +513,8 @@ int SffInfoCommand::readCommonHeader(ifstream& in, CommonHeader& header){
                        delete[] tempBuffer2;
                                
                        /* Pad to 8 chars */
-                       unsigned long int spotInFile = in.tellg();
-                       unsigned long int spot = (spotInFile + 7)& ~7;  // ~ inverts
+                       unsigned long long spotInFile = in.tellg();
+                       unsigned long long spot = (spotInFile + 7)& ~7;  // ~ inverts
                        in.seekg(spot);
                        
                }else{
@@ -546,8 +581,8 @@ int SffInfoCommand::readHeader(ifstream& in, Header& header){
                        decodeName(header.timestamp, header.region, header.xy, header.name);
                        
                        /* Pad to 8 chars */
-                       unsigned long int spotInFile = in.tellg();
-                       unsigned long int spot = (spotInFile + 7)& ~7;
+                       unsigned long long spotInFile = in.tellg();
+                       unsigned long long spot = (spotInFile + 7)& ~7;
                        in.seekg(spot);
                        
                }else{
@@ -599,8 +634,8 @@ int SffInfoCommand::readSeqData(ifstream& in, seqRead& read, int numFlowReads, i
                        }
        
                        /* Pad to 8 chars */
-                       unsigned long int spotInFile = in.tellg();
-                       unsigned long int spot = (spotInFile + 7)& ~7;
+                       unsigned long long spotInFile = in.tellg();
+                       unsigned long long spot = (spotInFile + 7)& ~7;
                        in.seekg(spot);
                        
                }else{
@@ -866,13 +901,20 @@ int SffInfoCommand::parseSffTxt() {
                //output file names
                ofstream outFasta, outQual, outFlow;
                string outFastaFileName, outQualFileName;
-               string outFlowFileName = outputDir + m->getRootName(m->getSimpleName(sfftxtFilename)) + "flow";
+               string fileRoot = m->getRootName(m->getSimpleName(sfftxtFilename));
+               if (fileRoot.length() > 0) {
+                       //rip off last .
+                       fileRoot = fileRoot.substr(0, fileRoot.length()-1);
+                       fileRoot = m->getRootName(fileRoot);
+               }
+               
+               string outFlowFileName = outputDir + fileRoot + "flow";
                if (trim) {
-                       outFastaFileName = outputDir + m->getRootName(m->getSimpleName(sfftxtFilename)) + "fasta";
-                       outQualFileName = outputDir + m->getRootName(m->getSimpleName(sfftxtFilename)) + "qual";
+                       outFastaFileName = outputDir + fileRoot + "fasta";
+                       outQualFileName = outputDir + fileRoot + "qual";
                }else{
-                       outFastaFileName = outputDir + m->getRootName(m->getSimpleName(sfftxtFilename)) + "raw.fasta";
-                       outQualFileName = outputDir + m->getRootName(m->getSimpleName(sfftxtFilename)) + "raw.qual";
+                       outFastaFileName = outputDir + fileRoot + "raw.fasta";
+                       outQualFileName = outputDir + fileRoot + "raw.qual";
                }
                
                if (fasta)      { m->openOutputFile(outFastaFileName, outFasta);        outputNames.push_back(outFastaFileName); outputTypes["fasta"].push_back(outFastaFileName); }