OpenFreeEnergy / openfe

The Open Free Energy toolkit
https://docs.openfree.energy
MIT License
129 stars 17 forks source link

Predefined solvent component #661

Open pbuslaev opened 9 months ago

pbuslaev commented 9 months ago

I wonder if there is a way to generate a SolventComponent from a predefined structure? A use case might be a system with crystalographic waters, crystalographic ions, and cofactors, or a membrane protein.

IAlibay commented 9 months ago

@pbuslaev Thanks for opening up this issue.

Short answer: unfortunately we do not have a defined way to specifically handle an explicit SolventComponent, but some of the things you propose can currently be done via alternate means.

The long answer: implementing a means of reading in an explicit SolventComponent is something we want to get done, particularly for dealing with membrane proteins. It's something we hope to spend time on in the new year.

For crystallographic waters & ions - if there are present in your ProteinComponent and you are using a force field that has the right definition for those residues (I believe our defaults should cover basic ions), then those should be read in and handled properly. Solvation will then be applied on top of that.

For cofactors - for these you can load them in as seperate SmallMoleculeComponents. If you include these in both your states A and B then they will be handled as spectator molecules and treated with the chosen small molecule force field.

For membrane proteins - unfortunately this is not handled by OpenFE right now :( It's definitely on our to-do list though!

Hopefully this goes some way to help answer your question - happy to discsus more if necessary!

pbuslaev commented 9 months ago

Thanks @IAlibay! Please let me know if you would need any help with that. I would be happy to contribute some code/test.

I also have a similar, but slightly different question. Is it possible to provide a modified ligand/protein parameters? Let's say, that I created Interchange for a ligand and modified torsions on my own. Can I use this modified topology somehow with OpenFE? I can open a separate issue about this question, if you suggest. But creating Component from Open Force Field Interchange object seems to be very appealing to me, since it can help with both predefined SolventComponent and user-defined force field.

IAlibay commented 9 months ago

@pbuslaev - Components don't hold anything as fancy as FF information. Our current approach to providing custom FF is through what is implemented here: https://github.com/openmm/openmmforcefields/pull/288

If you pass your ffxml as an input to "small_molecule_forcefield" in the force field settings, then this will be picked up for use in this way.

pbuslaev commented 9 months ago

Ah, ok. Thanks for the explanation.

A couple of other questions:

  1. Do I understand correctly, that lipids (and actually waters and ions) can actually be considered as SmallMoleculeComponent as well?
  2. Let's say that I have a ligand and a cofactor in my system. For both I have generated modified OpenFF parameters and I now have two ffxml files. Can I provide a list of force fields to small_molecule_forcefield?