はじめに
Gaussian09で量子化学計算を行い、得られたlogファイルからSDFファイルに変換する方法を忘れないようにするためにここに書いておく。
使用したもの
・M1 Macbook Air(macOS:Sonoma)
・Gaussian09
・OpenBabel
・Python3(my-rdkit-env)
・Atom(エディタツール)
0.Gaussian09で計算
環境は研究室だったので普通に計算。logファイルを変換するPC内のユーザーフォルダーの中に入れておく。
0.OpenBabelのインストール
自分でインストールしてください。
1.シェルスクリプトの作成
エディタツール(今回はAtom)を使用して、logファイルをSDFファイルに変換するシェルスクリプトを書く。
#!/bin/bash
# 変換元のディレクトリ
source_dir="/Users/"
# 変換先のディレクトリ
output_dir="/Users/"
# 変換コマンド
convert_command="obabel -i log -o sdf"
# 変換を実行
for log_file in "$source_dir"/*.log; do
base_name=$(basename "$log_file" .log)
output_file="$output_dir/$base_name.sdf"
$convert_command "$log_file" -O "$output_file"
done
今回はこのスクリプトに、"myscript001.sh"という名前をつけ保存した。
2.シェルスクリプトを実行
まず、ターミナルを開いて、シェルスクリプトを実行できるような権限を以下のコマンドで与える。
% chmod +x myscript001.sh
以下のコマンドでシェルスクリプトを実行。
% ./myscript001.sh
僕の場合は、実行した後に" 1 molecule converted "といったメッセージがlogファイルの数だけ表示された。
3.複数のSDFファイルを1つにまとめる
先ほど変換されたSDFファイルを別々の状態にして使用するのは面倒なので1つにまとめる。ここでPythonを使用する。
import glob
import rdkit.Chem as Chem
from rdkit.Chem import SDWriter
# SDFファイルが保存されているディレクトリを指定
sdf_directory = "/Users/"
# 結合後のSDFファイル名
output_sdf_file = "combined.sdf"
# 指定したディレクトリ内のSDFファイルを全て取得
sdf_files = glob.glob(sdf_directory + "/*.sdf")
# 結合処理
combined_molecules = []
for sdf_file in sdf_files:
suppl = Chem.SDMolSupplier(sdf_file)
for mol in suppl:
if mol is not None:
combined_molecules.append(mol)
# 結合結果を新しいSDFファイルに書き出し
writer = SDWriter(output_sdf_file)
for mol in combined_molecules:
writer.write(mol)
writer.close()
print('結合完了')
4.変換されたSDFファイルを確認
ここで変換されたSDFファイルが全て変換できているかどうかをPythonで確認する。
import rdkit.Chem as Chem
suppl = Chem.SDMolSupplier('combined.sdf')
mols = [x for in suppl if x is not None]
print(len(mols)) # 読み込んだMolオブジェクトの数になればOK
最後に
いつかこのメモが活用されるときが来ますように