added two fittings algorythms comparison
authorAnatoly Titov <toluk@omrb.pnpi.spb.ru>
Tue, 8 Nov 2016 12:42:07 +0000 (15:42 +0300)
committerAnatoly Titov <toluk@omrb.pnpi.spb.ru>
Tue, 8 Nov 2016 12:42:07 +0000 (15:42 +0300)
src/rcore.cpp

index 5a438a2b5c93351987f063f3390790adba0fe861..69ecffb9bf865fd37a5a4b3ccd4f3e6961bb606b 100644 (file)
@@ -48,6 +48,8 @@
 #include <gromacs/utility/gmxomp.h>
 
 #include <gromacs/trajectoryanalysis.h>
+#include "gromacs/math/do_fit.h"
+#include "gromacs/utility/smalloc.h"
 #include "newfit.h"
 
 using namespace gmx;
@@ -189,6 +191,8 @@ AnalysisTemplate::finishAnalysis(int /*nframes*/)
     double noise_mid = 1;
     noise_mid = 9999;
 
+
+    /*
     std::chrono::time_point<std::chrono::system_clock> start1, end1;
     start1 = std::chrono::system_clock::now();
     while (noise_mid > epsi) {
@@ -235,7 +239,7 @@ AnalysisTemplate::finishAnalysis(int /*nframes*/)
             fitting_pairs.push_back(std::make_pair (i, i));
         }
     }
-
+*/
 
 
     // fitting constant chart calculation
@@ -273,6 +277,94 @@ AnalysisTemplate::finishAnalysis(int /*nframes*/)
 
 
 
+    std::chrono::time_point<std::chrono::system_clock> start1, end1, start2, end2;
+    FILE * pFile;
+    pFile = fopen ("/home/toluk/Develop/testing/output.out","w+");
+    double fitting_prec = 0.00001;
+    int k = 1000;
+    std::vector< std::vector < RVec > > fit_a, fit_b;
+    std::vector< std::vector < std::pair< int, int > > > fit_pairs;
+    RVec vec0, vec_x, vec_y, vec_z, vec_xx, vec_yy, vec_zz;
+    std::vector< int > natoms;
+    real *w_rls;
+    rvec **x, **xp;
+    bool flag;
+
+    fit_a.resize(k);
+    fit_b.resize(k);
+    fit_pairs.resize(k);
+    natoms.resize(k);
+    snew(w_rls, k);
+    snew(x, k);
+    snew(xp, k);
+
+    vec0[0] = 0; vec0[1] = 0; vec0[2] = 0;
+
+    vec_x[0] = 1; vec_x[1] = 0; vec_x[2] = 0;
+
+    vec_y[0] = 0; vec_y[1] = 1; vec_y[2] = 0;
+
+    vec_z[0] = 0; vec_z[1] = 0; vec_z[2] = 1;
+
+    vec_xx[0] = 1; vec_xx[1] = 1; vec_xx[2] = 0;
+
+    vec_yy[0] = 1; vec_yy[1] = -1; vec_yy[2] = 0;
+
+    vec_zz[0] = 0; vec_zz[1] = 0; vec_zz[2] = -1;
+
+    for (int i1 = 0; i1 < k; i1++) {
+        //fit_a[i1].resize(i1 + 1);
+        for (int i2 = 0; i2 < (i1 / 100) % 10; i2++) {
+            for (int i3 = 0; i3 < (i1 / 10) % 10; i3++) {
+                for (int i4 = 0; i4 < i1 % 10 ; i4++) {
+                    fit_a[i1].push_back(vec_x.scale(i4) + vec_y.scale(i3) + vec_z.scale(i2));
+                    fit_b[i1].push_back(vec_xx.scale(i4) + vec_yy.scale(i3) + vec_zz.scale(i2));
+                }
+            }
+        }
+    }
+
+    for (int i = 0; i < k; i++) {
+        natoms[i] = i;
+        w_rls[i] = 1;
+        snew(x[i], i + 1);
+        snew(xp[i], i + 1);
+    }
+
+    for (int i1 = 0; i1 < k; i1++) {
+        for (int i2 = 0; i2 < i1; i2++) {
+            fit_pairs[i1].push_back(std::make_pair(i2, i2));
+            copy_rvec(fit_a[i1][i2].as_vec(), x[i1][i2]);
+            copy_rvec(fit_b[i1][i2].as_vec(), xp[i1][i2]);
+        }
+    }
+
+    fprintf (pFile, "|   atoms   |   dist old   |   taken time   |   dist new   |   taken time   |\n");
+    for (int i = 0; i < k; i++) {
+
+        start1 = std::chrono::system_clock::now();
+        NewFit::new_fit(fit_a[i], fit_b[i], fit_pairs[i], fitting_prec);
+        end1 = std::chrono::system_clock::now();
+
+        flag = true;
+        start2 = std::chrono::system_clock::now();
+        try {
+            do_fit(natoms[i], w_rls, xp[i], x[i]);
+        }
+        catch (...) {
+            flag = false;
+        }
+        end2 = std::chrono::system_clock::now();
+
+        //std::cout << NewFit::dist(fit_a[i], fit_b[i], fit_pairs[i]) << " | " << std::chrono::duration_cast<std::chrono::milliseconds>(end1-start1).count() << "\n";
+        fprintf (pFile, "%d %f %ld msec %f %ld msec\n", i + 1, NewFit::dist_old_format(x[i], xp[i], fit_pairs[i]), std::chrono::duration_cast<std::chrono::milliseconds>(end2-start2).count(), NewFit::dist(fit_a[i], fit_b[i], fit_pairs[i]), std::chrono::duration_cast<std::chrono::milliseconds>(end1-start1).count());
+    }
+    fclose (pFile);
+
+
+
+
+
     std::cout << "analys finish\n";
 }