Chapter 41

【5回目】MOPACとopenbabelの練習とファイルの読み取り

poclabweb
poclabweb
2022.11.04に更新

分子の構造情報を入力して、半経験的分子軌道法によって化学的な情報を得る手法について学んでいきます。
ここでは、主にopen babelとmopacを用いて以下の項目を学んでいきます。

講義動画

https://vimeo.com/showcase/8857656

今回のアウトライン

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の値を読み取る。