#+File Created: <2018-10-17 Wed 17:20>
#+Last Updated: <2019-02-13 Wed 19:06>


1 はじめに

maestro/desmond による MD 計算手順の典型例は以下である.

maestro を立ち上げる.

  1. 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

  2. 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
  3. 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

  1. 変異体作成(+いらない HET の削除): 01mut.sh (01mut.m に実行内容を書く)
    必要ならば fake X server を立ち上げておくこと.
  2. 水素の refine: 02refine.sh PDBID_addH_delHET_E66K_opt.mae が出来る.
    PDBID_addH_delHET_E66K_opt.mae -> desmond_setup_1.mae
  3. 03setup/ system setup: desmond_setup_1.sh の実行
    desmond_setup_1-out.cms -> desmond_md_job_1.cms
  4. 04md/ MD run: desmond_md_job_1.GPU.sh の実行
    desmond_md_job_1.cfg ファイルの seed の値を変えて疑似乱数の初期値を変更.

Comments