I am trying to see if OpenMM can be used to simulate a mixed-resolution model of proteins in which most of the protein is simulated using a coarse-grained Go model and the part near a ligand binding site is simulated using an all-atom force field (as discussed for example in Mamonov et al. JCTC 8, 2921 (2012)).
1. I would like to use Metropolis Monte Carlo for my dynamics. I've seen Chodera's MC integrator which does Gaussian particle displacements. Is there any way to extend this to do more intelligent MC moves e.g. backbone dihedral rotations? Would it work to override the step() method to implement the Metropolis algorithm with the moves in Python?
2. How might I go about combining two different force fields within the OpenMM framework? I want to set up the forces so that the all-atom regions interact with themselves and with the coarse-grained region through the force field, but at the same time interactions between the coarse-grained region are treated with the Go potential?
thanks
Justin Spiriti
mixed resolution Monte Carlo with OpenMM
- Justin Spiriti
- Posts: 3
- Joined: Tue Nov 10, 2015 5:30 pm
- Peter Eastman
- Posts: 2593
- Joined: Thu Aug 09, 2007 1:25 pm
Re: mixed resolution Monte Carlo with OpenMM
Hi Justin,
Sounds like an interesting project! You can implement any kind of MC moves you want, but that's probably going to be beyond the scope of what you can do with CustomIntegrator. It doesn't actually need to be any kind of an integrator. Just write a loop where you update the particle positions, have OpenMM compute the energy, and then decide whether to accept the step.
There are various ways you could write that, which will have different tradeoffs between speed and ease of writing it. Writing it in Python is easiest, but it will run the slowest. Doing it in C++ is a little more work, but will run faster. If you want the best performance possible, the thing to do is to implement this as a plugin and have the moves actually computed on the GPU. That will be a lot more work, though. (That's assuming you're using one of the GPU platforms. If you're using the CPU platform, this is much less important since there's no expensive data transfer involved.)
Regarding the force field question, are you implementing this through the Python ForceField class, or are you building the System directly yourself? Either way, I don't think there are any fundamental difficulties. The two different force fields will involve different "atom" types, so bonded forces will only get added where they're appropriate. Nonbonded interactions will be a little more complicated, since presumably the two different force fields will involve different interaction forms. Can you describe exactly what you want the nonbonded interactions to be, both within each region and between the two regions?
Peter
Sounds like an interesting project! You can implement any kind of MC moves you want, but that's probably going to be beyond the scope of what you can do with CustomIntegrator. It doesn't actually need to be any kind of an integrator. Just write a loop where you update the particle positions, have OpenMM compute the energy, and then decide whether to accept the step.
There are various ways you could write that, which will have different tradeoffs between speed and ease of writing it. Writing it in Python is easiest, but it will run the slowest. Doing it in C++ is a little more work, but will run faster. If you want the best performance possible, the thing to do is to implement this as a plugin and have the moves actually computed on the GPU. That will be a lot more work, though. (That's assuming you're using one of the GPU platforms. If you're using the CPU platform, this is much less important since there's no expensive data transfer involved.)
Regarding the force field question, are you implementing this through the Python ForceField class, or are you building the System directly yourself? Either way, I don't think there are any fundamental difficulties. The two different force fields will involve different "atom" types, so bonded forces will only get added where they're appropriate. Nonbonded interactions will be a little more complicated, since presumably the two different force fields will involve different interaction forms. Can you describe exactly what you want the nonbonded interactions to be, both within each region and between the two regions?
Peter
- Justin Spiriti
- Posts: 3
- Joined: Tue Nov 10, 2015 5:30 pm
Re: mixed resolution Monte Carlo with OpenMM
Right now I am practicing building Go-like models in OpenMM, by building the System directly myself in Python. I've just started working with OpenMM, and haven't yet started trying to build combined Go models/atomistic models.
I'm trying to duplicate the functions of a code we have which does mixed-resolution Monte Carlo sampling. There are two regions: the outer coarse-grained (CG) region and an inner all-atom (AA) region including the ligand. In the CG region, all the atoms are tracked during the simulation, but the only potent The interactions in the AA region come from an all-atom forcefield (the original code used OPLSAA, but I am looking to change this to an AMBER or CHARMM force field). The interactions between the two regions are also taken from the all-atom force field, using the positions of side chains in the CG region that are rigidly fixed to the backbone atoms. There is a GBSA implicit solvent model, but it encompasses only the atoms of the AA region. For obvious reasons, I'd prefer to use the automatic mechanisms in OpenMM to generate the topology and force field terms for the AA region and its interactions with the CG region, and only generate the interactions within the CG region manually, but I'm not sure exactly how to do this.
Although in my test simulations I was using the Chodera MC integrator, I had been hoping to use backbone dihedral rotations and related Monte Carlo moves to maintain the rigidity of the side chains in the coarse-grained region. I am finding however that using a Langevin Dynamics integrator causes the simulation to run about 20 times faster than the Chodera MC integrator, perhaps because the MC integrator has a lot of Python overhead. So I am open to doing Langevin or Brownian dynamics instead. In this latter case, I need to find a way to keep the side chains in the coarse-grained region rigid, perhaps by transforming all atoms except the backbone atoms into virtual sites dependent on the backbone atoms.
Thank you very much for your help.
Justin
I'm trying to duplicate the functions of a code we have which does mixed-resolution Monte Carlo sampling. There are two regions: the outer coarse-grained (CG) region and an inner all-atom (AA) region including the ligand. In the CG region, all the atoms are tracked during the simulation, but the only potent The interactions in the AA region come from an all-atom forcefield (the original code used OPLSAA, but I am looking to change this to an AMBER or CHARMM force field). The interactions between the two regions are also taken from the all-atom force field, using the positions of side chains in the CG region that are rigidly fixed to the backbone atoms. There is a GBSA implicit solvent model, but it encompasses only the atoms of the AA region. For obvious reasons, I'd prefer to use the automatic mechanisms in OpenMM to generate the topology and force field terms for the AA region and its interactions with the CG region, and only generate the interactions within the CG region manually, but I'm not sure exactly how to do this.
Although in my test simulations I was using the Chodera MC integrator, I had been hoping to use backbone dihedral rotations and related Monte Carlo moves to maintain the rigidity of the side chains in the coarse-grained region. I am finding however that using a Langevin Dynamics integrator causes the simulation to run about 20 times faster than the Chodera MC integrator, perhaps because the MC integrator has a lot of Python overhead. So I am open to doing Langevin or Brownian dynamics instead. In this latter case, I need to find a way to keep the side chains in the coarse-grained region rigid, perhaps by transforming all atoms except the backbone atoms into virtual sites dependent on the backbone atoms.
Thank you very much for your help.
Justin