From 71d905738b3fb1b863e14c485f0206d8e98c1017 Mon Sep 17 00:00:00 2001 From: Geoff Hutchison Date: Fri, 9 Feb 2024 22:58:12 -0500 Subject: [PATCH] Based on feedback, only use OB (library) or obmm if no Python (#1602) * Based on feedback, only use OB (library) or obmm if no Python The new Python energy scripts are preferred - more flexible (e.g., Open Babel or RDKit) - can use requirements via pip / conda Signed-off-by: Geoff Hutchison --- avogadro/qtplugins/forcefield/forcefield.cpp | 13 +++++++------ avogadro/qtplugins/forcefield/obenergy.cpp | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/avogadro/qtplugins/forcefield/forcefield.cpp b/avogadro/qtplugins/forcefield/forcefield.cpp index 9dcf0fcbf6..0ec38eb4be 100644 --- a/avogadro/qtplugins/forcefield/forcefield.cpp +++ b/avogadro/qtplugins/forcefield/forcefield.cpp @@ -65,18 +65,19 @@ Forcefield::Forcefield(QObject* parent_) m_gradientTolerance = settings.value("gradientTolerance", 1.0e-4).toDouble(); settings.endGroup(); + // prefer to use Python interface scripts if available + refreshScripts(); + // add the openbabel calculators in case they don't exist #ifdef BUILD_GPL_PLUGINS // These directly use Open Babel and are fast + qDebug() << " registering GPL plugins"; Calc::EnergyManager::registerModel(new OBEnergy("MMFF94")); Calc::EnergyManager::registerModel(new OBEnergy("UFF")); Calc::EnergyManager::registerModel(new OBEnergy("GAFF")); -#endif - - refreshScripts(); - -#ifndef BUILD_GPL_PLUGINS - // These call obmm and can be slow +#else + // These call obmm and can be slower + qDebug() << " registering obmm plugins"; Calc::EnergyManager::registerModel(new OBMMEnergy("MMFF94")); Calc::EnergyManager::registerModel(new OBMMEnergy("UFF")); Calc::EnergyManager::registerModel(new OBMMEnergy("GAFF")); diff --git a/avogadro/qtplugins/forcefield/obenergy.cpp b/avogadro/qtplugins/forcefield/obenergy.cpp index de28ede83e..011a6c2a1d 100644 --- a/avogadro/qtplugins/forcefield/obenergy.cpp +++ b/avogadro/qtplugins/forcefield/obenergy.cpp @@ -18,6 +18,7 @@ #include #include +#include #include #include @@ -43,12 +44,25 @@ OBEnergy::OBEnergy(const std::string& method) : m_identifier(method), m_name(method), m_molecule(nullptr) { d = new Private; + + // make sure we set the Open Babel variables for data files +#ifdef _WIN32 + QByteArray dataDir = + QString(QCoreApplication::applicationDirPath() + "/data").toLocal8Bit(); + qputenv("BABEL_DATADIR", dataDir); +#endif // Ensure the plugins are loaded OBPlugin::LoadAllPlugins(); d->m_forceField = static_cast( OBPlugin::GetPlugin("forcefields", method.c_str())); + qDebug() << "OBEnergy: method: " << method.c_str(); + if (d->m_forceField == nullptr) { + qDebug() << "OBEnergy: method not found: " << method.c_str(); + qDebug() << OBPlugin::ListAsString("forcefields").c_str(); + } + if (method == "UFF") { m_description = tr("Universal Force Field"); m_elements.reset();