石の表面のペプチドをGROMACSで
あらすじ
前回までの記事で、INTERFACE-MDというおもちゃ 無機結晶用力場を見つけたので、せっかくなのでこれを使って何かチュートリアルにないことをしたいと思います。
ということで、pyrophyllite という石の結晶力場がありましたので、これをGROMACSで利用、ついでに小さいペプチドで有名な chignolin を乗せてみようと思います。
環境
- Ubuntu 24.04.2 LTS
- GROMACS 2025.1 GPU版
準備
今回はAmberToolsを使いません。
代わりに、INTERFACE-MDでも紹介されているGROMACSに変換するツールを使います。 $HOGE
を適当なディレクトリとします。
cd $HOGE
git clone https://github.com/kolmank/interfaceff2gro
cd interfaceff2gro/msi2lmp/src
make
cd $HOGE
またこれは MDAnalysis
というライブラリを使います。今回ウチは pip を使いましたが、人によっては conda とか mamba を使った方がいいかもしれません。
pip install --upgrade MDAnalysis
前回の記事 でも使ったパラメータを準備します。
unzip interface_ff_1_5.zip
これで、 HOGE/INTERFACE_FF_1_5
ができます。
トポロジー作成
作業ディレクトリを作成、以降このディレクトリ中にファイルを準備、各種コマンドを実行していきます。
mkdir pyrophyllite_chignolin
cd pyrophyllite_chignolin
石スラブ
ファイル変換。interfaceff2gro
を使って INTERFACE-MD で提供されているモデルをGROMACS用に変換します。
$HOGE/interfaceff2gro/interfaceff2gro.py $HOGE/INTERFACE_FF_1_5/MODEL_DATABASE/CLAY_MINERALS/pyrophyllite15_single_layer.car
cp ../INTERFACE_FF_1_5/MODEL_DATABASE/CLAY_MINERALS/pyrophyllite15_single_layer.* .
あと system.top
が作業ディレクトリにできていると思いますが使いません。
editconf
を使って周期境界条件を調整します。
gmx editconf -f pyrophyllite15_single_layer.gro -o slab.gro -box 2.58000 2.68980 3.6
slab.gro
はこんな感じ。
ペプチド
この論文
のチュートリアル例2がChignolinのフォールディングエネルギー曲面の計算です。途中までこの例に従います。wget https://files.rcsb.org/download/1UAO.pdb
head -n 281 1UAO.pdb > 1UAO_model1.pdb
1UAO_model1.pdb
はこんな感じ。
力場の種類を選択します。INTERFACE-MD に従いCHARMM-27、TIP4Pとします。
gmx pdb2gmx -f 1UAO_model1.pdb -ignh -o 1uao.gro
Select the Force Field:
From '/usr/local/gromacs/share/gromacs/top':
1: AMBER03 protein, nucleic AMBER94 (Duan et al., J. Comp. Chem. 24, 1999-2012, 2003)
2: AMBER94 force field (Cornell et al., JACS 117, 5179-5197, 1995)
3: AMBER96 protein, nucleic AMBER94 (Kollman et al., Acc. Chem. Res. 29, 461-469, 1996)
4: AMBER99 protein, nucleic AMBER94 (Wang et al., J. Comp. Chem. 21, 1049-1074, 2000)
5: AMBER99SB protein, nucleic AMBER94 (Hornak et al., Proteins 65, 712-725, 2006)
6: AMBER99SB-ILDN protein, nucleic AMBER94 (Lindorff-Larsen et al., Proteins 78, 1950-58, 2010)
7: AMBERGS force field (Garcia & Sanbonmatsu, PNAS 99, 2782-2787, 2002)
8: CHARMM27 all-atom force field (CHARM22 plus CMAP for proteins)
9: GROMOS96 43a1 force field
10: GROMOS96 43a2 force field (improved alkane dihedrals)
11: GROMOS96 45a3 force field (Schuler JCC 2001 22 1205)
12: GROMOS96 53a5 force field (JCC 2004 vol 25 pag 1656)
13: GROMOS96 53a6 force field (JCC 2004 vol 25 pag 1656)
14: GROMOS96 54a7 force field (Eur. Biophys. J. (2011), 40,, 843-856, DOI: 10.1007/s00249-011-0700-9)
15: OPLS-AA/L all-atom force field (2001 aminoacid dihedrals)
8 ← 8を入力してEnter
Using the Charmm27 force field in directory charmm27.ff
Opening force field file /usr/local/gromacs/share/gromacs/top/charmm27.ff/watermodels.dat
Select the Water Model:
1: TIP3P TIP 3-point, recommended
2: TIP4P TIP 4-point
3: TIPS3P CHARMM TIP 3-point with LJ on H's
4: TIP5P TIP 5-point (see https://gitlab.com/gromacs/gromacs/-/issues/1348 for issues)
5: SPC simple point charge
6: SPC/E extended simple point charge
7: None
2 ← 2を入力してEnter
続いて、石スラブにchignolinを追加します。 slab.gro
は周期境界長さを定義しているので、こちらを基とします。
gmx insert-molecules -f slab.gro -ci 1uao.gro -nmol 1 -o slab_chignolin.gro
これでこんな感じの系になります。
topol.top
の 最初に石スラブのitpファイルをincludeするように追記するのと、最後の方にある molecules
ブロックに石スラブを追加します。
#include "charmm27.ff/forcefield.itp"
#include "pyrophyllite15_single_layer.itp"
[ moleculetype ]
; Name nrexcl
Protein_chain_A 3
[ molecules ]
; Compound #mols
SURF 1
Protein_chain_A 1
水で満たす
水溶液にします。
gmx solvate -cp slab_chignolin.gro -cs tip4p.gro -p topol.top -o solv.gro
solv.gro
はこんな感じになります。
拘束条件
石スラブの拘束条件を追加できるようにします。今思うとイオンを加えた後でもよかった。
gmx make_ndx -f solv.gro # q <Enter> として、そのまま index.ndx を作成
gmx genrestr -f solv.gro -o posre_SURF.itp
Select group to position restrain
Group 0 ( System) has 2934 elements
Group 1 ( Other) has 600 elements
Group 2 ( SURF) has 600 elements
Group 3 ( Protein) has 138 elements
Group 4 ( Protein-H) has 77 elements
Group 5 ( C-alpha) has 10 elements
Group 6 ( Backbone) has 30 elements
Group 7 ( MainChain) has 39 elements
Group 8 ( MainChain+Cb) has 46 elements
Group 9 ( MainChain+H) has 50 elements
Group 10 ( SideChain) has 88 elements
Group 11 ( SideChain-H) has 38 elements
Group 12 ( Prot-Masses) has 138 elements
Group 13 ( non-Protein) has 2796 elements
Group 14 ( Water) has 2196 elements
Group 15 ( SOL) has 2196 elements
Group 16 ( non-Water) has 738 elements
Select a group: 2
Selected 2: 'SURF'
pyrophyllite15_single_layer.itp
を編集します。位置拘束条件を有効にするフラグ変数名がchignolinのものとかぶるので、こちらを POSRES_SURF
と変更します。
; Include Position restraint file
#ifdef POSRES_SURF
#include "posre_SURF.itp"
#endif
イオン追加で中性化
Chignolin はいくつかカルボン酸を持っていて、このままだと系が電荷をもっています。この状況は特に周期境界条件を考えると物理的にもおかしいことになりますので、カウンターイオンを加えて中性化します。
コンパイル済みトポロジーファイルが欲しいので、罪のないインプットファイル ions.mdp
を準備します。
define = -DPOSRES_SURF
; minim.mdp - used as input into grompp to generate em.tpr
; Parameters describing what to do, when to stop and what to save
integrator = steep ; Algorithm (steep = steepest descent minimization)
emtol = 1000.0 ; Stop minimization when the maximum force < 1000.0 kJ/mol/nm
emstep = 0.01 ; Minimization step size
nsteps = 50000 ; Maximum number of (minimization) steps to perform
; Parameters describing how to find the neighbors of each atom and how to calculate the interactions
cutoff-scheme = Verlet ; Buffered neighbor searching
coulombtype = cutoff ; Treatment of long range electrostatic interactions
rcoulomb = 1.0 ; Short-range electrostatic cut-off
rvdw = 1.0 ; Short-range Van der Waals cut-off
pbc = xyz ; Periodic Boundary Conditions in all 3 dimensions
coulombtype
がEwald和を使うようなやつだと系が中性でないと文句を言うので cutoff
にします。
gmx grompp -f ions.mdp -c solv.gro -p topol.top -r solv.gro -o ions.tpr
gmx genion -s ions.tpr -o solv_ions.gro -p topol.top -pname NA -nname CL -neutral
Will try to add 2 NA ions and 0 CL ions.
Select a continuous group of solvent molecules
Group 0 ( System) has 2934 elements
Group 1 ( Other) has 600 elements
Group 2 ( SURF) has 600 elements
Group 3 ( Protein) has 138 elements
Group 4 ( Protein-H) has 77 elements
Group 5 ( C-alpha) has 10 elements
Group 6 ( Backbone) has 30 elements
Group 7 ( MainChain) has 39 elements
Group 8 ( MainChain+Cb) has 46 elements
Group 9 ( MainChain+H) has 50 elements
Group 10 ( SideChain) has 88 elements
Group 11 ( SideChain-H) has 38 elements
Group 12 ( Prot-Masses) has 138 elements
Group 13 ( non-Protein) has 2796 elements
Group 14 ( Water) has 2196 elements
Group 15 ( SOL) has 2196 elements
Group 16 ( non-Water) has 738 elements
Select a group: 15
Selected 15: 'SOL'
solv_inos.gro
はこんな感じに出来上がりました。
周期境界条件のイメージセルも描いてみるとこんな感じになります。
これで準備完了です。
MD実行
エネルギー最小化
define = -DPOSRES_SURF
; minim.mdp - used as input into grompp to generate em.tpr
; Parameters describing what to do, when to stop and what to save
integrator = steep ; Algorithm (steep = steepest descent minimization)
emtol = 1000.0 ; Stop minimization when the maximum force < 1000.0 kJ/mol/nm
emstep = 0.01 ; Minimization step size
nsteps = 50000 ; Maximum number of (minimization) steps to perform
; Parameters describing how to find the neighbors of each atom and how to calculate the interactions
cutoff-scheme = Verlet ; Buffered neighbor searching
coulombtype = PME ; Treatment of long range electrostatic interactions
rcoulomb = 1.0 ; Short-range electrostatic cut-off
rvdw = 1.0 ; Short-range Van der Waals cut-off
pbc = xyz ; Periodic Boundary Conditions in all 3 dimensions
gmx grompp -f em.mdp -c solv_ions.gro -p topol.top -r solv_ions.gro -o em.tpr
gmx mdrun -deffnm em
緩和された構造 em.gro
が得られます。
見ただけではちょっとよくわかりませんね。
スラブに付着
人工力でchignolinを石スラブに押し付けてみます。物理的におかしい構造になる可能性を否定しきれませんが、まあこのあと平衡化MDをしっかり流せば大丈夫でしょう。知らんけど。
define = -DPOSRES_SURF
; RUN CONTROL PARAMETERS
integrator = md
dt = 0.002
nsteps = 100000
;
nstxout = 500
nstlog = 500
nstenergy = 500
;
;nstlist = 1
pbc = xyz
rlist = 1.0
;
coulombtype = PME
rcoulomb = 1.0
;
vdwtype = cut-off
rvdw = 0.8
dispcorr = enerpres
;
tcoupl = v-rescale
tc_grps = System
tau_t = 0.1
ref_t = 300.0
;
pcoupl = no
;
gen_vel = yes
gen_temp = 300
gen_seed = -1
;
constraints = h-bonds
constraint_algorithm = LINCS
pull = yes
pull-ngroups = 2
pull-ncoords = 1
pull-group1-name = SURF
pull-group1-pbcatom = -1
pull-group2-name = Protein
pull-coord1-type = umbrella
pull-coord1-geometry = distance
pull-coord1-groups = 1 2
pull-coord1-dim = N N Y
pull-coord1-k = 500
このファイルをgrompp
でコンパイル、 mdrun
で実行します。 pull-group1-name
で指定するのがGROMACSが自動で定義される原子グループなので、別に index.ndx
を渡さなくてもよいようです。
gmx grompp -f pull.mdp -c em.gro -p topol.top -r solv_ions.gro -o pull.tpr
gmx mdrun -deffnm pull
軌跡をVMDなどで見やすいよう、chignolinを中心に持ってきつつ(-center
オプション、このあと対話処理で中心に持ってくるグループを選択できる)、周期境界条件を超えた分子を戻してやります(-pbc mol
オプション)。 xtc
ファイルなのは、軌跡を動画で見るだけなら十分な精度でファイルが非常に軽くなるので xtc
ファイルにしています。
gmx trjconv -f pull.trr -s pull.tpr -o pull.xtc -pbc mol -center
ここで変換中の出力に
There were 126 inconsistent shifts. Check your topology
という警告?がいっぱい出るかと思いますが、これは石スラブが周期境界条件を超えた結合をもつためのようです。
参考: https://gromacs.bioexcel.eu/t/inconsistent-shifts-during-trjconv/3238
動画はこんな感じ。
思ったより強く押し付けているようです。
平衡化
NPT平衡化を行います。以下のファイルを準備します。
define = -DPOSRES_SURF
; RUN CONTROL PARAMETERS
integrator = md
dt = 0.002
nsteps = 100000
;
nstxout = 500
nstlog = 500
nstenergy = 500
;
;nstlist = 1
pbc = xyz
rlist = 1.0
;
coulombtype = PME
rcoulomb = 1.0
;
vdwtype = cut-off
rvdw = 0.8
dispcorr = enerpres
;
tcoupl = v-rescale
tc_grps = System
tau_t = 0.1
ref_t = 300.0
;
pcoupl = c-rescale
pcoupltype = semiisotropic
tau_p = 5.0
compressibility = 0 4.5e-5
ref_p = 1.0 1.0
refcoord_scaling = all
;
gen_vel = yes
gen_temp = 300
gen_seed = -1
;
constraints = h-bonds
constraint_algorithm = LINCS
ポイント:
- 石スラブは動かないように(
define = -DPOSRES_SURF
) - 圧力の変化はz軸のみの変動で行います。 (
pcoupltype = semiisotropic
とcompressibility = 0 4.5e-5
)
これをコンパイル、実行します。
gmx grompp -f npt.mdp -p topol.top -c pull.gro -r solv_ions.gro -o npt.tpr
gmx mdrun -deffnm npt
これもまたVMDなどで見やすいように調整します。
gmx trjconv -f npt.trr -s npt.tpr -pbc mol -center -o npt.xtc
これをVMDで上手く描画してやるとこうなります。
逆側から映していてわかりにくくて申し訳ないのですが、両端のチロシン・トリプトファンの芳香環をずっとスラブにつけてもぞもぞ動いている感じです。
スラブからはみ出しているように見えますが、周期境界条件を考えるとこうなりますので大丈夫です。
サンプリング
これは演習問題とする。
計算速度
ちなみに全部で2928座標(2381原子+547仮想サイト)で、GTX 1050 Ti、 AMD Ryzen 5 3600 でNPTを実行したときのパフォーマンスはこんな感じでした。
(ns/day) (hour/ns)
Performance: 344.662 0.070
その他
より大きい系をシミュレーションするには、この結晶構造をコピーして並べる必要がありますが、残念ながら周期境界条件を超えて連続した結合を考慮して並べる方法が分かりませんでした。なので今回はここまで。
結晶上で付着した状態ではフォールディングの自由エネルギー曲面が水溶液中とどう違うかとか面白いんじゃないかなと思います。
追記
mdpファイルで設定できるオプションに
periodic-molecules = yes
があったのですが、設定をしてもぱっと見違いは見当たりませんでした。
Discussion