]> git.donarmstrong.com Git - mothur.git/blobdiff - filterseqscommand.cpp
started work on sffinfo command. fixed bug across all paralellized commands if the...
[mothur.git] / filterseqscommand.cpp
index 1c70b3e493fd2c3bf407746f8f97ddb276b801ea..fada19aeba83054f7d41b42d2827147e86215414 100644 (file)
@@ -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<char>(inFASTA),istreambuf_iterator<char>(), '>');
+                                       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<char>(inFASTA),istreambuf_iterator<char>(), '>');
+                               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<char>(inFASTA),istreambuf_iterator<char>(), '>');
+                                       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<char>(inFASTA),istreambuf_iterator<char>(), '>');
+                               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<long int> positions;
+               vector<unsigned long int> 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));