X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=distancedb.cpp;h=27e278574493c89d0197d99cbe71c0c3dd03d0d9;hb=3914b0d6480f67df53b1e838f51c4e6155710434;hp=b5c22b35bf7a58addcff79651e6841b9506ec8e2;hpb=d04f948b1a2a1a2984fc4a45d04403b8c121c5bc;p=mothur.git diff --git a/distancedb.cpp b/distancedb.cpp index b5c22b3..27e2785 100644 --- a/distancedb.cpp +++ b/distancedb.cpp @@ -11,14 +11,15 @@ #include "database.hpp" #include "sequence.hpp" #include "distancedb.hpp" -#include "eachgapdist.h" +#include "onegapignore.h" + /**************************************************************************************************/ -DistanceDB::DistanceDB() { +DistanceDB::DistanceDB() : Database() { try { templateAligned = true; templateSeqsLength = 0; - distCalculator = new eachGapDist(); + distCalculator = new oneGapIgnoreTermGapDist(); } catch(exception& e) { m->errorOut(e, "DistanceDB", "DistanceDB"); @@ -29,7 +30,11 @@ DistanceDB::DistanceDB() { void DistanceDB::addSequence(Sequence seq) { try { //are the template sequences aligned - if (!isAligned(seq.getAligned())) { templateAligned = false; m->mothurOut(seq.getName() + " is not aligned. Sequences must be aligned to use the distance method."); m->mothurOutEndLine(); } + if (!isAligned(seq.getAligned())) { + templateAligned = false; + m->mothurOut(seq.getName() + " is not aligned. Sequences must be aligned to use the distance method."); + m->mothurOutEndLine(); + } if (templateSeqsLength == 0) { templateSeqsLength = seq.getAligned().length(); } @@ -45,13 +50,18 @@ void DistanceDB::addSequence(Sequence seq) { vector DistanceDB::findClosestSequences(Sequence* query, int numWanted){ try { vector topMatches; + Scores.clear(); bool templateSameLength = true; string sequence = query->getAligned(); vector dists; searchScore = -1.0; - if (numWanted > data.size()) { m->mothurOut("numwanted is larger than the number of template sequences, using "+ toString(data.size()) + "."); m->mothurOutEndLine(); numWanted = data.size(); } + if (numWanted > data.size()){ + m->mothurOut("numwanted is larger than the number of template sequences, using "+ toString(data.size()) + "."); + m->mothurOutEndLine(); + numWanted = data.size(); + } if (sequence.length() != templateSeqsLength) { templateSameLength = false; } @@ -79,6 +89,7 @@ vector DistanceDB::findClosestSequences(Sequence* query, int numWanted){ //fill topmatches with numwanted closest sequences indexes for (int i = 0; i < numWanted; i++) { topMatches.push_back(dists[i].seq2); + Scores.push_back(dists[i].dist); } }else { int bestIndex = 0; @@ -93,13 +104,14 @@ vector DistanceDB::findClosestSequences(Sequence* query, int numWanted){ smallDist = dist; } } - searchScore = smallDist; topMatches.push_back(bestIndex); + Scores.push_back(smallDist); } }else{ - m->mothurOut("cannot find closest matches using distance method for " + query->getName() + " without aligned template sequences of the same length."); m->mothurOutEndLine(); + m->mothurOut("cannot find closest matches using distance method for " + query->getName() + " without aligned template sequences of the same length."); + m->mothurOutEndLine(); exit(1); }