GROMACS

提供: ArchWiki
2018年7月22日 (日) 00:27時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

関連記事

公式ウェブサイト によれば、GROMACS とは:

分子動力学法を使用するための多目的パッケージです。数百から数百万の分子が存在する系でニュートンの運動方程式をシミュレートします。
蛋白質や脂質、核酸などの複雑な結合相互作用を持つ生化学的な分子を主たる対象として開発されていますが、GROMACS は (大抵のシミュレーションを占める) 非結合性相互作用の計算でも非常に高速な能力を発揮するので、重合体など生物学以外の研究分野でも多くの研究者によって使われています。
ノート: GROMACS をブラックボックスとして扱わないでください。ユーザーは GROMACS で使われている手法や力場について科学論文を読んで学ぶことが強く推奨されています。

インストール

gromacsAUR または gromacs-mpiAUR パッケージをインストールしてください。PKGBUILD はシステムにあわせて (MPI や GPU のサポートなど) 編集するようにしてください。PKGBUILD で追加・編集ができる cmake オプションとしては以下のようなものがあります (参照: GROMACS インストールガイド):

  • -DGMX_DOUBLE=ON - 倍精度が必要な場合に追加してください。GROMACS インストールガイドによれば、倍精度は「低速であり、通常は意味がありません」。このフラグを設定した場合、全ての GROMACS プログラムのデフォルトサフィックスは _d に設定されます。
  • -DGMX_GPU=ON - GPU のサポートを有効にしてビルドする場合に追加。
  • -DGMX_MPI=ON - 複数の計算ノードにまたがって実行できるようにしたい場合に追加。openmpimpichAUR などの MPI ライブラリも必要になります。MPI のサポートが必要ない場合 (つまり、シングルコンピュータで実行する場合)、このフラグは必要ありません。このフラグを設定した場合、全ての GROMACS プログラムのデフォルトサフィックスは _mpi に設定されます。
  • -DGMX_SIMD=xxx - GROMACS は使用しているプロセッサに最適な SIMD 命令を検知してくれるので、このフラグを設定する必要はありません。しかしながら、何らかのコンパイルエラーが起こる場合は、このフラグで SIMD レベルを指定することができます。xxx で利用できるオプションのリストがインストールガイドに記載されています。
ノート: Haswell プロセッサでコンパイルする場合、AVX2_256 命令を有効にしてコンパイルできるように -march=native を使用するよう makepkg を設定する必要があります。
  • -DGMX_X11=ON - ビルトインされている軌道ビューア gmx view を使う場合は設定してください。このフラグを使うには openmotiflibx11 パッケージが必要です。
  • -DREGRESSIONTEST_DOWNLOAD=ON - GROMACS のビルドをテストしたい場合は設定してください。テストを実行するには make check を実行するようにビルドを設定します。libxml2 パッケージが必要です。
  • -DGMX_DEFAULT_SUFFIX=OFF - MPI や倍精度を有効にしてビルドするときに GROMACS プログラムのデフォルトサフィックスをオフにしたい場合に設定。
  • -DGMX_BINARY_SUFFIX=xxx-DGMX_LIBS_SUFFIX=xxx - バイナリやライブラリのデフォルトサフィックスを xxx に設定。

他にも性能を向上させるパッケージが存在します:

  • boost-libs - 外部の Boost ライブラリを使うことでスマートポインタや例外処理などの優れた実装を利用することができます。
  • hwloc - hwloc とリンクすることでハードウェアの機能を実行時に認識します。
  • lapack - 正規モードの GROMACS ユーティリティや行列操作ではハードウェアに最適化済みの BLAS や LAPACK ライブラリが有用ですが、通常のシミュレーションでは特に意味はありません。

gromacs-gitAUR パッケージには最新の開発版ソースが含まれています。本番環境では使うべきではありません。

設定

