#author("2024-05-15T17:23:09+09:00","default:okazaki","okazaki")
#author("2024-05-15T17:27:51+09:00","default:okazaki","okazaki")
#menu(howto/MenuBar)
* howto/vmd [#n0637cc9]
#contents
** 一行メモ [#k0a69fe0]
- VMDのpbcコマンドに関する説明 https://www.ks.uiuc.edu/Research/vmd/plugins/pbctools/ --  &new{2020-11-23 (月) 12:46:21};
- どことも結合していない原子は、ASHLCのS->wire->nonbondedで表示される。 --  &new{2021-03-13 (土) 10:20:16};
- 3.7GBの.xtcファイル(.trrで12.1GB相当)はVMDで全フレームを読み込むことができなかった。 --  &new{2021-03-14 (日) 14:43:12};
- alliumにインストールした。 /share/apps/vmd-1.9.3/bin/vmd-1.9.3 で起動する。 --  &new{2021-06-28 (月) 10:16:55};
- https://www.ks.uiuc.edu/Research/vmd/script_library/ --  &new{2024-05-01 (水) 16:33:20};
- xyz軸方向の表示・非表示・表示場所の変更は メニューの Display->Axes で変更可。 --  &new{2024-05-02 (木) 02:41:43};
- Tcl文法 https://www.freesoftnet.co.jp/webfiles/tclkits/doc/tclcom.html --  &new{2024-05-07 (火) 19:29:47};
- Visualization→Ruler は Save Visualization Stateで正常に保存されないため、削除して保存か、Load後に消して作り直す。 --  &new{2024-05-09 (木) 09:47:14};
- linux版でTcl text interface (コンソール)でbackspaceが効かない件。→ stty erase ^H をする --  &new{2024-05-09 (木) 10:16:42};
 そのほか、history, his, !num, !string, linux外部コマンド が使えるようだ。
- Tclの名前空間の使い方など https://freesoftnet.co.jp/webfiles/tclkits/doc/TclCmdRef/TclCmd/namespace_jp.htm --  &new{2024-05-09 (木) 16:43:45};
- 少なくともwindows版のとき、ファイルを保存するとき、絶対パスのフォルダ名に日本語やスペースが入っていた場合は正常に動作しない。 --  &new{2024-05-15 (水) 17:27:51};

#comment

* VMDの使い方 [#m6e4458c]

//---------------------------------------------------------------------------------

* VMDの基本的な操作 [#f8929531]

 R 回転モード
  マウス左ドラッグ: 回転
  マウス中ロール:  拡大縮小
 
 T 平行移動モード
  マウス左ドラッグ: 上下水平に移動
  マウス右ドラッグ: 奥行きの移動(左右のドラッグが、遠ざかる←→近づく)
  マウス中ロール:拡大縮小
 
 C 原子を左クリックして、回転中心選択
             デフォルト?に戻すには、VMD Mainウィンドウ Display->Reset View しかない?
 
 1 原子を左クリックして、原子のラベルを表示
 2 原子を2個左クリックして、原子間の距離を表示
 3 原子を3個左クリックして、原子間の角度を表示
 4 原子を4個左クリックして、原子間のねじれ角を表示
 
 P 原子をクリックすると、コンソールに原子の通し番号(index)などの情報が出る。chain番号はない
   場合はxと出る。ので、index番号から判断する?
   1 を押してもコンソールに情報が出る。

 Graphicsメニュ→Labels
  上記1~4など?で表示した残基名などのラベルを、削除したり、一時的に非表示したりする。


//---------------------------------------------------------------------------------

* VMDでgromacsのトラジェクトリーを表示 [#wd68dc03]

** トラジェクトリーの読み込み [#n986a04a]

 Fileメニュー→New Molecule→.groファイルを選択→Load→.trrファイルを選択→Load
 
 (注1) .trrファイルをLoadするときに、Load files for:のところは
 New Moleculeではなく、先に読み込んだ.groファイルの名称になっていること。
 時系列の原子座標が最初の.groのあとにアペンドされる。そのため、最初のフレーム
 (0フレーム目)を削除するとよい。
 (注2) .trrだけを読み込むこともできる。この場合は、ただの点として読み込まれる。
 (注3) .trrファイルには、スタートの構造と、最後の構造が含まれる。5,000stepを200step毎
 に出力していた場合、251フレーム含まれる。例えば、npt.trrの場合、nvt.groとnpt.gro
 が含まれる(NVT平衡化につづけてNPT平衡化をしている場合)。

 .trrに含まれる原子座標だけを保存したファイル形式は.xtcである。上記は.xtcでも同様。
 .trrには他に原子の速度と原子に働く力が含まれている。


** 蛋白質の形状を変更する [#sde468f0]

 Graphics→Representations→Create Repボタンを押す→Selectionsタブ
 →selected Atomsの欄をproteinにする→Applyボタン→Draw styleタブ
 →Drawing MethodをCPKなどにする。
 
 (注)表現を増やして描画できる。

*** 原子の選択 [#t9d8116c]

&COLOR(,yellow){原子の選択方法}; http://www.ks.uiuc.edu/Research/vmd/vmd-1.3/ug/node132.html

chainの選択は、chain A など。

残基名は、大文字である。

例(Selected Atomsの入力)
 resname TYR and not hydrogen
 resname HEM and not hydrogen
 name FE
 protein and not hydrogen
 (resname HEME or resname TYR) and not hydrogen
 
 resid 429 to 574  #アミノ酸配列の選択


*** 原子の選択とPDBでの保存 [#j9be4f81]

 例えば、Graphics→Representationsの Seleteted Atomsに次を入力する。
 
 (within 3 of (protein or resname HEM)) and not (protein or resname HEM) or ion
 
 sqrt((x-67)*(x-67)+(y-66)*(y-66)+(z-54)*(z-54)) < (34+2+3) and not (protein or resname HEM) or ion
     #このサイズはMaestroで読めるが操作は無理
 
 選択したものの(RepresentationsのSelection項目)を pdbファイルとして書き出すには、
 File→Save Coordinatesから、Save dataと Selected atomsを選んで Saveする。


** 表示状態の保存・ロード [#bc69004e]

 File→Load Visualization State or  Save Visualization State
 なお、表示に利用した .groや .trrはロード時に読み込まれる。
 (保存したファイルには、その .groや .trrのファイルを絶対パスで
  指定しているから、ここを変更すれば、ファイルを移動できる。)

*** バグ? [#p6113268]
トラジェクトリーを読み込んでいる場合、
VMDでstateをsaveする前に、Playで動くことを確認する。たまにバグる、バグったstateをloadしても直らない。


** BOXの境界を表示する [#od66e00e]

 Tk consoleで、 pbc boxと入力する。
 色付きは pbc box -color red など
 
 境界を消すには、pbc box -off
 
 メモ:chimeraでは Amberのトラジェクトリーは読み込めるらしいが、gromacsのは
 読み込めない。

** 他 [#m9f9e660]

*** 物差しを表示する [#fb381e58]

 Extensionsメニュー→Visualization→Ruler→tape,grid,Scaleのいずれかを選択


*** 視点やサイズをリセットする [#ob074382]

 Display→Reset View

*** クリッピングやdepth due [#mbc9fe39]

 Display→Display Setting、でいろいろいじる

*** 画像の保存(windows版) [#zee0ba98]
 File->Render->
  using: Snapshotのまま
  filename: フォルダをBrowseしてファイル名.bmpを入れて保存ボタン
      (フォルダ名に日本語やスペースが含まれていては正常動作しないので、
            デスクトップにいったん保存がよい)
 ->Start Renderingを押す。
 #上記のbmpよりも、スクリーンショットとって docxに保存するのが少しきれい。


** リンク [#i7ca75b6]

***ドキュメント [#wf2345fc]
- https://www.ks.uiuc.edu/Research/vmd/current/docs.html
- https://www.ks.uiuc.edu/Research/vmd/mailing_list/
-- google searchで、「keyword site:www.ks.uiuc.edu/Research/vmd/vmd-1.3/ug」で検索してもよい

*** その他 [#xda47c98]
- https://www.researchgate.net/post/How_can_I_remove_pbc_box_in_VMD_for_all_frames
- https://www.yumpu.com/en/document/read/10444677/advanced-vmd-script-examples-and-customization-axel-kohlmeyer


//---------------------------------------------------------------------------------

* Tclスクリプトでトラジェクトリーの時間を表示する [#be60e6a6]

 #2024/05/09 okazaki,i
 # VMD 1.9.3 によるトラジェクトリ表示に、そのフレームの時間も表示するVMDのTclスクリプト
 #
 # 使い方:
 # 1) ~/.vmdrcファイルに以下のものを入れておく。
 #      menu main      on
 #      set auto_path [concat $env(HOME)/.vmd/myscripts $auto_path]
 #      auto_mkindex $env(HOME)/.vmd/myscripts *.tcl
 # 2) ~/.vmd/myscriptディレクトリにこのファイルを入れておく。
 # 3) vmdを起動し通常通りトラジェクトリを読み込み後、tcl text interface (vmd> プロンプト, コンソール)
 #    から mytraceon を実行する。原子をマウスでpickすると(キーボード3->マウス左クリック)、その位置に
 #    時間が表示される。何もpickしないと原点座標に表示されたままである。
 #      予めこのスクリプトの tperframeをトラジェクトリの1フレーム当たりの時間にしておくこと。使い
 #    終わったら mytraceoff を実行すると時間は表示されなくなる。
 #
 # メモ:
 # - mytraceonした後でも、コンソールから set mytrace::tperframe 2.0 で変更可
 # - set mytrace::debugf 1 の変更も可
 # - File->Save Visualization Stateは drawによる表示のみしか保存されないので、load後再度 mytrceonする
 # - 分子を読み込んでいない状態で mytraeonを実行した場合の動作は不明
 # - Top(VMD Mainの"T")を変えると、変える前の時間表示が残ったままになる、理由不明
 #
 # ref. pp140-141, p127 in VMD User's Guide Version 1.9.3
 #      https://www.yumpu.com/en/document/read/10444677/
 #                                   advanced-vmd-script-examples-and-customization-axel-kohlmeyer
 #      https://freesoftnet.co.jp/webfiles/tclkits/doc/TclCmdRef/TclCmd/namespace_jp.htm
 #      など。
 #      スクリプトの途中でエラーがあると、そこでスクリプトは終了するため、デバッグ時は注意。
 
 proc mytraceon  {} { mytrace::traceon  }
 proc mytraceoff {} { mytrace::traceoff }
 proc mydebugp { flag msg } { if { $flag } { puts $msg } }
 
 namespace eval mytrace {
     set tperframe  0.01  ;#1frame = 0.01ps (表示するトラジェクトリに合わせて変更すること)
    #set tperframe  2.0
     set debugf     0     ;#デバッグ用 0 or 1
 
     #[molinfo top]は何番でも可のようだ(playボタンで全てが再描画らしい)、ただし存在すること。
     #何番でもよく、disptimeが呼ばれて処理が実行される。
     proc traceon {} {
         trace add    variable ::vmd_frame([molinfo top]) write mytrace::disptime
         trace add    variable ::vmd_pick_event           write mytrace::pickatom
         mytrace::disptime {}
     }
     proc traceoff {} {
         trace remove variable ::vmd_frame([molinfo top]) write mytrace::disptime
         trace remove variable ::vmd_pick_event           write mytrace::pickatom
         draw delete all; pbc box  ;#このへんなんか変?
        #draw delete all; pbc box -off
        #draw delete all
     }
 
     #vmd_frame(n)の描画イベントにより実行
     proc disptime {args} {
         mydebugp $mytrace::debugf "****In mytrace::disptime { $args }"
         if { [info exists mytrace::tmpdtxt] } { draw delete $mytrace::tmpdtxt;
                                              mydebugp $mytrace::debugf "  del tmpdtxt=$mytrace::tmpdtxt" }
         if { ![info exists mytrace::coord] } { set ::mytrace::coord "0.0 0.0 0.0" } ;#ここは単純化が可
 
         draw color yellow
         set f [molinfo top get frame]
         set t [expr $f * $mytrace::tperframe]
         set str "t=[format "%.2f" $t]ps ($f frame)"
 
         mydebugp $mytrace::debugf "  $str, namespace=[namespace current]"
         set ::mytrace::tmpdtxt [ draw text "$mytrace::coord" "$str" size 1.5 ] ;#代入になぜ先頭の::が必要?
         mydebugp $mytrace::debugf "  new tmpdtxt=$mytrace::tmpdtxt"
         mydebugp $mytrace::debugf "****Ot mytrace::disptime"
     }
 
     #pickイベントにより、原子のx,y,z座標を coordに代入
     #(ウィンドウの2次元の固定位置を指定する方法は不明だったので)
     proc pickatom {args} {
         mydebugp $mytrace::debugf "****In mytrace::pickatom { $args }"
         mydebugp $mytrace::debugf "  ::vmd_pick_mol,::vmd_pick_atom = $::vmd_pick_mol,$::vmd_pick_atom"
         set sel [atomselect $::vmd_pick_mol "index $::vmd_pick_atom"]
         lassign [$sel get {x y z}] mytrace::coord
         mydebugp $mytrace::debugf "  mytrace::coord = $mytrace::coord"
 
         disptime {}
         mydebugp $mytrace::debugf "****Ot mytrace::pickatom"
     }
 }
 
 #end of file


//---------------------------------------------------------------------------------

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS