]> git.donarmstrong.com Git - mothur.git/blobdiff - maligner.cpp
fixed homova command
[mothur.git] / maligner.cpp
index 5da4b9f9cece7a9e64dd4a5dd621477fc365e94e..6deeb8012c5f18937f65b889ad50e69852ece5c9 100644 (file)
@@ -71,6 +71,9 @@ string Maligner::chimeraMaligner(int chimeraPenalty, DeCalculator* decalc) {
                
                //trims seqs to first non gap char in all seqs and last non gap char in all seqs
                spotMap = decalc->trimSeqs(query, refSeqs);
+               
+               //you trimmed the whole sequence, skip
+               if (query->getAligned() == "") { return "no"; }
 
                vector<Sequence*> temp = refSeqs;
                temp.push_back(query);
@@ -175,6 +178,8 @@ vector<Sequence*> Maligner::minCoverageFilter(vector<Sequence*> ref){
                        //if coverage above minimum
                        if (coverage > minCoverage) {
                                newRefs.push_back(ref[i]);
+                       }else {
+                               delete ref[i];
                        }
                }
                
@@ -502,13 +507,13 @@ vector<Sequence*> Maligner::getBlastSeqs(Sequence* q, int num) {
                string leftQuery = queryUnAligned.substr(0, int(queryUnAligned.length() * 0.33)); //first 1/3 of the sequence
                string rightQuery = queryUnAligned.substr(int(queryUnAligned.length() * 0.66)); //last 1/3 of the sequence
 
-               Sequence* queryLeft = new Sequence(q->getName(), leftQuery);
-               Sequence* queryRight = new Sequence(q->getName(), rightQuery);
+               Sequence* queryLeft = new Sequence(q->getName()+"left", leftQuery);
+               Sequence* queryRight = new Sequence(q->getName()+"right", rightQuery);
                
                vector<int> tempIndexesRight = databaseLeft->findClosestMegaBlast(queryRight, num+1);
                vector<int> tempIndexesLeft = databaseLeft->findClosestMegaBlast(queryLeft, num+1);
-               
-               //if ((tempIndexesRight.size() != (num+1)) || (tempIndexesLeft.size() != (num+1)))  {  m->mothurOut("megablast returned " + toString(tempIndexesRight.size()) + " results for the right end, and " + toString(tempIndexesLeft.size()) + " for the left end. Needed " + toString(num+1) + ". Unable to porcess sequence " + q->getName()); m->mothurOutEndLine(); return refResults; }
+                       
+               //if ((tempIndexesRight.size() == 0) && (tempIndexesLeft.size() == 0))  {  m->mothurOut("megablast returned " + toString(tempIndexesRight.size()) + " results for the right end, and " + toString(tempIndexesLeft.size()) + " for the left end. Needed " + toString(num+1) + ". Unable to process sequence " + q->getName()); m->mothurOutEndLine(); return refResults; }
                
                vector<int> smaller;
                vector<int> larger;