デフォルトではトップレベルの力場ディレクトリは /usr/share/gromacs/top にあります。GMXLIB 環境変数を設定することで別のディレクトリに変更できます。力場に変更を加えたい場合や、他の力場を使いたい場合に有用です。

使用方法

以下は主要なコマンドの基本的なワークフローです。全てのコマンドは gmx から始まります。GROMACS の使用法に関する詳細情報はチュートリアルを見たりマニュアルを読んでください。また、こちら に便利なフローチャートがあります。

ヒント: 各コマンドには man ページが存在しており、gmx とコマンドの間の空白をハイフンで置き換えてください。例えば、gmx pdb2gmx の man ページは gmx-pdb2gmx となります。

セットアップ

シミュレーションには構造ファイル (.gro/.pdb), トポロジーファイル (.top), パラメータファイル (.mdp) が必要です。以下のセクションではファイルを入手する方法を説明しています。

構造ファイルの入手

構造ファイルには分子の配置が全て記述されています。ファイルは蛋白質データベースから入手したりプログラムを使って自分で作成することが可能です。

ヒント: 大抵の GROMACS プログラムでは、GROMACS 専用のファイル形式だけでなく、あらゆる形式の構造ファイルを使うことができます (例: PDB ファイル形式)。

トポロジーの生成

トポロジーファイルは原子粒子の相互の影響を規定します。トポロジーファイルを作成する方法の一つとして gmx pdb2gmx があります。protein.pdb という名前のファイルに溶質がある場合、以下を実行:

$ gmx pdb2gmx -f protein.pdb

次に力場水モデルの選択が要求されます。それで gro 形式の新しい構造ファイル (conf.gro) と対応するトポロジーファイル (topol.top) が生成されます。

構造ファイルを蛋白質データベースから入手したのではなく、自分で作成した場合、.pdb ファイルを更新するだけなく分子の残基鋳型ファイル (.rtp) を追加する必要があります。OPLS メタンのサンプル .rtp ファイルは こちら にあり、対応する .pdb ファイルは こちら です。.rtp は使用する力場の力場ディレクトリに配置してください。

別の手段でトポロジーを生成・入手する方法は下を参照

ボックスの作成

溶質と水で満たされたシミュレーションボックスは次のコマンドで簡単に作成できます:

$ gmx solvate -cp conf.gro -cs water -box X Y Z -o conf.gro -p topol.top

上記の場合、溶質や蛋白質の初期座標は conf.gro に保存されます。(トップレベルの力場ディレクトリあるいはカレントディレクトリにある) water.gro の水モデルを使用してボックスが溶媒で満たされ、ボックスの容積は X, Y, Z になります。トポロジーファイル topol.top が更新され、新しい系は conf.gro に出力されます。

-cs を省くと、3点水モデルが使われます。他にも水の構造として tip4ptip5p が使えます。

ノート: tip4p は4点水モデルのセットであり、TIP4P だけではなく、あらゆる4点水モデルに対応します。

ボックスの形を変えたり、あるいは水以外の溶媒を使用することも可能です。

イオンの追加

系が電荷中性ではない場合、通常はイオンを追加します。例えば系の電荷が -2 で、陽イオンのナトリウムイオンを2つ追加するには以下を実行:

$ gmx grompp -f grompp.mdp
$ gmx genion -s topol.tpr -np 2 -pname Na -o conf.gro -p topol.top

それからイオンで置き換わる溶媒に対応するインデックスグループを選択してください。-nname 引数で指定するのは使用する力場のイオンです。

ヒント: シミュレーションを実行する段階で .mdp ファイルは必要ありません。gmx genion.tpr ファイルを作成するときのみ必要になります。

パラメータファイル

シミュレーションの各ステップ (例: 極小化, 平衡化, プロダクション) ごとにパラメータファイルを作成する必要があります。 利用可能なオプションのリストは こちら

以下は標準状態で10秒間のプロダクションを行うパラメータファイルの例です:

dt                       = 0.002
nsteps                   = 5000000

nstxout-compressed       = 2500

