Merge "Fix SelectionParserParameter move constructor problem."
authorChristoph Junghans <junghans@votca.org>
Tue, 4 Sep 2012 16:40:50 +0000 (18:40 +0200)
committerGerrit Code Review <gerrit@gerrit.gromacs.org>
Tue, 4 Sep 2012 16:40:50 +0000 (18:40 +0200)
20 files changed:
.gitignore
share/template/.gitignore [deleted file]
src/gromacs/analysisdata/tests/.gitignore [deleted file]
src/gromacs/options/abstractoption.h
src/gromacs/options/basicoptions.h
src/gromacs/options/filenameoption.h
src/gromacs/options/options.cpp
src/gromacs/options/options.h
src/gromacs/options/tests/.gitignore [deleted file]
src/gromacs/options/tests/abstractoptionstorage.cpp
src/gromacs/selection/selectionoption.cpp
src/gromacs/selection/selectionoption.h
src/gromacs/selection/tests/.gitignore [deleted file]
src/gromacs/selection/tests/selectionoption.cpp
src/gromacs/trajectoryanalysis/modules/angle.cpp
src/ngmx/.gitignore [deleted file]
src/programs/g_ana/.gitignore [deleted file]
src/programs/mdrun/.gitignore [deleted file]
src/testutils/tests/.gitignore
src/tools/.gitignore [deleted file]

index 3c8df1e29a09d33d4da51efa34d32779ec4df2be..e61639eb9905fb607ab14aef4969961947946631 100644 (file)
@@ -1,3 +1,5 @@
+bin
+lib
 *~
 #*
 *.o
diff --git a/share/template/.gitignore b/share/template/.gitignore
deleted file mode 100644 (file)
index 2d63f39..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-template
-Makefile.*-*
diff --git a/src/gromacs/analysisdata/tests/.gitignore b/src/gromacs/analysisdata/tests/.gitignore
deleted file mode 100644 (file)
index 0e75d4c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-analysisdata-tests
index 9658e83986bc1bc8e13cdef0afa3ca21bb675edb..50a0c023f073b50b04d97a51b0a91576cd40e2b0 100644 (file)
@@ -79,7 +79,10 @@ typedef gmx_unique_ptr<AbstractOptionStorage>::type
  * point when the actual option is created.
  *
  * Subclasses should override createStorage() to create the correct type
- * of storage object.
+ * of storage object.  If they use their own info type derived from OptionInfo,
+ * they should also have a public typedef \c InfoType that specifies that
+ * info type.  This is required for Options::addOption() to return the correct
+ * info type.
  *
  * \ingroup module_options
  */
index 9307aa6edb00f1acb8d51b8b7aa56b79e40cecc7..5d6904536e22293a8bec960bd85cc4379b60cc7b 100644 (file)
@@ -47,6 +47,7 @@
 #include "../utility/gmxassert.h"
 
 #include "abstractoption.h"
