X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=filterseqscommand.cpp;h=fada19aeba83054f7d41b42d2827147e86215414;hb=956cdff34f2d609a7736838b1631cd7957580b8b;hp=1c70b3e493fd2c3bf407746f8f97ddb276b801ea;hpb=725a3d4ff2442c79bfde0a75ed3e0904edcf03b7;p=mothur.git diff --git a/filterseqscommand.cpp b/filterseqscommand.cpp index 1c70b3e..fada19a 100644 --- a/filterseqscommand.cpp +++ b/filterseqscommand.cpp @@ -102,6 +102,9 @@ FilterSeqsCommand::FilterSeqsCommand(string option) { // ...at some point should added some additional type checking... string temp; + hard = validParameter.validFile(parameters, "hard", true); if (hard == "not found") { hard = ""; } + else if (hard == "not open") { hard = ""; abort = true; } + temp = validParameter.validFile(parameters, "trump", false); if (temp == "not found") { temp = "*"; } trump = temp[0]; @@ -111,13 +114,13 @@ FilterSeqsCommand::FilterSeqsCommand(string option) { temp = validParameter.validFile(parameters, "processors", false); if (temp == "not found"){ temp = "1"; } convert(temp, processors); - hard = validParameter.validFile(parameters, "hard", true); if (hard == "not found") { hard = ""; } - else if (hard == "not open") { abort = true; } - - vertical = validParameter.validFile(parameters, "vertical", false); if (vertical == "not found") { vertical = "T"; } + vertical = validParameter.validFile(parameters, "vertical", false); + if (vertical == "not found") { + if ((hard == "") && (trump == '*') && (soft == 0)) { vertical = "T"; } //you have not given a hard file or set the trump char. + else { vertical = "F"; } + } numSeqs = 0; - } } @@ -138,11 +141,11 @@ void FilterSeqsCommand::help(){ m->mothurOut("For example: fasta=abrecovery.fasta-amazon.fasta \n"); m->mothurOut("The trump parameter .... The default is ...\n"); m->mothurOut("The soft parameter .... The default is ....\n"); - m->mothurOut("The hard parameter .... The default is ....\n"); - m->mothurOut("The vertical parameter .... The default is T.\n"); + m->mothurOut("The hard parameter allows you to enter a file containing the filter you want to use.\n"); + m->mothurOut("The vertical parameter removes columns where all sequences contain a gap character. The default is T.\n"); m->mothurOut("The filter.seqs command should be in the following format: \n"); - m->mothurOut("filter.seqs(fasta=yourFastaFile, trump=yourTrump, soft=yourSoft, hard=yourHard, vertical=yourVertical) \n"); - m->mothurOut("Example filter.seqs(fasta=abrecovery.fasta, trump=..., soft=..., hard=..., vertical=T).\n"); + m->mothurOut("filter.seqs(fasta=yourFastaFile, trump=yourTrump) \n"); + m->mothurOut("Example filter.seqs(fasta=abrecovery.fasta, trump=.).\n"); m->mothurOut("Note: No spaces between parameter labels (i.e. fasta), '=' and parameters (i.e.yourFasta).\n\n"); } @@ -256,23 +259,14 @@ int FilterSeqsCommand::filterSequences() { int outMode=MPI_MODE_CREATE|MPI_MODE_WRONLY; int inMode=MPI_MODE_RDONLY; - //char* outFilename = new char[filteredFasta.length()]; - //memcpy(outFilename, filteredFasta.c_str(), filteredFasta.length()); - char outFilename[1024]; strcpy(outFilename, filteredFasta.c_str()); - - //char* inFileName = new char[fastafileNames[s].length()]; - //memcpy(inFileName, fastafileNames[s].c_str(), fastafileNames[s].length()); - + char inFileName[1024]; strcpy(inFileName, fastafileNames[s].c_str()); MPI_File_open(MPI_COMM_WORLD, inFileName, inMode, MPI_INFO_NULL, &inMPI); //comm, filename, mode, info, filepointer MPI_File_open(MPI_COMM_WORLD, outFilename, outMode, MPI_INFO_NULL, &outMPI); - - //delete inFileName; - //delete outFilename; if (m->control_pressed) { MPI_File_close(&inMPI); MPI_File_close(&outMPI); return 0; } @@ -336,8 +330,9 @@ int FilterSeqsCommand::filterSequences() { #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) if(processors == 1){ ifstream inFASTA; + int numFastaSeqs; openInputFile(fastafileNames[s], inFASTA); - int numFastaSeqs=count(istreambuf_iterator(inFASTA),istreambuf_iterator(), '>'); + getNumSeqs(inFASTA, numFastaSeqs); inFASTA.close(); lines.push_back(new linePair(0, numFastaSeqs)); @@ -361,8 +356,9 @@ int FilterSeqsCommand::filterSequences() { if (m->control_pressed) { return 1; } #else ifstream inFASTA; + int numFastaSeqs; openInputFile(fastafileNames[s], inFASTA); - int numFastaSeqs=count(istreambuf_iterator(inFASTA),istreambuf_iterator(), '>'); + getNumSeqs(inFASTA, numFastaSeqs); inFASTA.close(); lines.push_back(new linePair(0, numFastaSeqs)); @@ -625,8 +621,9 @@ string FilterSeqsCommand::createFilter() { #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) if(processors == 1){ ifstream inFASTA; + int numFastaSeqs; openInputFile(fastafileNames[s], inFASTA); - int numFastaSeqs=count(istreambuf_iterator(inFASTA),istreambuf_iterator(), '>'); + getNumSeqs(inFASTA, numFastaSeqs); inFASTA.close(); numSeqs += numFastaSeqs; @@ -642,8 +639,9 @@ string FilterSeqsCommand::createFilter() { if (m->control_pressed) { return filterString; } #else ifstream inFASTA; + int numFastaSeqs; openInputFile(fastafileNames[s], inFASTA); - int numFastaSeqs=count(istreambuf_iterator(inFASTA),istreambuf_iterator(), '>'); + getNumSeqs(inFASTA, numFastaSeqs); inFASTA.close(); numSeqs += numFastaSeqs; @@ -874,7 +872,7 @@ int FilterSeqsCommand::createProcessesCreateFilter(Filters& F, string filename) int FilterSeqsCommand::setLines(string filename) { try { - vector positions; + vector positions; bufferSizes.clear(); ifstream inFASTA; @@ -885,7 +883,7 @@ int FilterSeqsCommand::setLines(string filename) { input = getline(inFASTA); if (input.length() != 0) { - if(input[0] == '>'){ long int pos = inFASTA.tellg(); positions.push_back(pos - input.length() - 1); } + if(input[0] == '>'){ unsigned long int pos = inFASTA.tellg(); positions.push_back(pos - input.length() - 1); } } } inFASTA.close(); @@ -893,7 +891,7 @@ int FilterSeqsCommand::setLines(string filename) { int numFastaSeqs = positions.size(); FILE * pFile; - long size; + unsigned long int size; //get num bytes in file pFile = fopen (filename.c_str(),"rb"); @@ -910,12 +908,12 @@ int FilterSeqsCommand::setLines(string filename) { for (int i = 0; i < processors; i++) { - long int startPos = positions[ i * numSeqsPerProcessor ]; + unsigned long int startPos = positions[ i * numSeqsPerProcessor ]; if(i == processors - 1){ numSeqsPerProcessor = numFastaSeqs - i * numSeqsPerProcessor; bufferSizes.push_back(size - startPos); }else{ - long int myEnd = positions[ (i+1) * numSeqsPerProcessor ]; + unsigned long int myEnd = positions[ (i+1) * numSeqsPerProcessor ]; bufferSizes.push_back(myEnd-startPos); } lines.push_back(new linePair(startPos, numSeqsPerProcessor));