coulombtype              = PME
rcoulomb                 = 1.0

vdwtype                  = Cut-off
rvdw                     = 1.0
DispCorr                 = EnerPres

tcoupl                   = Nose-Hoover
nh-chain-length          = 1
tc-grps                  = System
tau-t                    = 2.0
ref-t                    = 298.15

pcoupl                   = Parrinello-Rahman 
tau_p                    = 2.0
compressibility          = 4.46e-5
ref_p                    = 1.0 

constraints              = h-bonds
continuation             = yes
ヒント: A commented parameters file with all options (even those not explicitly listed in your file) is output when running gmx grompp and saved by default as mdout.mdp.

実行

基本

シミュレーションは基本的に二部から成ります。

まず、先行処理として構造ファイル・トポロジーファイル・パラメータファイルを読み込んで .tpr ファイルに書き出します (.tpr ファイルもトポロジーファイルと呼ばれることがあります):

$ gmx grompp -f grompp.mdp -c conf.gro -p topol.top -o topol.tpr

上記の grompp.mdp はシミュレーションステップのパラメータファイル、conf.gro はシミュレーションステップを開始する構造ファイル、topol.top はトポロジーファイルになります。構造ファイル (.gro) はシミュレーションの最後に出力されるので、前のシミュレーションから続行するシミュレーションで -c で指定します (例えば、平衡化を最初に実行するときは前の極小化のステップで出力された構造ファイルを使います)。

ノート: When a checkpoint file is available, you should prefer to read in it with the -t flag (instead of just a structure file with -c), since it contains additional information. When using both the -c and -t flags gmx grompp checks for the checkpoint file first, and if it is not found, then falls back to the structure file indicated. If a structure file is not indicated in this case, the default filename conf.gro is used.

次に、実際にシミュレーションを行います。メインプログラムの gmx mdrun.tpr ファイルを読み込んでシミュレーションを実行:

$ gmx mdrun -s topol.tpr
ヒント: gmx mdrun は複数のファイルを出力します。ファイルにプレフィックスを付けたいときは -deffnm フラグを使ってください。

通常、上記の2つの操作をエネルギー極小化・平衡化・プロダクションの各ステップで繰り返します。平衡化は複数回実行しなくてはならない場合もあります (特に pressure coupling をオンにしたとき)。最後の平衡化とプロダクションで使用するパラメータファイル (.mdp) はシミュレーションの長さ以外は全く同じにしてください。

例えば、極小化・平衡化・プロダクションのステップを各一回ずつ行うシミュレーションは以下のようになります:

#!/bin/bash

gmx grompp -f min.mdp -o min.tpr -c conf.gro -p topol.top
gmx mdrun -deffnm min

gmx grompp -f eql.mdp -o eql.tpr -c min.gro -p topol.top
gmx mdrun -deffnm eql

gmx grompp -f prd.mdp -o prd.tpr -t eql.cpt -p topol.top
gmx mdrun -deffnm prd

上記の min.mdp, eql.mdp, prd.mdp は極小化・平衡化・プロダクションのそれぞれのパラメータファイルになります。

アクセラレーション & 並列化

デフォルトで GROMACS はシングルノードの全てのプロセッサを利用します。複数のノードで実行するには、MPI ライブラリが必要です。openmpi を使って GROMACS を実行する場合、以下のようになります:

$ mpirun -np totalranks -npernode rankspernode --hostfile filename gmx mdrun -s topol.tpr

上記の totalranks は作成する MPI ランクの合計数、rankspernode はノードごとの MPI ランクの数、filename はプロセスを実行するホストを決定するのに使用するホストファイルに置き換えてください。

OpenMPI は以下のように OpenMP と組み合わせて使うことができます:

$ mpirun -np totalranks -npernode rankspernode --hostfile filename gmx mdrun -ntomp openmpthreads -s topol.tpr

外部の MPI ライブラリを使わずにコンパイルした場合、GROMACS の thread-MPI を使って MPI ランクと OMP スレッドを制御できます。複数の計算ノードにまたがって実行することはできません:

