X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=pcoacommand.cpp;fp=pcoacommand.cpp;h=9375144bcb342faf364a38eee6eca63226099659;hb=605ab6fa594317a38f0df7bb6797740c735b2348;hp=cb2e758be2ac7aa6ca3afcd5079d2143b59e3ead;hpb=4b6e3f7b5543822a2cca4fb076ab6af2ce8ca62d;p=mothur.git diff --git a/pcoacommand.cpp b/pcoacommand.cpp index cb2e758..9375144 100644 --- a/pcoacommand.cpp +++ b/pcoacommand.cpp @@ -171,14 +171,13 @@ int PCOACommand::execute(){ vector e; vector > G = D; vector > copy_G; - //int rank = D.size(); - + m->mothurOut("\nProcessing...\n\n"); for(int count=0;count<2;count++){ - recenter(offset, D, G); if (m->control_pressed) { return 0; } - tred2(G, d, e); if (m->control_pressed) { return 0; } - qtli(d, e, G); if (m->control_pressed) { return 0; } + recenter(offset, D, G); if (m->control_pressed) { return 0; } + linearCalc.tred2(G, d, e); if (m->control_pressed) { return 0; } + linearCalc.qtli(d, e, G); if (m->control_pressed) { return 0; } offset = d[d.size()-1]; if(offset > 0.0) break; } @@ -327,13 +326,6 @@ double PCOACommand::calcPearson(vector< vector >& euclidDists, vector< v } /*********************************************************************************************************************************/ -inline double SIGN(const double a, const double b) -{ - return b>=0 ? (a>=0 ? a:-a) : (a>=0 ? -a:a); -} - -/*********************************************************************************************************************************/ - void PCOACommand::get_comment(istream& f, char begin, char end){ try { char d=f.get(); @@ -444,39 +436,6 @@ void PCOACommand::read(string fname, vector& names, vector > first, vector > second, vector >& product){ - try { - int first_rows = first.size(); - int first_cols = first[0].size(); - int second_cols = second[0].size(); - - product.resize(first_rows); - for(int i=0;ierrorOut(e, "PCOACommand", "matrix_mult"); - exit(1); - } - -} - -/*********************************************************************************************************************************/ - void PCOACommand::recenter(double offset, vector > D, vector >& G){ try { int rank = D.size(); @@ -499,8 +458,8 @@ void PCOACommand::recenter(double offset, vector > D, vectorerrorOut(e, "PCOACommand", "recenter"); @@ -511,182 +470,6 @@ void PCOACommand::recenter(double offset, vector > D, vector >& a, vector& d, vector& e){ - try { - double scale, hh, h, g, f; - - int n = a.size(); - - d.resize(n); - e.resize(n); - - for(int i=n-1;i>0;i--){ - int l=i-1; - h = scale = 0.0000; - if(l>0){ - for(int k=0;k= 0.0 ? -sqrt(h) : sqrt(h)); - e[i] = scale * g; - h -= f * g; - a[i][l] = f - g; - f = 0.0; - for(int j=0;jerrorOut(e, "PCOACommand", "tred2"); - exit(1); - } - -} - -/*********************************************************************************************************************************/ - -// This function is taken from Numerical Recipes in C++ by Press et al., 2nd edition, pg. 479 - -void PCOACommand::qtli(vector& d, vector& e, vector >& z) { - try { - int m, i, iter; - double s, r, p, g, f, dd, c, b; - - int n = d.size(); - for(int i=1;i<=n;i++){ - e[i-1] = e[i]; - } - e[n-1] = 0.0000; - - for(int l=0;l=l;i--){ - f = s * e[i]; - b = c * e[i]; - e[i+1] = (r=pythag(f,g)); - if(r==0.0){ - d[i+1] -= p; - e[m] = 0.0000; - break; - } - s = f / r; - c = g / r; - g = d[i+1] - p; - r = (d[i] - g) * s + 2.0 * c * b; - d[i+1] = g + ( p = s * r); - g = c * r - b; - for(int k=0;k= l) continue; - d[l] -= p; - e[l] = g; - e[m] = 0.0; - } - } while (m != l); - } - - int k; - for(int i=0;i= p){ - p=d[k=j]; - } - } - if(k!=i){ - d[k]=d[i]; - d[i]=p; - for(int j=0;jerrorOut(e, "PCOACommand", "qtli"); - exit(1); - } -} - -/*********************************************************************************************************************************/ - void PCOACommand::output(string fnameRoot, vector name_list, vector >& G, vector d) { try { int rank = name_list.size();