X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=screenseqscommand.cpp;h=41067396c6f5333faeaf3346afd9b865ad351531;hb=8dd3c225255d7084e3aff8740aa4f1f1cabb367a;hp=cedb74a9b6c7f0a4162cdc96d9b774105e6cc1d0;hpb=3094cb29c613d9687e861e1d0cf9104b7141d24e;p=mothur.git diff --git a/screenseqscommand.cpp b/screenseqscommand.cpp index cedb74a..4106739 100644 --- a/screenseqscommand.cpp +++ b/screenseqscommand.cpp @@ -220,26 +220,26 @@ ScreenSeqsCommand::ScreenSeqsCommand(string option) { // ...at some point should added some additional type checking... string temp; temp = validParameter.validFile(parameters, "start", false); if (temp == "not found") { temp = "-1"; } - convert(temp, startPos); + m->mothurConvert(temp, startPos); temp = validParameter.validFile(parameters, "end", false); if (temp == "not found") { temp = "-1"; } - convert(temp, endPos); + m->mothurConvert(temp, endPos); temp = validParameter.validFile(parameters, "maxambig", false); if (temp == "not found") { temp = "-1"; } - convert(temp, maxAmbig); + m->mothurConvert(temp, maxAmbig); temp = validParameter.validFile(parameters, "maxhomop", false); if (temp == "not found") { temp = "-1"; } - convert(temp, maxHomoP); + m->mothurConvert(temp, maxHomoP); temp = validParameter.validFile(parameters, "minlength", false); if (temp == "not found") { temp = "-1"; } - convert(temp, minLength); + m->mothurConvert(temp, minLength); temp = validParameter.validFile(parameters, "maxlength", false); if (temp == "not found") { temp = "-1"; } - convert(temp, maxLength); + m->mothurConvert(temp, maxLength); temp = validParameter.validFile(parameters, "processors", false); if (temp == "not found"){ temp = m->getProcessors(); } m->setProcessors(temp); - convert(temp, processors); + m->mothurConvert(temp, processors); temp = validParameter.validFile(parameters, "optimize", false); //optimizing trumps the optimized values original value if (temp == "not found"){ temp = "none"; } @@ -259,7 +259,12 @@ ScreenSeqsCommand::ScreenSeqsCommand(string option) { if (optimize.size() == 1) { if (optimize[0] == "none") { optimize.clear(); } } temp = validParameter.validFile(parameters, "criteria", false); if (temp == "not found"){ temp = "90"; } - convert(temp, criteria); + m->mothurConvert(temp, criteria); + + if (namefile == "") { + vector files; files.push_back(fastafile); + parser.getNameFile(files); + } } } @@ -283,10 +288,15 @@ int ScreenSeqsCommand::execute(){ getSummary(positions); } else { + #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) positions = m->divideFile(fastafile, processors); for (int i = 0; i < (positions.size()-1); i++) { lines.push_back(new linePair(positions[i], positions[(i+1)])); - } + } + #else + positions.push_back(0); positions.push_back(1000); + lines.push_back(new linePair(0, 1000)); + #endif } string goodSeqFile = outputDir + m->getRootName(m->getSimpleName(fastafile)) + "good" + m->getExtension(fastafile); @@ -295,7 +305,7 @@ int ScreenSeqsCommand::execute(){ int numFastaSeqs = 0; set badSeqNames; int start = time(NULL); - + #ifdef USE_MPI int pid, numSeqsPerProcessor; int tag = 2001; @@ -304,7 +314,7 @@ int ScreenSeqsCommand::execute(){ MPI_Status status; MPI_Comm_rank(MPI_COMM_WORLD, &pid); //find out who we are MPI_Comm_size(MPI_COMM_WORLD, &processors); - + MPI_File inMPI; MPI_File outMPIGood; MPI_File outMPIBadAccnos; @@ -659,21 +669,22 @@ int ScreenSeqsCommand::getSummary(vector& positions){ vector ambigBases; vector longHomoPolymer; +#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) vector positions = m->divideFile(fastafile, processors); - + for (int i = 0; i < (positions.size()-1); i++) { lines.push_back(new linePair(positions[i], positions[(i+1)])); } - +#else + lines.push_back(new linePair(0, 1000)); +#endif #ifdef USE_MPI + int pid; MPI_Comm_rank(MPI_COMM_WORLD, &pid); - if (pid == 0) { //only one process should fix files + if (pid == 0) { driverCreateSummary(startPosition, endPosition, seqLength, ambigBases, longHomoPolymer, fastafile, lines[0]); - } - - MPI_Barrier(MPI_COMM_WORLD); //make everyone wait #else int numSeqs = 0; #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) @@ -707,6 +718,33 @@ int ScreenSeqsCommand::getSummary(vector& positions){ else if (optimize[i] == "maxlength") { maxLength = seqLength[criteriaPercentile]; m->mothurOut("Optimizing maxlength to " + toString(maxLength) + "."); m->mothurOutEndLine(); } } +#ifdef USE_MPI + } + + MPI_Status status; + MPI_Comm_rank(MPI_COMM_WORLD, &pid); + MPI_Comm_size(MPI_COMM_WORLD, &processors); + + if (pid == 0) { + //send file positions to all processes + for(int i = 1; i < processors; i++) { + MPI_Send(&startPos, 1, MPI_INT, i, 2001, MPI_COMM_WORLD); + MPI_Send(&endPos, 1, MPI_INT, i, 2001, MPI_COMM_WORLD); + MPI_Send(&maxAmbig, 1, MPI_INT, i, 2001, MPI_COMM_WORLD); + MPI_Send(&maxHomoP, 1, MPI_INT, i, 2001, MPI_COMM_WORLD); + MPI_Send(&minLength, 1, MPI_INT, i, 2001, MPI_COMM_WORLD); + MPI_Send(&maxLength, 1, MPI_INT, i, 2001, MPI_COMM_WORLD); + } + }else { + MPI_Recv(&startPos, 1, MPI_INT, 0, 2001, MPI_COMM_WORLD, &status); + MPI_Recv(&endPos, 1, MPI_INT, 0, 2001, MPI_COMM_WORLD, &status); + MPI_Recv(&maxAmbig, 1, MPI_INT, 0, 2001, MPI_COMM_WORLD, &status); + MPI_Recv(&maxHomoP, 1, MPI_INT, 0, 2001, MPI_COMM_WORLD, &status); + MPI_Recv(&minLength, 1, MPI_INT, 0, 2001, MPI_COMM_WORLD, &status); + MPI_Recv(&maxLength, 1, MPI_INT, 0, 2001, MPI_COMM_WORLD, &status); + } + MPI_Barrier(MPI_COMM_WORLD); //make everyone wait - just in case +#endif return 0; } catch(exception& e) { @@ -753,7 +791,7 @@ int ScreenSeqsCommand::driverCreateSummary(vector& startPosition, vectormothurOut("Optimizing sequence: " + toString(count)); m->mothurOutEndLine(); } #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) unsigned long long pos = in.tellg(); if ((pos == -1) || (pos >= filePos->end)) { break; }