openmm / openmmexampleplugin

An example of how to write a plugin for OpenMM
30 stars 22 forks source link

"LangevinIntegrator is not a member of OpenMM" error on make PythonInstall #28

Open SCMusson opened 2 years ago

SCMusson commented 2 years ago

I have come across an error that is really perplexing me.

I have tried to create a custom integrator. It compiles, and tests are all successful. But when I come to make the python wrappers i run into issues with this error code:

ExamplePluginWrapper.cpp: In function ‘void* _p_OpenMM__LangevinIntegratorTo_p_OpenMM__Integrator(void*, int*)’:
ExamplePluginWrapper.cpp:10474:55: error: ‘LangevinIntegrator’ is not a member of ‘OpenMM’
     return (void *)((OpenMM::Integrator *)  ((OpenMM::LangevinIntegrator *) x));
                                                       ^~~~~~~~~~~~~~~~~~
ExamplePluginWrapper.cpp:10474:55: note: suggested alternative: ‘DrudeLangevinIntegrator’
     return (void *)((OpenMM::Integrator *)  ((OpenMM::LangevinIntegrator *) x));
                                                       ^~~~~~~~~~~~~~~~~~
                                                       DrudeLangevinIntegrator
ExamplePluginWrapper.cpp:10474:75: error: expected primary-expression before ‘)’ token
     return (void *)((OpenMM::Integrator *)  ((OpenMM::LangevinIntegrator *) x));
                                                                           ^
ExamplePluginWrapper.cpp:10474:77: error: expected ‘)’ before ‘x’
     return (void *)((OpenMM::Integrator *)  ((OpenMM::LangevinIntegrator *) x));
                                                                             ^
ExamplePluginWrapper.cpp:10474:80: error: expected ‘)’ before ‘;’ token
     return (void *)((OpenMM::Integrator *)  ((OpenMM::LangevinIntegrator *) x));
                                                                                ^

I haven't touched OpenMM::LangevinIntegrator and it doesn't have a problem with anything else

SCMusson commented 2 years ago

To be clear, my exampleplugin.i file has these imports:

#include "MyIntegrator.h"
#include "OpenMM.h"
#include "OpenMMAmoeba.h"
#include "OpenMMDrude.h"
#include "openmm/RPMDIntegrator.h"
#include "openmm/RPMDMonteCarloBarostat.h"

If I remove the "#include "OpenMMDrude.h" I get the same error with "DrudeNoseHooverIntegration" is not a member of "OpenMM" so I assume that it is a matter of including the correct file.

I have tried "#inculde "openmm/LangevinIntegrator.h", "#include "openmm/Integrator.h" without success

SCMusson commented 2 years ago

I made the most disturbing hacky fix for this. I removed all mentions of LangevinIntegrator from a copy of OpenMMSwigHeaders.i called myOpenMMSwigHeaders.i and imported this instead of OpenMMSwigHeaders.i. I hate this solution and hate myself for not having the energy to debug this further. If anyone can suggest a real solution please let me know.