+#include "basicoptioninfo.h"
 
 namespace gmx
 {
@@ -76,6 +77,9 @@ options.addOption(BooleanOption("pbc").store(&bPBC));
 class BooleanOption : public OptionTemplate<bool, BooleanOption>
 {
     public:
+        //! OptionInfo subclass corresponding to this option type.
+        typedef BooleanOptionInfo InfoType;
+
         //! Initializes an option with the given name.
         explicit BooleanOption(const char *name) : MyBase(name) {}
 
@@ -105,6 +109,9 @@ options.addOption(IntegerOption("box").store(box).vector());
 class IntegerOption : public OptionTemplate<int, IntegerOption>
 {
     public:
+        //! OptionInfo subclass corresponding to this option type.
+        typedef IntegerOptionInfo InfoType;
+
         //! Initializes an option with the given name.
         explicit IntegerOption(const char *name) : MyBase(name) {}
 
@@ -139,6 +146,9 @@ class IntegerOption : public OptionTemplate<int, IntegerOption>
 class DoubleOption : public OptionTemplate<double, DoubleOption>
 {
     public:
+        //! OptionInfo subclass corresponding to this option type.
+        typedef DoubleOptionInfo InfoType;
+
         //! Initializes an option with the given name.
         explicit DoubleOption(const char *name) : MyBase(name), bTime_(false)
         {
@@ -197,6 +207,9 @@ options.addOption(StringOption("type").enumValue(allowed).store(&str)
 class StringOption : public OptionTemplate<std::string, StringOption>
 {
     public:
+        //! OptionInfo subclass corresponding to this option type.
+        typedef StringOptionInfo InfoType;
+
         //! Initializes an option with the given name.
         explicit StringOption(const char *name)
             : MyBase(name), enumValues_(NULL), defaultEnumIndex_(-1),
index 701f4cb9423a164f23259efd2ec1abbd46d1bfb0..0b5e64bbda967cf4ee756a31260720fd54a8f163 100644 (file)
@@ -42,6 +42,7 @@
 #include <string>
 
 #include "abstractoption.h"
+#include "filenameoptioninfo.h"
 #include "optionfiletype.h"
 
 namespace gmx
@@ -62,6 +63,9 @@ class FileNameOptionStorage;
 class FileNameOption : public OptionTemplate<std::string, FileNameOption>
 {
     public:
+        //! OptionInfo subclass corresponding to this option type.
+        typedef FileNameOptionInfo InfoType;
+
         //! Initializes an option with the given name.
         explicit FileNameOption(const char *name)
             : MyBase(name), filetype_(eftUnknown),
index c1d7047790141e735e71b9ebcf7c0035c7506262..73ff1a20357fbb5d2073198308922327f251aa38 100644 (file)
@@ -150,7 +150,7 @@ void Options::addSubSection(Options *section)
     section->impl_->parent_ = this;
 }
 
-void Options::addOption(const AbstractOption &settings)
+OptionInfo *Options::addOption(const AbstractOption &settings)
 {
     AbstractOptionStoragePointer option(settings.createStorage());
     if (impl_->findOption(option->name().c_str()) != NULL)
@@ -158,6 +158,7 @@ void Options::addOption(const AbstractOption &settings)
         GMX_THROW(APIError("Duplicate option: " + option->name()));
     }
     impl_->options_.push_back(move(option));
+    return &impl_->options_.back()->optionInfo();
 }
 
 bool Options::isSet(const char *name) const
index 83c9bbd555f9d33573e81d1ab497e75c2a45c108..c6f264019aafa9d122e04d7d827c9aae98f0889e 100644 (file)
@@ -45,6 +45,9 @@
 #include <string>
 
 #include "../utility/common.h"
+#include "../utility/gmxassert.h"
+
+#include "optioninfo.h"
 
 namespace gmx
 {
@@ -144,11 +147,46 @@ class Options
         /*! \brief
          * Adds a recognized option to the collection.
          *
-         * \throws APIError if invalid option settings are provided.
+         * \param[in] settings Option description.
+         * \returns   OptionInfo object for the created option (never NULL).
+         * \throws    APIError if invalid option settings are provided.
+         *
+         * This method provides the internal implementation, but in most cases
+         * the templated method is called from user code.
+         * See the templated method for more details.
+         */
+        OptionInfo *addOption(const AbstractOption &settings);
+        /*! \brief
+         * Adds a recognized option to the collection.
+         *
+         * \tparam    OptionType Type of the options description object.
+         * \param[in] settings   Option description.
+         * \returns   OptionInfo object for the created option (never NULL).
+         * \throws    APIError if invalid option settings are provided.
+         *
+         * The return value is a pointer for more convenient use in callers:
+         * often callers need to declare the variable that will hold the return
+         * value in wider scope than would be achieved by declaring it at the
+         * site where addOption() is called.
+         * The returned pointer must not be freed.
          *
          * See \link Options class documentation \endlink for example usage.
+         *
+         * \libinternal
+         * \p OptionType::InfoType must specify a type that derives from
+         * OptionInfo and matches the type that is returned by
+         * AbstractOptionStorage::optionInfo() for the storage object that
+         * corresponds to \p OptionType.
          */
-        void addOption(const AbstractOption &settings);
+        template <class OptionType>
+        typename OptionType::InfoType *addOption(const OptionType &settings)
+        {
+            OptionInfo *info
+                = addOption(static_cast<const AbstractOption &>(settings));
+            GMX_ASSERT(info->isType<typename OptionType::InfoType>(),
+                       "Mismatching option info type declaration and implementation");
+            return info->toType<typename OptionType::InfoType>();
+        }
 
         //! Returns true if option \p name is set.
         bool isSet(const char *name) const;
diff --git a/src/gromacs/options/tests/.gitignore b/src/gromacs/options/tests/.gitignore
deleted file mode 100644 (file)
index 0672786..0000000
+++ /dev/null
@@ -1 +0,0 @@
-options-test
index 89350f19912926ca831c42dc158e2ced683433ea..c62c9aa247a6bd2c870a50568d9ab0a36134222a 100644 (file)
@@ -45,6 +45,7 @@
 #include <gtest/gtest.h>
 
 #include "gromacs/options/abstractoption.h"
+#include "gromacs/options/optioninfo.h"
 #include "gromacs/options/options.h"
 #include "gromacs/options/optionstoragetemplate.h"
 #include "gromacs/options/optionsassigner.h"
@@ -55,6 +56,16 @@ namespace
 {
 
 class MockOption;
+class MockOptionStorage;
+
+class MockOptionInfo : public gmx::OptionInfo
+{
+    public:
+        //! Creates an option info object for the given option.
+        explicit MockOptionInfo(MockOptionStorage *option);
+
+        MockOptionStorage &option();
+};
 
 /*! \internal \brief
  * Mock implementation of an option storage class for unit testing.
@@ -98,11 +109,8 @@ class MockOptionStorage : public gmx::OptionStorageTemplate<std::string>
             MyBase::commitValues();
         }
 
+        virtual gmx::OptionInfo &optionInfo() { return info_; }
         // These are not used.
-        virtual gmx::OptionInfo &optionInfo()
-        {
-            GMX_THROW(gmx::test::TestException("Not implemented"));
-        }
         virtual const char *typeString() const { return "mock"; }
         virtual std::string formatSingleValue(const std::string &/*value*/) const
         {
@@ -112,6 +120,9 @@ class MockOptionStorage : public gmx::OptionStorageTemplate<std::string>
         MOCK_METHOD1(convertValue, void(const std::string &value));
         MOCK_METHOD1(processSetValues, void(ValueList *values));
         MOCK_METHOD0(processAll, void());
+
+    private:
+        MockOptionInfo          info_;
 };
 
 /*! \internal \brief
@@ -122,32 +133,24 @@ class MockOptionStorage : public gmx::OptionStorageTemplate<std::string>
 class MockOption : public gmx::OptionTemplate<std::string, MockOption>
 {
     public:
+        //! OptionInfo subclass corresponding to this option type.
+        typedef MockOptionInfo InfoType;
+
         //! Initializes an option with the given name.
         explicit MockOption(const char *name)
-            : MyBase(name), storagePtr_(NULL)
+            : MyBase(name)
         {
         }
 
-        //! Sets an output pointer to give access to the created storage object.
-        MyClass &storageObject(MockOptionStorage **storagePtr)
-        { storagePtr_ = storagePtr; return me(); }
-
     private:
         virtual gmx::AbstractOptionStoragePointer createStorage() const
         {
-            MockOptionStorage *storage = new MockOptionStorage(*this);
-            if (storagePtr_ != NULL)
-            {
-                *storagePtr_ = storage;
-            }
-            return gmx::AbstractOptionStoragePointer(storage);
+            return gmx::AbstractOptionStoragePointer(new MockOptionStorage(*this));
         }
-
-        MockOptionStorage     **storagePtr_;
 };
 
 MockOptionStorage::MockOptionStorage(const MockOption &settings)
-    : MyBase(settings)
+    : MyBase(settings), info_(this)
 {
     using ::testing::_;
     using ::testing::Invoke;
@@ -156,6 +159,16 @@ MockOptionStorage::MockOptionStorage(const MockOption &settings)
         .WillByDefault(WithArg<0>(Invoke(this, &MockOptionStorage::addValue)));
 }
 
+MockOptionInfo::MockOptionInfo(MockOptionStorage *option)
+    : gmx::OptionInfo(option)
+{
+}
+
+MockOptionStorage &MockOptionInfo::option()
+{
+    return static_cast<MockOptionStorage &>(gmx::OptionInfo::option());
+}
+
 /*
  * Tests that finish() can set a required option even if the user has not
  * provided it.
@@ -164,11 +177,9 @@ TEST(AbstractOptionStorageTest, HandlesSetInFinish)
 {
     gmx::Options                options(NULL, NULL);
     std::vector<std::string>    values;
-    MockOptionStorage          *mock = NULL;
-    ASSERT_NO_THROW(options.addOption(
-                        MockOption("name").storageObject(&mock).required()
-                            .storeVector(&values)));
-    ASSERT_TRUE(mock != NULL);
+    MockOptionInfo *info = options.addOption(
+            MockOption("name").required().storeVector(&values));
+    MockOptionStorage *mock = &info->option();
     {
         ::testing::InSequence dummy;
         using ::testing::DoAll;
@@ -196,11 +207,9 @@ TEST(AbstractOptionStorageTest, HandlesValueRemoval)
 {
     gmx::Options                options(NULL, NULL);
     std::vector<std::string>    values;
-    MockOptionStorage          *mock = NULL;
-    ASSERT_NO_THROW(options.addOption(
-                        MockOption("name").storageObject(&mock)
-                            .storeVector(&values).multiValue()));
-    ASSERT_TRUE(mock != NULL);
+    MockOptionInfo *info = options.addOption(
+            MockOption("name").storeVector(&values).multiValue());
+    MockOptionStorage *mock = &info->option();
     {
         ::testing::InSequence dummy;
         using ::testing::ElementsAre;
@@ -237,11 +246,9 @@ TEST(AbstractOptionStorageTest, HandlesValueAddition)
 {
     gmx::Options                options(NULL, NULL);
     std::vector<std::string>    values;
-    MockOptionStorage          *mock = NULL;
-    ASSERT_NO_THROW(options.addOption(
-                        MockOption("name").storageObject(&mock)
-                            .storeVector(&values).multiValue()));
-    ASSERT_TRUE(mock != NULL);
+    MockOptionInfo *info = options.addOption(
+            MockOption("name").storeVector(&values).multiValue());
+    MockOptionStorage *mock = &info->option();
     {
         ::testing::InSequence dummy;
         using ::testing::DoAll;
@@ -279,11 +286,9 @@ TEST(AbstractOptionStorageTest, HandlesTooManyValueAddition)
 {
     gmx::Options                options(NULL, NULL);
     std::vector<std::string>    values;
-    MockOptionStorage          *mock = NULL;
-    ASSERT_NO_THROW(options.addOption(
-                        MockOption("name").storageObject(&mock)
-                            .storeVector(&values).valueCount(2)));
-    ASSERT_TRUE(mock != NULL);
+    MockOptionInfo *info = options.addOption(
+            MockOption("name").storeVector(&values).valueCount(2));
+    MockOptionStorage *mock = &info->option();
     {
         ::testing::InSequence dummy;
         using ::testing::DoAll;
@@ -317,11 +322,9 @@ TEST(AbstractOptionStorageTest, AllowsEmptyValues)
 {
     gmx::Options                options(NULL, NULL);
     std::vector<std::string>    values;
-    MockOptionStorage          *mock = NULL;
-    ASSERT_NO_THROW(options.addOption(
-                        MockOption("name").storageObject(&mock)
-                            .storeVector(&values).valueCount(0)));
-    ASSERT_TRUE(mock != NULL);
+    MockOptionInfo *info = options.addOption(
+            MockOption("name").storeVector(&values).valueCount(0));
+    MockOptionStorage *mock = &info->option();
     {
         ::testing::InSequence dummy;
         using ::testing::DoAll;
index 97570aeff6fbeab8e918cba084d99b9600349f92..911628028498e5cf9f6d6e406b2a0baecc5ebe8b 100644 (file)
@@ -66,10 +66,6 @@ SelectionOptionStorage::SelectionOptionStorage(const SelectionOption &settings)
 {
     GMX_RELEASE_ASSERT(!hasFlag(efOption_MultipleTimes),
                        "allowMultiple() is not supported for selection options");
-    if (settings.infoPtr_ != NULL)
-    {
-        *settings.infoPtr_ = &info_;
-    }
 }
 
 
index b02d082dc38052a8db617f0026e870416cdb64f2..e970f8916aeb4e299577b2df1388122ffe6487a0 100644 (file)
@@ -42,6 +42,7 @@
 #include "../options/abstractoption.h"
 #include "selection.h"
 #include "selectionenums.h"
+#include "selectionoptioninfo.h"
 
 namespace gmx
 {
@@ -60,10 +61,11 @@ class SelectionOptionStorage;
 class SelectionOption : public OptionTemplate<Selection, SelectionOption>
 {
     public:
+        //! OptionInfo subclass corresponding to this option type.
+        typedef SelectionOptionInfo InfoType;
+
         //! Initializes an option with the given name.
-        explicit SelectionOption(const char *name)
-            : MyBase(name), infoPtr_(NULL)
-        { }
+        explicit SelectionOption(const char *name) : MyBase(name) { }
 
         /*! \brief
          * Request velocity evaluation for output positions.
@@ -109,15 +111,6 @@ class SelectionOption : public OptionTemplate<Selection, SelectionOption>
         MyClass &dynamicOnlyWhole()
         { selectionFlags_.set(efSelection_DynamicOnlyWhole); return me(); }
 
-        /*! \brief
-         * Get an info object that can be used to alter the option after
-         * creation.
-         *
-         * \see SelectionOptionInfo
-         */
-        MyClass &getAdjuster(SelectionOptionInfo **infoPtr)
-        { infoPtr_ = infoPtr; return me(); }
-
     private:
         // Disable possibility to allow multiple occurrences, since it isn't
         // implemented.
@@ -130,7 +123,6 @@ class SelectionOption : public OptionTemplate<Selection, SelectionOption>
         virtual AbstractOptionStoragePointer createStorage() const;
 
         SelectionFlags          selectionFlags_;
-        SelectionOptionInfo   **infoPtr_;
 
         /*! \brief
          * Needed to initialize SelectionOptionStorage from this class without
diff --git a/src/gromacs/selection/tests/.gitignore b/src/gromacs/selection/tests/.gitignore
deleted file mode 100644 (file)
index 8a29fe3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-selection-test
index 51f15ba9b00fa1427ed56d8984d3dd4e818d73da..6795041bb86b10c79caf77dea5695fc53f6ca111 100644 (file)
@@ -163,11 +163,9 @@ TEST_F(SelectionOptionTest, HandlesTooFewSelections)
 TEST_F(SelectionOptionTest, HandlesAdjuster)
 {
     gmx::SelectionList sel;
-    gmx::SelectionOptionInfo *info;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                        SelectionOption("sel").storeVector(&sel).multiValue()
-                            .getAdjuster(&info)));
+    gmx::SelectionOptionInfo *info = options_.addOption(
+            SelectionOption("sel").storeVector(&sel).multiValue());
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
@@ -185,11 +183,9 @@ TEST_F(SelectionOptionTest, HandlesAdjuster)
 TEST_F(SelectionOptionTest, HandlesDynamicWhenStaticRequiredWithAdjuster)
 {
     gmx::Selection sel;
-    gmx::SelectionOptionInfo *info;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                        SelectionOption("sel").store(&sel)
-                            .getAdjuster(&info)));
+    gmx::SelectionOptionInfo *info = options_.addOption(
+            SelectionOption("sel").store(&sel));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
@@ -206,11 +202,9 @@ TEST_F(SelectionOptionTest, HandlesDynamicWhenStaticRequiredWithAdjuster)
 TEST_F(SelectionOptionTest, HandlesTooManySelectionsWithAdjuster)
 {
     gmx::SelectionList sel;
-    gmx::SelectionOptionInfo *info;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                        SelectionOption("sel").storeVector(&sel).multiValue()
-                            .getAdjuster(&info)));
+    gmx::SelectionOptionInfo *info = options_.addOption(
+            SelectionOption("sel").storeVector(&sel).multiValue());
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
@@ -228,11 +222,9 @@ TEST_F(SelectionOptionTest, HandlesTooManySelectionsWithAdjuster)
 TEST_F(SelectionOptionTest, HandlesTooFewSelectionsWithAdjuster)
 {
     gmx::SelectionList sel;
-    gmx::SelectionOptionInfo *info;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                        SelectionOption("sel").storeVector(&sel).multiValue()
-                            .getAdjuster(&info)));
+    gmx::SelectionOptionInfo *info = options_.addOption(
+            SelectionOption("sel").storeVector(&sel).multiValue());
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
@@ -301,11 +293,9 @@ TEST_F(SelectionOptionTest, HandlesDelayedOptionalSelection)
 TEST_F(SelectionOptionTest, HandlesDelayedSelectionWithAdjuster)
 {
     gmx::SelectionList sel;
-    gmx::SelectionOptionInfo *info;
     using gmx::SelectionOption;
-    ASSERT_NO_THROW(options_.addOption(
-                        SelectionOption("sel").storeVector(&sel).valueCount(3)
-                            .getAdjuster(&info)));
+    gmx::SelectionOptionInfo *info = options_.addOption(
+            SelectionOption("sel").storeVector(&sel).valueCount(3));
     setManager();
 
     gmx::OptionsAssigner assigner(&options_);
index 1cab8811bd717f6271a57d0e65f7b66a0552a8e1..be3ba86723ca09dc67f374769f94ebaaf7a340a2 100644 (file)
@@ -155,11 +155,11 @@ Angle::initOptions(Options *options, TrajectoryAnalysisSettings * /*settings*/)
     options->addOption(BooleanOption("dumpd").store(&bDumpDist_)
         .description("Write also distances with -od"));
 
-    options->addOption(SelectionOption("group1").multiValue().required()
-        .dynamicOnlyWhole().storeVector(&sel1_).getAdjuster(&sel1info_)
+    sel1info_ = options->addOption(SelectionOption("group1").multiValue()
+        .required().dynamicOnlyWhole().storeVector(&sel1_)
         .description("First analysis/vector selection"));
-    options->addOption(SelectionOption("group2").multiValue()
-        .dynamicOnlyWhole().storeVector(&sel2_).getAdjuster(&sel2info_)
+    sel2info_ = options->addOption(SelectionOption("group2").multiValue()
+        .dynamicOnlyWhole().storeVector(&sel2_)
         .description("Second analysis/vector selection"));
 }
 
diff --git a/src/ngmx/.gitignore b/src/ngmx/.gitignore
deleted file mode 100644 (file)
index 43a470b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-g_highway
-g_logo
-g_xrama
-ngmx
diff --git a/src/programs/g_ana/.gitignore b/src/programs/g_ana/.gitignore
deleted file mode 100644 (file)
index e25cc71..0000000
+++ /dev/null
@@ -1 +0,0 @@
-g_ana
diff --git a/src/programs/mdrun/.gitignore b/src/programs/mdrun/.gitignore
deleted file mode 100644 (file)
index d4822df..0000000
+++ /dev/null
@@ -1 +0,0 @@
-mdrun
index 8d1061e1f86aa63c85fb5dcdb2da41895eb34f84..4236747b4e55d9f7b755c5791c1f6c3e5e25ebb4 100644 (file)
@@ -1,2 +1 @@
-testutils-test
 refdata
diff --git a/src/tools/.gitignore b/src/tools/.gitignore
deleted file mode 100644 (file)
index 87fe1df..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-do_dssp
-editconf
-eneconv
-g_anadock
-g_anaeig
-g_analyze
-g_angle
-g_bar
-g_bond
-g_bundle
-g_chi
-g_cluster
-g_clustsize
-g_confrms
-g_covar
-g_current
-g_density
-g_densmap
-g_dielectric
-g_dih
-g_dipoles
-g_disre
-g_dist
-g_dyndom
-g_enemat
-g_energy
-g_filter
-g_gyrate
-g_h2order
-g_hbond
-g_helix
-g_helixorient
-g_kinetics
-g_lie
-g_mdmat
-g_membed
-g_mindist
-g_morph
-g_msd
-g_nmeig
-g_nmens
-g_nmtraj
-g_order
-g_polystat
-g_potential
-g_principal
-g_rama
-g_rdf
-g_rms
-g_rmsdist
-g_rmsf
-g_rotacf
-g_rotmat
-g_saltbr
-g_sas
-g_sdf
-g_select
-g_sgangle
-g_sham
-g_sigeps
-g_sorient
-g_spatial
-g_spol
-g_tcaf
-g_traj
-g_tune_pme
-g_vanhove
-g_velacc
-g_wham
-g_wheel
-genbox
-genconf
-genion
-genrestr
-make_edi
-make_ndx
-mk_angndx
-trjcat
-trjconv
-trjorder
-xpm2ps