$ gmx mdrun -ntmpi totalranks -ntomp openmpthreads -s topol.tpr

上記の openmpthreads は作成する OpenMP スレッドの数になります。totalranks*openmpthreads がプロセッサの合計数と同じになるようにしてください。

ヒント: MPI ランクと OMP スレッドでシミュレーションを分割すると普通はどちらか片方を使う場合よりも遅くなります。

GPU のサポートを有効にしてコンパイルした場合、GROMACS は自動的に利用可能な GPU を検出します。MPI ランクの数は使用する GPU の数の倍数にしてください。GPU を使用するには Verlet スキームが必要です。.mdp ファイルの cutoff-scheme パラメータで設定してください。使用するコマンドは以下のようになります:

$ mpirun -np totalranks -npernode rankspernode --hostfile filename gmx mdrun -ntomp openmpthreads -s topol.tpr -gpu_id gpuids

上記の gpuids は0から始まる GPU の id に置き換えてください。つまり、GPU が1つしかない場合 (-np 1)、-gpu_id 0 を使います。使用できる GPU が2つある場合 (-np 2)、-gpu_id 01 を使います。複数の MPI ランクで GPU を使う場合、使用する回数だけ id を記述してください。例えば、2つの GPU で4つの GPU ランクを使うなら -np 4 になり、2つの MPI ランクで GPU を使うなら -gpu_id 0011 になります。20コアのマシンが2つある場合、コマンドは以下のようになります:

$ mpirun -np 8 -npernode 4 --hostfile filename gmx mdrun -ntomp 5 -s topol.tpr -gpu_id 0011

20コアの1つのマシンで GROMACS の thread-MPI を使う場合、以下のようになります:

$ gmx mdrun -ntmpi 4 -ntomp 5 -s topol.tpr -gpu_id 0011
ヒント: GPU では複数のシミュレーションを別々に実行するよりも同時に実行するほうが効率的です。-multi-multidir フラグを使ってください。

mpirun の man ページや MPI アクセラレーションや並列化のオプションに関する GROMACS のセクション を参照。

シミュレーションの再開

チェックポイントファイルからシミュレーションを再開するには次を実行:

$ gmx mdrun -s topol.tpr -cpi state.cpt

上記の topol.tpr は前のシミュレーションで使用した .tpr、そして state.cpt はそのシミュレーションのチェックポイントファイルに置き換えてください。

シミュレーションの延長

シミュレーションを延長するには、.tpr ファイルに修正を加えて gmx mdrun で実行:

$ gmx convert-tpr -s topol.tpr -extend time -o tpxout.tpr
$ gmx mdrun -s tpxout.tpr -cpi state.cpt

time はシミュレーションを延長する時間(ピコ秒)、topol.tpr は元のシミュレーションの .tpr ファイル、state.cpt は元のシミュレーションの最後のチェックポイントに置き換えてください。-extend を使うかわりに -until で終了時間をピコ秒で指定することもできます。

解析

ツール

GROMACS には解析ツールが多数付属しています。利用可能なコマンドのリストは gmx help commands と入力することで得ることができます。もしくは gromacs の man ページを開いてください。

重要な解析コマンドとして以下のようなものがあります:

  • gmx barベネット受容比法で自由エネルギーの摂動を計算。
  • gmx energy — エネルギーを xvg ファイルに書き出して平均値を表示。
  • gmx rdf動径分布関数を計算。
  • gmx trjconv — トラジェクトリファイルを変換・操作。
  • gmx wham傘サンプル法などの重み付きヒストグラム解析法を実行。

他のツールについては下を参照

インデックスファイル

