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!