クリップボード上の分子を GaussView で表示【Python】

量子化学計算の出力ファイルには、たくさんの座標情報が含まれています。

効率よく計算を進めて行く上で、計算の途中経過を定期的にチェックすることはとても大切です。

しかし、計算途中の出力ファイルを計算系からダウンロードして、GaussView で開くのは面倒ですし、計算プログラムによっては整形しないと GaussView で読み取れないものもあります。

今回の記事では、クリップボード上の座標情報を GauuView で簡単に開くことができるスクリプトを紹介します。

座標情報を GaussView で表示

まずは、計算の出力ファイル中の座標をコピーし、簡単に可視化する様子をご覧ください。

スクリプト実行の様子

上の動画では、まず出力ファイル中の座標部分を ctrl + c (mac だと command + C) でコピーしています。その後、別の terminal のウィンドウで gvgv と打ち込みスクリプトを起動させ、GaussView で clipboard 上の座標を表示させています。

上の動画では GaussView を起動させるところで少し時間がかかってしまっていますが、あらかじめ GaussView が起動していれば gvgv と入力した瞬間に分子が表示されます。

(注) gvgv というのに特に意味はありません。キーボード上で近くにあるキーで押しやすいので、.bashrc でスクリプトの alias として設定しています。

SI の座標にも適応可!

このスクリプトは、SI の座標情報を読み取る際にも非常に便利です。

(注)上の動画中では、Open Access 誌の SI 中の座標情報を利用しています。

環境設定

管理人は、MacBook Pro (15-inch, 2017) を使用しています。

今回のスクリプトは python で書いています。pyperclip というライブラリーを使っているので、pip install pyperclip で入れておいてください。

実際の script (1)

 #!/usr/local/bin/python3
 
 import pyperclip
 import os
 import time

 body = pyperclip.paste()

 path = "/Users/hogehoge/clip_board_gv.com"
 
 with open(path, mode='w') as f:
     f.write("# STO-3G\n\ntitle\n\n0 1\n" + body + "\n\n\n")
 
 os.system('open /Applications/gv/gview.app ' + path + ' &')
 time.sleep(6)
 os.system('rm ' + path) 

GaussView で分子を表示させるには、.com ファイルのヘッダー部分を書く必要があります。

そこで、このスクリプトでは、

# STO-3G

title

0 1

というヘッダーを座標の前に書き足してやり、clip_board_gv.com というファイル名で一時保存しています。(保存場所は、path に書いてある場所です。hogehoge をユーザー名に変えてください。)

そして、open /Applications/gv/gview.app clip_board_gv.com & で GaussView で表示させた後に、すぐに clip_board_gv.com を削除しています。

(注) gv の path が通っていない場合は、通しておいてください。

別の形式も

上の動画で示した出力ファイルは、GRRM の AFIR の出力ファイル (TS_list) を例として取り上げたので、「元素記号 X Y Z」 という形式で座標が書かれていました。

しかし、gaussian の構造最適化での出力ファイルでは、以下のような形式で座標が書かれています。

この形式の座標にヘッダーを付け足しても GaussView ではエラーが起きてしまいます。

GaussView で表示するためには、Center Number の行を削除する必要があります。そこで、先ほどのスクリプトを以下のように変更します。

#!/usr/local/bin/python3

import pyperclip
import os
import time

#clipboard 上の情報を取得する
split_line = pyperclip.paste().split("\n")
firstline = split_line[0]

path = "/Users/hogehoge/clip_board_gv.com"

if "1" in firstline[:10] and "\t" not in firstline[:10]:
    with open(path, mode='w') as f:
        f.write("# STO-3G\n\ntitle\n\n0 1\n")
        for a in split_line:
            f.write(a[10:] + "\n")
        f.write("\n\n\n")
else:
    with open(path, mode='w') as f:
        f.write("# STO-3G\n\ntitle\n\n0 1\n" + pyperclip.paste() + "\n\n\n")

os.system('open /Applications/gv/gview.app ' + path + ' &')
time.sleep(6)
os.system('rm ' + path)

このスクリプトでは、どちらの形式の座標も可視化することが可能です。

改良した script の実行の様子

座標のコピーの仕方

上の動画では、分かりやすいようにマウスで選択してからコピーしていますが、キーボード操作のみでコピーすることも可能です。

また、マウスで選択する方法だと、画面上に座標が収まり切らずスクロールする必要がある場合などに正しい範囲が選択できない場合があります。

管理人は、普段から vi を使用しています。

vi で 1 行だけコピーする時は、カーソルをコピーしたい行に合わせた状態で yy と打つだけです。

また、複数行コピーしたい場合は、”行数yy” です。

例えば、60 原子の系の場合は、一つ目の原子の行にカーソルを合わせた状態で 60yy と打てばコピーできます。

しかし、vim でのコピーは通常の設定ではクリップボードには格納されません。

そこで、vim を再インストールし、clipboard を + に直しておく必要があります。詳しくは、参考文献 2 を見てください。

最後に、

今回紹介したスクリプトは、ただ単にクリップボード上の座標を一時ファイルにして GaussView で開くという何の芸も無い、しょうもない script ですが、便利なので管理人は結構頻繁に利用しています。

参考文献

  1. 【使えるものをPickUp】viでのコピー・カットの方法
  2. macのvimでクリップボードにコピーを使いたい!!

One comment

コメントを残す(投稿者名のみ必須)