Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Generate Protein - Ligand System #81

Open
entropybit opened this issue May 21, 2024 · 5 comments
Open

Generate Protein - Ligand System #81

entropybit opened this issue May 21, 2024 · 5 comments

Comments

@entropybit
Copy link

Hi,

I am wondering what would be a clean way to create a protein ligand system where the ligand is parametrized with
one of the MLFFs ?

In the example it is shown how to create a mixed system but this requires already having a topology + system
parametrized without the MLFF.
Currently I am trying to do this by just creating a mixed system using one of the small molecule FFs together with
e.g. amber. So I get a system where my Protein is parametrized with amber and the Ligand with the small molecule FF.
I can then use this system and topology together with a list of atom ids for the ligand to use the mixed system functionality from
openmm-ml but this seems very messy.

Is there a better way, or am I maybe doing something horribly wrong in this approach to start with ?

@JMorado
Copy link
Contributor

JMorado commented May 21, 2024

@entropybit, you need a topology plus an OpenMM system at the MM level in order to create a mixed ML/MM system using openmm-ml. Also, since openmm-ml currently only supports mechanical embedding schemes, remember that the small molecule FF ought to have non-bonded parameters consistent with whatever protein FF you are using. Unless I'm missing something here, I think what you're doing is logical.

When you say this procedure seems very messy, what exactly do you mean? Is there any way you envision it could be made better?

@entropybit
Copy link
Author

entropybit commented May 21, 2024

Well, it would be nice to be able to directly create the mixed system with any protein FF and the MLFF similiar to the way a small molecule force field is added:

espaloma = EspalomaTemplateGenerator(molecules=lig_mol, forcefield='espaloma-0.3.2')
...
forcefield = ForceField('amber/protein.ff14SB.xml', 'amber/tip3p_standard.xml', 'amber/tip3p_HFE_multivalent.xml')
forcefield.registerTemplateGenerator(espaloma)

modeller = app.Modeller(complex_topology, complex_positions)
modeller.addSolvent(
    forcefield, model=config.water_model, 
    padding=config.solvent_padding, 
    ionicStrength=config.ionic_strength,
    residueTemplates=forcefield._templates
)
# Get topology and position
solvated_topology = modeller.getTopology()
solvated_positions = modeller.getPositions()
# Create system
solvated_system = forcefield.createSystem(
    solvated_topology,
    removeCMMotion = True, 
    ewaldErrorTolerance = config.pme_tol, 
    constraints = config.constraints, 
    rigidWater = True, 
    hydrogenMass = config.hmass,
    nonbondedMethod = config.nonbonded_method
)

I guess its not easily possible to also define a TemplateGenerator ?

@peastman
Copy link
Member

In the mixed system, the internal energy of the ligand is computed with the ML potential, but the interaction between the ligand and everything else is computed with the conventional force field. That's why you need to parameterize everything, including the ligand, with the force field. Or am I misunderstanding what you're asking?

@entropybit
Copy link
Author

@peastman No you are right, I just did not think about this....
Does it even make sense to do this ?

It would be better to also have the MLFF for the interactions between Ligand and Protein too. But I can see that this is not easily done. Unless the ML part is used to generate parameters in the language of an classical FF, like Espaloma does.
Mixing rules can not really be applied to the MLFF part right ?

@peastman
Copy link
Member

Right. Different ML potentials work in different ways, but most often they just throw all the atom positions into a neural network and produce an energy for each atom at the end. There's no way to separate that energy into different components, such as the part that came from the interaction between two molecules.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants