remade writing output file function
authorAnatoly Titov <toluk@omrb.pnpi.spb.ru>
Thu, 22 Dec 2016 11:38:52 +0000 (14:38 +0300)
committerAnatoly Titov <toluk@omrb.pnpi.spb.ru>
Thu, 22 Dec 2016 11:38:52 +0000 (14:38 +0300)
src/domains.cpp

index 47ea5bdd7790b8044b037219e9640c2620c65502..80b32aa0021648420d75c6cc6ae43bc7ed631f03 100644 (file)
@@ -44,6 +44,7 @@
 #include <chrono>
 #include <omp.h>
 #include <thread>
+#include <string>
 
 #include <gromacs/trajectoryanalysis.h>
 #include <gromacs/pbcutil/pbc.h>
@@ -177,16 +178,23 @@ bool check_domsizes(std::vector< std::vector< int > > cd_domsizes, int cd_domain
     return false;
 }
 
-void print_domains(std::vector< std::vector< int > > pd_domains) {
-    int pd_for1 = pd_domains.size(), pd_for2;
-    for (int i = 0; i < pd_for1; i++) {
-        std::cout << "domain " << i + 1 << "\n";
-        pd_for2 = pd_domains[i].size();
-        for (int j = 0; j < pd_for2; j++) {
+void print_domains(std::vector< std::vector< int > > pd_domains, std::string fnNdx_) {
+    std::freopen(fnNdx_.c_str(), "w+", stdout);
+    int write_count;
+    for (int i = 0; i < pd_domains.size(); i++) {
+        std::cout << "[domain_" << i + 1 << "]\n";
+        write_count = 0;
+        for (int j = 0; j < pd_domains[i].size(); j++) {
+            write_count++;
+            if (write_count > 20) {
+                write_count -= 20;
+                std::cout << "\n";
+            }
             std::cout << pd_domains[i][j] << " ";
         }
-        std::cout << "\n";
+        std::cout << "\n\n";
     }
+    std::fclose(stdout);
 }
 
 /*! \brief
@@ -230,6 +238,7 @@ class Domains : public TrajectoryAnalysisModule
 
     private:
 
+        std::string                                                 fnNdx_;
         std::vector< std::vector< std::vector< node > > >           graph;
         std::vector< std::vector< int > >                           domains;
         std::vector< std::vector< int > >                           domsizes;
@@ -267,6 +276,10 @@ Domains::initOptions(IOptionsContainer          *options,
     options->addOption(SelectionOption("select")
                            .store(&selec).required()
                            .description("Atoms that are considered as part of the excluded volume"));
+    // Add option for output file name
+    options->addOption(FileNameOption("on").filetype(eftIndex).outputFile()
+                               .store(&fnNdx_).defaultBasename("rcore")
+                               .description("Index file from the rcore"));
     // Control input settings
     settings->setFlags(TrajectoryAnalysisSettings::efNoUserPBC);
     settings->setPBC(true);
@@ -416,7 +429,7 @@ Domains::finishAnalysis(int nframes)
 void
 Domains::writeOutput()
 {
-    print_domains(domains); // see function for details | numbers from index
+    print_domains(domains, fnNdx_); // see function for details | numbers from index
     std::cout << "\n END \n";
 }