X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=validparameter.cpp;h=1faa651cd85dea92784a7dcc20cfc1fd3a2a1a9d;hb=8f7164a88df624fd0a8d1eddbb3d744463cc9ecb;hp=d693bcb721184c251896c917328f9d9d07b3fc18;hpb=e189982e0a9b7352ad57cc38ccee675f128be22e;p=mothur.git diff --git a/validparameter.cpp b/validparameter.cpp index d693bcb..1faa651 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"); @@ -197,7 +211,7 @@ bool ValidParameters::isValidParameter(string parameter, vector cParams, /******************************************************/ -string ValidParameters::validFile(map container, string parameter, bool isFile) { +string ValidParameters::validFile(map& container, string parameter, bool isFile) { try { int ableToOpen; ifstream in; @@ -209,23 +223,59 @@ string ValidParameters::validFile(map container, string paramete if(isFile == true) { #ifdef USE_MPI - int pid; + int pid, processors; + MPI_Status status; 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); + ableToOpen = openInputFile(it->second, in, "noerror"); + + //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); + m->mothurOut("Unable to open " + it->second + ". Trying default " + tryPath); m->mothurOutEndLine(); + ableToOpen = openInputFile(tryPath, in, "noerror"); + container[parameter] = tryPath; + } + } + in.close(); #ifdef USE_MPI - MPI_Bcast(&ableToOpen, 1, MPI_INT, 0, MPI_COMM_WORLD); //send ableToOPen + 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_Bcast(&ableToOpen, 1, MPI_INT, 0, MPI_COMM_WORLD); //get ableToOPen + 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; } + #endif - if (ableToOpen == 1) { return "not open"; } + if (ableToOpen == 1) { + m->mothurOut("Unable to open " + container[parameter]); m->mothurOutEndLine(); + return "not open"; + } } }else { return "not found"; } @@ -262,12 +312,6 @@ void ValidParameters::initParameterRanges() { string itersArray[] = {">=","10", "<","NA", "between"}; parameterRanges["iters"] = addParameters(itersArray, rangeSize); - string freqArray[] = {">=","1", "<","NA", "between"}; - parameterRanges["freq"] = addParameters(freqArray, rangeSize); - - //string lineArray[] = {">=","1", "<","NA", "between"}; - //parameterRanges["line"] = addParameters(lineArray, rangeSize); - string abundArray[] = {">=","5", "<","NA", "between"}; parameterRanges["abund"] = addParameters(abundArray, rangeSize);