X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=sparsedistancematrix.cpp;h=417e24ae94e4242db9a56db14fd2987714ab1712;hp=b315c487da1e39053307870560ca165d1068c49a;hb=615301e57c25e241356a9c2380648d117709458d;hpb=90708fe9701e3827e477c82fb3652539c3bf2a0d diff --git a/sparsedistancematrix.cpp b/sparsedistancematrix.cpp index b315c48..417e24a 100644 --- a/sparsedistancematrix.cpp +++ b/sparsedistancematrix.cpp @@ -39,8 +39,10 @@ int SparseDistanceMatrix::updateCellCompliment(ull row, ull col){ ull vcol = 0; //find the columns entry for this cell as well - for (int i = 0; i < seqVec[vrow].size(); i++) { if (seqVec[vrow][i].index == row) { vcol = i; break; } } - + for (int i = 0; i < seqVec[vrow].size(); i++) { + if (seqVec[vrow][i].index == row) { vcol = i; break; } + } + seqVec[vrow][vcol].dist = seqVec[row][col].dist; return 0; @@ -87,6 +89,30 @@ void SparseDistanceMatrix::addCell(ull row, PDistCell cell){ exit(1); } } +/***********************************************************************/ +int SparseDistanceMatrix::addCellSorted(ull row, PDistCell cell){ + try { + numNodes+=2; + if(cell.dist < smallDist){ smallDist = cell.dist; } + + seqVec[row].push_back(cell); + PDistCell temp(row, cell.dist); + seqVec[cell.index].push_back(temp); + + sortSeqVec(row); + sortSeqVec(cell.index); + + int location = -1; //find location of new cell when sorted + for (int i = 0; i < seqVec[row].size(); i++) { if (seqVec[row][i].index == cell.index) { location = i; break; } } + + return location; + } + catch(exception& e) { + m->errorOut(e, "SparseDistanceMatrix", "addCellSorted"); + exit(1); + } +} + /***********************************************************************/ ull SparseDistanceMatrix::getSmallestCell(ull& row){ @@ -98,7 +124,9 @@ ull SparseDistanceMatrix::getSmallestCell(ull& row){ for (int i = 0; i < seqVec.size(); i++) { for (int j = 0; j < seqVec[i].size(); j++) { - + + if (m->control_pressed) { return smallDist; } + //already checked everyone else in row if (i < seqVec[i][j].index) { @@ -147,3 +175,18 @@ int SparseDistanceMatrix::sortSeqVec(){ } /***********************************************************************/ +int SparseDistanceMatrix::sortSeqVec(int index){ + try { + + //saves time in getSmallestCell, by making it so you dont search the repeats + sort(seqVec[index].begin(), seqVec[index].end(), compareIndexes); + + return 0; + } + catch(exception& e) { + m->errorOut(e, "SparseDistanceMatrix", "sortSeqVec"); + exit(1); + } +} +/***********************************************************************/ +