X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=slibshuff.cpp;fp=slibshuff.cpp;h=92998e66ac1eadb442b5b0afc0cfee33835f902a;hb=0caf3fbabaa3ece404f8ce77f4c883dc5b1bf1dc;hp=0000000000000000000000000000000000000000;hpb=1b73ff67c83892a025e597dabd9df6fe7b58206a;p=mothur.git diff --git a/slibshuff.cpp b/slibshuff.cpp new file mode 100644 index 0000000..92998e6 --- /dev/null +++ b/slibshuff.cpp @@ -0,0 +1,116 @@ +/* + * slibshuff.cpp + * Mothur + * + * Created by Pat Schloss on 4/8/09. + * Copyright 2009 Patrick D. Schloss. All rights reserved. + * + */ + +#include "slibshuff.h" + +/***********************************************************************/ + +SLibshuff::SLibshuff(FullMatrix* D, int it, float co) : Libshuff(D, it, 0, co){} + +/***********************************************************************/ + +float SLibshuff::evaluatePair(int i, int j){ + return sCalculate(i,j); +} + +/***********************************************************************/ + +vector > SLibshuff::evaluateAll(){ + try{ + savedMins.resize(numGroups); + vector > dCXYValues(numGroups); + + for(int i=0;ierrorOut(e, "SLibshuff", "evaluateAll"); + exit(1); + } +} + +/***********************************************************************/ + +double SLibshuff::sCalculate(int x, int y){ + try{ + double sum = 0.0,t=0.0; + + minX = getMinX(x); + + if (m->control_pressed) { return sum; } + + minXY = getMinXY(x,y); + + if (m->control_pressed) { return sum; } + + sort(minX.begin(), minX.end()); + + if (m->control_pressed) { return sum; } + + sort(minXY.begin(), minXY.end()); + + if (m->control_pressed) { return sum; } + + int ix=0,iy=0; + while( (ix < groupSizes[x]) && (iy < groupSizes[x]) ) { + double h = (ix-iy)/double(groupSizes[x]); + + if(minX[ix] < minXY[iy]) { + sum += (minX[ix] - t)*h*h; + t = minX[ix++]; + } + else { + sum += (minXY[iy] - t)*h*h; + t = minXY[iy++]; + } + + } + + if(ix < groupSizes[x]) { + + while(ix < groupSizes[x]) { + double h = (ix-iy)/double(groupSizes[x]); + sum += (minX[ix] - t)*h*h; + t = minX[ix++]; + } + + } + else { + + while(iy < groupSizes[x]) { + double h = (ix-iy)/double(groupSizes[x]); + sum += (minXY[iy] - t)*h*h; + t = minXY[iy++]; + } + + } + + return sum; + } + catch(exception& e) { + m->errorOut(e, "SLibshuff", "sCalculate"); + exit(1); + } +} + +/***********************************************************************/