ほぼ全ての GROMACS の解析プログラムでは任意でインデックスファイルが使われます。gmx make_ndx プログラムがインデックスファイルの作成や変更をコントロールします。インデックスファイルにはトラジェクトリフレームにおける原子の位置を示すグループ名と整数値が記述されています。インデックスファイルが必要になるのは構造ファイルの残基による原子団が思わしくないときだけです。gmx make_ndx を実行することで様々なコマンドを使って原子団を選択・結合・分割することができます。make_ndx プロンプトで h と入力することで利用可能なコマンドの詳しい説明を閲覧することが可能です。

開発

GROMACS はバージョン管理に git を使っているので、git の使い方 (特に共同作業の方法) を習熟してください。GROMACS に貢献するには Gerrit アカウントのサインアップ を済ませて ssh 鍵を追加する必要があります。それから ssh://user@gerrit.gromacs.org/gromacs.git を複製してください (user はあなたのユーザー名に置き換えてください)。リポジトリを複製したら、コミットフックをインストール:

$ scp -p user@gerrit.gromacs.org:hooks/commit-msg .git/hooks/

コミットを作成するときは、コミットメッセージに関する GROMACS のガイドライン に従ってください。また、変更を加えるときは コーディング規約 に従ってください。

変更を共有する準備ができたら、HEAD が最新であることを確認してください。それから HEAD:refs/for/mybranch のようにブランチをセットして push してください (mybranch は実際のブランチ名に置き換えてください)。一般に3つのブランチが使われます:

  • master はコードに大きな変更を必要とする重要な変更の長期開発に使われます。
  • release-x-y はコードの変更があまりない機能に使われます。xy は次のリリースのメジャー・マイナーバージョン番号になります。
  • release-x-y-patches は先のリリースのバグフィックスやドキュメントの変更に使われます。

Gerrit のサイトには他にもブランチが確認できます。

ドラフトコミットを push したい場合、ブランチを HEAD:refs/drafts/mybranch と設定して push してください。この場合、誰かにコードをレビューしてもらう必要があります。

詳しくは Gerrit に関する GROMACS のページ を参照。

ヒントとテクニック

立方体ではないボックスを作成して溶媒で満たす

非立方体のボックスを作成して溶媒で満たすには、まず以下を実行:

$ gmx editconf -f protein.pdb -bt boxtype -d dist -o box.gro

上のコマンドは dist nm の protein.pdb の分子が入った boxtype のボックスを作成します。ボックスは box.gro として保存されます。boxtype には triclinic, cubic, dodecahedron, octahedron が指定できます。

それから溶媒で一杯にします:

$ gmx solvate -cs tip4p -cp box.gro -o conf.gro -p topol.top

複数の溶質を使う

複数の溶質をバラバラに入れたい場合、まず以下を実行:

$ gmx insert-molecules -box X Y Z -ci solute.pdb -nmol N -o box.gro

X, Y, Z はボックスの大きさ (ナノメートル)、N は挿入する数に置き換えてください。トポロジーファイルを更新して分子の挿入数を変える必要があります。

そして溶媒を充填:

$ gmx solvate -cs tip4p -cp box.gro -o conf.gro -p topol.top
ノート: 可視化プログラムを使用すると triclinic ボックスが表示されます。GROMACS においては cubic 以外のボックスは全て triclinic ボックスで表されるためです。

水以外の溶媒を使う

gmx pdb2gmxgmx solvate などの標準ツールで水以外の溶媒を使いたいときは以下を実行:

  1. 溶媒分子の構造ファイルとトポロジーを作成。
  2. 数百の溶媒分子が含まれたボックスを作成 (216 が標準) して、標準状態で平衡化を少しの間実行。
  3. シミュレーションから出力された構造ファイル .grosolvent.gro にコピー (solvent は分子の名前に置き換えてください)。コピーしたファイルをトップレベルの力場ディレクトリに配置 (力場のディレクトリの一番上)。
  4. トポロジーファイルを開いて [moleculetype] セクションを残して全て削除して、ファイル内の分子に SOL と名前を付ける。
  5. トポロジーファイルの名前を solvent.itp と変更して使用する力場ディレクトリに移動。
  6. watermodels.dat を更新して (力場ディレクトリにある) 溶媒を追加した力場を指定して、溶媒を追加。filename shortdescription longdescription という行を追加するだけです (filename にファイルの拡張子は必要ありません)。

