引き続きPsi4の計算実施用アプリについて紹介したいと思います。
今回からは計算実施関数に関するコードの部分になります。
計算にあたって、分子の電荷とスピン多重度の設定ができますので、それらの値をTkinterアプリでの入力値(chr, mul)を受けて実行する形にしています。また読み込む分子ファイルのファイルネームも同様です(global定義にしないとエラーが出ましたのでここではglobal宣言をしていますが、他のやり方もあるのかもしれません)。
続いてファイルの読み込みと計算用のインプットファイルの準備になります。psi4ではインプットファイルはxyzファイル形式ですので、一般的によく用いられるmolファイルの形式の場合には変換の作業が必要となります。
mol ファイルからPsi4用のxyzファイルへの変換については「化学新しいカタチ」さんの下記の記事などを参考にさせていただきました。
molファイルですが, 読み込んだファイルは一旦mol_Hと定義し直しています。読み込んだmolファイルの初期構造が必ずしも安定構造に近いとは限らないので、Rdkitのコンフォマー発生の機能(EmbedMultipleConfs)を用いて、コンフォマーを発生させ(ここでは10個)、MMFFで安定化化させた後(MMFFGetMoleculeForceField)エネルギー順に並べています。その中からエネルギー的に最も安定な構造を初期構造として、xyzファイル形式に変換しています。
計算結果は初期構造に依存するところが非常に大きいので、molファイルからの変換に合わせて簡易的ですが自動的いコンフォマーサーチを行うシークエンスを組み入れる形にしてみました。Psi4だけでは困難ですが、Rdkitをうまく組み合わせることでより使いやすいアプリになればと思っています。
一方、xyzファイルの場合はそのまま、読み込んでPsi4の初期構造(geometry)としています。
以上、ファイル等の読み込みからPsi4用の初期構造ファイルの作成まで、計算実施関数に関するコードについて紹介しました。次回も引き続き計算実施関数について紹介したいと思います。