added window flow
authorAnatoly <Titov_AI@pnpi.nrcki.ru>
Mon, 26 Mar 2018 11:26:26 +0000 (14:26 +0300)
committerAnatoly <Titov_AI@pnpi.nrcki.ru>
Mon, 26 Mar 2018 11:26:26 +0000 (14:26 +0300)
src/spirals.cpp

index a69a0bb5533efedb4f316230b8e292fecc92987c..6d69a1ee24336609f2089b2af3336251a82f36bd 100644 (file)
@@ -319,6 +319,10 @@ class Spirals : public TrajectoryAnalysisModule
         std::vector< kernel_maxima >                        kernel;
         std::vector< std::vector< std::vector< int > > >    circles;
         std::vector< std::vector< std::vector< int > > >    groups;
+
+        std::vector< std::vector< kernel_maxima > >                     window_kernel;
+        std::vector< std::vector< std::vector< std::vector< int > > > > window_circles;
+
 };
 
 Spirals::Spirals()
@@ -359,6 +363,10 @@ Spirals::initAnalysis(const TrajectoryAnalysisSettings &settings,
     circles.resize(0);
     monomers.resize(0);
     groups.resize(0);
+
+
+    window_kernel.resize(0);
+    window_circles.resize(0);
 }
 
 void
@@ -367,11 +375,30 @@ Spirals::analyzeFrame(int frnr, const t_trxframe &fr, t_pbc *pbc,
 {
     const SelectionList &sel = pdata->parallelSelections(sel_);
     std::vector< RVec > temp;
+    std::vector< std::vector< RVec > > window_temp;
+    int window_temp2 = sel_.size() - window + 1;
+
     temp.resize(sel_.size());
     for (int i = 0; i < sel.size(); i++) {
         copy_rvec(sel[i].position(0).x(), temp[i]);
     }
 
+    if (window_kernel.size() == 0) {
+        window_circles.resize(window_temp2);
+        window_kernel.resize(window_temp2);
+        for (int i = 0; i < window_temp2; i++) {
+            window_circles[i].resize(0);
+            window_kernel[i].resize(0);
+        }
+        window_temp.resize(window_temp2);
+        for (int i = 0; i < window_temp.size(); i++) {
+            window_temp[i].resize(window);
+            for (int j = 0; j < window; j++) {
+                window_temp[i].push_back(temp[i + j]);
+            }
+        }
+    }
+
     monomers.resize(monomers.size() + 1);
     for (int i = 0; i < sel.size(); i++) {
         monomers.back().push_back(temp[i]);
@@ -383,6 +410,10 @@ Spirals::analyzeFrame(int frnr, const t_trxframe &fr, t_pbc *pbc,
     circles.resize(circles.size() + 1);
     make_circles(circles, temp, kernel);
 
+    for (int i = 0; i < window_temp2; i++) {
+        make_kernel(window_temp[i], epsi, window_kernel[i]);
+        make_circles(window_circles[i], window_temp[i], window_kernel[i]);
+    }
 
     /*groups.resize(groups.size() + 1);
     int itemp = circles.back().size() / 2;
@@ -458,6 +489,33 @@ Spirals::finishAnalysis(int /*nframes*/)
         std::fprintf(file, "\n\n");
     }
     std::fclose(file);
+
+    file = std::fopen("LocalSteps_Rspiral_Nmonomers.txt", "w+");
+    for (int m = 0; m < window_circles.front().size(); m++) {
+        for (int i = 0; i < window_circles[m].size(); i++) {
+            std::fprintf(file, "Frame # %6.2d | window # %3.2d\n", i, m);
+            std::fprintf(file, "Spiral steps:\n");
+            for (int j = 0; j < window_circles[m][i].size(); j++) {
+                std::fprintf(file, "%3.2f ", std::sqrt(distance2(window_kernel[m][i].krnl[window_circles[m][i][j].front() - 1], window_kernel[m][i].krnl[window_circles[m][i][j].back() - 1])));
+            }
+            std::fprintf(file, "\n");
+            std::fprintf(file, "Spiral radii\n");
+            for (int j = 0; j < window_circles[m][i].size(); j++) {
+                float temp = 0;
+                for (int k = 0; k < window_circles[m][i][j].size(); k++) {
+                    temp += std::sqrt(distance2(window_kernel[m][i].krnl[window_circles[m][i][j][k] - 1], monomers[i][window_circles[m][i][j][k] - 1 + m]));
+                    std::fprintf(file, "%3.2f ", std::sqrt(distance2(window_kernel[m][i].krnl[window_circles[m][i][j][k] - 1], monomers[i][window_circles[m][i][j][k] - 1 + m])));
+                }
+                std::fprintf(file, "average: %3.2f\n", temp / window_circles[m][i][j].size());
+            }
+            std::fprintf(file, "# of monomers per coil:\n");
+            for (int j = 0; j < window_circles[m][i].size(); j++) {
+                std::fprintf(file, "%3.2d ", window_circles[m][i][j].size());
+            }
+            std::fprintf(file, "\n\n");
+        }
+    }
+    std::fclose(file);
 }
 
 void