上記してから gmx pdb2gmx を実行すると適当な力場で溶媒モデルが使えるようになります。さらに、gmx solvate の実行時に -cs solvent が使えます。

参照

構造とトポロジーのデータベース

  • Automated Topology Builder & Repository — 分子のブロックや相互作用パラメータファイルを作成するためのリポジトリ。有名な分子のブロックを作成するのに役立つ自動ビルダー。
  • RCSB Protein Data Bank — 蛋白質や核酸、複合体に関する情報。蛋白質合成から健康と疾患まで、学生や研究者が生物医学や農業を理解するのに役立ちます。
  • SwissParam — CHARMM の全ての原子の力場と互換性がある小さな有機分子のトポロジーとパラメータを用意しています。CHARMM と GROMACS で使用できます。
  • TraPPE Parameter Database — 分子名で検索したり、自分で作成して、TraPPE 力場のパラメータが入手できます。パラメータを適用なユニットに変換する必要があります。
  • Virtual Chemistry — 数千もの分子の実験・計算結果の比較。CGenFF, GAFF, OPLS/AA に入力した検証済みのトポロジーファイルも記載されています。

開発

  • GROMACS Redmine — バグや問題、機能を報告・追跡するプロジェクト管理ページ。
  • GROMACS Gerrit — プロジェクトのコードレビューシステム。

ドキュメント

外部ライブラリ & プログラム

解析ライブラリ

  • libgmxcpp — Gromacs ファイル (.xtc や .ndx) を読み込むのに使用される C++ ツールキット。シミュレーション結果を解析するのに使います。
https://github.com/wesbarnett/libgmxcpp || libgmxcppAUR
  • libgmxfort — シミュレーションの結果を解析するときに使うための Gromacs ファイル (.xtc と .ndx) を読み込む近代的な Fortran ツールキット。
https://github.com/wesbarnett/libgmxcpp || libgmxfortAUR
  • mdanalysis — 分子の力学軌道を多数の形式で解析することができるオブジェクト指向の python ツールキット。
http://www.mdanalysis.org || python2-mdanalysisAUR
  • MDTraj — 分子の動的軌道を解析するための新しいオープンなライブラリ。
http://mdtraj.org/latest/ || python-mdtrajAUR
  • xdrfile — GROMACS の trr や xtc ファイルを読み込んで別の形式に変換することができるツール。
http://gromacs.org || xdrfileAUR

自由エネルギー計算

  • alchemical_analysis — 錬金術の自由エネルギー計算を解析する推奨法を実装するオープンなツール。
https://github.com/MobleyLab/alchemical-analysis || python2-alchemical-analysisAUR

構造の作成

  • Avogadro — 計算化学、分子モデリング、バイオインフォマティクス、材料科学および関連分野で使用するために設計されたクロスプラットフォームの先進的な分子エディタ。
http://avogadro.cc || avogadroAUR

トポロジーの生成

  • acpype — Antechamber を使って化合物のトポロジーを生成したり CCPN ツールや ARIA など他の python アプリケーションと連動する Python ベースのツール。生成できるトポロジーファイル: CNS/XPLOR, GROMACS, CHARMM, AMBER。
https://code.google.com/p/acpype || パッケージが存在しないか AUR で検索

視覚化

  • vmd — 分子の可視化プログラム。3-D グラフィックやビルトインスクリプトを用いて、巨大な生体分子系を表示・解析したり動かすことができる。
http://www.ks.uiuc.edu/Research/vmd/ || vmdAUR

ラッパー

  • GromacsWrapper — Gromacs ツールのシステムコールをクラスにラッピングする python パッケージ。
http://becksteinlab.github.io/GromacsWrapper || パッケージが存在しないか AUR で検索

チュートリアル