Simultaneous Pulling of Multiple Protein Segments to Different Target Distances in GROMACS

Hello,

I’m interested in pulling multiple parts of a protein to different distances within a simulation. Is it possible to pull each part simultaneously but to different target distances?

For example:

  • Pull part1 to 4 nm,
  • Pull part2 to 6 nm,
  • Pull part3 to 5 nm.

The goal is to stop each pull once the specified distance is reached for each respective part. How should I set this up in GROMACS?

Here’s a sample configuration I’ve tried, but I’m unsure if it’s correct for pulling multiple parts to different distances:

; Pull settings for part1
pull-coord1-type        = umbrella             ; Apply umbrella pulling
pull-coord1-groups      = 0 1                  ; Pulling relative to reference (group 0 to group 1)
pull-coord1-geometry    = direction            ; Pull in a specified direction
pull-coord1-start       = yes                  ; Start from initial configuration
pull-coord1-vec         = 0 -1 0               ; Pull along specified vector
pull-coord1-rate        = 0.01                 ; 0.01 nm per ps = 10 nm per ns
pull-coord1-k           = 3                    ; Force constant (kJ mol^-1 nm^-2)

; Pull settings for part2
pull-coord2-type        = umbrella
pull-coord2-groups      = 0 2                  ; Reference and pulled groups
pull-coord2-geometry    = direction
pull-coord2-start       = yes
pull-coord2-vec         = 0 -1 0
pull-coord2-rate        = 0.01
pull-coord2-k           = 3

; Pull settings for part3
pull-coord3-type        = umbrella
pull-coord3-groups      = 0 4
pull-coord3-geometry    = direction
pull-coord3-start       = yes
pull-coord3-vec         = 0 -1 0
pull-coord3-rate        = 0.01
pull-coord3-k           = 3

Thanks

It’s not possible, as such, to pull until a specific distance and then stop. But you are on the right track with your settings. I think there are two ways to do this, with pros and cons. Alternative 1:

; Pull settings for part1
pull-coord1-type        = umbrella             ; Apply umbrella pulling
pull-coord1-groups      = 0 1                  ; Pulling relative to reference (group 0 to group 1)
pull-coord1-geometry    = direction            ; Pull in a specified direction
pull-coord1-start       = yes                  ; Start from initial configuration
pull-coord1-vec         = 0 -1 0               ; Pull along specified vector
pull-coord1-rate        = 0.004                 ; 0.01 nm per ps = 10 nm per ns
pull-coord1-k           = 100                    ; Force constant (kJ mol^-1 nm^-2)

; Pull settings for part2
pull-coord2-type        = umbrella
pull-coord2-groups      = 0 2                  ; Reference and pulled groups
pull-coord2-geometry    = direction
pull-coord2-start       = yes
pull-coord2-vec         = 0 -1 0
pull-coord2-rate        = 0.006
pull-coord2-k           = 100

; Pull settings for part3
pull-coord3-type        = umbrella
pull-coord3-groups      = 0 4
pull-coord3-geometry    = direction
pull-coord3-start       = yes
pull-coord3-vec         = 0 -1 0
pull-coord3-rate        = 0.005
pull-coord3-k           = 100

In this case, the rate is adapted according to the distances you want to pull (above) and assumes a 10 ns long simulation. This assumes that the starting distances are actually 0 (which is probably not correct). I increased the pull force constants, to make sure that the pulled groups follow the reference pull positions reasonably closely. This might have to be raised even further if the end distances are not quite what you would want (i.e., that the pull distance is correct, but the pulled groups have not yet reached that position, since they are pulled too weakly).

The second alternative would be:

; Pull settings for part1
pull-coord1-type        = umbrella             ; Apply umbrella pulling
pull-coord1-groups      = 0 1                  ; Pulling relative to reference (group 0 to group 1)
pull-coord1-geometry    = direction            ; Pull in a specified direction
pull-coord1-start       = no                  ; Start from initial configuration
pull-coord1-vec         = 0 -1 0               ; Pull along specified vector
pull-coord1-rate        = 0                 ; 0.01 nm per ps = 10 nm per ns
pull-coord1-init        = 4
pull-coord1-k           = 20                    ; Force constant (kJ mol^-1 nm^-2)

; Pull settings for part2
pull-coord2-type        = umbrella
pull-coord2-groups      = 0 2                  ; Reference and pulled groups
pull-coord2-geometry    = direction
pull-coord2-start       = no                  ; Start from initial configuration
pull-coord2-vec         = 0 -1 0               ; Pull along specified vector
pull-coord2-rate        = 0                 ; 0.01 nm per ps = 10 nm per ns
pull-coord2-init        = 6
pull-coord2-k           = 20                    ; Force constant (kJ mol^-1 nm^-2)

