2 * chimeraseqscommand.cpp
5 * Created by Sarah Westcott on 6/29/09.
6 * Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved.
10 #include "chimeraseqscommand.h"
11 #include "bellerophon.h"
14 //***************************************************************************************************************
16 ChimeraSeqsCommand::ChimeraSeqsCommand(string option){
20 //allow user to run help
21 if(option == "help") { help(); abort = true; }
24 //valid paramters for this command
25 string Array[] = {"fasta", "filter", "correction", "processors", "method", "window", "increment", "template", "conservation", "quantile", "mask" };
26 vector<string> myArray (Array, Array+(sizeof(Array)/sizeof(string)));
28 OptionParser parser(option);
29 map<string,string> parameters = parser.getParameters();
31 ValidParameters validParameter;
33 //check to make sure all parameters are valid for command
34 for (map<string,string>::iterator it = parameters.begin(); it != parameters.end(); it++) {
35 if (validParameter.isValidParameter(it->first, myArray, it->second) != true) { abort = true; }
38 //check for required parameters
39 fastafile = validParameter.validFile(parameters, "fasta", true);
40 if (fastafile == "not open") { abort = true; }
41 else if (fastafile == "not found") { fastafile = ""; mothurOut("fasta is a required parameter for the chimera.seqs command."); mothurOutEndLine(); abort = true; }
43 templatefile = validParameter.validFile(parameters, "template", true);
44 if (templatefile == "not open") { abort = true; }
45 else if (templatefile == "not found") { templatefile = ""; }
47 consfile = validParameter.validFile(parameters, "conservation", true);
48 if (consfile == "not open") { abort = true; }
49 else if (consfile == "not found") { consfile = ""; }
51 quanfile = validParameter.validFile(parameters, "quantile", true);
52 if (quanfile == "not open") { abort = true; }
53 else if (quanfile == "not found") { quanfile = ""; }
55 maskfile = validParameter.validFile(parameters, "mask", false);
56 if (maskfile == "not found") { maskfile = ""; }
57 else if (maskfile != "default") {
59 int ableToOpen = openInputFile(maskfile, in);
60 if (ableToOpen == 1) { abort = true; }
68 temp = validParameter.validFile(parameters, "filter", false); if (temp == "not found") { temp = "T"; }
69 filter = isTrue(temp);
71 temp = validParameter.validFile(parameters, "correction", false); if (temp == "not found") { temp = "T"; }
72 correction = isTrue(temp);
74 temp = validParameter.validFile(parameters, "processors", false); if (temp == "not found") { temp = "1"; }
75 convert(temp, processors);
77 temp = validParameter.validFile(parameters, "window", false); if (temp == "not found") { temp = "0"; }
78 convert(temp, window);
80 temp = validParameter.validFile(parameters, "increment", false); if (temp == "not found") { temp = "25"; }
81 convert(temp, increment);
83 method = validParameter.validFile(parameters, "method", false); if (method == "not found") { method = "pintail"; }
85 if ((method == "pintail") && (templatefile == "")) { mothurOut("You must provide a template file with the pintail method."); mothurOutEndLine(); abort = true; }
91 errorOut(e, "ChimeraSeqsCommand", "ChimeraSeqsCommand");
95 //**********************************************************************************************************************
97 void ChimeraSeqsCommand::help(){
99 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");
100 mothurOut("The chimera.seqs command parameters are fasta, filter, correction, processors, mask and method. fasta is required.\n");
101 mothurOut("The filter parameter allows you to specify if you would like to apply a 50% soft filter. The default is false. \n");
102 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");
103 mothurOut("The processors parameter allows you to specify how many processors you would like to use. The default is 1. \n");
104 mothurOut("The method parameter allows you to specify the method for finding chimeric sequences. The default is pintail. \n");
105 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");
106 mothurOut("The chimera.seqs command should be in the following format: \n");
107 mothurOut("chimera.seqs(fasta=yourFastaFile, filter=yourFilter, correction=yourCorrection, processors=yourProcessors, method=bellerophon) \n");
108 mothurOut("Example: chimera.seqs(fasta=AD.align, filter=True, correction=true, processors=2, method=yourMethod) \n");
109 mothurOut("Note: No spaces between parameter labels (i.e. fasta), '=' and parameters (i.e.yourFastaFile).\n\n");
111 catch(exception& e) {
112 errorOut(e, "ChimeraSeqsCommand", "help");
117 //***************************************************************************************************************
119 ChimeraSeqsCommand::~ChimeraSeqsCommand(){ /* do nothing */ }
121 //***************************************************************************************************************
123 int ChimeraSeqsCommand::execute(){
126 if (abort == true) { return 0; }
128 if (method == "bellerophon") { chimera = new Bellerophon(fastafile); }
129 else if (method == "pintail") { chimera = new Pintail(fastafile, templatefile);
130 //saves time to avoid generating it
131 if (consfile != "") { chimera->setCons(consfile); }
132 else { chimera->setCons(""); }
134 //saves time to avoid generating it
135 if (quanfile != "") { chimera->setQuantiles(quanfile); }
136 else { chimera->setQuantiles(""); }
138 if (maskfile == "default") { mothurOut("I am using the default 236627 EU009184.1 Shigella dysenteriae str. FBD013."); mothurOutEndLine(); }
139 chimera->setMask(maskfile);
141 }else { mothurOut("Not a valid method."); mothurOutEndLine(); return 0; }
144 chimera->setFilter(filter);
145 chimera->setCorrection(correction);
146 chimera->setProcessors(processors);
147 chimera->setWindow(window);
148 chimera->setIncrement(increment);
151 chimera->getChimeras();
153 string outputFileName = getRootName(fastafile) + method + ".chimeras";
155 openOutputFile(outputFileName, out);
167 catch(exception& e) {
168 errorOut(e, "ChimeraSeqsCommand", "execute");
172 /**************************************************************************************************/