X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=validparameter.cpp;h=ad8038ee40e60c74ee9cc02ab831195726c7bf27;hb=28d65de5f06f5b033109a3b8bbb6d3c4060914d3;hp=9c8ce2e89136a671d775cb6b41484b3bc6cc869a;hpb=29351fe29c017d2225366418973ed0e000ce5293;p=mothur.git diff --git a/validparameter.cpp b/validparameter.cpp index 9c8ce2e..ad8038e 100644 --- a/validparameter.cpp +++ b/validparameter.cpp @@ -13,42 +13,36 @@ ValidParameters::ValidParameters() { try { - initCommandParameters(); initParameterRanges(); - } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the ValidParameters class Function ValidParameters. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + errorOut(e, "ValidParameters", "ValidParameters"); exit(1); } - catch(...) { - cout << "An unknown error has occurred in the ValidParameters class function ValidParameters. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } } /***********************************************************************/ ValidParameters::~ValidParameters() {} - /***********************************************************************/ -bool ValidParameters::isValidParameter(string parameter, string command, string value) { +bool ValidParameters::isValidParameter(string parameter, vector cParams, string value) { try { bool valid = false; - vector cParams = commandParameters[command]; + //vector cParams = commandParameters[command]; int numParams = cParams.size(); - for(int i = 0; i < numParams; i++) - { - if(cParams.at(i).compare(parameter) == 0) - { + for(int i = 0; i < numParams; i++) { + if(cParams.at(i).compare(parameter) == 0) { valid = true; i = numParams; } } - if(!valid) - { - cout << "'" << parameter << "' is not a valid parameter for the " << command << " command.\n"; + if(!valid) { + mothurOut(parameter + " is not a valid parameter."); mothurOutEndLine(); + mothurOut("The valid parameters are: "); + for(int i = 0; i < numParams-1; i++) + mothurOut(cParams.at(i) + ", "); + mothurOut("and " + cParams.at(numParams-1) + ".\n"); return false; } @@ -58,223 +52,170 @@ bool ValidParameters::isValidParameter(string parameter, string command, string int pVal; double piSentinel = 3.14159; vector range = parameterRanges[parameter]; - - valid = convertTest(value, pVal); - - if(!valid) - return false; + vector values; + splitAtDash(value, values); + for(int i = 0; i < values.size(); i++) { + value = values.at(i); + valid = convertTest(value, pVal); - /******************************************************************************************************** - Special Cases - *********************************************************************************************************/ - - if(parameter.compare("precision") == 0) - { - double logNum = log10((double)pVal); - double diff = (double)((int)logNum - logNum); - if(diff != 0) - { - cout << "The precision parameter can only take powers of 10 as a value (e.g. 10,1000,1000, etc.)\n"; + if(!valid) return false; + + + + /******************************************************************************************************** + Special Cases + *********************************************************************************************************/ + + if(parameter.compare("precision") == 0) { + double logNum = log10((double)pVal); + double diff = (double)((int)logNum - logNum); + if(diff != 0) { + mothurOut("The precision parameter can only take powers of 10 as a value (e.g. 10,1000,1000, etc.)\n"); + return false; + } } - } - - /************************************************************************************************************/ - - - - double a,b,c,d,e; - - if(range.at(1).compare("NA") == 0) - a = piSentinel; - else - a = atoi(range.at(1).c_str()); - if(range.at(3).compare("NA") == 0) - b = piSentinel; - else - b = atoi(range.at(3).c_str()); - - if(range.at(4).compare("between") == 0) - c = 0; - else if(range.at(4).compare("only") == 0) - c = 1; - else - { - cout << "The range can only be 'between' or 'only' the bounding numbers.\n"; - return false; - } - - if(range.at(0).compare(">") == 0) - d = 0; - else if(range.at(0).compare(">=") == 0 || range[3].compare("=>") == 0) - d = 1; - else - { - cout << "The parameter value can only be '>', '>=', or '=>' the lower bounding number.\n"; - return false; - } - - if(range.at(2).compare("<") == 0) - e = 0; - else if(range.at(2).compare("<=") == 0 || range[4].compare("=<") == 0) - e = 1; - else - { - cout << "The parameter value can only be '<', '<=', or '=<' the upper bounding number.\n"; - return false; - } - - bool a0 = pVal > a; - bool a1 = pVal >= a; - bool b0 = pVal < b; - bool b1 = pVal <= b; - - if(c != 1) - { - if(a == piSentinel && b == piSentinel) - return true; - if(a != piSentinel && b == piSentinel) - { - if(d == 0) - valid = a0; - else - valid = a1; + /************************************************************************************************************/ + + + + double a,b,c,d,e; + + if(range.at(1).compare("NA") == 0) + a = piSentinel; + else + a = atoi(range.at(1).c_str()); + + if(range.at(3).compare("NA") == 0) + b = piSentinel; + else + b = atoi(range.at(3).c_str()); + + if(range.at(4).compare("between") == 0) + c = 0; + else if(range.at(4).compare("only") == 0) + c = 1; + else { + mothurOut("The range can only be 'between' or 'only' the bounding numbers.\n"); + return false; } - else if(a == piSentinel && b != piSentinel) - { - if(e == 0) - valid = b0; - else - valid = b1; + + if(range.at(0).compare(">") == 0) + d = 0; + else if(range.at(0).compare(">=") == 0 || range[3].compare("=>") == 0) + d = 1; + else { + mothurOut("The parameter value can only be '>', '>=', or '=>' the lower bounding number.\n"); + return false; } - else - { - if(d == 0 && e == 0) - valid = (a0 && b0); - else if(d == 0 && e == 1) - valid = (a0 && b1); - else if(d == 1 && e == 0) - valid = (a1 && b0); - else - valid = (a1 && b1); + + if(range.at(2).compare("<") == 0) + e = 0; + else if(range.at(2).compare("<=") == 0 || range[4].compare("=<") == 0) + e = 1; + else { + mothurOut("The parameter value can only be '<', '<=', or '=<' the upper bounding number.\n"); + return false; } - } - else - { - if(a == piSentinel && b == piSentinel) - return true; - if(a != piSentinel && b == piSentinel) - valid = (pVal == a); - else if(a == piSentinel && b != piSentinel) - valid = (pVal == b); - else - valid = (pVal == a || pVal == b); - } - - if(valid) - return true; - - else - { - cout << "The '" << parameter << "' parameter needs to be "; - if(c == 1) - cout << "either '" << a << "' or '" << b << "'.\n"; - else - { - if(a != piSentinel) - { - cout << ">"; - if(d != 0) - cout << "="; - cout << " '" << a << "'"; + + bool a0 = pVal > a; + bool a1 = pVal >= a; + bool b0 = pVal < b; + bool b1 = pVal <= b; + + if(c != 1) { + if(a != piSentinel && b == piSentinel) { + if(d == 0) + valid = a0; + else + valid = a1; + } + else if(a == piSentinel && b != piSentinel) { + if(e == 0) + valid = b0; + else + valid = b1; } - if(b == piSentinel) - cout << ".\n"; - else if(a != piSentinel) - cout << " and "; - if(b != piSentinel) - { - cout << "<"; - if(e != 0) - cout << "="; - cout << " '" << b << ".\n"; + else { + if(d == 0 && e == 0) + valid = (a0 && b0); + else if(d == 0 && e == 1) + valid = (a0 && b1); + else if(d == 1 && e == 0) + valid = (a1 && b0); + else + valid = (a1 && b1); } } - return false; + else { + if(a != piSentinel && b == piSentinel) + valid = (pVal == a); + else if(a == piSentinel && b != piSentinel) + valid = (pVal == b); + else + valid = (pVal == a || pVal == b); + } + + + if(!valid) { + mothurOut("The '" + parameter + "' parameter needs to be "); + if(c == 1) + mothurOut("either '" + toString(a) + "' or '" + toString(b) + "'.\n"); + else { + if(a != piSentinel) { + mothurOut(">"); + if(d != 0) + mothurOut("="); + mothurOut(" '" + toString(a) + "'"); + } + if(b == piSentinel) + mothurOut( "'.\n"); + else if(a != piSentinel) + mothurOut(" and "); + if(b != piSentinel) { + mothurOut("<"); + if(e != 0) + mothurOut("="); + mothurOut(" '" + toString(b) + "'.\n"); + } + } + return false; + } } + return true; } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the ValidParameters class Function isValidParameter. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - catch(...) { - cout << "An unknown error has occurred in the ValidParameters class function isValidParameter. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + errorOut(e, "ValidParameters", "isValidParameters"); exit(1); } } +/*******************************************************/ -/***********************************************************************/ - -/***********************************************************************/ -void ValidParameters::initCommandParameters() { - try { - //{"parameter1","parameter2",...,"last parameter"}; - - string readdistArray[] = {"phylip","name","cutoff","precision"}; - commandParameters["read.dist"] = addParameters(readdistArray, sizeof(readdistArray)/sizeof(string)); - - string readotuArray[] = {"list","order","group","shared", "sabund"}; - commandParameters["read.otu"] = addParameters(readotuArray, sizeof(readotuArray)/sizeof(string)); - - string clusterArray[] = {"cutoff","precision","method"}; - commandParameters["cluster"] = addParameters(clusterArray, sizeof(clusterArray)/sizeof(string)); - - string deconvoluteArray[] = {"fasta"}; - commandParameters["deconvolute"] = addParameters(deconvoluteArray, sizeof(deconvoluteArray)/sizeof(string)); - - string collectsingleArray[] = {"freq","line","label","single","precision","abund"}; - commandParameters["collect.single"] = addParameters(collectsingleArray, sizeof(collectsingleArray)/sizeof(string)); - - string collectsharedArray[] = {"jumble","freq","line","label","shared","groups"}; - commandParameters["collect.shared"] = addParameters(collectsharedArray, sizeof(collectsharedArray)/sizeof(string)); - - string getgroupArray[] = {}; - commandParameters["get.group"] = addParameters(getgroupArray, sizeof(getgroupArray)/sizeof(string)); - - string getlabelArray[] = {}; - commandParameters["get.label"] = addParameters(getlabelArray, sizeof(getlabelArray)/sizeof(string)); - - string getlineArray[] = {}; - commandParameters["get.line"] = addParameters(getlineArray, sizeof(getlineArray)/sizeof(string)); +/******************************************************/ - string rarefactionsingleArray[] = {"iters","freq","line","label","rarefaction","abund"}; - commandParameters["rarefaction.single"] = addParameters(rarefactionsingleArray, sizeof(rarefactionsingleArray)/sizeof(string)); - - string rarefactionsharedArray[] = {"iters","jumble","line","label","sharedrarefaction"}; - commandParameters["rarefaction.shared"] = addParameters(rarefactionsharedArray, sizeof(rarefactionsharedArray)/sizeof(string)); +string ValidParameters::validFile(map container, string parameter, bool isFile) { + try { + int ableToOpen; + ifstream in; + map::iterator it; - string libshuffArray[] = {"iters","groups","step","form","cutoff"}; - commandParameters["libshuff"] = addParameters(libshuffArray, sizeof(libshuffArray)/sizeof(string)); + it = container.find(parameter); + if(it != container.end()){ //no parameter given + if(isFile == true) { + ableToOpen = openInputFile(it->second, in); + if (ableToOpen == 1) { return "not open"; } + in.close(); + } + }else { return "not found"; } - string summarysingleArray[] = {"line","label","summary","abund"}; - commandParameters["summary.single"] = addParameters(summarysingleArray, sizeof(summarysingleArray)/sizeof(string)); - - string summarysharedArray[] = {"jumble","line","label","sharedsummary"}; - commandParameters["summary.shared"] = addParameters(summarysharedArray, sizeof(summarysharedArray)/sizeof(string)); - - string quitArray[] = {}; - commandParameters["quit"] = addParameters(quitArray, sizeof(quitArray)/sizeof(string)); - + return it->second; + } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the ValidParameters class Function isValidParameter. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - catch(...) { - cout << "An unknown error has occurred in the ValidParameters class function isValidParameter. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + errorOut(e, "ValidParameters", "validFile"); exit(1); } } @@ -303,24 +244,23 @@ void ValidParameters::initParameterRanges() { string itersArray[] = {">=","10", "<","NA", "between"}; parameterRanges["iters"] = addParameters(itersArray, rangeSize); - string jumbleArray[] = {">","0", "<","1", "only"}; - parameterRanges["jumble"] = addParameters(jumbleArray, rangeSize); - - string freqArray[] = {">","1", "<","NA", "between"}; + string freqArray[] = {">=","1", "<","NA", "between"}; parameterRanges["freq"] = addParameters(freqArray, rangeSize); - string lineArray[] = {">=","1", "<","NA", "between"}; - parameterRanges["line"] = addParameters(lineArray, rangeSize); + //string lineArray[] = {">=","1", "<","NA", "between"}; + //parameterRanges["line"] = addParameters(lineArray, rangeSize); string abundArray[] = {">=","5", "<","NA", "between"}; parameterRanges["abund"] = addParameters(abundArray, rangeSize); + + string softArray[] = {">=","0", "<=","100", "between"}; + parameterRanges["soft"] = addParameters(softArray, rangeSize); + + string sizeArray[] = {">=","1", "<","NA", "between"}; + parameterRanges["size"] = addParameters(sizeArray, rangeSize); } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the ValidParameters class Function isValidParameter. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - catch(...) { - cout << "An unknown error has occurred in the ValidParameters class function isValidParameter. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + errorOut(e, "ValidParameters", "initParameterRanges"); exit(1); } } @@ -334,13 +274,8 @@ vector ValidParameters::addParameters(string parameters[], int size) { return pVector; } catch(exception& e) { - cout << "Standard Error: " << e.what() << " has occurred in the ValidParameters class Function isValidParameter. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; - exit(1); - } - catch(...) { - cout << "An unknown error has occurred in the ValidParameters class function isValidParameter. Please contact Pat Schloss at pschloss@microbio.umass.edu." << "\n"; + errorOut(e, "ValidParameters", "addParameters"); exit(1); } } -