]> git.donarmstrong.com Git - mothur.git/blobdiff - preclustercommand.cpp
added a few evenness calculators and fixed a couple of bugs in filter.seqs and pre...
[mothur.git] / preclustercommand.cpp
index 0275648066b99c55533e4aaacdcde5bb21edad5f..cfa91bfeedd4334adbe8bd262e476571f61f3ece 100644 (file)
@@ -134,39 +134,42 @@ int PreClusterCommand::execute(){
 
                //sort seqs by number of identical seqs
                alignSeqs.sort(comparePriority);
-       
+
                int count = 0;
                int i = 0;
-
                //think about running through twice...
                list<seqPNode>::iterator itList;
                list<seqPNode>::iterator itList2;
-               for (itList = alignSeqs.begin(); itList != alignSeqs.end(); itList++) {                 
+               for (itList = alignSeqs.begin(); itList != alignSeqs.end();) {
+                       
                        //try to merge it with all smaller seqs
-                       for (itList2 = alignSeqs.begin(); itList2 != alignSeqs.end(); itList2++) {
-                                       
+                       for (itList2 = alignSeqs.begin(); itList2 != alignSeqs.end();) {
+                               
                                if (m->control_pressed) { outFasta.close(); outNames.close(); remove(newFastaFile.c_str()); remove(newNamesFile.c_str());  return 0; }
-                                       
-                               if ((*itList).seq.getName() != (*itList2).seq.getName()) { //you don't want to merge with yourself
+                               
+                       
+                               if (itList->seq.getName() != itList2->seq.getName()) { //you don't want to merge with yourself
                                        //are you within "diff" bases
+                                       
                                        int mismatch = calcMisMatches((*itList).seq.getAligned(), (*itList2).seq.getAligned());
-                                               
+
                                        if (mismatch <= diffs) {
                                                //merge
                                                (*itList).names += ',' + (*itList2).names;
                                                (*itList).numIdentical += (*itList2).numIdentical;
-
-                                               alignSeqs.erase(itList2); itList2--;
+                                               
+                                               itList2 = alignSeqs.erase(itList2); //itList2--;
                                                count++;
-                                       }
-                               }
+                                       }else{ itList2++; }
+                               }else{ itList2++; }
+
                        }
-                       
+
                        //ouptut this sequence
                        printData(outFasta, outNames, (*itList));
                        
                        //remove sequence
-                       alignSeqs.erase(itList); itList--;
+                       itList = alignSeqs.erase(itList); 
                        
                        i++;
                        
@@ -179,7 +182,6 @@ int PreClusterCommand::execute(){
                outNames.close();
                
                if (m->control_pressed) {  remove(newFastaFile.c_str()); remove(newNamesFile.c_str());  return 0; }
-
                
                m->mothurOut("Total number of sequences before precluster was " + toString(numSeqs) + "."); m->mothurOutEndLine();
                m->mothurOut("pre.cluster removed " + toString(count) + " sequences."); m->mothurOutEndLine(); 
@@ -304,9 +306,9 @@ void PreClusterCommand::readNameFile(){
                        in >> firstCol >> secondCol; gobble(in);
                        names[firstCol] = secondCol;
                        int size = 1;
-                       while (secondCol.find_first_of(',') != -1) { 
-                               size++;
-                               secondCol = secondCol.substr(secondCol.find_first_of(',')+1, secondCol.length());
+
+                       for(int i=0;i<secondCol.size();i++){
+                               if(secondCol[i] == ','){        size++; }
                        }
                        sizes[firstCol] = size;
                }