X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=validparameter.cpp;h=7d1af2551c7a6717c1d3ea807af0e56de0fc218e;hp=e82a9e8d4446430d125c168d66e0ababc8651655;hb=615301e57c25e241356a9c2380648d117709458d;hpb=80c3fe03a8fd1635d3ad7918ff00beb973449f50 diff --git a/validparameter.cpp b/validparameter.cpp index e82a9e8..7d1af25 100644 --- a/validparameter.cpp +++ b/validparameter.cpp @@ -15,6 +15,20 @@ ValidParameters::ValidParameters() { try { m = MothurOut::getInstance(); initParameterRanges(); + commandName = ""; + } + catch(exception& e) { + m->errorOut(e, "ValidParameters", "ValidParameters"); + exit(1); + } +} +/***********************************************************************/ + +ValidParameters::ValidParameters(string c) { + try { + m = MothurOut::getInstance(); + initParameterRanges(); + commandName = c; } catch(exception& e) { m->errorOut(e, "ValidParameters", "ValidParameters"); @@ -55,7 +69,7 @@ bool ValidParameters::isValidParameter(string parameter, vector cParams, vector range = parameterRanges[parameter]; vector values; - splitAtDash(value, values); + m->splitAtDash(value, values); for(int i = 0; i < values.size(); i++) { value = values.at(i); @@ -200,13 +214,17 @@ bool ValidParameters::isValidParameter(string parameter, vector cParams, string ValidParameters::validFile(map& container, string parameter, bool isFile) { try { int ableToOpen; - ifstream in; + map::iterator it; it = container.find(parameter); if(it != container.end()){ //no parameter given if(isFile == true) { + + int pos = (it->second).find(".tx."); + if (pos != string::npos) { m->sharedHeaderMode = "tax"; } + else { m->sharedHeaderMode = "otu"; } #ifdef USE_MPI int pid, processors; @@ -214,38 +232,89 @@ string ValidParameters::validFile(map& container, string paramet MPI_Comm_rank(MPI_COMM_WORLD, &pid); //find out who we are MPI_Comm_size(MPI_COMM_WORLD, &processors); + if (commandName == "") { processors = 1; } + if (pid == 0) { #endif - - ableToOpen = openInputFile(it->second, in, "noerror"); + ifstream in; + ableToOpen = m->openInputFile(it->second, in, "noerror"); + in.close(); //if you can't open it, try default location if (ableToOpen == 1) { if (m->getDefaultPath() != "") { //default path is set - string tryPath = m->getDefaultPath() + getSimpleName(it->second); + string tryPath = m->getDefaultPath() + m->getSimpleName(it->second); m->mothurOut("Unable to open " + it->second + ". Trying default " + tryPath); m->mothurOutEndLine(); - ableToOpen = openInputFile(tryPath, in, "noerror"); + ifstream in2; + ableToOpen = m->openInputFile(tryPath, in2, "noerror"); + in2.close(); container[parameter] = tryPath; } } - in.close(); + //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(it->second); + m->mothurOut("Unable to open " + it->second + ". Trying output directory " + tryPath); m->mothurOutEndLine(); + ifstream in2; + ableToOpen = m->openInputFile(tryPath, in2, "noerror"); + container[parameter] = tryPath; + in2.close(); + } + } + + #ifdef USE_MPI for(int i = 1; i < processors; i++) { MPI_Send(&ableToOpen, 1, MPI_INT, i, 2001, MPI_COMM_WORLD); + + int length = container[parameter].length(); + MPI_Send(&length, 1, MPI_INT, i, 2001, MPI_COMM_WORLD); + MPI_Send(&(container[parameter][0]), length, MPI_CHAR, i, 2001, MPI_COMM_WORLD); + } }else { MPI_Recv(&ableToOpen, 1, MPI_INT, 0, 2001, MPI_COMM_WORLD, &status); + + int length; + MPI_Recv(&length, 1, MPI_INT, 0, 2001, MPI_COMM_WORLD, &status); + //recieve container + char* tempBuf = new char[length]; + MPI_Recv(&tempBuf[0], length, MPI_CHAR, 0, 2001, MPI_COMM_WORLD, &status); + + container[parameter] = tempBuf; + if (container[parameter].length() > length) { container[parameter] = container[parameter].substr(0, length); } + delete tempBuf; } - MPI_Barrier(MPI_COMM_WORLD); //make everyone wait - just in case #endif if (ableToOpen == 1) { m->mothurOut("Unable to open " + container[parameter]); m->mothurOutEndLine(); return "not open"; } + + //check phylip file to make sure its really phylip and not column + if ((it->first == "phylip") && (ableToOpen != 1)) { + ifstream inPhylip; + m->openInputFile(it->second, inPhylip); + + string numTest, name; + inPhylip >> numTest >> name; + inPhylip.close(); + + if (!m->isContainingOnlyDigits(numTest)) { m->mothurOut("[ERROR]: expected a number and got " + numTest + ". I suspect you entered a column formatted file as a phylip file, aborting."); m->mothurOutEndLine(); return "not found"; } + } + + //check for blank file + if (ableToOpen != 1) { + if (m->isBlank(container[parameter])) { + m->mothurOut("[ERROR]: " + container[parameter] + " is blank, aborting."); m->mothurOutEndLine(); return "not found"; + } + } + } }else { return "not found"; } @@ -279,7 +348,7 @@ void ValidParameters::initParameterRanges() { string precisionArray[] = {">=","10", "<","NA", "between"}; parameterRanges["precision"] = addParameters(precisionArray, rangeSize); - string itersArray[] = {">=","10", "<","NA", "between"}; + string itersArray[] = {">=","1", "<","NA", "between"}; parameterRanges["iters"] = addParameters(itersArray, rangeSize); string abundArray[] = {">=","5", "<","NA", "between"};