desmond/maestro による MD 計算準備の自動化
mdTable of Contents
#+File Created:
#+Last Updated:
1 はじめに
maestro/desmond による MD 計算手順の典型例は以下である.
maestro を立ち上げる.
- Protein Preparation ウインドウから
1.1. Import and Process タブ
1.1.1. PDB ファイルを読み込む
1.1.2. 水素付加(Preprocess)
- CAP termini にチェックして N端, C端の処理
- Delete waters beyond 5 (default) (チェック入れたり入れなかったり)
1.2. Review and Modify タブ
EDO 等のいらない化合物の削除
(この時点での PDB ファイル保存しておく) PDBID_addH_delEDO.pdb
1.3. mutant 作成(ex. E66K)
(この時点での PDB ファイル保存しておく) PDBID_addH_delEDO_E66K.pdb
maestro 形式のファイルを保存する必要あり PDBID_addH_delEDO_E66K.mae
1.4. Refine タブ
Optimize(水素位置の optimize)
maestro 形式のファイルを読み込んで,
maestro 形式のファイルが出力される PDBID_addH_delEDO_E66K_opt.mae
- CAP termini にチェックして N端, C端の処理
- System Setup
2.1. Solvation タブ
Minimize Volume
2.2. Ions タブ
Na+ (or Cl-) での neutralize
Ad salt 0.15M
(この時点での cms ファイル保存しておく) PDBID_addH_delEDO_E66K_opt_sol.cms
- MD パラメータについて
MD 計算に必要なファイルは cms/msj/cfg ファイル.
cms は上で作成済
msj/cfg ファイルは maestro で一度作成したのを使い回すことにする.
基本的には毎回同じなので.(cfg ファイルのパラメータ seed は毎回変更する)
これらを自動化(script 化)したいというのがここでの目標.
2 Protein Preparation
2.1 PDB ファイルの読み込み
まずは PDB ファイルを読み込む.
getpdb コマンドを使えば良い.
getpdb PDBID
getpdb PDBID:CHAIN_NAME
のように使えば良いらしい.
詳しくは getpdb -h とやれば詳細なパラメタが出てくる.
とりあえず以下でいいだろう.
001getpdb.sh
$SCHRODINGER/utilities/getpdb PDBID # $SCHRODINGER/utilities/getpdb PDBID:A # chain 指定で読み込みたい場合
2.2 水素付加
続いて水素付加を行う.
水素付加は prepwizard コマンドで出来る.
prepwizard -h で詳細がみられる.
002addH.sh
$SCHRODINGER/utilities/prepwizard -c -WAIT -NOJOBID \ -noepik -noimpref -noprotassign PDBID.pdb PDBID_addH.pdb
-c option は Cap termini のチェック
Delete waters beyond 5 (default) のチェックを外すときには -keepfarwat option を追加.
-noepik -noimpref -nopropassign は, maestro Academic Only 版を使ってる場合は必須?これが無いとエラーとなる.
注: 水素付加プログラムを上記コマンドでやるときと, maestro の GUI でやるときでは, 微妙に構造が異なる場合がある. => 小数点第三位の数値が異なる場合がある.
maestro(GUI) と全く同じ座標を使いたい場合には, 水素付加までは maestro(GUI)でやったほうがいいかも知れない(wild-type のを一回やればいいだけなんで問題ないかと思われる).
2.3 化合物の削除
これは mutation と一緒にやってもよい.
GUI の maestro を起動しないとできないが, コマンドからで立ち上げて処理が終われば終了する.
maestro -c file.com
で, file.com にある命令を実行出来るので, コマンドをファイル(file.com)内に書いておく.
具体的な命令の内容については, 以下を参照せよ.
$SCHROGINGER/docs/Documentation.htm#maestro_command_reference/Command-Language.html
011delHET.m
# PDB ファイルの読み込み entryimport PDBID_addH.pdb # EDO という名前の残基を削除する. # なぜか知らんが res. の後ろにスペースが無いとエラーとなる. delete res. EDO # PDB ファイルの書き込み # format=pdb を指定しないと別フォーマットになる entryexport format=pdb PDBID_addH_delHET.pdb # 終了 quit
上記ファイルを使って実行する.
012delHET.sh
$SCHRODINGER/maestro -c 011delHET.m
2.4 変異体の作成
これも maestro 本体を動かさないといけない.
maestro -c file.com で, file.com の中に変異体作成の命令を書く.
013mut.m
entryimport PDBID_addH_delHET.pdb # 原子数が変わるので(念の為)後ろの方から変異体を作成する. # chain B で residue id = 66 の場所を見つける find chain.name B and res.num 66 # LYS の fragment を作成 fragment peptide LYS # 原子番号 6634 以下の残基( residue id =66) に変異をかける. mutate at.n 6634 # chain A で同様の計算 find chain.name A and res.num 66 fragment peptide LYS mutate at.n 527 # 書き出し entryexport format=pdb PDBID_addH_delHET_E66K.pdb
上記を以下のように実行
013mut.sh
$SCHRODINGER/maestro -c 0130mut.m
化合物の削除と同時にやる version
普段はこっちを使えばよい
01mut.m
# PDB ファイルでもいいが, maestro(GUI)で水素付加の後に mae ファイルを保存しておく. # mae ファイルの方が情報量が多いので entryimport PDBID_addH.mae delete res. EDO fragment peptide LYS mutate chain.name B and res.num 66 fragment peptide LYS mutate chain.name A and res.num 66 # mae ファイルで保存する. 次のコマンドへは mae ファイルしか渡せないので entryexport format=maestro PDBID_addH_delHET_E66K.mae quit
01mut.sh
$SCHRODINGER/maestro -c 01mut.m
2.5 mae ファイルへの変換
pdb -> mae ファイルへ変換(確認用)
様々な形式変換が出来る.
詳しくは pdbconvert -h で見られる.
基本は pdbconvert -i(input_format) hoge.pdb -o(output_format) fuga.mae
0140conv.sh
$SCHRODINGER/utilities/pdbconvert -ipdb PDBID_addH_delHET_E66K.pdb -omae PDBID_addH_delHET_E66K.mae
2.6 水素位置の optimize
$SCHRODINGER/utilities/protassign を用いる.
protassign -h で詳細な情報が見られる.
とりあえず今回使うのは -propka_pH 位か?
02refine.sh
$SCHRODINGER/utilities/protassign -WAIT -NOJOBID -propka_pH 7 PDBID_addH_delHET_E66K.mae PDBID_addH_delHET_E66K_opt.mae
ついでに mae -> pdb ファイルへの変換は以下のように実行する.
conv.sh
$SCHRODINGER/utilities/pdbconvert -imae PDBID_addH_delHET_E66K_opt.mae -opdb PDBID_addH_delHET_E66K_opt.pdb
2.7 fake X server
化合物の削除, 及び変異体の作成の際には maestro の GUI が起動してしまう.
このままではいらん GUI のせいで terminal 上のコマンドでプログラムを動かせない.
そこで xvfb を使う.
desmond/maestro が動いている linux server 上で
server@: sudo apt-get install xvfb
server@: export DISPLAY=:2 # 値は何でもいい. :1 とか.
server@: Xvfb :2 -screen 2 1280x800x24 &
これで化合物の削除, 変異体の作成の script がいらん GUI が立ち上がらずに動く.
3 System Setup(multisim)
System Setup の window で Run を実行せずに保存すると
desmond_setup_1/ 以下に実行 script が保存されることを見つけた.
この設定ファイルを使うことにする.
入力ファイル desmond_setup_1.mae として上の計算(水素付加関連の一連の作業)後の mae ファイルを使う.
ln -s PDBID_addH_delHET_E66K_opt.mae desmond_setup_1.mae
こんな感じで入力構造ファイルを確保しておく.
multisim の設定ファイル.
minimize_volume = true が無ければ手動で追加.
desmond_setup_1.msj
ask { task = "desmond:auto" } build_geometry { add_counterion = { ion = Cl number = neutralize_system } add_counterion = { ion = Na number = neutralize_system } box = { shape = orthorhombic size = [10.0 10.0 10.0 ] size_type = buffer } minimize_volume = true # 手動で追加 rezero_system = false salt = { concentration = 0.15 negative_ion = Cl positive_ion = Na } solvent = SPC } assign_forcefield { }
shell script
desmond_setup_1.sh
${SCHRODINGER}/utilities/multisim" -JOBNAME desmond_setup_1 -m desmond_setup_1.msj \ desmond_setup_1.mae -o desmond_setup_1-out.cms -HOST localhost -TMPLAUNCHDIR -ATTACHED
中身は正直よくわかってないけど.
4 Molecular Dynamics
このあと水及びイオンが溶かされた系を読み込んで,
MD 計算のパラメータを書き出して MD 計算(multisim)を行っていく.
書き出しの際に得られるファイルは,
- cms ファイル (上で作成)
- msj ファイル
- cfg ファイル
msj と cfg は一度 maestro で作っておけば使い回しが出来るのでそれを使うでいいかも(?)
cfg ファイルの seed (random seed) の値は変更すること.
demond_md_job_1.cfg
annealing = false backend = { } bigger_rclone = false checkpt = { first = 0.0 interval = 240.06 name = "$JOBNAME.cpt" write_last_step = true } cpu = 1 cutoff_radius = 9.0 elapsed_time = 0.0 energy_group = false eneseq = { first = 0.0 interval = 1.2 name = "$JOBNAME$[_replica$REPLICA$].ene" } ensemble = { barostat = { tau = 2.0 } class = NPT method = MTK thermostat = { tau = 1.0 } } glue = solute maeff_output = { first = 0.0 interval = 120.0 name = "$JOBNAME$[_replica$REPLICA$]-out.cms" periodicfix = true trjdir = "$JOBNAME$[_replica$REPLICA$]_trj" } meta = false meta_file = ? pressure = [1.01325 isotropic ] randomize_velocity = { first = 0.0 interval = inf seed = 2007 temperature = "@*.temperature" } restrain = none simbox = { first = 0.0 interval = 1.2 name = "$JOBNAME$[_replica$REPLICA$]_simbox.dat" } surface_tension = 0.0 taper = false temperature = [ [300.0 0 ] ] time = 100000.0 timestep = [0.002 0.002 0.006 ] trajectory = { center = [] first = 0.0 format = dtr frames_per_file = 250 interval = 10.0 name = "$JOBNAME$[_replica$REPLICA$]_trj" periodicfix = true write_velocity = false }
desmond_md_job_1.msj
# Desmond standard NPT relaxation protocol # All times are in the unit of ps. # Energy is in the unit of kcal/mol. task { task = "desmond:auto" set_family = { desmond = { checkpt.write_last_step = no } } } simulate { title = "Brownian Dynamics NVT, T = 10 K, small timesteps, and restraints on solute heavy atoms, 100ps" annealing = off time = 100 timestep = [0.001 0.001 0.003 ] temperature = 10.0 ensemble = { class = "NVT" method = "Brownie" brownie = { delta_max = 0.1 } } restrain = { atom = "solute_heavy_atom" force_constant = 50.0 } } simulate { effect_if = [["==" "-gpu" "@*.*.jlaunch_opt[-1]"] 'ensemble.method = Langevin'] title = "NVT, T = 10 K, small timesteps, and restraints on solute heavy atoms, 12ps" annealing = off time = 12 timestep = [0.001 0.001 0.003] temperature = 10.0 restrain = { atom = solute_heavy_atom force_constant = 50.0 } ensemble = { class = NVT method = Berendsen thermostat.tau = 0.1 } randomize_velocity.interval = 1.0 eneseq.interval = 0.3 trajectory.center = [] } simulate { title = "NPT, T = 10 K, and restraints on solute heavy atoms, 12ps" effect_if = [["==" "-gpu" "@*.*.jlaunch_opt[-1]"] 'ensemble.method = Langevin'] annealing = off time = 12 temperature = 10.0 restrain = retain ensemble = { class = NPT method = Berendsen thermostat.tau = 0.1 barostat .tau = 50.0 } randomize_velocity.interval = 1.0 eneseq.interval = 0.3 trajectory.center = [] } solvate_pocket { should_skip = true ligand_file = ? } simulate { title = "NPT and restraints on solute heavy atoms, 12ps" effect_if = [["@*.*.annealing"] 'annealing = off temperature = "@*.*.temperature[0][0]"' ["==" "-gpu" "@*.*.jlaunch_opt[-1]"] 'ensemble.method = Langevin'] time = 12 restrain = retain ensemble = { class = NPT method = Berendsen thermostat.tau = 0.1 barostat .tau = 50.0 } randomize_velocity.interval = 1.0 eneseq.interval = 0.3 trajectory.center = [] } simulate { title = "NPT and no restraints, 24ps" effect_if = [["@*.*.annealing"] 'annealing = off temperature = "@*.*.temperature[0][0]"' ["==" "-gpu" "@*.*.jlaunch_opt[-1]"] 'ensemble.method = Langevin'] time = 24 ensemble = { class = NPT method = Berendsen thermostat.tau = 0.1 barostat .tau = 2.0 } eneseq.interval = 0.3 trajectory.center = solute } simulate { cfg_file = "desmond_md_job_1.cfg" jobname = "$MASTERJOBNAME" dir = "." compress = "" } # Job launching command: # $SCHRODINGER/utilities/multisim -VIEWNAME desmond_molecular_dynamics_gui.MDApp -JOBNAME desmond_md_job_1 # -HOST localhost -maxjob 1 -cpu 1 -m desmond_md_job_1.msj -c desmond_md_job_1.cfg -description 'Molecular Dynamics' # desmond_md_job_1.cms -mode umbrella -PROJ /home/vagrant/.schrodinger/tmp/tproj36567a6821 # -DISP append -o desmond_md_job_1-out.cms -ATTACHED
MD 計算の shell script もついでに載せておく.
desmond_md_job_1.sh
"${SCHRODINGER}/utilities/multisim" -JOBNAME desmond_md_job_1 -HOST localhost -maxjob 1 -cpu 1 -m desmond_md_job_1.msj -c desmond_md_job_1.cfg -description "Molecular Dynamics" desmond_md_job_1.cms -mode umbrella -o desmond_md_job_1-out.cms -ATTACHED
GPU 計算の場合
desmond_md_job_1.GPU.sh
"${SCHRODINGER}/utilities/multisim" -JOBNAME desmond_md_job_1 -HOST localhost -maxjob 1 -cpu 1 -m desmond_md_job_1.msj -c desmond_md_job_1.cfg -description "Molecular Dynamics" desmond_md_job_1.cms -mode umbrella -set 'stage[1].set_family.md.jlaunch_opt=["-gpu"]' -o desmond_md_job_1-out.cms -ATTACHED
5 手順まとめ
タンパク質の mutant を MD 計算したい場合
wild type の水素付加したものを maestro(GUI)で作成しておく. これはまぁしょうがない.
mae ファイルとして保存する.
出発点: PDBID_addH.mae
- 変異体作成(+いらない HET の削除): 01mut.sh (01mut.m に実行内容を書く)
必要ならば fake X server を立ち上げておくこと.
- 水素の refine: 02refine.sh PDBID_addH_delHET_E66K_opt.mae が出来る.
PDBID_addH_delHET_E66K_opt.mae -> desmond_setup_1.mae
- 03setup/ system setup: desmond_setup_1.sh の実行
desmond_setup_1-out.cms -> desmond_md_job_1.cms
- 04md/ MD run: desmond_md_job_1.GPU.sh の実行
desmond_md_job_1.cfg ファイルの seed の値を変えて疑似乱数の初期値を変更.