Info class to name and generate the densityfitting module
authorChristian Blau <cblau@gwdg.de>
Thu, 8 Aug 2019 15:00:59 +0000 (17:00 +0200)
committerMark Abraham <mark.j.abraham@gmail.com>
Wed, 14 Aug 2019 20:12:36 +0000 (22:12 +0200)
Similar to the trajectoryanalysismodules, use an info class to name and
generate the densityfitting module.

Naming of related mdp options based on the module name.

Change-Id: Iaaffb28bba3633421040f3f9bf5eb6463398f731

src/gromacs/applied_forces/densityfitting.cpp
src/gromacs/applied_forces/densityfitting.h
src/gromacs/applied_forces/tests/densityfitting.cpp

index 8a4825ff3e9f46653140f53b37b08f2441d7773a..b18486d714f8275fa32e36bfc00d2cdc21ae2ed0 100644 (file)
@@ -84,7 +84,7 @@ class DensityFittingOptions : public IMdpOptionProvider
          */
         void buildMdpOutput(KeyValueTreeObjectBuilder *builder) const override
         {
-            builder->addValue<bool>(inputSectionName_ + "-" + c_activeTag_,
+            builder->addValue<bool>(DensityFittingModuleInfo::name_ + "-" + c_activeTag_,
                                     active_);
         }
 
@@ -93,7 +93,7 @@ class DensityFittingOptions : public IMdpOptionProvider
          */
         void initMdpOptions(IOptionsContainerWithSections *options) override
         {
-            auto section = options->addSection(OptionSection(inputSectionName_.c_str()));
+            auto section = options->addSection(OptionSection(DensityFittingModuleInfo::name_.c_str()));
             section.addOption(
                     BooleanOption(c_activeTag_.c_str()).store(&active_));
         }
@@ -114,7 +114,6 @@ class DensityFittingOptions : public IMdpOptionProvider
 
     private:
         //! The name of the density-fitting module
-        const std::string     inputSectionName_ = "density-guided-simulation";
 
         const std::string     c_activeTag_             = "active";
         bool                  active_                  = false;
@@ -166,9 +165,11 @@ class DensityFitting final : public IMDModule,
 
 }   // namespace
 
-std::unique_ptr<IMDModule> createDensityFittingModule()
+std::unique_ptr<IMDModule> DensityFittingModuleInfo::create()
 {
     return std::unique_ptr<IMDModule>(new DensityFitting());
 }
 
+const std::string DensityFittingModuleInfo::name_ = "density-guided-simulation";
+
 } // namespace gmx
index 9360dfc042abbf93b358838e63d78284fb498fa2..5be641f3157098ca0382cc6c15fdbb685854dc3a 100644 (file)
 #define GMX_APPLIED_FORCES_DENSITYFITTING_H
 
 #include <memory>
+#include <string>
 
 namespace gmx
 {
 
 class IMDModule;
 
-/*! \brief
- * Creates a module for applying forces to fit a given density.
+/*! \libinternal \brief Information about the density fitting module.
  *
- * Fitting an all-atom structure into an experimental cryo-EM density map is a
- * typical application.
+ * Provides name and method to create a density fitting module.
  */
-std::unique_ptr<IMDModule> createDensityFittingModule();
+struct DensityFittingModuleInfo
+{
+    /*! \brief
+     * Creates a module for applying forces to fit a given density.
+     *
+     * Fitting an all-atom structure into an experimental cryo-EM density map is a
+     * typical application.
+     */
+    static std::unique_ptr<IMDModule> create();
+    //! The name of the module
+    static const std::string          name_;
+};
 
 } // namespace gmx
 
index 7956f844f0122988fe1c9bde5f2deeacd6c8c126..0791ca8aad6005e25942d109f4f9c09510d82c45 100644 (file)
@@ -73,7 +73,7 @@ namespace
 
 TEST(DensityFittingTest, Options)
 {
-    auto densityFittingModule(gmx::createDensityFittingModule());
+    auto densityFittingModule(gmx::DensityFittingModuleInfo::create());
 
     // Prepare MDP inputs
     gmx::KeyValueTreeBuilder mdpValueBuilder;