1
# This file defines a family of coarse-grained protein models used in:
2
# G. Bellesia, AI Jewett, and J-E Shea, Protein Science, Vol19 141-154 (2010)
5
# For portability, all definitions in this file are enclosed within
6
# the "1beadProtSci2010" namespace. To access them, put
7
# "using namespace 1beadProtSci2010" in your LT file.
11
#1) First I'll define some building blocks
12
# (short helices, sheets and turns of a predetermined length)
14
#2) Then I'll cut and paste them together to build
15
# a 4-helix bundle or a 4-strand beta-barrel.
17
# Doing it this way is optional. It's simpler (but longer) to simply write
18
# out the entire sequence of all 73 atoms in a single "Data Atoms" section.
19
# (IE. Don't try to subdivide it.) It's also simpler to explicitly list the
20
# 72 bonds, 71 3-body angles and 70 4-body dihedral angle interactions
21
# manually (instead of inferring them from the atom type). If your protein
22
# has helices which are not identical, this would probably be easier.
23
# Use whichever style you prefer.
26
# Note that atom types, bond types, angle types, and dihedral types
27
# are shared between all molecules defined in the "1beadProtSci2010" family.
28
# (That's why there is a "../" in their path-names. Otherwise atom, bond,
29
# angle types, etc... are not shared between different molecules.)
32
# Each molecule in LAMMPS can be assigned a unique molecule-ID (an integer).
33
# These are represented by the "$mol" variable written next to each atom.
34
# Our protein has multiple subunits (in this case: helices, sheets, turns).
35
# Because we want the subunits to share the same molecule-ID counter we use
36
# "$mol:..." instead of "$mol" which tells moltemplate to search for the
37
# parent molecule's ID. This is optional. If it bothers you, just use "$mol"
43
write_once("In Init") {
44
# -- Default styles for "1beadProtSci2010" --
47
# (Hybrid force fields were not necessary but are used for portability.)
48
bond_style hybrid harmonic
49
angle_style hybrid harmonic
50
dihedral_style hybrid charmm
51
pair_style hybrid lj/charmm/coul/charmm/inter es4k4l maxmax 3.5 4.0
53
# If charges are needed, (assuming biopolymers), try one of:
55
#pair_style hybrid lj/cut/coul/debye 0.1 4.0
56
# or (for short distances, below a couple nm)
57
#pair_style hybrid lj/charmm/coul/charmm/implicit 3.5 4.0
59
pair_modify mix arithmetic
60
special_bonds lj 0.0 0.0 1.0 #(turn on "1-4" interactions)
64
# ---- Building blocks: A16, B16, Turn3 ----
66
# A16 is a coarse-grained alpha-helix containing 16 residues (one "atom" each)
70
# AtomID MoleculeID AtomType Charge X Y Z
73
$atom:a1 $mol:... @atom:../L 0.0 -0.4 -0.4 0.0
74
$atom:a2 $mol:... @atom:../L 0.0 0.4 -0.4 0.6
75
$atom:a3 $mol:... @atom:../H 0.0 0.4 0.4 1.2
76
$atom:a4 $mol:... @atom:../H 0.0 -0.4 0.4 1.8
77
$atom:a5 $mol:... @atom:../L 0.0 -0.4 -0.4 2.4
78
$atom:a6 $mol:... @atom:../L 0.0 0.4 -0.4 3.0
79
$atom:a7 $mol:... @atom:../H 0.0 0.4 0.4 3.6
80
$atom:a8 $mol:... @atom:../H 0.0 -0.4 0.4 4.2
81
$atom:a9 $mol:... @atom:../L 0.0 -0.4 -0.4 4.8
82
$atom:a10 $mol:... @atom:../L 0.0 0.4 -0.4 5.4
83
$atom:a11 $mol:... @atom:../H 0.0 0.4 0.4 6.0
84
$atom:a12 $mol:... @atom:../H 0.0 -0.4 0.4 6.6
85
$atom:a13 $mol:... @atom:../L 0.0 -0.4 -0.4 7.2
86
$atom:a14 $mol:... @atom:../L 0.0 0.4 -0.4 7.8
87
$atom:a15 $mol:... @atom:../H 0.0 0.4 0.4 8.4
88
$atom:a16 $mol:... @atom:../H 0.0 -0.4 0.4 9.0
92
$bond:b1 @bond:../backbone $atom:a1 $atom:a2
93
$bond:b2 @bond:../backbone $atom:a2 $atom:a3
94
$bond:b3 @bond:../backbone $atom:a3 $atom:a4
95
$bond:b4 @bond:../backbone $atom:a4 $atom:a5
96
$bond:b5 @bond:../backbone $atom:a5 $atom:a6
97
$bond:b6 @bond:../backbone $atom:a6 $atom:a7
98
$bond:b7 @bond:../backbone $atom:a7 $atom:a8
99
$bond:b8 @bond:../backbone $atom:a8 $atom:a9
100
$bond:b9 @bond:../backbone $atom:a9 $atom:a10
101
$bond:b10 @bond:../backbone $atom:a10 $atom:a11
102
$bond:b11 @bond:../backbone $atom:a11 $atom:a12
103
$bond:b12 @bond:../backbone $atom:a12 $atom:a13
104
$bond:b13 @bond:../backbone $atom:a13 $atom:a14
105
$bond:b14 @bond:../backbone $atom:a14 $atom:a15
106
$bond:b15 @bond:../backbone $atom:a15 $atom:a16
112
# B16 is a coarse-grained beta-strand containing 16 residues (one "atom" each)
116
# AtomID MoleculeID AtomType Charge X Y Z
118
write('Data Atoms') {
119
$atom:a1 $mol:... @atom:../L 0.0 -0.3 0.0 0.0
120
$atom:a2 $mol:... @atom:../H 0.0 0.3 0.0 0.8
121
$atom:a3 $mol:... @atom:../L 0.0 -0.3 0.0 1.6
122
$atom:a4 $mol:... @atom:../H 0.0 0.3 0.0 2.4
123
$atom:a5 $mol:... @atom:../L 0.0 -0.3 0.0 3.2
124
$atom:a6 $mol:... @atom:../H 0.0 0.3 0.0 4.0
125
$atom:a7 $mol:... @atom:../L 0.0 -0.3 0.0 4.8
126
$atom:a8 $mol:... @atom:../H 0.0 0.3 0.0 5.6
127
$atom:a9 $mol:... @atom:../L 0.0 -0.3 0.0 6.4
128
$atom:a10 $mol:... @atom:../H 0.0 0.3 0.0 7.2
129
$atom:a11 $mol:... @atom:../L 0.0 -0.3 0.0 8.0
130
$atom:a12 $mol:... @atom:../H 0.0 0.3 0.0 8.8
131
$atom:a13 $mol:... @atom:../L 0.0 -0.3 0.0 9.6
132
$atom:a14 $mol:... @atom:../H 0.0 0.3 0.0 10.4
133
$atom:a15 $mol:... @atom:../L 0.0 -0.3 0.0 11.2
134
$atom:a16 $mol:... @atom:../H 0.0 0.3 0.0 12.0
137
write('Data Bonds') {
138
$bond:b1 @bond:../backbone $atom:a1 $atom:a2
139
$bond:b2 @bond:../backbone $atom:a2 $atom:a3
140
$bond:b3 @bond:../backbone $atom:a3 $atom:a4
141
$bond:b4 @bond:../backbone $atom:a4 $atom:a5
142
$bond:b5 @bond:../backbone $atom:a5 $atom:a6
143
$bond:b6 @bond:../backbone $atom:a6 $atom:a7
144
$bond:b7 @bond:../backbone $atom:a7 $atom:a8
145
$bond:b8 @bond:../backbone $atom:a8 $atom:a9
146
$bond:b9 @bond:../backbone $atom:a9 $atom:a10
147
$bond:b10 @bond:../backbone $atom:a10 $atom:a11
148
$bond:b11 @bond:../backbone $atom:a11 $atom:a12
149
$bond:b12 @bond:../backbone $atom:a12 $atom:a13
150
$bond:b13 @bond:../backbone $atom:a13 $atom:a14
151
$bond:b14 @bond:../backbone $atom:a14 $atom:a15
152
$bond:b15 @bond:../backbone $atom:a15 $atom:a16
157
T3 { # T3 is a "turn" region consisting of 3 beads
159
# AtomID MoleculeID AtomType Charge X Y Z
161
write('Data Atoms') {
162
$atom:a1 $mol:... @atom:../N 0.0 -0.8 0.0 0.0
163
$atom:a2 $mol:... @atom:../N 0.0 0.0 0.55 -0.24
164
$atom:a3 $mol:... @atom:../N 0.0 0.8 0.0 0.0
167
write('Data Bonds') {
168
$bond:b1 @bond:../backbone $atom:a1 $atom:a2
169
$bond:b2 @bond:../backbone $atom:a2 $atom:a3
174
# (Note: Again, atom types, bond-types, (dihedral-types, any variable, etc)
175
# can be shared. The ".." in "@atom:../CA" tells moltemplate that
176
# atom type CA is defined in the parent's environment. (We are
177
# sharing the CA atom type between both the H and P residues.
178
# The same is true of the ".." in "@bond:../sidechain".
181
# Note: The "..." in "$mol:..." tells moltemplate that this molecule may
182
# be a part of a larger molecule, and (if so) to use the larger
183
# molecule's id number as it's own.
187
# ----- Now build larger molecules using A16, B16 and T3 -------
191
helix1 = new A16.rot( -45, 0,0,1).move(-1.12691645,-1.12691645, 0)
192
helix2 = new A16.rot( 45, 0,0,1).move( 1.12691645,-1.12691645, 0)
193
helix3 = new A16.rot( 135, 0,0,1).move( 1.12691645, 1.12691645, 0)
194
helix4 = new A16.rot( 225, 0,0,1).move(-1.12691645, 1.12691645, 0)
195
# Note: 1.12691645 ~= 0.5*2^(1/6) + 0.4*sqrt(2)
197
turn1 = new T3.rot(180,1,0,0).rot(-17,0,0,1).move(-0.2,-0.7,9.9)
198
turn2 = new T3.rot( 0,1,0,0).rot(-100,0,0,1).move(0.7,-0.15,-0.3)
199
turn3 = new T3.rot(180,1,0,0).rot(163,0,0,1).move(0.2,0.7,9.9)
201
# Note: In the paper, this is described as the "UA2" conformation
202
# (I played around with the angles until it looked "okay". This is not
203
# the minimum energy conformation. Further minimization is necessary.)
205
# Now bond the pieces together.
206
# (Note: angle & dihedral interactions will be generated automatically.)
207
write('Data Bonds') {
208
$bond:turn1a @bond:../backbone $atom:turn1/a1 $atom:helix1/a16
209
$bond:turn1b @bond:../backbone $atom:turn1/a3 $atom:helix2/a16
210
$bond:turn2a @bond:../backbone $atom:turn2/a1 $atom:helix3/a1
211
$bond:turn2b @bond:../backbone $atom:turn2/a3 $atom:helix2/a1
212
$bond:turn3a @bond:../backbone $atom:turn3/a1 $atom:helix3/a16
213
$bond:turn3b @bond:../backbone $atom:turn3/a3 $atom:helix4/a16
215
create_var { $mol } # <-- create a variable for the parent's Molecule-ID
220
sheet1 = new B16.rot( 45, 0,0,1).move(-0.793700526,-0.793700526, 0)
221
sheet2 = new B16.rot( 135, 0,0,1).move( 0.793700526,-0.793700526, 0)
222
sheet3 = new B16.rot( 225, 0,0,1).move( 0.793700526, 0.793700526, 0)
223
sheet4 = new B16.rot( 315, 0,0,1).move(-0.793700526, 0.793700526, 0)
224
# Note: 0.793700526 ~= 0.5*2^(1/6) * sqrt(1/2)
226
turn1 = new T3.rot(180,1,0,0).rot(0,0,0,1).move(0,-1.3,12.6)
227
turn2 = new T3.rot( 0,1,0,0).rot(-90,0,0,1).move(0.7,-0.0,-0.9)
228
turn3 = new T3.rot(180,1,0,0).rot(-180,0,0,1).move(0,1.3,12.6)
230
write('Data Bonds') {
231
$bond:turn1a @bond:../backbone $atom:turn1/a1 $atom:sheet1/a16
232
$bond:turn1b @bond:../backbone $atom:turn1/a3 $atom:sheet2/a16
233
$bond:turn2a @bond:../backbone $atom:turn2/a1 $atom:sheet3/a1
234
$bond:turn2b @bond:../backbone $atom:turn2/a3 $atom:sheet2/a1
235
$bond:turn3a @bond:../backbone $atom:turn3/a1 $atom:sheet3/a16
236
$bond:turn3b @bond:../backbone $atom:turn3/a3 $atom:sheet4/a16
238
create_var { $mol } # molecule ID number shared by all atoms in this protein
242
# There are 3 atom types (referred to above as ../H, ../L, and ../N)
243
# Define their masses:
245
write_once("Data Masses") {
254
# --------------------------------------------------------------------
255
# -- In this example, all force field parameters are stored in the --
256
# -- file named "In Settings". They can also go in sections like --
257
# -- "Data Pair Coeffs", "Data Bond Coeffs", "Data Angle Coeffs"... --
258
# --------------------------------------------------------------------
263
# 2-body (non-bonded) interactions:
265
# Uij(r) = 4*eps_ij * (K*(sig_ij/r)^12 + L*(sig_ij/r)^6)
267
# i j pairstylename eps sig K L
269
write_once("In Settings") {
270
pair_coeff @atom:H @atom:H lj/charmm/coul/charmm/inter 1.0 1.0 1 -1
271
pair_coeff @atom:L @atom:L lj/charmm/coul/charmm/inter 1.0 1.0 1 0
272
pair_coeff @atom:N @atom:N lj/charmm/coul/charmm/inter 1.0 1.0 1 0
274
# (Interactions between different atom types use "arithmetic"
275
# and "maxmax" ("repulsion-wins") mixing rules.)
278
# 2-body (bonded) interactions:
280
# Ubond(r) = (k/2)*(r-0)^2
282
# The corresponding command is:
284
# bond_coeff bondType bondstylename k r0
287
write_once("In Settings") {
288
bond_coeff @bond:backbone harmonic 66.6 1.0
293
# 3-body interactions in this example are listed by atomType and bondType
294
# The atomIDs involved are determined automatically. The forumula used is:
296
# Uangle(theta) = (k/2)*(theta-theta0)^2
297
# (k in kcal/mol/rad^2, theta0 in degrees)
299
# The corresponding command is:
301
# angle_coeff angleType anglestylename k theta0
303
write_once("In Settings") {
304
angle_coeff @angle:backbone harmonic 66.6 105.0
307
# Generate a "backbone" 3-body interaction whenever 3 atoms are bonded
308
# together. We do this by to asking moltemplate to generate this
309
# 3-body interaction whenever 3 consecutively bonded atoms satisfy
310
# the following type requirement:
312
# angleType atomtypes1 2 3 bondtypes1 2
314
write_once("Data Angles By Type") {
315
@angle:backbone * * * * *
322
# 4-body interactions in this example are listed by atomType and bondType
323
# The atomIDs involved are determined automatically. The forumula used is:
325
# Udihedral(phi) = K * (1 + cos(n*phi - d))
327
# The d parameter is in degrees, K is in kcal/mol/rad^2.
329
# The corresponding command is:
331
# dihedral_coeff dihedralType dihedralstylename K n d w
332
# ("w" is the weight for 1-4 pair interactions, which we set to 0)
334
write_once("In Settings") {
335
dihedral_coeff @dihedral:turn charmm 0.2 3 0 0
336
dihedral_coeff @dihedral:term3 charmm 1.2 3 0 0
338
dihedral_coeff @dihedral:delta65_0 charmm 1.2 1 -65 0
339
dihedral_coeff @dihedral:delta62_5 charmm 1.2 1 -62 0
340
dihedral_coeff @dihedral:delta60_0 charmm 1.2 1 -60 0
341
dihedral_coeff @dihedral:delta57_5 charmm 1.2 1 -57 0
342
dihedral_coeff @dihedral:delta55_0 charmm 1.2 1 -55 0
345
#write_once("In Settings") {
346
# dihedral_coeff @dihedral:turn charmm 0.2 3 0.0 0
347
# dihedral_coeff @dihedral:term3 charmm 1.2 3 0.0 0
348
# dihedral_coeff @dihedral:delta65_0 charmm 1.2 1 -65.0 0
349
# dihedral_coeff @dihedral:delta62_5 charmm 1.2 1 -62.5 0
350
# dihedral_coeff @dihedral:delta60_0 charmm 1.2 1 -60.0 0
351
# dihedral_coeff @dihedral:delta57_5 charmm 1.2 1 -57.5 0
352
# dihedral_coeff @dihedral:delta55_0 charmm 1.2 1 -55.5 0
355
# Generate 4-body interactions whenever 4 consecutively bonded atoms satisfy
356
# the following type requirements:
358
write_once("Data Dihedrals By Type") {
359
# The dihedral interaction between backbone atoms in the helix or sheet-like
360
# regions is proportional to the sum of two terms: cos(phi+delta)+cos(3*phi)
361
# where delta is a constant used to control the bias between helices/sheets.
362
# As of 2013-4-07, the "fourier", "table", "class2", and "charmm",
363
" dihedral_styles can implement this potential.
364
# However dihedral_style "charmm" can only handle one cosine term at a time.
365
# So we use two commands to create two dihedral interactions for the same
366
# set of of four atoms ("cos3" and "delta60_0"). (To allow the
367
# superposition of multiple dihedral interactions on the same atoms,
368
# be sure to run moltemplate with the "-overlay-dihdedrals" argument.)
370
# dihedralType atomtypes1 2 3 4 bondtypes1 2 3
372
@dihedral:term3 @atom:H @atom:L @atom:H @atom:L * * *
373
@dihedral:delta60_0 @atom:H @atom:L @atom:H @atom:L * * *
375
@dihedral:term3 @atom:H @atom:L @atom:L @atom:H * * *
376
@dihedral:delta60_0 @atom:H @atom:L @atom:L @atom:H * * *
378
@dihedral:term3 @atom:L @atom:H @atom:H @atom:L * * *
379
@dihedral:delta60_0 @atom:L @atom:H @atom:H @atom:L * * *
381
@dihedral:term3 @atom:H @atom:H @atom:L @atom:L * * *
382
@dihedral:delta60_0 @atom:H @atom:H @atom:L @atom:L * * *
384
# Comment out the next 4 lines: (They are redundant with the lines above)
385
#@dihedral:term3 @atom:L @atom:L @atom:H @atom:H * * *
386
#@dihedral:delta60_0 @atom:L @atom:L @atom:H @atom:H * * *
387
#@dihedral:term3 @atom:L @atom:H @atom:L @atom:H * * *
388
#@dihedral:delta60_0 @atom:L @atom:H @atom:L @atom:H * * *
389
# (Redundant: The LLHH pattern is identical to HHLL after order reversal)
390
# (Redundant: The LHLH pattern is identical to HLHL after order reversal)
392
# Right now the dihedral-angle settings are "unfrustrated", meaning that the
393
# peptide backbone is equally happy to adopt helical or sheet-like secondary
394
# structure (See Table IV of Bellesia et. al, Prot Sci, 19, 141 (2010)).
395
# You can change that by changing "delta60_0" to one of the other choices.
397
# Any dihedral interactions containing "N" atoms use the @dihedral:turn
398
# interaction (which is much weaker).
399
@dihedral:turn @atom:N @atom:* @atom:* @atom:* * * *
400
@dihedral:turn @atom:N @atom:N @atom:* @atom:* * * *
401
@dihedral:turn @atom:N @atom:N @atom:N @atom:* * * *
402
@dihedral:turn @atom:N @atom:N @atom:N @atom:N * * *
403
# Comment out the next 4 lines: (They are redundant with the lines above)
404
# @dihedral:turn @atom:N @atom:N @atom:N @atom:N * * *
405
# @dihedral:turn @atom:* @atom:N @atom:N @atom:N * * *
406
# @dihedral:turn @atom:* @atom:* @atom:N @atom:N * * *
407
# @dihedral:turn @atom:* @atom:* @atom:* @atom:N * * *
410
} # 1beadProtSci2010 (namespace)