このチャプターの目次
分子の構造情報を入力して、半経験的分子軌道法によって化学的な情報を得る手法について学んでいきます。
ここでは、主にopen babelとmopacを用いて以下の項目を学んでいきます。
講義動画
今回のアウトライン
0. minicondaのインストール
condaのインストール
%%bash
wget https://repo.anaconda.com/miniconda/Miniconda3-py37_4.12.0-Linux-x86_64.sh
bash Miniconda3-py37_4.12.0-Linux-x86_64.sh -b -f -p /usr/local
conda install python=3.7 --yes
環境の追加
import sys
_ = (sys.path.append("/usr/local/lib/python3.7/site-packages"))
1. openbabelによるインプットファイルの作成
condaを利用したopenbabelのインストール
!conda install -c conda-forge openbabel -y
import openbabel
from openbabel import pybel
読み込みフォーマットと出力のフォーマットの数
print(len(pybel.informats), len(pybel.outformats))
具体的なフォーマットの種類の確認
入力形式の確認
pybel.informats
出力形式の確認
pybel.outformats
smilesでの分子の読み込むときの具体例
m = pybel.readstring("smiles", "C1=CC=C(C=C1)O")
xyz座標での分子の出力
print(m.write("xyz"))
構造最適化
m.make3D(forcefield='mmff94', steps=1000)
MOPACの形式で出力
mopac_format = m.write("mop")
print(mopac_format)
2. MOPACの実行
condaでMOPACのインストール
!conda install -c -y conda-forge mopac
subprocesでMOPACの実行
import subprocess
file_path = "/content/drive/MyDrive/data/mopac/phenol.dat"
subprocess.run('mopac ' + file_path, shell=True)
3. MOPACの計算ファイルの読み取り
ファイル操作で値を取得します。
- arcファイルの読み取り例
with open(file_path, mode='r') as f:
lines = f.readlines()
#stripメソッドで空白や特定文字の削除
lines_strip = [line.strip() for line in lines]
#特定の文字列があるかを判定
HOMO_line = [line for line in lines_strip if 'HOMO' in line]
if HOMO_line != []:
HOMO=float(str(HOMO_line[0][30:39]))
print("HOMO: " + str(HOMO))
このコードでHOMOの値を読み取る。