]> git.donarmstrong.com Git - mothur.git/blobdiff - chimeraseqscommand.cpp
chimeracheck method added
[mothur.git] / chimeraseqscommand.cpp
index ba980a50e46405dfc3087f5ba7c02d0b25cab1ff..2efed601c74832305eeb39e8c1dcbc8afd80d0d2 100644 (file)
@@ -10,6 +10,9 @@
 #include "chimeraseqscommand.h"
 #include "bellerophon.h"
 #include "pintail.h"
+#include "ccode.h"
+#include "chimeracheckrdp.h"
+
 
 //***************************************************************************************************************
 
@@ -22,7 +25,7 @@ ChimeraSeqsCommand::ChimeraSeqsCommand(string option){
                
                else {
                        //valid paramters for this command
-                       string Array[] =  {"fasta", "filter", "correction", "processors", "method", "window", "increment", "template", "conservation", "quantile", "mask" };
+                       string Array[] =  {"fasta", "filter", "correction", "processors", "method", "window", "increment", "template", "conservation", "quantile", "mask", "numwanted", "ksize", "svg", "name" };
                        vector<string> myArray (Array, Array+(sizeof(Array)/sizeof(string)));
                        
                        OptionParser parser(option);
@@ -51,15 +54,24 @@ ChimeraSeqsCommand::ChimeraSeqsCommand(string option){
                        quanfile = validParameter.validFile(parameters, "quantile", true);
                        if (quanfile == "not open") { abort = true; }
                        else if (quanfile == "not found") { quanfile = "";  }
-                               
-                       maskfile = validParameter.validFile(parameters, "mask", true);
-                       if (maskfile == "not open") { abort = true; }
-                       else if (maskfile == "not found") { maskfile = "";  }   
-
                        
+                       namefile = validParameter.validFile(parameters, "name", true);
+                       if (namefile == "not open") { abort = true; }
+                       else if (namefile == "not found") { namefile = "";  }
 
+                       maskfile = validParameter.validFile(parameters, "mask", false);
+                       if (maskfile == "not found") { maskfile = "";  }        
+                       else if (maskfile != "default")  { 
+                               ifstream in;
+                               int     ableToOpen = openInputFile(maskfile, in);
+                               if (ableToOpen == 1) { abort = true; }
+                               in.close();
+                       }
+                       
+                       method = validParameter.validFile(parameters, "method", false);                 if (method == "not found") { method = "pintail"; }
+                       
                        string temp;
-                       temp = validParameter.validFile(parameters, "filter", false);                   if (temp == "not found") { temp = "T"; }
+                       temp = validParameter.validFile(parameters, "filter", false);                   if (temp == "not found") { temp = "F"; }
                        filter = isTrue(temp);
                        
                        temp = validParameter.validFile(parameters, "correction", false);               if (temp == "not found") { temp = "T"; }
@@ -68,15 +80,26 @@ ChimeraSeqsCommand::ChimeraSeqsCommand(string option){
                        temp = validParameter.validFile(parameters, "processors", false);               if (temp == "not found") { temp = "1"; }
                        convert(temp, processors);
                        
+                       temp = validParameter.validFile(parameters, "ksize", false);                    if (temp == "not found") { temp = "7"; }
+                       convert(temp, ksize);
+                       
+                       temp = validParameter.validFile(parameters, "svg", false);                              if (temp == "not found") { temp = "F"; }
+                       svg = isTrue(temp);
+                       
                        temp = validParameter.validFile(parameters, "window", false);                   if (temp == "not found") { temp = "0"; }
                        convert(temp, window);
                                        
-                       temp = validParameter.validFile(parameters, "increment", false);                        if (temp == "not found") { temp = "25"; }
+                       temp = validParameter.validFile(parameters, "increment", false);                
+                       if ((temp == "not found") && (method == "chimeracheck")) { temp = "10"; }
+                       else if (temp == "not found") { temp = "25"; }
                        convert(temp, increment);
-                               
-                       method = validParameter.validFile(parameters, "method", false);         if (method == "not found") { method = "pintail"; }
                        
-                       if ((method == "pintail") && (templatefile == "")) { mothurOut("You must provide a template file with the pintail method."); mothurOutEndLine(); abort = true;  }
+                       temp = validParameter.validFile(parameters, "numwanted", false);                if (temp == "not found") { temp = "20"; }
+                       convert(temp, numwanted);
+
+                       
+                       
+                       if (((method == "pintail") || (method == "alignsim")) && (templatefile == "")) { mothurOut("You must provide a template file with the pintail and alignsim methods."); mothurOutEndLine(); abort = true;  }
                        
 
                }
@@ -90,13 +113,21 @@ ChimeraSeqsCommand::ChimeraSeqsCommand(string option){
 
 void ChimeraSeqsCommand::help(){
        try {
-               mothurOut("The chimera.seqs command reads a fastafile and creates a sorted priority score list of potentially chimeric sequences (ideally, the sequences should already be aligned).\n");
-               mothurOut("The chimera.seqs command parameters are fasta, filter, correction, processors, mask and method.  fasta is required.\n");
-               mothurOut("The filter parameter allows you to specify if you would like to apply a 50% soft filter.  The default is false. \n");
-               mothurOut("The correction parameter allows you to put more emphasis on the distance between highly similar sequences and less emphasis on the differences between remote homologs.   The default is true. \n");
+               mothurOut("chimera.seqs ASSUMES that your sequences are ALIGNED and if using a template that the template file sequences are the same length as the fasta file sequences.\n\n");
+               mothurOut("The chimera.seqs command reads a fastafile and creates list of potentially chimeric sequences.\n");
+               mothurOut("The chimera.seqs command parameters are fasta, filter, correction, processors, mask, method, window, increment, template, conservation and quantile.\n");
+               mothurOut("The fasta parameter is always required and template is required if using pintail.\n");
+               mothurOut("The filter parameter allows you to specify if you would like to apply a vertical and 50% soft filter.  The default is false. \n");
+               mothurOut("The correction parameter allows you to put more emphasis on the distance between highly similar sequences and less emphasis on the differences between remote homologs.   The default is true. This only applies when the method is bellerphon.\n");
                mothurOut("The processors parameter allows you to specify how many processors you would like to use.  The default is 1. \n");
-               mothurOut("The method parameter allows you to specify the method for finding chimeric sequences.  The default is pintail. \n");
-               mothurOut("The mask parameter allows you to specify a file containing one sequence you wish to use as a mask for the pintail and mallard method.  The default is 236627 EU009184.1 Shigella dysenteriae str. FBD013. \n");
+               mothurOut("The method parameter allows you to specify the method for finding chimeric sequences.  The default is pintail. Options include..... \n");
+               mothurOut("The mask parameter allows you to specify a file containing one sequence you wish to use as a mask for the pintail.  The default is no mask.  If you enter mask=default, then the mask is 236627 EU009184.1 Shigella dysenteriae str. FBD013. \n");
+               mothurOut("The window parameter allows you to specify the window size for searching for chimeras.  The default is 300 is method is pintail unless the sequence length is less than 300, and 1/4 sequence length for bellerphon.\n");
+               mothurOut("The increment parameter allows you to specify how far you move each window while finding chimeric sequences.  The default is 25.\n");
+               mothurOut("The template parameter allows you to enter a template file containing known non-chimeric sequences for use by the pintail algorythm. It is a required parameter if using pintail.\n");
+               mothurOut("The conservation parameter allows you to enter a frequency file containing the highest bases frequency at each place in the alignment for use by the pintail algorythm. It is not required, but will speed up the pintail method.\n");
+               mothurOut("The quantile parameter allows you to enter a file containing quantiles for a template files sequences for use by the pintail algorythm. It is not required, but will speed up the pintail method.\n");
+               mothurOut("If you have run chimera.seqs using pintail a .quan and .freq file will be created if you have not provided them for use in future command executions.");
                mothurOut("The chimera.seqs command should be in the following format: \n");
                mothurOut("chimera.seqs(fasta=yourFastaFile, filter=yourFilter, correction=yourCorrection, processors=yourProcessors, method=bellerophon) \n");
                mothurOut("Example: chimera.seqs(fasta=AD.align, filter=True, correction=true, processors=2, method=yourMethod) \n");
@@ -119,32 +150,36 @@ int ChimeraSeqsCommand::execute(){
                
                if (abort == true) { return 0; }
                
-               if (method == "bellerophon")    {               chimera = new Bellerophon(fastafile);                   }
-               else if (method == "pintail")   {               chimera = new Pintail(fastafile, templatefile); 
-                       //saves time to avoid generating it
-                       if (consfile != "")                     {               chimera->setCons(consfile);                                             }
-                       else                                            {               chimera->setCons("");                                                   }
-                       
-                       //saves time to avoid generating it
-                       if (quanfile != "")                     {               chimera->setQuantiles(quanfile);                                }
-                       else                                            {               chimera->setQuantiles("");                                              }
-                       
-                       if (maskfile == "") { mothurOut("You have not provided a mask, so I am using the default 236627 EU009184.1 Shigella dysenteriae str. FBD013."); mothurOutEndLine();  }
-                       chimera->setMask(maskfile);
-                                               
-               }else { mothurOut("Not a valid method."); mothurOutEndLine(); return 0;         }
+               if (method == "bellerophon")                    {               chimera = new Bellerophon(fastafile);                                           }
+               else if (method == "pintail")                   {               chimera = new Pintail(fastafile, templatefile);                         }
+               else if (method == "ccode")                             {               chimera = new Ccode(fastafile, templatefile);                           }
+               else if (method == "chimeracheck")              {               chimera = new ChimeraCheckRDP(fastafile, templatefile);         }
+               else { mothurOut("Not a valid method."); mothurOutEndLine(); return 0;          }
                
                //set user options
+               if (maskfile == "default") { mothurOut("I am using the default 236627 EU009184.1 Shigella dysenteriae str. FBD013."); mothurOutEndLine();  }
+               
+               //saves time to avoid generating it
+               chimera->setCons(consfile);     
+               
+               //saves time to avoid generating it
+               chimera->setQuantiles(quanfile);                                
+               
+               chimera->setMask(maskfile);
                chimera->setFilter(filter);
                chimera->setCorrection(correction);
                chimera->setProcessors(processors);
                chimera->setWindow(window);
                chimera->setIncrement(increment);
+               chimera->setNumWanted(numwanted);
+               chimera->setKmerSize(ksize);
+               chimera->setSVG(svg);
+               chimera->setName(namefile);
                                
                //find chimeras
                chimera->getChimeras();
                
-               string outputFileName = getRootName(fastafile) + method + ".chimeras";
+               string outputFileName = getRootName(fastafile) + method + maskfile + ".chimeras";
                ofstream out;
                openOutputFile(outputFileName, out);