; Pull settings for part3
pull-coord3-type        = umbrella
pull-coord3-groups      = 0 4
pull-coord3-geometry    = direction
pull-coord3-start       = no                  ; Start from initial configuration
pull-coord3-vec         = 0 -1 0               ; Pull along specified vector
pull-coord3-rate        = 0                 ; 0.01 nm per ps = 10 nm per ns
pull-coord3-init        = 5
pull-coord3-k           = 20                    ; Force constant (kJ mol^-1 nm^-2)

In this case the simulation time does not matter. The pull reference (target) positions will be at a constant distances. The pull force will pull them towards that position and then they will remain there. In this case, I also increased the pull force, to overcome potential barriers, but since the distances are quite large you might have to tweak the pull force constants.

Both these alternative methods will probably have to be tweaked. There are also ways to combine them, e.g., by not using pull-coord?-start = yes in the first alternative, but instead set the starting distance and modify the rates accordingly, so that you reach your target point by the end of the simulation.

I appreciate your detailed reply!

Hi MagnusL,

I hope you’re all doing well. I have a few basic questions to clarify my understanding regarding pulling simulations in GROMACS.

Scenario:

I want to use pull-coord1-geometry = distance to pull an atom in the negative Y direction. Below is the code snippet I’m using:

; Define pull coordinates  
pull-coord1-type       = umbrella         ; Umbrella pulling  
pull-coord1-groups     = 1 2              ; 1 for reference, 2 for the atom to be pulled  
pull-coord1-geometry   = distance         ; Distance geometry  
pull-coord1-dim        = N Y N            ; Only consider the Y component of the distance  
pull-coord1-start      = yes              ; Start from the initial configuration  
pull-coord1-rate       = 0.001            ; 0.001 nm per ps = 0.1 nm per ns  
pull-coord1-k          = 1000             ; Force constant in kJ mol^-1 nm^-2

This code works as expected when the distance between the reference and the target group is positive (i.e., the target is below the reference in the Y direction, and I’m pulling the target away). However, it doesn’t seem to work if the setup is reversed (i.e., pulling the target toward the reference group in the Y direction).
This code works perfectly:

; Pull settings for part1
pull-coord1-type        = umbrella             ; Apply umbrella pulling
pull-coord1-groups      = 1 2                  ; Pulling relative to reference (group 0 to group 1)
pull-coord1-geometry    = direction            ; Pull in a specified direction
pull-coord1-start       = yes                  ; Start from initial configuration
pull-coord1-vec         = 0 -1 0               ; Pull along specified vector
pull-coord1-rate        = 0.001                 ; 0.01 nm per ps = 10 nm per ns
pull-coord1-k           = 1000

Additionally, I’ve noticed that when the target group has space around it in the X and Z axes (i.e., no resistance in those directions), it tends to deviate from its path and move along the X or Z axes. How can I prevent this from happening and ensure the pulling stays strictly along the Y axis?

Questions:
1)How can I set up the simulation to pull in the negative Y direction using distance when the target group is above the reference group (pulling target towards ref)?

2)When should I use geometry = direction versus geometry = distance?

3)What is the purpose of pull-coord1-k? Does it behave the same way in both direction and distance geometries?

4)Does the value of pull-coord1-k have any effect when pull-coord1-rate is set to 0 or not set to 0?

5)What happens if I don’t specify pull-coord1-k in the configuration?

6)How can I prevent the target group from deviating along the X and Z axes when pulling in the Y direction?
7) When I use a high force constant, such as 1500, I notice negative values initially in the pullf.xvg file until around 150 ps. After that, the values become positive, although some remain negative intermittently. This pattern continues until approximately 227.4000 ps, after which the values stay positive consistently. What are the reasons?

I’d really appreciate it if someone could clarify these points for me.

Thank you!

I’ll try to be a bit brief to cover your questions.

  1. If you mean that you would end up with a negative distance, it is not possible.
  2. For example when you would end up with a negative distance. You would use the direction vector (the chosen components of the vector) defined by the groups.
  3. That is the force constant, the force that is applied to pull the groups to their target positions. Yes, the force constant works the same way for those pull geometries.
  4. Yes, the force is still applied to pull the groups to their target location. When you are doing umbrella sampling the rate will be 0 and the force is keeping the “ligand” (or similar) in place.
  5. It defaults to 0, meaning that no force is applied, but you can still analyse the behaviour of the ligand relative to the pull coordinate.
  6. You can set-up restraints in just the X and Z dimensions.
  7. The applied force (in pullf.xvg) reflects the distance of the pulled group(s) relative to their target position. You can use the pull-print- options to get more information about the pull coordinates and forces.