5 * Created by Sarah Westcott on 1/5/09.
6 * Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved.
10 #include "validparameter.h"
12 /***********************************************************************/
14 ValidParameters::ValidParameters() {
16 initParameterRanges();
19 errorOut(e, "ValidParameters", "ValidParameters");
24 /***********************************************************************/
26 ValidParameters::~ValidParameters() {}
28 /***********************************************************************/
29 bool ValidParameters::isValidParameter(string parameter, vector<string> cParams, string value) {
32 //vector<string> cParams = commandParameters[command];
33 int numParams = cParams.size();
34 for(int i = 0; i < numParams; i++) {
35 if(cParams.at(i).compare(parameter) == 0) {
41 mothurOut(parameter + " is not a valid parameter."); mothurOutEndLine();
42 mothurOut("The valid parameters are: ");
43 for(int i = 0; i < numParams-1; i++)
44 mothurOut(cParams.at(i) + ", ");
45 mothurOut("and " + cParams.at(numParams-1) + ".\n");
49 if(parameterRanges.count(parameter) != 1)
53 double piSentinel = 3.14159;
54 vector<string> range = parameterRanges[parameter];
56 vector<string> values;
57 splitAtDash(value, values);
59 for(int i = 0; i < values.size(); i++) {
61 valid = convertTest(value, pVal);
68 /********************************************************************************************************
70 *********************************************************************************************************/
72 if(parameter.compare("precision") == 0) {
73 double logNum = log10((double)pVal);
74 double diff = (double)((int)logNum - logNum);
76 mothurOut("The precision parameter can only take powers of 10 as a value (e.g. 10,1000,1000, etc.)\n");
81 /************************************************************************************************************/
87 if(range.at(1).compare("NA") == 0)
90 a = atoi(range.at(1).c_str());
92 if(range.at(3).compare("NA") == 0)
95 b = atoi(range.at(3).c_str());
97 if(range.at(4).compare("between") == 0)
99 else if(range.at(4).compare("only") == 0)
102 mothurOut("The range can only be 'between' or 'only' the bounding numbers.\n");
106 if(range.at(0).compare(">") == 0)
108 else if(range.at(0).compare(">=") == 0 || range[3].compare("=>") == 0)
111 mothurOut("The parameter value can only be '>', '>=', or '=>' the lower bounding number.\n");
115 if(range.at(2).compare("<") == 0)
117 else if(range.at(2).compare("<=") == 0 || range[4].compare("=<") == 0)
120 mothurOut("The parameter value can only be '<', '<=', or '=<' the upper bounding number.\n");
130 if(a != piSentinel && b == piSentinel) {
136 else if(a == piSentinel && b != piSentinel) {
145 else if(d == 0 && e == 1)
147 else if(d == 1 && e == 0)
154 if(a != piSentinel && b == piSentinel)
156 else if(a == piSentinel && b != piSentinel)
159 valid = (pVal == a || pVal == b);
164 mothurOut("The '" + parameter + "' parameter needs to be ");
166 mothurOut("either '" + toString(a) + "' or '" + toString(b) + "'.\n");
168 if(a != piSentinel) {
172 mothurOut(" '" + toString(a) + "'");
176 else if(a != piSentinel)
178 if(b != piSentinel) {
182 mothurOut(" '" + toString(b) + "'.\n");
190 catch(exception& e) {
191 errorOut(e, "ValidParameters", "isValidParameters");
195 /*******************************************************/
197 /******************************************************/
199 string ValidParameters::validFile(map<string, string> container, string parameter, bool isFile) {
203 map<string, string>::iterator it;
205 it = container.find(parameter);
206 if(it != container.end()){ //no parameter given
208 ableToOpen = openInputFile(it->second, in);
209 if (ableToOpen == 1) { return "not open"; }
212 }else { return "not found"; }
217 catch(exception& e) {
218 errorOut(e, "ValidParameters", "validFile");
223 /***********************************************************************/
225 /***********************************************************************/
226 void ValidParameters::initParameterRanges() {
230 /**************************************************************************************************************
231 {">=" or "=>" or ">" if the value should be greater than or equal to or just greater than the lower bound,
232 A number representing the lower bound ("NA" if there is no lower bound),
233 "<=" or "=<" or "<" if the value shoud be less than or equal to or just less than the upper bound,
234 A number representing the upper bound ("NA" if there is no lower bound),
235 "between" if between lower and upper bounds or "only" if exactly one of the bounds};
238 # (>, >=) lower bound, # (<, <=) upperbound, # should be (between, only) lower and upper bounds.
239 ***********************************************************************************************************/
241 string precisionArray[] = {">=","10", "<","NA", "between"};
242 parameterRanges["precision"] = addParameters(precisionArray, rangeSize);
244 string itersArray[] = {">=","10", "<","NA", "between"};
245 parameterRanges["iters"] = addParameters(itersArray, rangeSize);
247 string freqArray[] = {">=","1", "<","NA", "between"};
248 parameterRanges["freq"] = addParameters(freqArray, rangeSize);
250 //string lineArray[] = {">=","1", "<","NA", "between"};
251 //parameterRanges["line"] = addParameters(lineArray, rangeSize);
253 string abundArray[] = {">=","5", "<","NA", "between"};
254 parameterRanges["abund"] = addParameters(abundArray, rangeSize);
256 string softArray[] = {">=","0", "<=","100", "between"};
257 parameterRanges["soft"] = addParameters(softArray, rangeSize);
259 string sizeArray[] = {">=","1", "<","NA", "between"};
260 parameterRanges["size"] = addParameters(sizeArray, rangeSize);
262 catch(exception& e) {
263 errorOut(e, "ValidParameters", "initParameterRanges");
268 /***********************************************************************/
270 /***********************************************************************/
271 vector<string> ValidParameters::addParameters(string parameters[], int size) {
273 vector<string> pVector (parameters, parameters+size);
276 catch(exception& e) {
277 errorOut(e, "ValidParameters", "addParameters");