Master3’s blog

LaTeXやExcelVBAなどの作例集

Apixabanはどの溶媒と強く相互作用するのか?― MD・溶媒和エネルギー・ESPマップから見る溶媒との相互作用

これまで、Apixabanの結晶構造や分子間相互作用について、計算化学を使って少しずつ調べてきました。

今回からは視点を変えて、**「Apixabanは溶媒の中でどのように振る舞うのか?」**を調べていきます。

特に今回注目したのは、

  • 水

  • メタノール(MeOH)

  • エタノール(EtOH)

  • アセトニトリル(MeCN)

  • DMSO

  • DMF

  • アセトン

  • クロロホルム

の8種類の溶媒です。

それぞれについて分子動力学(MD)計算を行い、その軌跡からスナップショットを取り出して、Apixabanと溶媒分子との相互作用エネルギーを計算しました。

さらに、MD最終構造についてESP(静電ポテンシャル)マップも作成しました。

今回は、この一連の計算結果をまとめてみます。


今回やりたかったこと

今回の研究の最終的な目的は、

「どのような溶媒でApixabanが溶けやすくなるのかを、理論計算から理解・予測する」

ことです。

ここで重要なのは、単純に

「Apixabanと溶媒の相互作用が強ければ、必ず溶解度が高い」

とは言えないことです。

Apixabanが固体として存在している場合、まず結晶中の分子間相互作用を壊して、結晶からApixabanを取り出す必要があります。

その一方で、溶液中に出たApixabanは、今度は溶媒によって安定化されます。

つまり、溶解という現象を考えるには、

結晶側の安定化

と

溶媒側の安定化

の両方を見る必要があります。

今回計算している溶媒との相互作用エネルギーは、そのうちの「溶媒側」を理解するための一つの指標になります。


1. まずはMD計算

今回のMD計算では、Apixaban 1分子と10分子の溶媒を配置し、298.15 Kで20 psのMD計算を行いました。

1 fsのタイムステップで計算し、100 fsごとに構造を保存しています。

そのため、

201フレーム

の構造が得られます。

イメージとしては、

t = 0 ps
   ↓
   Apixaban + 溶媒分子
   ↓
   MD
   ↓
   溶媒分子が移動・再配向
   ↓
t = 20 ps

という流れです。

今回の計算では、溶媒分子がApixabanの周囲にどのように集まり、どのような配置を取るのかを見ることも重要な目的でした。


2. MDの様子をGIFにしてみた

せっかくMDを計算したので、数値だけではなく、実際の軌跡を動画として確認できるようにしました。

Jmolを使って各フレームを800×800 pxの画像として書き出し、それをPython + PillowでGIF動画にしています。

1フレーム = 0.1 psなので、201フレームで約20.1秒の動画になっています。

8種類の溶媒について動画を作成しました。

Water

Water MD GIF

 

Methanol

MeOH MD GIF

 

Ethanol

EtOH MD GIF

 

Acetonitrile

MeCN MD GIF

 

DMSO

DMSO MD GIF

 

DMF

DMF MD GIF

Acetone

Acetone MD GIF

Chloroform

Chloroform MD GIF

実際に動画にしてみると、単なる座標データだったものが「分子の動き」として見えるので、かなり面白いです。

特に溶媒によって、Apixabanの周囲に集まってくる分子数や配置の変化が違って見えます。


3. MDスナップショットから溶媒との相互作用エネルギーを計算

次に、MDの各フレームについて、

Apixaban + 溶媒10分子

の相互作用エネルギーを計算しました。

今回使用した定義は、

ΔEA−S=E(A+nS)−E(A)−E(nS)\Delta E_{A-S} = E(A+nS)-E(A)-E(nS)

です。

ここで、

  • AA:Apixaban

  • SS:溶媒分子

  • n=10n=10

です。

値が負になるほど、

そのMDスナップショットにおいてApixabanと溶媒10分子が相互作用によって安定化されている

と解釈できます。

ただし、ここは重要な注意点があります。

これは溶媒和自由エネルギー ΔGsolv\Delta G_{\mathrm{solv}} そのものではありません。

あくまで、MDで得られた固定構造に対する凍結スナップショットの相互作用エネルギーです。


4. MD最終構造のESPマップを見る

MDの動画を見た次に、

「では、Apixabanのどの部分に溶媒分子が近づいているのか?」

を見てみます。

そこで利用したのが、ESP(Electrostatic Potential:静電ポテンシャル)マップです。

ESPマップでは、分子表面における静電ポテンシャルの分布を見ることができます。

今回の解析では、各溶媒についてMD計算で得られた最終構造を取り出し、その構造についてESPマップを作成しました。

これによって、

Apixabanのどの部分が静電的に特徴的なのか

そして、

そこに溶媒分子がどのような向きで近づいているのか

を、構造と電子状態の両面から確認できます。


Water

Map values for surface "surface": minimum -0.1017, mean 0.05737, maximum 0.2811

Map values for surface "surface": minimum -0.09761, mean 0.05573, maximum 0.3264

MeOH

Map values for surface "surface": minimum -0.09779, mean 0.06268, maximum 0.2808

Map values for surface "surface": minimum -0.09963, mean 0.0576, maximum 0.3146

EtOH

Map values for surface "surface": minimum -0.1003, mean 0.06059, maximum 0.2787

Map values for surface "surface": minimum -0.09945, mean 0.05521, maximum 0.3138

MeCN

Map values for surface "surface": minimum -0.07802, mean 0.07003, maximum 0.2525

Map values for surface "surface": minimum -0.09924, mean 0.0703, maximum 0.222

DMSO

Map values for surface "surface": minimum -0.09757, mean 0.05759, maximum 0.1909

Map values for surface "surface": minimum -0.1188, mean 0.06881, maximum 0.2058

DMF

Map values for surface "surface": minimum -0.1175, mean 0.06456, maximum 0.1947

Acetone

Map values for surface "surface": minimum -0.09059, mean 0.06221, maximum 0.2339

Map values for surface "surface": minimum -0.09525, mean 0.06637, maximum 0.1837

CHCl₃

Map values for surface "surface": minimum -0.07316, mean 0.06989, maximum 0.2474

Map values for surface "surface": minimum 0.0245, mean 0.0751, maximum 0.2461

8種類を並べてみると、同じApixabanでも、溶媒によって周囲の分子配置がかなり異なっていることが分かります。

ここで重要なのは、ESPマップを単独で見るのではなく、

MDで実際に形成された構造

と

その構造における静電ポテンシャル

をセットで見ることです。


5. そして相互作用を数値化する

ここまでは、

「分子がどう動いたか」

と

「どこが静電的に特徴的なのか」

を見てきました。

次は、それを数値として評価します。

MDの各フレームについて、

Apixaban + 溶媒10分子

の相互作用エネルギーを計算しました。

今回使用した定義は、

E(A+nS)-E(A)-E(nS)
]

です。

ここで、

  • (A):Apixaban
  • (S):溶媒分子
  • (n=10)

です。

値が負になるほど、そのMDスナップショットにおいてApixabanと溶媒10分子の相互作用による安定化が大きい、と考えることができます。

ただし、ここで重要な注意点があります。

今回計算しているのは、

溶媒和自由エネルギー (\Delta G_{\mathrm{solv}}) そのものではありません。

あくまで、MDで得られた固定構造に対する凍結スナップショットの相互作用エネルギーです。


6. 計算結果

今回得られた全201フレームについて平均を取ると、次のようになりました。

溶媒 平均 ΔE<sub>A-S</sub> (kcal/mol)
Water -9.82
MeOH -15.59
MeCN -11.70
EtOH -10.26
DMSO -32.10
DMF -12.25
Acetone -11.57
CHCl₃ -15.74

今回の結果で特に目立ったのがDMSOです。

DMSOでは、

[
\Delta E_{A-S}\approx-32.1\ {\rm kcal/mol}
]

となっており、今回調べた8種類の溶媒の中では非常に強いApixaban–溶媒相互作用が得られました。


7. 水との相互作用が弱い、という意味ではない

ここは今回の結果で特に注意したいところです。

水の平均値がDMSOより小さいからといって、

「Apixabanは水とあまり相互作用しない」

という意味ではありません。

水は非常に小さな分子であり、今回の計算は「10分子」という固定した分子数で比較しています。

そのため、分子サイズ、接触できる表面積、溶媒分子の数密度なども結果に影響します。

また、今回の値は、

Apixaban + 10溶媒分子

という有限系についての相互作用エネルギーです。

したがって、この数字をそのまま実験的な溶解度と対応させることはできません。


8. Apixaban周辺の溶媒分子数との関係

相互作用エネルギーだけでなく、Apixabanの周囲4 Å以内に存在する溶媒分子数も調べました。

これも興味深い結果になりました。

例えばDMSOでは、平均して約8分子が4 Å以内に存在していました。

一方、他の溶媒では3~5分子程度のものも多く、溶媒によってApixaban周辺の局所構造がかなり異なります。

さらに、相互作用エネルギーと4 Å以内の溶媒分子数との相関を調べると、

  • MeOH:(r=-0.642)
  • EtOH:(r=-0.906)
  • DMSO:(r=-0.635)
  • DMF:(r=-0.827)
  • Acetone:(r=-0.880)
  • CHCl₃:(r=-0.723)

となりました。

多くの系で、

Apixabanの近くに溶媒分子が多く存在する構造ほど、Apixaban–溶媒相互作用がより負になる

という傾向が見られました。

ただし、これは単純に「接触数が多いから相互作用が強い」とだけ解釈するのではなく、MD中の構造変化と相互作用エネルギーが連動している、と捉える必要があります。


9. 20 psではまだ平衡化していない溶媒もある

今回の解析で、もう一つ重要なことが分かりました。

すべての溶媒について、

「20 psの平均値を平衡状態の代表値として扱ってよい」

とは言えません。

特に、

  • EtOH
  • DMF
  • Acetone
  • CHCl₃

では、計算時間の後半に向かってApixaban周辺の溶媒配置が変化していました。

例えばEtOHでは、Apixabanの周囲4 Å以内に存在する溶媒分子数が時間とともに増加し、それに伴って相互作用エネルギーも強くなっていました。

つまり、

初期構造
   ↓
溶媒が再配置
   ↓
Apixaban周辺の溶媒構造が変化
   ↓
相互作用が強くなる

という過程が、20 psの計算時間内に残っていた可能性があります。

そのため、

今回の全201フレーム平均値を、そのまま「平衡状態の溶媒和エネルギー」と呼ぶのは適切ではありません。

むしろ今回のMDから、

「20 psではまだ溶媒環境が変化している系がある」

ということ自体が分かった、と考えています。


10. DMSOがかなり特徴的

今回の計算で特に目立ったのがDMSOでした。

DMSOでは、

[
\Delta E_{A-S}\approx-32.1\ {\rm kcal/mol}
]

と、他の溶媒よりかなり強い相互作用が得られています。

また、MD中でもApixabanの周囲にDMSO分子が非常に多く存在していました。

これは、ApixabanとDMSOの間に比較的強い相互作用が形成されている可能性を示しています。

ただし、

「だからDMSO中での溶解度が必ず最大になる」

とは、まだ結論できません。

溶解度を決めるには、ここにもう一つ、

Apixaban結晶から分子を引き抜くために必要なエネルギー

を考える必要があるからです。


11. 「溶媒との相互作用」と「溶解度」は別物

今回の計算を通して、改めて重要だと感じたのがここです。

例えば、

Apixaban結晶
     │
     │ 結晶中の相互作用を壊す
     ▼
  Apixaban
     │
     │ 溶媒によって安定化
     ▼
Apixaban in solution

というプロセスを考える必要があります。

つまり、

[
\text{溶解しやすさ}
]

を理解するには、

[
\text{結晶から脱離するためのコスト}
]

と

[
\text{溶媒による安定化}
]

のバランスを見る必要があります。

今回計算したMDスナップショットの相互作用エネルギーは、そのうちの「溶媒による安定化」を理解するためのデータです。


12. これまで計算してきた「結晶側」とつながってくる

ここで、これまで進めてきたApixaban結晶の計算が意味を持ってきます。

以前は、Apixaban結晶中で、

Apixaban–Apixaban間の相互作用

を調べていました。

さらに、多体相互作用についても調べ、

E(A+\mathrm{shell})-E(A)-E(\mathrm{shell})
]

と、各二体相互作用の和との差を調べました。

つまり、結晶側については、

Apixabanが結晶中でどれくらい強く束縛されているのか?

という問題を調べています。

今回のMD計算では、溶媒側について、

溶媒中でApixabanがどの程度安定化されるのか?

を調べています。

この二つを組み合わせることで、ようやく、

なぜある溶媒ではApixabanが溶けやすく、別の溶媒では溶けにくいのか?

という本来の問題に近づいていきます。


13. 今回の結果をどう見るべきか

現時点での結果をまとめると、

項目 今回分かったこと
MD 溶媒によってApixaban周囲の構造が大きく異なる
GIF その構造変化を視覚的に確認できる
ESP Apixabanの静電的な特徴と溶媒配置を確認できる
相互作用エネルギー DMSOが特に強い
水 Apixabanとの相互作用は存在する
局所構造 近接溶媒分子数と相互作用エネルギーに相関が見られる
平衡化 一部の溶媒では20 psでも構造変化が続いている
溶解度 相互作用エネルギーだけでは決められない

つまり今回の計算結果は、

「溶解度ランキング」ではありません。

あくまで、

「Apixabanが各溶媒とどのような相互作用を形成するのか」

を調べた結果です。


14. 次にやりたいこと

ここから先が、今回の研究の本題になってきます。

① MDの平衡化領域をきちんと評価する

20 psの全期間を単純平均するのではなく、

  • 溶媒分子数
  • Apixaban–溶媒距離
  • 相互作用エネルギー
  • 構造指標

などの時間変化を確認して、どこからが比較可能な領域なのかを検討します。

② より高精度な計算でスナップショットを評価する

現在のXTB2による計算を基準にして、選択したスナップショットについてr²SCAN-3cなどでも評価し、

XTB2と高精度計算の相関

を調べたいと考えています。

③ 結晶側の計算と組み合わせる

今回の溶媒との相互作用だけではなく、これまで計算してきたApixaban結晶の相互作用エネルギーや多体効果と組み合わせます。

最終的には、

[
\boxed{
\text{Crystal lattice stabilization}
+
\text{Solvation stabilization}
+
\text{Entropy/free-energy effects}
}
]

という視点からApixabanの溶解性を考えていきたいと思っています。


おわりに

今回、8種類の溶媒についてMDを行い、201フレームずつのスナップショットからApixaban–溶媒相互作用エネルギーを計算しました。

さらに、MD最終構造についてESPマップを作成し、

MDによる分子の動き

ESPによる電子状態

相互作用エネルギーによる数値評価

という3つの視点から、Apixabanと溶媒の関係を見てみました。

今回の計算では、DMSOで特に強い相互作用が観測されました。

一方で、MDを実際に動画として確認すると、溶媒分子が単純に「周囲にいる」だけではなく、時間とともに再配置されていく様子も見えてきました。

そしてESPマップを見ることで、その溶媒分子がApixabanのどの部分に近づいているのかを、電子的な特徴と合わせて考えることができます。

計算化学では、最終的なエネルギーの数字だけを見ると見落としてしまうものがあります。

「分子がどう動いたのか」

「どこに溶媒が集まったのか」

「どの部分に近づいたのか」

「なぜその配置になったのか」

を順番に見ていくことで、数値の意味が少しずつ見えてきます。

そして最終的に知りたいのは、

「なぜApixabanは水とは相互作用するのに、水には溶けにくいのか?」

という問題です。

その答えを探すために、次は「溶媒側」だけではなく、Apixaban結晶側とのエネルギーバランスまで含めて考えていきたいと思います。

【計算化学】Apixabanを結晶から引き剥がしてみた――D1〜D9 Pull計算と多体相互作用

これまで、Apixaban(アピキサバン)の溶解性を量子化学計算から理解するために、少しずつ計算を進めてきた。

最初は、

「水にはほとんど溶けないのに、なぜDMSOなどには比較的よく溶けるのか?」

という素朴な疑問から始まった。

SMDやCOSMO-RSによる溶媒和計算を行ってみると、単純に「水との相互作用が弱いから溶けない」という説明ではどうも辻褄が合わない。

実際、SMDではApixabanの溶媒和自由エネルギーが、

  • Water:−40.99 kcal/mol

  • DMSO:−32.72 kcal/mol

  • Methanol:−47.03 kcal/mol

となった。

つまり、少なくとも単純な溶媒和エネルギーだけを見れば、水は決して「Apixabanと相性が悪い溶媒」ではない。

そこで、もう一つの問題に目を向けることにした。

「そもそも、結晶の中にいるApixaban分子を外へ取り出すには、どれくらいのエネルギーが必要なのか?」

前回までの多体相互作用解析では、この問題をD1〜D9の分子間相互作用や、D3・D9を中心とした3体相互作用から調べてきた。

今回はそこから一歩進めて、

実際にApixaban分子を結晶中から少しずつ引き離してみる

ことにした。


1.まずD1〜D9の分子間相互作用を見る

Apixabanの結晶構造から、中心となる分子Aと、その周囲に存在する代表的な分子を抽出した。

その結果、代表的な分子間配置としてD1〜D9という9種類のDimerを作ることができた。

それぞれについて、GFN2-xTBによる相互作用エネルギーを計算した。

相互作用エネルギーは、

ΔEint=Edimer−Emonomer,A−Emonomer,B\Delta E_{\mathrm{int}} = E_{\mathrm{dimer}} - E_{\mathrm{monomer,A}} - E_{\mathrm{monomer,B}}

で定義した。

負の値になるほど、2分子が相互作用によって安定化していることを意味する。

今回得られた値は、

Dimer ΔEint (kcal/mol)
D1 −14.70
D2 −17.15
D3 −16.75
D4 −5.34
D5 −7.90
D6 −3.67
D7 −6.03
D8 −1.73
D9 −1.62

となった。

かなり大きな違いがある。

D2やD3では約−17 kcal/molなのに対し、D8やD9では−2 kcal/mol程度しかない。

つまり、

結晶中のすべての分子間接触が同じ強さではない。

ということが分かる。


2.しかし「Dimerの足し算」だけでは不十分だった

ここで一つ問題がある。

D1〜D9の相互作用を計算して、それを全部足せば結晶の安定化を説明できるのだろうか?

実際の結晶では、分子Aは分子Bだけと相互作用しているわけではない。

AはB、C、D……と同時に相互作用している。

さらにBとCも相互作用している。

つまり、

Etotal≠∑EpairE_{\mathrm{total}} \neq \sum E_{\mathrm{pair}}

となる可能性がある。

そこで、周囲の分子を少しずつ追加していくMany-Body計算を行った。


3.結晶の中では「多体効果」が無視できなかった

中心分子Aと周囲の分子を段階的に追加して、

Ebind=E(A+shell)−E(shell)−E(A)E_{\mathrm{bind}} = E(A+\mathrm{shell}) - E(\mathrm{shell}) - E(A)

を計算した。

一方、それぞれのDimer相互作用を足し合わせ、

Epair=∑i[E(A+Di)−E(Di)−E(A)]E_{\mathrm{pair}} = \sum_i \left[ E(A+D_i)-E(D_i)-E(A) \right]

とした。

そして、

Enonadd=Ebind−EpairE_{\mathrm{nonadd}} = E_{\mathrm{bind}} - E_{\mathrm{pair}}

を非加法性として定義した。

Stage09まで分子を追加すると、最終的な非加法性は、

+24.5 kcal/mol\boxed{+24.5\ \mathrm{kcal/mol}}

程度になった。

これは、

「Dimerの相互作用を全部足せば、結晶中の相互作用を完全に説明できる」

とは言えないことを示している。

ただし、この+24.5 kcal/molをそのまま「3体相互作用」と呼ぶことはできない。

3体、4体、それ以上の多体効果や、クラスター環境による電子的応答などが含まれているからだ。

そこで、D3とD9をfocusにして明示的な3体計算を行った。


4.D3・D9の3体解析

3分子A、B、Cについて、

ΔE3(A,B,C)=E(A,B,C)−E(A,B)−E(A,C)−E(B,C)+E(A)+E(B)+E(C)\Delta E_3(A,B,C) = E(A,B,C) -E(A,B) -E(A,C) -E(B,C) +E(A) +E(B) +E(C)

という3体項を計算した。

この計算によって、

「3分子が同時に存在することで、2体相互作用の単純な足し算からどれだけズレるのか?」

を見ることができる。

では、3分子が存在すると電子的には何が起きているのか?

エネルギーの数字だけでは、その理由までは分からない。

そこで、D3aを含む3量体 A + D3a + D2a について、r²SCAN-3cによる静電ポテンシャル(ESP)を計算してみた。

Map values for surface "surface": minimum -0.1011, mean 0.05749, maximum 0.21

今回のESPマップは、D3周辺の電子的な環境を視覚的に確認するためのものだ。

ここで重要なのは、ESPそのものを「3体相互作用」と同一視することではない。

ESPは電子密度と原子核から生じる静電ポテンシャルを表しており、分散相互作用などを直接表示しているわけではない。

しかし、

「3分子が同時に存在することで、各分子が感じる電子的環境がどのようになっているのか」

を考えるための手掛かりにはなる。

今回のD3a解析では、明示的な3体項の合計が

$$
+5.9803\ \mathrm{kcal/mol}
$$

となり、D3aを追加したことによる非加法性

$$
+6.0208\ \mathrm{kcal/mol}
$$

の約99%を再現した。

つまり、D3では単純なDimer相互作用の足し算だけでは説明できない、周囲の分子を含めた環境依存性がかなり大きい。

ESPマップは、その電子的背景を直感的に見るための一つの手段になる。

D9をfocusにした場合、明示的な3体項の合計は、

+2.3550 kcal/mol+2.3550\ \mathrm{kcal/mol}

だった。

一方、D9を除いたクラスターと、D9を含むクラスターとの差から求めた増分は、

+2.4014 kcal/mol+2.4014\ \mathrm{kcal/mol}

だった。

差はわずか、

+0.0464 kcal/mol+0.0464\ \mathrm{kcal/mol}

である。

つまり、

D9の非加法性の約98%が、明示的な3体項によって再現された。


5.D3aではさらに大きな3体効果が見えた

同じ解析をD3aについても行った。

結果は、

3体項の合計:

+5.9803 kcal/mol+5.9803\ \mathrm{kcal/mol}

実測された増分:

+6.0208 kcal/mol+6.0208\ \mathrm{kcal/mol}

だった。

差は、

+0.0405 kcal/mol+0.0405\ \mathrm{kcal/mol}

である。

こちらも、

約99%が明示的な3体項で再現された。

D9だけの特殊な現象ではなく、D3aでも同じ傾向が現れたのは興味深い。


6.ここで「実際に引っ張ってみる」

ここまでの計算は、基本的に「その構造でのエネルギー」を比較するものだった。

しかし、実際に結晶から分子が溶け出すことを考えると、

「分子を結晶から少しずつ遠ざけたら、エネルギーはどう変化するのか?」

を直接見てみたくなる。

そこで、中心となるApixaban分子を固定し、相手分子を結晶中の位置から少しずつ引き離すRigid Pull計算を行った。

Pull距離は、Dimerによって、

  • 0.5 Å

  • 1.0 Å

  • 1.5 Å

  • 2.0 Å

  • 3.0 Å

  • 5.0 Å

を基本として設定した。

一部のDimerでは、さらに8、10、15、20 Åまで伸ばした。

こうして、

E(r)E(r)

という「分子間距離に対する相互作用エネルギー」の変化を見ることができる。


7.D1〜D9を実際に引き離してみた

今回のPull計算結果を一枚にまとめると、かなり面白いグラフになった。

D1〜D9を並べてみると、エネルギー曲線の形がかなり違っている。

単純に、

「距離が近いほど全部同じように強く結合している」

というわけではない。

D1〜D3のように、比較的強い相互作用を示すものもあれば、D8・D9のように非常に弱いものもある。

今回の計算では、0 Å付近から分子を引き離すにつれてエネルギーが変化し、最終的には相互作用がほぼ消えていく。

これは「結晶から分子を取り出す」という現象を、かなり単純化したモデルではあるものの、直接エネルギー曲線として見ることができるということだ。


8.そして、実際に分子を動かしてみる

グラフだけでは、分子がどう動いているのか分かりにくい。

そこで、各Pull計算の構造をJmolで可視化し、GIFアニメーションにした。

D1

 

D2

 

D3

 

D4

 

D5

 

D6

 

D7

 

D8

 

D9

 

数字だけを見ていると、

「−17 kcal/molと−2 kcal/molでは、ずいぶん違うな」

というだけに見える。

しかし、実際に分子を動かしてみると、

どの方向に離れていくのか、どの部分が最後まで近くに残るのか、どの配置が特徴的なのか

が直感的に見えてくる。

ここは今回の計算で個人的にかなり面白かったところだ。


9.Pull計算から見えてきたこと

D1〜D9のPull計算から、少なくとも一つはっきりしたことがある。

それは、

「結晶中の分子間相互作用」は、単純な距離だけでは説明できない

ということだ。

同じ5 Å引き離す計算でも、エネルギー変化の大きさはDimerによってかなり違う。

これは、

  • 分子の向き

  • 接触する原子の種類

  • 水素結合

  • 静電相互作用

  • 分散相互作用

  • 複数分子による環境効果

などが同時に効いているためだと考えられる。

特に今回のD3・D9の3体解析では、3体効果そのものが配置依存であることが見えている。

例えばD3aでは、

  • D5b:+1.5565 kcal/mol

  • D1b:+1.5565 kcal/mol

  • D8b:+0.8436 kcal/mol

など比較的大きな3体項がある一方、

  • D2a:−0.3983 kcal/mol

  • D5a:−0.0542 kcal/mol

  • D4:−0.0725 kcal/mol

のように負になる組み合わせも存在する。

つまり、

「周囲の分子が増えるほど、必ず同じ方向に多体効果が増える」わけではない。


10.では、なぜこれを「溶解性」の研究につなげるのか?

ここが今回の研究の一番重要なところだ。

以前のSMD/COSMO-RS計算では、溶媒和の強さを調べた。

しかし、それだけでは、

「水との相互作用がかなり強いのに、なぜ水には溶けにくいのか?」

という疑問を完全には説明できなかった。

実際、SMDではMethanol、Water、DMSOについて、

Methanol>Water>DMSO\mathrm{Methanol > Water > DMSO}

という溶媒和傾向になった。

一方、COSMO-RSでは、

Methanol>DMSO>Water\mathrm{Methanol > DMSO > Water}

となった。

つまり、溶媒和モデルだけを見ても一意の答えは出てこない。

そこで重要になるのが、

「Apixabanを結晶から取り出すためのコスト」

である。


11.溶解には「入る」だけではなく「出る」が必要

Apixabanが溶液中に存在するためには、

  1. 結晶中のApixaban分子を周囲から引き離す

  2. 空いた場所を作る

  3. 溶媒分子がその分子を取り囲む

  4. 溶媒中で安定化する

という過程を考える必要がある。

概念的には、

ΔGdissolution≈ΔGcrystal removal+ΔGsolvation+ΔGreorganization\Delta G_{\mathrm{dissolution}} \approx \Delta G_{\mathrm{crystal\ removal}} + \Delta G_{\mathrm{solvation}} + \Delta G_{\mathrm{reorganization}}

のように考えることができる。

もちろん、実際の溶解自由エネルギーをこの3項だけで完全に表現できるわけではない。

温度、エントロピー、結晶の欠陥、溶媒構造、濃度など、まだ考慮すべき要素は多い。

それでも、

「溶媒和だけを見るのではなく、結晶からの脱離も同時に見る」

という方向性は、今回の計算からかなり重要だと感じている。


12.次にやりたいこと

ここから先は、いよいよ今回の研究の本題に近づいてくる。

今までは、

A⋯DA\cdots D

という結晶中の分子間相互作用を調べてきた。

次は、

A⋯solvent⋯DA\cdots solvent\cdots D

という系を考えてみたい。

つまり、

結晶中に溶媒分子が入り込んだら、Apixaban同士の相互作用はどう変化するのか?

を調べる。

例えば、

  • Water

  • DMSO

  • Methanol

  • Ethanol

  • Acetonitrile

などについて比較すれば、

「この溶媒はApixabanを強く安定化する」

だけではなく、

「この溶媒は、結晶中のApixaban–Apixaban相互作用をどれだけ弱めるのか?」

という観点からも比較できる。

これができれば、最終的には、

結晶からの脱離↔溶媒による安定化\boxed{ \text{結晶からの脱離} \quad\leftrightarrow\quad \text{溶媒による安定化} }

という二つの競合を同じ研究の中で扱える。


13.今回の結果をまとめると

今回の計算で分かったことを整理すると、

① D1〜D9の相互作用はかなり違う

D2・D3の約−17 kcal/molから、D8・D9の約−2 kcal/molまで大きな差がある。

② 2体相互作用の単純な足し算では不十分

Stage09では約+24.5 kcal/molの非加法性が現れた。

③ D3・D9では3体効果を直接確認できた

D9では約98%、D3aでは約99%が明示的な3体項で再現された。

④ 3体効果には強い配置依存性がある

同じfocus分子でも、相手によって正負・大きさが変わる。

⑤ Pull計算によって「分子を引き離す過程」を直接可視化できた

D1〜D9のエネルギー曲線だけでなく、GIFによって実際の構造変化も確認できるようになった。

⑥ そして、溶解性研究へつながる

最終的には、

結晶から分子を取り出すコスト

と

溶媒によって分子が安定化される効果

を同時に考える必要がある。


おわりに

今回、一番面白かったのは、

「分子を実際に引っ張ってみる」

という、かなり原始的にも見える計算をやってみたことだった。

エネルギーの数字だけを見ていると、

「D1は−14.7 kcal/mol」
「D8は−1.7 kcal/mol」

という数字の比較で終わってしまう。

しかし、実際の構造を動かしてみると、

「この分子はこういう方向に離れていくのか」

という、数字だけでは分からなかった情報が見えてくる。

そして、その構造的な違いを、D3やD9の3体相互作用と結びつけて考えることができる。

ここまで来ると、研究の問いも少し変わってきた。

最初は、

「なぜApixabanは水に溶けにくいのか?」

だった。

今は、

「Apixabanを結晶から取り出すとき、結晶中のどの相互作用が抵抗し、それをどの溶媒がどのように崩していくのか?」

という問いになってきた。

まだ最終的な答えは出ていない。

でも、少なくとも、

溶媒和だけを見るのではなく、結晶側の“抵抗”も見る。

という方向は、かなり明確になってきた。

次は、実際に溶媒分子を結晶クラスターへ入れてみる。

Water、DMSO、Methanol、Ethanol、Acetonitrile。

それぞれの溶媒がApixabanの結晶内相互作用にどのような影響を与えるのか。

そこまで見えてくれば、

「なぜこの溶媒では溶けやすく、この溶媒では溶けにくいのか」

を、分子レベルから説明できる可能性がある。

計算は、もう少し続く。

ORCAで708原子のxTB計算が落ちる原因を追う:Klopman–Ohno計算で発生したStack Overflow

はじめに

現在、Apixabanの結晶構造を対象に、分子間相互作用を調べるための計算を進めています。

今回やっているのは、結晶中のあるApixaban分子を中心分子(A)として、その周囲に存在する分子を少しずつ追加しながら、xTB2による多体計算を行うというものです。

最初は、

「ORCAで大きめのxTB計算を回していたら、なぜか途中で落ちる」

という、よくある計算トラブルだと思っていました。

ところが調べていくと、ORCAそのものではなく、その内部で呼び出されているxTBが、特定の計算段階でスタックオーバーフローを起こしていることが分かりました。

今回は、その切り分けの過程を記録しておきます。


1. まずはApixabanの結晶中で周囲の分子を抽出

今回使用しているApixabanの結晶構造から、中心分子Aと、その周囲に存在する分子を抽出しました。

Apixaban 1分子は59原子です。

周囲の分子について、中心分子との距離や接触状況などを調べ、いくつかの二量体タイプ(D1~D9)に分類しました。

そのうえで、相互作用の強い分子から順番に追加していく「Many-Body」計算を構築しました。

最終的には、

Stage 01
Stage 02
...
Stage 09

という形で、周囲の分子を段階的に増やしていきます。

最も大きい計算では、中心分子A+周囲の分子群を合わせて885原子になる予定です。


2. ORCAのxTB2計算が途中で失敗

最初はORCA 6.1.1を使って、

! XTB2

によるSingle Point計算を実行しました。

小さい系では問題なく、

****ORCA TERMINATED NORMALLY****

となります。

ところが、周囲の分子を増やしていくと、ある段階から、

[file orca_main/run.cpp, line 1557]:
ORCA finished with error return - aborting the run

というエラーが出るようになりました。

特にStage07以降で問題が目立ちました。

例えばStage07では708原子程度の系になっています。

一見すると、

  • メモリ不足?

  • 並列計算の問題?

  • ORCAのバグ?

  • 入力ファイルの問題?

  • xTBのSCF収束失敗?

など、いろいろな可能性が考えられます。

そこで一つずつ潰していくことにしました。


3. まず並列数を1にしてみる

最初に疑ったのは並列計算です。

入力ファイルでは、

%pal
  nprocs 4
end

としていました。

そこで全ての計算を、

%pal
  nprocs 1
end

に変更しました。

小さい計算では正常終了することを確認できました。

しかし、Stage07以降の大きな計算では依然として失敗します。

したがって、単純な4コア並列化が原因ではなさそうです。


4. メモリを増やしてみる

次に、

%maxcore 2000

を

%maxcore 4000

に変更してテストしました。

しかし結果は変わりません。

SCFは正常に収束するものの、その直後にORCAが異常終了します。

つまり、

「SCFが収束しないから落ちている」

というわけでもなさそうです。


5. ORCAの出力を詳しく調べる

Stage07では、出力に次のような情報がありました。

# atoms in fragment 1/2: 59 649

つまり、

  • 中心分子A:59原子

  • 周囲の分子:649原子

  • 合計:708原子

です。

そしてxTBの計算自体は、

*** convergence criteria satisfied after 12 iterations ***

まで到達しています。

それなのに、その直後に、

ORCA finished with error return - aborting the run

となります。

ここで、

ORCAが落としているというより、ORCAが呼び出したxTB側で何か起きているのでは?

と考えるようになりました。


6. ORCAが呼び出したxTBを直接実行してみる

ここが今回の大きな転換点でした。

ORCAの計算途中で生成された、

Stage07_nopal_test_XTB.xyz

という708原子のXYZファイルを取り出しました。

そして、ORCAを介さずに、xTBの実行ファイルを直接呼び出してみました。

使用しているORCAには、

xTB 6.7.1pre

が内蔵されています。

直接実行したところ、SCFは正常に収束しました。

ところが、その直後に、

forrtl: severe (170): Program Exception - stack overflow

が発生しました。

さらにスタックトレースを見ると、

XTB_COULOMB_KLOPM
klopmanohno.f90:508

という表示がありました。

つまり、問題はORCAのrun.cppではなく、xTB内部のKlopman–Ohno Coulomb計算付近で発生していることが分かりました。


7. OpenMPの設定も疑ってみる

Stack Overflowということで、OpenMPのスタックサイズも疑いました。

そこで、

$env:OMP_NUM_THREADS="1"
$env:OMP_STACKSIZE="256M"

として再実行しました。

しかし結果は変わりません。

同じ、

forrtl: severe (170): Program Exception - stack overflow

が発生します。

そのため、単純なOpenMPスレッド数の問題とも考えにくくなりました。


8. 別のxTB 6.7.0でも試す

ここで、ちょうどPC内にChemcraftに付属する別のxTBがインストールされていることに気付きました。

場所は、

C:\Chemcraft\Calc\xtb\xtb.exe

です。

バージョンを確認すると、

xtb version 6.7.0

でした。

一方、ORCA付属版は、

xTB 6.7.1pre

です。

そこで同じ708原子のXYZを、Chemcraft付属のxTB 6.7.0で直接計算してみました。

結果は……

やはり、

forrtl: severe (170): Program Exception - stack overflow

でした。

そしてスタックトレースも、

XTB_COULOMB_KLOPM
klopmanohno.f90:508

です。

これはかなり重要な結果でした。

少なくとも今回の問題は、

ORCA 6.1.1だけに固有の問題

とは考えにくくなりました。


9. では、どのくらいのサイズから落ちるのか?

そこで次に、計算系のサイズを比較しました。

まずStage06。

Stage06
590 atoms

これをChemcraft xTB 6.7.0で直接計算すると、正常終了しました。

さらに、

Stage06 + D6a
590 + 59 = 649 atoms

という構造でも正常終了しました。

ところが、

Stage07
590 + 59 + 59
= 708 atoms

になると、

forrtl: severe (170): Program Exception - stack overflow

となります。

現時点で確認できている範囲では、

系 原子数 xTB 6.7.0
Stage06 590 正常終了
Stage06 + D6a 649 正常終了
Stage07 708 Stack Overflow

という結果になっています。


10. ただし「708原子が限界」とはまだ言えない

ここは注意が必要です。

今回の結果だけを見て、

「xTBは708原子までしか計算できない」

と結論づけることはできません。

なぜなら、xTBの計算負荷は単純な原子数だけで決まるわけではないからです。

分子の種類、電子数、軌道数、構造、行列のサイズ、計算アルゴリズムなど、さまざまな要因が関係する可能性があります。

実際、

D6a単独
D6b単独
D6a + D6b
A + D6a + D6b

などの小さい系では正常に計算できています。

つまり、

「特定の分子が存在するから必ず落ちる」

という単純な話でもありません。

現在は、590原子のクラスターに複数の59原子分子を追加したとき、どの組み合わせでKlopman–Ohno計算が限界に達するのかを調べています。


11. 現時点で分かったこと

今回の切り分けで、かなり多くの可能性を排除できました。

現時点で確認できたこと

  • ORCA 6.1.1で小さいxTB計算は正常

  • 並列数を1にしても大規模系では失敗

  • %maxcoreを増やしても改善しない

  • SCF自体は正常に収束する

  • ORCAが呼び出すxTBを直接実行しても失敗

  • ORCA付属xTB 6.7.1preで失敗

  • Chemcraft付属xTB 6.7.0でも失敗

  • 590原子では成功

  • 649原子では成功

  • 708原子では失敗

  • 失敗箇所はXTB_COULOMB_KLOPM

  • Intel Fortran Runtimeの
    forrtl: severe (170): Program Exception - stack overflow
    が発生

現時点では、

大規模なxTB計算において、Klopman–Ohno Coulomb計算付近でWindows環境のスタックオーバーフローが発生している

というところまで絞り込めています。


12. ここから先

次は、708原子というサイズをそのまま維持しながら、

  • 原子順序を変更する

  • 分子の追加順序を変更する

  • D6a/D6bの組み合わせを変える

  • さらに中間サイズを作る

などのテストを行い、

「単純なサイズの問題なのか」

それとも

「特定の構造・組み合わせによってKlopman–Ohno計算の負荷が急増するのか」

を切り分けていく予定です。

最終的には、Many-Body計算を最後まで完走させたいところです。

885原子クラスターまで計算する予定なので、708原子で止まってしまうのは、なかなか悩ましいところです。

とはいえ、今回の調査で「ORCAがなんとなく落ちている」という状態から、

ORCA
 ↓
xTB
 ↓
SCF収束
 ↓
Klopman–Ohno Coulomb計算
 ↓
Intel Fortran Runtime
 ↓
Stack Overflow

というところまで追い込めたのは大きな前進でした。

まだ解決はしていませんが、原因不明のエラーを一つずつ分解していくのは、計算化学のデバッグとしてなかなか面白い作業です。

【計算化学開発日誌】Apixabanはなぜ溶けにくいのか?――結晶から分子を引き離すExplicit Solvent Cluster計算へ

これまで、Apixabanの溶解度を理論計算から説明できないか、というテーマで計算を進めてきた。

目標は単純だ。

「この溶媒ならよく溶ける」「この溶媒ではほとんど溶けない」

という実験結果を、単なる経験則ではなく、

「なぜその溶解度になるのか」

という分子レベルのエネルギーとして説明したい。

そのためには、溶媒和エネルギーだけを計算しても十分ではない。

分子が溶けるためには、まず結晶から分子を引き離さなければならないからだ。

今回は、これまで計算してきたApixaban結晶の分子間相互作用を一段進め、

「結晶表面からApixaban分子を実際に引き離す」

という計算モデルを設計するところまで進んだ。


まずはApixaban結晶の「強さ」を調べた

今回使用しているのは、Apixabanの結晶構造である。



結晶中では、Apixaban分子が単独で存在しているわけではない。

隣接するApixaban分子との間に、

  • 水素結合

  • 静電相互作用

  • 分散相互作用

  • 芳香環などによる相互作用

などが存在し、それらが積み重なって結晶を形成している。

そこでまず、結晶構造から近接する分子ペアを抽出した。

D1~D9という9種類の代表的な分子ペアを作り、それぞれについてXTB2による相互作用エネルギーを計算した。

計算した相互作用エネルギーは、

ΔEint=Edimer−Emonomer,A−Emonomer,B\Delta E_{\mathrm{int}} = E_{\mathrm{dimer}} - E_{\mathrm{monomer,A}} - E_{\mathrm{monomer,B}}

で定義した。

値が負になるほど、2分子が相互作用によって安定化していることを意味する。


D1~D9の計算結果

今回得られたXTB2の結果は以下のようになった。

Dimer 多重度 ΔEint (kcal/mol)
D1 2 −14.70
D2 1 −17.15
D3 1 −16.75
D4 1 −5.34
D5 2 −7.90
D6 2 −3.67
D7 2 −6.03
D8 2 −1.73
D9 1 −1.62

かなり大きな違いがある。

D2やD3では約−17 kcal/molなのに対して、D8やD9では−2 kcal/mol程度しかない。

つまり、

「結晶中のすべての分子間接触が同じ強さではない」

ということが見えてくる。


結晶全体ではどのくらいになるのか?

さらに、結晶構造から各分子ペアの出現数を調べた。

D1~D9には、それぞれ結晶中での多重度がある。

これを利用して、

Epair=12∑iniΔEiE_{\mathrm{pair}} = \frac{1}{2} \sum_i n_i\Delta E_i

という形で、近接分子間の相互作用を合計した。

その結果、

Epair≈−54.47 kcal/molE_{\mathrm{pair}} \approx -54.47\ \mathrm{kcal/mol}

となった。

kJ/molにすると、

−227.9 kJ/mol-227.9\ \mathrm{kJ/mol}

である。

これはかなり大きなエネルギーだ。

ただし、ここで重要なのは、

この−54.47 kcal/molを「Apixabanの昇華エンタルピー」などと解釈してはいけない

ということだ。

これはあくまで、

今回選択した近接分子ペアについて、XTB2で計算したペア相互作用を合計した値

である。

多体効果、分子変形、長距離相互作用、温度、エントロピー、ゼロ点振動などは含まれていない。

したがって、現時点では「結晶の強さを表す一つの指標」と考えるのが適切だと思う。


しかし、ここで一つ問題が出てきた

ここまでの計算には、大きな仮定がある。

それは、

「分子間相互作用を、分子ペアの足し算として扱っている」

ということだ。

実際の結晶は、二分子だけでできているわけではない。

ある分子がAと相互作用しながら、同時にBとも相互作用する。

さらにAとBも互いに影響し合う。

つまり、

Etotal≠∑EpairE_{\mathrm{total}} \neq \sum E_{\mathrm{pair}}

となる可能性がある。

これがいわゆる**多体効果(many-body effect)**だ。


実際に多体効果を調べてみた

そこで、D1~D9で得られた近接分子を使い、

「中心となるApixaban分子+周囲の複数分子」

というクラスターを作ってみた。

今回は、結晶中の近接分子から6分子、7分子程度を含むクラスターについて試験的に計算した。

そして、

  1. 分子ペアの相互作用を足し合わせた場合

  2. すべての分子を一つのクラスターとして直接計算した場合

を比較した。

試験計算では、例えば6分子のクラスターについて、

ペア相互作用の合計:

−54.53 kcal/mol-54.53\ \mathrm{kcal/mol}

直接計算:

−47.21 kcal/mol-47.21\ \mathrm{kcal/mol}

となった。

差は、

+7.32 kcal/mol+7.32\ \mathrm{kcal/mol}

である。

7分子側でも同様に、

−54.58 kcal/mol-54.58\ \mathrm{kcal/mol}

に対して、

−47.52 kcal/mol-47.52\ \mathrm{kcal/mol}

となり、

+7.05 kcal/mol+7.05\ \mathrm{kcal/mol}

程度の差が出た。

これは非常に興味深い。

少なくとも今回の試験条件では、

単純なペア相互作用の足し算は、クラスター全体の相互作用を強く見積もっている可能性がある。

差はおよそ7 kcal/mol。

割合にすると1割強になる。

もちろん、これはまだXTB系の試験計算であり、クラスターの切り出し方も2種類しか調べていない。

したがって、

「Apixaban結晶の多体効果は必ず13%である」

などと結論づける段階ではない。

しかし、少なくとも、

「ペア相互作用を全部足せば結晶の強さが分かる」

と単純化するのは危険だということは見えてきた。


そこで「分子を引き離す」ことにした

ここからが今回の本題だ。

溶解という現象を考えると、

結晶中に存在するApixaban分子が、

結晶表面から離れて、

最終的には溶媒中へ移動していく

という過程を考えることができる。

ならば、

実際にApixaban分子を結晶から少しずつ引き離してみればいい。

そこで次の計算を考えている。


「Kink Cluster」という考え方

完全な結晶全体を量子化学計算するのは現実的ではない。

そこで、結晶表面の一部分を切り出す。

イメージとしては、

結晶表面

○ ○ ○ ○
 ○ ○ ○ ○
○ ○ ● ○
 ○ ○ ○ ○

      ↓

   ●  ← 引き離すApixaban

この「●」をターゲット分子とする。

周囲にある複数のApixaban分子は結晶表面の一部として残す。

そして、

ターゲット分子
      ↓
      ↓  0.5 Å
      ↓  1.0 Å
      ↓  1.5 Å
      ↓  2.0 Å
      ↓  3.0 Å
      ↓  5.0 Å
      ↓
   結晶表面から離脱

というように、ターゲット分子だけを少しずつ移動させる。

これによって、

E(r)E(r)

という「結晶からの距離に対するエネルギー曲線」を作る。


これはD1~D9の計算とは何が違うのか?

ここはかなり重要だ。

D1~D9で計算しているのは、

2分子間の相互作用

である。

一方、今回考えているのは、

複数の分子からなる結晶表面から、1分子を引き離すエネルギー

である。

つまり、

D1~D9

A ─ B

Kink Cluster

      B
   C  A  D
      E

      ↑
    target

という違いになる。

後者では、複数の分子が同時にターゲット分子へ影響する。

そのため、D1~D9の単純な足し算では表現できなかった多体効果を、直接計算できる可能性がある。


まずは「真空中」で引き離してみる

最初から溶媒を入れた巨大な量子化学計算をやるのは、かなり重い。

そこで段階的に進める。

まず、

溶媒なしのKink Cluster

を作る。

そしてターゲットApixabanを、

0 Å
0.5 Å
1.0 Å
1.5 Å
2.0 Å
3.0 Å
5.0 Å
8.0 Å

などと移動させる。

各点でXTB2によるSingle Point計算を行う。

例えば、

ΔE(r)=Ecluster(r)−Ecluster(0)\Delta E(r) = E_{\mathrm{cluster}}(r) - E_{\mathrm{cluster}}(0)

とすれば、

「結晶表面から分子を引き離すために必要なエネルギー」

を相対的に見ることができる。


以前のD1 Pull計算との違い

実は、すでにD1については似た計算を試している。

D1の2分子系について、

+0.5 Å

+1.0 Å

+1.5 Å

+2.0 Å

+3.0 Å

+5.0 Å

と分子間距離を広げていった。

その結果、元の構造からのエネルギー差はおおよそ、

Pull ΔE
+0.5 Å +3.82 kcal/mol
+1.0 Å +7.38 kcal/mol
+1.5 Å +9.92 kcal/mol
+2.0 Å +11.60 kcal/mol
+3.0 Å +13.36 kcal/mol
+5.0 Å +14.37 kcal/mol

となった。

D1の相互作用エネルギーが約−14.70 kcal/molなので、5 Åまで離すと、ほぼ相互作用が切れた状態に近づいている。

これは、

「分子を引き離すとエネルギーが上昇する」

という非常に分かりやすい結果だ。

ただし、これはあくまで二分子系の相互作用ポテンシャルであって、まだ結晶表面からの脱離エネルギーではない。


次は「Explicit Solvent Cluster」へ

ここまで来ると、ようやく今回の本命が見えてくる。

結晶表面からApixabanを引き離すだけなら、真空中でも計算できる。

しかし、実際の溶解では、

その周囲には溶媒分子が存在する。

例えば、

  • 水

  • メタノール

  • エタノール

  • アセトニトリル

  • アセトン

  • IPA

  • EtOAc

  • DMSO

  • DMF

  • CHCl3

などである。

そこで次の段階では、

結晶表面
   │
   │  Apixaban
   │     ●
   │    ○○○
   │  ○○○○○
   │
   │
   ↓

周囲に溶媒分子を配置

というモデルを作る。

これが今回考えている、

Explicit Solvent Cluster

である。


ただし、ここにも注意点がある

「溶媒分子を周囲に置けば溶解度が計算できる」

というほど単純ではない。

例えば、溶媒分子を10個、20個置いただけでは、

「本当に平衡状態の溶媒和を表しているのか?」

という問題が出てくる。

溶媒分子の配置によってエネルギーが大きく変わる可能性もある。

また、

  • 溶媒分子の再配向

  • 水素結合ネットワーク

  • 溶媒和構造

  • エントロピー

  • 温度

  • クラスターサイズ

  • 結晶表面の切り出し方

なども影響する。

そのため、最初から「この計算値が溶解度そのものだ」と考えるのではなく、

「溶媒によって、結晶からの脱離がどの程度安定化されるのか」

を見るところから始めたい。


実験値との比較

今回の最終的な目的は、理論計算と実験値をつなげることだ。

現在整理しているApixabanの溶解度データでは、例えば、

溶媒 溶解度の目安
CHCl₃ 約13.87 mg/mL
ACN 約2.38 mg/mL
MeOH 約2.21 mg/mL
Acetone 約1.01 mg/mL
EtOH 約0.43 mg/mL
IPA 約0.13 mg/mL
EtOAc 約0.06 mg/mL
Water 約0.028–0.04 mg/mL
DMSO 約14–50 mg/mL
DMF Good solubility

という大きな違いがある。

もちろん、これらの値は文献ごとに、

  • 温度

  • 結晶形

  • 測定方法

  • 純度

  • pH

  • 単位

  • 平衡到達条件

などが異なる可能性がある。

したがって、今後は実験データそのものも整理・検証する必要がある。

それでも、溶媒によって溶解度が何桁も変化することを考えると、

「なぜこの溶媒では溶けやすく、別の溶媒では溶けにくいのか」

を分子レベルで説明することには十分意味がある。


溶解度を「3つのエネルギー」に分けて考える

現在考えているのは、溶解という現象を大きく、

             Apixaban結晶
                  │
                  │ ①
                  ▼
          結晶から分子を脱離
                  │
                  │
                  ▼
          溶媒中のApixaban
                  │
                  │ ②
                  ▼
             溶媒和
                  │
                  │ ③
                  ▼
          溶液中で安定化

という形で考える方法だ。

より概念的には、

① Crystal / Detachment

結晶からApixabanを引き離すためのエネルギー。

今回のKink Clusterがここを狙っている。

② Solvation

裸のApixabanが溶媒に囲まれて安定化するエネルギー。

これまで進めてきたExplicit10の考え方などがここにつながる。

③ Conformation / Entropy

溶解前後の分子構造変化や、

TΔST\Delta S

に代表されるエントロピーの寄与。

最終的な溶解度を説明するには、この部分も無視できない。


実は「溶媒中で引き離す」だけでは足りないかもしれない

ここで少し面白い問題が出てくる。

例えば結晶表面から1分子を取り出したとする。

最初:

Crystal surface
■■■■■■
■■●■■■
■■■■■■

最後:

Crystal surface
■■■■■■
■■■■■■
■■■■■■

      ●
   solvent

このとき、最終状態では「結晶側」と「溶媒側」の両方が変化している。

もし分子を一つ取り出したことで、残った結晶表面も別の構造に変化するなら、その差も熱力学的には考えなければならない。

逆に、

「最初と最後で結晶表面の状態がほぼ同じ」

という理想化ができるなら、溶媒による違いは主に、

取り出されたApixabanが溶媒中でどれだけ安定化されるか

に現れる可能性がある。

これは今回の計算設計を考える上でかなり重要なポイントになってきた。


まずは小さく検証する

いきなり全溶媒について巨大なクラスター計算をするつもりはない。

まずは、

Stage 1

Kink Clusterの真空中計算

↓

Stage 2

Apixabanを0~8 Å程度引き離すPull計算

↓

Stage 3

数点だけExplicit Solventを追加

↓

Stage 4

必要なら別の溶媒でも比較

という順番で進める。

最初から完璧なモデルを作ろうとすると、計算量だけが膨れ上がってしまう。

まず小さなモデルで、

「この計算方法で、実験的な傾向につながる情報が本当に得られるのか?」

を確認する。

これが今の方針だ。


r2SCAN-3cも使ってみる

XTB2は非常に高速なので、大きなクラスターを扱うには魅力的だ。

一方で、XTB2だけで結果を確定させるのも慎重になる必要がある。

そこで、より高コストな計算として、

r2SCAN-3c

も一部に使って比較する。

すでにD1~D3では試していて、

Dimer XTB2 r2SCAN-3c
D1 −14.70 −15.88
D2 −17.15 −20.12
D3 −16.75 −20.00

という結果になった。

XTB2よりもr2SCAN-3cの方が強い相互作用を示している。

ただし、これだけで「r2SCAN-3cの方が正しい」と決めることはできない。

本当に精度を評価するなら、将来的にはDLPNO-CCSD(T)などの高精度計算を小さなモデルに対して行い、基準値として比較する必要がある。


計算化学で一番怖いのは「数字が出ること」

今回の開発を進めていて、改めて感じることがある。

計算化学では、

数字が出たことと、正しい答えが得られたことは同じではない。

例えば、

「−54.47 kcal/mol」

という数字は非常に明確に見える。

しかし、それが何を意味しているのかを正しく定義しなければならない。

それは、

  • 昇華エンタルピーなのか?

  • 結晶格子エネルギーなのか?

  • 分子間相互作用の合計なのか?

  • 多体効果を含むのか?

  • 温度依存性はあるのか?

  • エントロピーは入っているのか?

によって意味がまったく違う。

今回の計算では、

「何を計算した数字なのか」

をできるだけ明確に記録することを重視している。


次の実装

次にやることはかなり具体的になってきた。

まず現在のD1~D9の結晶フラグメントを利用して、

Kink Clusterを正式に生成する。

そして、

  1. ターゲットとなるApixabanを決める

  2. 周囲の近接Apixabanを選択する

  3. 結晶座標を維持する

  4. XTB2でクラスター全体を計算する

  5. ターゲット分子を0~8 Å程度引き離す

  6. エネルギーカーブを作る

  7. 必要な点についてr2SCAN-3cで検証する

  8. その後、溶媒分子を導入する

という流れにする。

ここまでできれば、

Apixaban crystal
       │
       │ detachment
       ▼
Kink cluster
       │
       │ solvent stabilization
       ▼
Explicit solvent cluster
       │
       ▼
Predicted solvent effect
       │
       ▼
Experimental solubility

という一本の計算パイプラインが見えてくる。


最後に

今回の計算で、Apixabanの溶解度を一発で予測できるようになったわけではない。

むしろ逆で、

「溶解度を説明するには、まだ考えなければならないことがかなり多い」

ということが分かってきた。

しかし、それは悪いことではない。

D1~D9の分子間相互作用を調べ、

↓

結晶全体のペア相互作用を見積もり、

↓

多体効果の存在を確認し、

↓

さらに「実際に結晶から分子を引き離す」というモデルへ進む。

ここまで来ると、単に「溶媒和エネルギーを計算して溶解度と比較する」という方法よりも、

「結晶から脱離する過程」と「溶媒によって安定化される過程」を分けて考える

という、より物理的なモデルに近づいてきた。

そして最終的に目指しているのは、

「この溶媒だからApixabanはこれだけ溶ける」

という結果だけではなく、

「なぜこの溶媒では溶けやすく、この溶媒では溶けにくいのか」

を、分子レベルのエネルギーとして説明できる計算手法である。

まだ道のりは長い。

でも、少なくとも「何を計算すればいいのか分からない」という段階からは、少しずつ抜け出してきたように思う。

次は、いよいよApixabanを結晶から引き離してみる。

【開発日誌】WindowsのPowerShellからORCAを動かす

― OPI 2.0.0を使ったPython連携を試してみた ―

最近、計算化学の作業をできるだけ自動化できないかと考えている。

現在取り組んでいるのは、ORCAを使った量子化学計算や、xTB2による分子動力学(MD)、溶媒を含む系の計算などだ。

これまでは、

ORCAのインプットを作成
        ↓
ORCAを実行
        ↓
.outファイルを確認
        ↓
必要な結果を手作業で拾う

という流れだった。

しかし、計算が複雑になってくると、この作業を毎回手動で行うのはなかなか大変だ。

そこで今回は、**ORCAをPythonから操作するためのOPI(ORCA Python Interface)**を使って、WindowsのPowerShellから実際にORCAを動かしてみることにした。

最終的には、

Python
  ↓
OPI
  ↓
ORCA
  ↓
計算
  ↓
.out
  ↓
結果を抽出
  ↓
JSON

という自動化された流れを作りたい。

今回は、その第一歩としてH₂Oの小さな計算を使って動作確認を行った。


今回使用した環境

今回の環境はWindows。

使用したソフトウェアは以下の通り。

ソフトウェア バージョン
Python 3.13.3
OPI 2.0.0
ORCA 6.1.1

OPIについては、

orca-pi 2.0.0

を使用した。

また、OPI 2.0.0からORCA 6.1.1を呼び出して計算する。


実際のフォルダ構成

今回のテストでは、OPI用のPython仮想環境を作成している。

ブログではPC固有の情報を公開しないため、実際のWindowsユーザー名や絶対パスは省略して、以下のように表記する。

<OPI_PROJECT>/
├─ .venv/
├─ inputs/
├─ outputs/
├─ results/
└─ scripts/

また、ORCAのインストール先は、

<ORCA_INSTALL_DIR>\orca.exe

と表記する。

実際のPCでは、それぞれ自分の環境に合わせて読み替える。


まずPythonを確認する

最初に、Pythonが正常に動作しているか確認する。

PowerShellから、

& "<OPI_PROJECT>\.venv\Scripts\python.exe" --version

を実行する。

今回の環境では、

Python 3.13.3

となった。


OPIがインストールされているか確認

次に、OPIをPythonからimportできるか確認する。

PowerShellで、

& "<OPI_PROJECT>\.venv\Scripts\python.exe" -c "import opi; print('OPI import: OK')"

を実行。

結果:

OPI import: OK

これでPythonからOPIを利用できることが確認できた。

バージョンも確認しておく。

& "<OPI_PROJECT>\.venv\Scripts\python.exe" -c "import importlib.metadata as m; print('OPI:', m.version('orca-pi'))"

結果:

OPI: 2.0.0

OPIからORCAを認識できるか確認

次はいよいよORCAとの接続確認。

PowerShellからPythonを実行して、

& "<OPI_PROJECT>\.venv\Scripts\python.exe" -c "from pathlib import Path; from opi.execution.core import Runner, OrcaBinary; r=Runner(working_dir=Path.cwd()); print('Working dir:', r.working_dir); print('ORCA path:', r.get_orca_binary(OrcaBinary.ORCA)); print('ORCA version:', r.get_version()); print('Version OK:', r.check_version())"

とした。

実行結果:

Working dir: <WORK_DIR>
ORCA path: <ORCA_INSTALL_DIR>\orca.exe
ORCA version: 6.1.1
Version OK: True

ここで、

Python → OPI → ORCA

という接続が正常にできていることを確認できた。


H₂OでORCAインプットを生成する

いきなりApixabanのような大きな分子を扱うのではなく、まずはH₂Oでテストする。

今回の計算条件は、

HF/STO-3G

とした。

OPIではAtomとStructureを使って分子構造を作成できる。

from opi.input.structures import Atom, Structure

O = Atom(
    "O",
    coordinates=(0.000, 0.000, 0.000)
)

H1 = Atom(
    "H",
    coordinates=(0.758, 0.000, 0.504)
)

H2 = Atom(
    "H",
    coordinates=(-0.758, 0.000, 0.504)
)

water = Structure(
    [O, H1, H2],
    charge=0,
    multiplicity=1
)

計算条件はInputを使う。

from opi.input import Input

inp = Input()

inp.add_simple_keywords("HF", "STO-3G")
inp.ncores = 1
inp.memory = 500

これらを組み合わせて、ORCAインプットを生成する。

!hf
!sto-3g
%maxcore 500
%pal
    nprocs 1
end

* xyz 0 1
O ...
H ...
H ...
*

PythonからORCAを実行する

インプットができたので、PythonからORCAを起動する。

今回使用したPowerShellコマンドは、

& "<OPI_PROJECT>\.venv\Scripts\python.exe" -c "from pathlib import Path; from opi.execution.core import Runner; inp=Path(r'<WORK_DIR>\H2O_OPI_test.inp'); r=Runner(working_dir=inp.parent); result=r.run_orca(inp); print('run_orca result:', result); print('OUT exists:', inp.with_suffix('.out').exists()); print('ERR exists:', inp.with_suffix('.err').exists())"

結果は、

run_orca result: None
OUT exists: True
ERR exists: False

だった。

つまり、

PowerShell → Python → OPI → ORCA

という経路でORCAを起動し、実際に.outファイルを生成するところまで成功した。


ORCAの.outから結果を読み取る

次に、ORCAが生成した.outファイルをOPIで読み取る。

from opi.output.core import Output

o = Output(
    "H2O_OPI_test",
    working_dir=Path("<WORK_DIR>"),
    parse=True
)

そして、

o.scf_converged()
o.terminated_normally()
o.get_final_energy()
o.get_dipole()

などを呼び出すことで、計算結果を取得できる。

今回のH₂O計算では、

SCF converged: True
Terminated normally: True
Final energy: -74.9456282047427

などを取得できた。


ここで次の問題が出てきた

ここまでで、

ORCAをPythonから実行する

ところまではできた。

さらに、

ORCAの.outをPythonから読み取る

こともできた。

しかし、ここで新しい問題がある。

実際の計算では、毎回Pythonから、

get_final_energy()
get_dipole()
get_homo()
get_lumo()
...

と手作業で結果を取り出したくはない。

また、ORCAの.outファイルそのものをAIに渡すのも、できれば避けたい。

そこで次のステップとして、

.outから必要な情報だけを抽出して、小さなJSONにする

という処理を作ることにした。


.outをJSONに変換するスクリプトを作る

そこで、

Calculations/
└─ scripts/
   └─ orca_summary.py

というスクリプトを作成した。

このスクリプトの目的は非常にシンプル。

ORCA .out
    ↓
orca_summary.py
    ↓
必要な情報だけ抽出
    ↓
JSON / CSV

という変換を行う。

ここで面白いのは、このスクリプトはOPIにもORCAにも依存しないこと。

Pythonの標準ライブラリだけで動作するようにした。

そのため、過去にOPIを使わずに実行したORCAの.outファイルにも、そのまま適用できる。


抽出する項目

現在のorca_summary.pyでは、以下のような情報を抽出する。

基本情報

ORCAバージョン
キーワード行
原子数
電荷
多重度
正常終了
実行時間

エネルギー

SCF収束
最終エネルギー

構造最適化

最適化サイクル数
最適化が収束したか

振動解析

虚振動の数
最低振動数
ZPE
エンタルピー
Gibbs自由エネルギー

双極子

a.u.
Debye

について、それぞれ別のキーとして保持する。

軌道

HOMO
LUMO
HOMO-LUMO gap

も抽出する。

問題の検出

さらに、

警告の件数
代表的な警告
エラーの要点

なども取得する。

単に「エネルギーを抜き出す」だけではなく、計算が正常に終了したかどうかも確認できるようにすることを意識した。


実際のORCAファイルで動作確認

作成したスクリプトは、実際の.outファイルを使って確認した。

今回確認したのは、例えば以下のような計算。

Apixabanの最適化+振動解析

約1.86 MBある.outから必要な情報を抽出したところ、JSONは約1 KBになった。

つまり、

約1.86 MB
   ↓
約1 KB

まで情報量を絞ることができた。

もちろん、これは「情報を圧縮した」というより、必要な結果だけを抽出しているということになる。


r2SCAN-3cの単一点計算でも確認

10DMSO系のr2SCAN-3c単一点計算についても確認した。

ここでは、

SCF収束
エネルギー
双極子
HOMO
LUMO

などを取得できた。

複雑な計算でも、結果を一定の形式にまとめられることが確認できた。


XTB2の最適化でも動作

さらに、XTB2による最適化計算についても試した。

こちらも基本的な結果抽出は問題なく動作した。

ただし、ここでは一つ違いがあった。

XTB2の出力では、通常のORCA計算と電荷・多重度の記述形式が異なるため、現在のスクリプトでは、

charge
multiplicity

が空欄になるケースがある。

これはバグというより、異なる出力形式への対応がまだ十分ではないという状態。

必要になった段階でXTB2用の処理を追加する予定だ。


値の整合性も確認

単に「値が取れた」だけではなく、取得した値の整合性も確認した。

例えば振動解析については、

振動解析ブロックの電子エネルギー
        ↓
最終エネルギー

が一致することを確認した。

また、双極子についても、a.u.とDebyeの値が対応していることを確認した。

こうした検証は、自動抽出スクリプトを作る上では重要だと思う。

「正規表現で数字を拾えた」だけではなく、

その数字が本当に欲しかった物理量なのか?

まで確認する必要があるからだ。


異常終了も検出できるようにする

さらに、

計算が途中で中断した
SCFが収束しなかった
エラーで終了した

といったケースも考慮した。

実際の失敗した計算ではなく、今回は模擬的な.outを作って判定を確認した。

この部分も今後、実際の失敗ジョブが発生したときに検証していきたい。


PowerShellからの使い方

作成したスクリプトは、scriptsフォルダから実行できるようにした。

例えば、1つの.outを処理する場合、

python orca_summary.py ..\Apixaban\Gas\ApixabanOptFreq.out --brief

とする。

--briefを指定すると、1ファイル1行の短い要約を表示する。

大量の計算結果をまとめて処理したい場合は、

python orca_summary.py ..\Apixaban -r --csv apixaban_summary.csv

とする。

-rを指定すると、指定したフォルダ以下にある.outファイルを再帰的に検索する。

そして、結果をCSVにまとめることができる。


これはAIに結果を渡すときにも使えそう

ここまで来ると、最初に考えていた構成がかなり現実的になってきた。

例えば、

ORCA
 ↓
ApixabanOptFreq.out
 ↓
orca_summary.py
 ↓
ApixabanOptFreq.json

とする。

そしてAIには、

.outファイル 約1.86 MB

ではなく、

result.json 約1 KB

だけを渡す。

AI側から見れば、必要な情報だけがまとまっているので扱いやすい。

さらに複数の計算を比較するときも、

calculation_001.json
calculation_002.json
calculation_003.json
...

という形にしておけば、PythonやAIから比較しやすくなる。


現在のフォルダ構成

ここまで進んだことで、計算用フォルダも少しずつ役割が明確になってきた。

例えば、

Calculations/
├─ scripts/
│  └─ orca_summary.py
├─ Apixaban/
│  ├─ Gas/
│  │  ├─ *.inp
│  │  └─ *.out
│  └─ ...
├─ inputs/
├─ outputs/
└─ results/

という構成を考えている。

実際の保存場所やWindowsユーザー名などは記事には掲載せず、プロジェクト内の論理的な構造だけを示す。


今回分かったこと

今回の検証によって、

Python
 ↓
OPI
 ↓
ORCA
 ↓
計算
 ↓
.out
 ↓
結果抽出
 ↓
JSON / CSV

という流れがかなり具体的になってきた。

特に大きかったのは、結果抽出部分をOPIだけに依存しない形にできたこと。

OPIを使って新しい計算を実行する場合でも、過去に別の方法で作成した.outを処理する場合でも、同じorca_summary.pyを使える。

これは今後の計算データ整理にかなり使えそうだ。


今後の課題

現時点ではまだ完成形ではない。

今後対応したいものとして、

  • QM-MD / MD出力の解析

  • MDステップ数

  • 温度

  • エネルギー推移

  • XTB2特有の出力形式

  • より詳細なエラー判定

  • JSONスキーマの整理

  • 複数計算結果の比較

などがある。

特に、今回の最終目的であるxTB2によるMD計算については、まだ実際のMD出力を使った検証をしていない。

そのため、MD用の項目はこれから追加していくことになる。


次のステップ

次はいよいよ、今回の自動化を実際の計算に近づけていく。

最終的には、

Apixaban
+
Acetonitrile
+
xTB2
+
MD
+
球状拘束

という計算を、

Python
 ↓
ORCA
 ↓
MD
 ↓
.out
 ↓
orca_summary.py
 ↓
JSON

という流れで処理したい。

そして、そのJSONをAIやBasic Memoryに渡して、

計算結果の整理
↓
過去の計算との比較
↓
次の計算条件の検討

といった作業につなげていく。


おわりに

今回は、H₂Oという非常に小さな分子から始めて、

PowerShell
    ↓
Python
    ↓
OPI
    ↓
ORCA
    ↓
.out
    ↓
結果抽出
    ↓
JSON / CSV

という流れを作ってみた。

さらに、実際のApixabanやDMSO、XTB2の.outを使って、結果抽出スクリプトの動作確認も行った。

最初は、

「ORCAをPythonから起動できるだろうか?」

というところから始まった。

それが今では、

「ORCAの計算結果を、AIが扱いやすいデータに自動変換できないか?」

というところまで進んできた。

計算化学の自動化は、単に「計算を自動で回す」だけではなく、

計算 → 結果抽出 → データ整理 → AIによる活用

まで含めて考えると、かなり面白い。

次は、いよいよ実際のMD計算へ進んでみたい。

***
なお、記事内のPowerShellコマンドは実環境のユーザー名を伏せているので、公開時には <OPI_PROJECT> などを「読者自身の環境に合わせて置き換えてください


ローカルAIエージェントで科学計算に挑戦する

Ollama + Qwen3 + Cline + ORCA-Pi(OPI)をつないでみる

最近、ローカル環境でAIエージェントを動かす環境を少しずつ構築しています。

これまでにもOllamaを使ってローカルLLMを動かしたり、ClineからAIにコードを書かせたりしてきました。

今回さらに一歩進めて、

「ローカルAIエージェントから、実際の量子化学計算環境まで操作できないか?」

ということを試してみました。

最終的に目指しているのは、

 
Cline
  ↓
Qwen3
  ↓
Python
  ↓
ORCA-Pi(OPI)
  ↓
ORCA
  ↓
計算結果
  ↓
Qwen3
 

という流れです。

まだ完全な自動化には到達していませんが、かなり面白いところまで来たので、ここまでの過程をまとめてみます。


1. 使用しているPC

今回の環境は、それほど強力なゲーミングPCではありません。

  • CPU:Intel Core i7-10750H
  • 6コア / 12スレッド
  • メモリ:16 GB
  • GPU:NVIDIA GeForce MX350
  • VRAM:2 GB
  • ストレージ:約1 TB

特に問題になるのがGPUです。

MX350はVRAMが2 GBしかないため、大型のLLMをGPUだけで動かすのは現実的ではありません。

そこで今回は、量子化された比較的小さなモデルをCPU中心で動かす構成にしました。


2. Ollamaを導入

ローカルLLMの実行環境としてOllamaを使用しています。

現在インストールしているモデルは、

 
qwen3:8b-q4_K_M
gemma4:e4b-it-qat
nomic-embed-text
 

です。

その中でも、Clineのエージェントとして使っているのが、

 
qwen3:8b-q4_K_M
 

です。

サイズは約5.2 GB。

16 GB RAMのPCでCline、VS Code、Pythonなどを同時に動かすことを考えると、このくらいのサイズが現実的でした。


3. なぜQwen3 8Bなのか?

最初は「もっと大きなモデルのほうが賢いのでは?」とも考えました。

しかし、今回の目的は単純なチャットではありません。

AIにやらせたいのは、

  • ファイルを探す
  • Pythonを書く
  • PowerShellやCMDを実行する
  • エラーを読む
  • コードを修正する
  • 再実行する
  • 計算結果を整理する

といったエージェント的な作業です。

そのため、巨大なモデルを無理に動かすよりも、

 
Qwen3 8B
   +
Cline
   +
Python
   +
専門ソフトウェア
 

という構成にしたほうが面白そうだと考えました。

特に科学計算については、AIそのものにすべてを計算させるのではなく、

AIは判断とコード生成を担当し、実際の計算は専門ソフトウェアに任せる

という役割分担が重要になります。


4. ClineからOllamaを使う

ClineのモデルプロバイダーにはOllamaを指定しました。

OllamaのAPIは、

 
http://127.0.0.1:11434
 

です。

ClineからQwen3を使って、ファイル操作やターミナル操作などを試しました。

ここで分かったのは、Qwen3自体がWebブラウザを持っているわけではないということです。

例えば、

ORCA 6.1のマニュアルをWebで調べてください

と頼んでも、Web検索ツールが提供されていなければ、Qwen3自身が勝手にインターネットへアクセスすることはできません。

これは当たり前のことなのですが、

LLM本体とAIエージェントの「ツール」は別物

だということを改めて実感しました。


5. そこでORCA-Pi(OPI)

今回の本命がORCA-Pi、略してOPIです。

OPIはPythonからORCAの計算を扱うためのインターフェースです。

Pythonから、

 
from opi.core import Calculator
 

といった形で利用できます。

ところが最初、Pythonで、

 
import orca
 

としてしまい、

 
ModuleNotFoundError: No module named 'orca'
 

となりました。

インストールされているパッケージ名は、

 
orca-pi
 

ですが、Pythonからimportするモジュールは、

 
import opi
 

でした。

確認すると、

 
C:\Users\naoki\AppData\Roaming\Python\Python314\site-packages\opi\__init__.py
 

が存在していました。

さらに、

 
from opi.core import Calculator
 

も、

 
from opi.output.core import Output
 

も正常にimportできました。


6. ORCAの計算結果をOPIで読む

ここからがかなり面白いところです。

以前ORCAで計算したApixabanの計算結果があります。

 
Apixaban_SMD_ethanol_Opt_Freq_KeepDens.out
 

これをOPIで読み込んでみました。

ただし、最初は、

 
out.parse()
 

でエラーになりました。

OPIが、

 
.out.property.json
 

を探していたためです。

ORCAの計算ディレクトリには、

 
.property.txt
 

は存在していました。

そこでORCA付属の、

 
orca_2json
 

を使って、

 
orca_2json "Apixaban_SMD_ethanol_Opt_Freq_KeepDens" -property
 

を実行しました。

すると、

 
Apixaban_SMD_ethanol_Opt_Freq_KeepDens.property.json
 

が生成されました。


7. OPIでApixabanの最終Geometryを取得

その後、

 
out.parse_property()
 

を使うことで、ORCAの計算結果をOPIから読み込めました。

Geometryは全部で14個。

 
Geometry 0
Geometry 1
...
Geometry 13
 

です。

最終GeometryであるGeometry 13のエネルギーは、

 
-1542.1571962825196 Eh
 

でした。

そして、

 
geo = out.results_properties.geometries[-1].geometry
 

とすると、最終構造の59原子の座標を取得できます。


8. ここで単位に注意

最初に少し戸惑ったのが座標単位でした。

OPIから取得した座標は、

 
units = a.u.
 

でした。

つまりBohr単位です。

そこで、

 
conv = 0.529177210903
 

としてÅに変換しました。

例えば最初の炭素原子は、

 
C
23.91352851
-17.51581350
-0.14324661
 

Åとなります。

このあたりは、AIに処理させる場合にも注意が必要です。

「数値が取れた」だけでは不十分で、単位まで確認しなければならない

からです。


9. 次にEthanol

今回の目的は、

最適化したApixabanの周囲にEthanolを10分子配置して、XTB2によるMD計算を行う

ことです。

そこでEthanolについても、

 
Monomer_r2SCAN3c_SMD.out
 

をOPIから読み込みました。

こちらも最初は.property.jsonが存在しなかったので、

 
orca_2json "Monomer_r2SCAN3c_SMD" -property
 

を実行。

無事、

 
Monomer_r2SCAN3c_SMD.property.json
 

が生成されました。

そしてOPIから最終Geometryを取得すると、

 
natoms = 9
units = a.u.
 

となりました。

つまりEthanolは9原子です。


10. OPIから取得したEthanol

Åに変換すると、

 
C   -0.14677492   0.07780387  -0.00038294
C    1.35204393  -0.07870980   0.11089468
O    1.96741151   1.12252349  -0.39562007
H    2.92446547   1.01663804  -0.32381989
H    1.64403922  -0.23797879   1.15983081
H    1.69068759  -0.94928609  -0.47077875
H   -0.49491591   0.93527502   0.58653656
H   -0.64674620  -0.82066183   0.37705473
H   -0.44821064   0.22439609  -1.04371513
 

となりました。

これで、

 
Apixaban  59 atoms
Ethanol     9 atoms
 

という、2種類の分子構造を同じOPIの仕組みから取得できるところまで来ました。


11. 最終的に何をしたいのか?

ここまで来ると、やりたいことがかなり明確になります。

最終的にはAIエージェントに、

Apixabanの最適化構造をOPIで読み込んでください。

r2SCAN-3c/SMDで最適化したEthanolを読み込んでください。

Ethanolを10分子配置してください。

分子同士の衝突を確認してください。

すべての原子が球形の拘束領域内に入っているか確認してください。

問題がなければORCAのXTB2-MD入力ファイルを生成してください。

と指示できるようにしたいわけです。


12. 目指している構成

最終的なイメージは、

 
┌─────────────────────┐
│       Cline         │
│                     │
│    Qwen3 8B         │
└─────────┬───────────┘
          │
          ▼
┌─────────────────────┐
│      Python         │
│                     │
│  構造処理・解析     │
└─────────┬───────────┘
          │
          ▼
┌─────────────────────┐
│    ORCA-Pi / OPI    │
└─────────┬───────────┘
          │
          ▼
┌─────────────────────┐
│       ORCA 6.1      │
│                     │
│    QM calculation   │
└─────────┬───────────┘
          │
          ▼
       計算結果
          │
          └──────► Qwen3
 

というものです。


13. AIに全部やらせるのではなく「道具を使わせる」

今回の実験を通して感じたのは、ローカルLLMを使う場合、

「AIそのものを巨大化する」ことだけが答えではない

ということです。

例えばQwen3 8Bが、

 
「この計算結果を取得する必要がある」
 

と判断して、

 
OPIを呼ぶ
 

。

OPIが、

 
ORCAの実際の計算結果
 

を返す。

その結果をQwen3が解釈して、

 
「次はEthanolを10分子配置しよう」
 

と判断する。

このように、

LLM + 専門ツール

という構成にすることで、比較的小さなローカルモデルでも、かなり高度な作業環境を作れそうです。


14. 次の課題

現在はまだ、

ClineからOPIを直接エージェントのツールとして扱えるか

を検証している段階です。

Python単体ではすでに、

 
opi import        → OK
Calculator       → OK
Output           → OK
Apixaban解析     → OK
Ethanol解析      → OK
 

まで確認できました。

次はClineからこれらを操作できるかを確認します。

さらにその先には、

  • OPI用のMCPツール
  • 分子構造の自動配置
  • 原子間距離チェック
  • van der Waals半径による衝突チェック
  • 球形拘束領域のチェック
  • ORCA入力ファイル自動生成
  • 計算結果の自動解析

などを組み合わせていく予定です。


おわりに

今回の環境構築は、単に「ローカルでAIを動かしてみた」というところから始まりました。

しかし、

 
Ollama
 ↓
Qwen3
 ↓
Cline
 ↓
Python
 ↓
ORCA-Pi
 ↓
ORCA
 

とつないでいくと、少しずつ性格が変わってきます。

AIに質問するだけではなく、

AIが自分でツールを使い、計算を実行し、その結果を見て次の処理を考える

という環境に近づいてきます。

まだ実験段階ではありますが、

「自分のPC上に、自分の研究・開発環境を操作できるAIエージェントを作る」

というのは、なかなか面白いテーマだと感じています。

次回は、いよいよ **ClineからORCA-Pi(OPI)へアクセスできるか**を検証してみたいと思います。

Apixabanはなぜ水に溶けにくいのか — 量子化学計算で「溶媒和」を追いかけてみた

きっかけ:溶解度の謎

抗凝固薬アピキサバン(Apixaban, C₂₅H₂₅N₅O₄)は、水にはほとんど溶けない(溶解度 約0.028 mg/mL)のに、DMSOにはよく溶ける(約14 mg/mL)という、実験的にはっきりした差がある分子です。

量子化学計算でこの差を説明できないか、というのが今回の出発点でした。ところが、最初に試した最もシンプルな方法では、この実験傾向をうまく再現できませんでした。そこから、連続体モデル→明示的溶媒分子→分子動力学、と手法を段階的に発展させていった記録です。

第一段階:連続体モデル(SMD)だけでは説明できない

ORCA(r2SCAN-3c、TightSCF)でApixabanを水・DMSOそれぞれのSMD連続体溶媒中で構造最適化し、溶媒和エネルギーを比較しました。ところが、

  • Water(SMD Opt): 溶媒和自由エネルギーの寄与 ≈ -40.99 kcal/mol
  • DMSO(SMD Opt): ≈ -32.72 kcal/mol

という具合に、水の方がDMSOより溶媒和が強く出るという、実験傾向(DMSO≫水)と矛盾する結果になりました。連続体モデルは「溶媒を平均化した誘電体」として扱うため、Apixabanの特定の官能基(カルボニル、アミド、ニトリルなど)とDMSOの間に働く specific な水素結合・双極子相互作用のようなものをうまく拾えていない可能性が考えられました。

第二段階:明示的溶媒分子を4個加えてみる

そこで、Apixabanの周りに水・DMSO・メタノールをそれぞれ4分子明示的に配置し(水素結合サイト付近にクラッシュを避けて配置)、SMD連続体と組み合わせて構造最適化しました(r2SCAN-3c/SMD/Opt/KeepDens)。

ガス相のApixaban単体 + 孤立した溶媒分子(SMDで溶媒和済み)を基準にした結合安定化エネルギーは:

  • DMSO×4: 約 -41.0 kcal/mol
  • Water×4: 約 -34.9 kcal/mol

今度はDMSOの方が水より安定化が大きく、実験傾向と同じ向きになりました。連続体だけの比較で見えていた矛盾は、明示的な溶媒分子を加えることである程度解消されることが分かりました(BSSE未補正、エントロピー項なしなど、厳密な溶媒和自由エネルギーではない点には注意が必要です)。

第三段階:分子動力学で「本当に溶媒和している」構造を探る

Explicit4計算は、あらかじめ水素結合サイトを人力で選んで配置したものでした。もっと自然な形で溶媒和構造を得られないか、ということでBorn-Oppenheimer分子動力学(BOMD)を試しました。

つまずき1: QM-MD(r2SCAN-3c)は短すぎた

Apixaban + 水10分子で0.5 ps(1000ステップ)のr2SCAN-3c MDを実行しましたが、計算に2日13時間もかかった上、どの水分子も最後まで真の水素結合距離(2.7〜3.0 Å)に到達しませんでした。最も近い水でも4.2 Å程度。0.5 psという時間は、バラバラに配置した水がApixabanに集まってくるには短すぎたようです。

つまずき2: 拘束なしのXTB2 MDは「蒸発」する

計算コストの安い半経験的手法XTB2に切り替え、20 psまで伸ばして再挑戦しました。ところが今度は逆に、気相の非拘束MDでは10個の水のうち7個がApixabanから100〜300 Åという非現実的な距離まで飛んでいってしまうという結果に。周期境界条件も系を閉じ込める壁もない気相MDでは、弱く結合した溶媒分子はむしろ拡散して逃げていくのが自然な振る舞いだったのです。

解決策: 球状の「壁」で閉じ込める

ORCAの%mdブロックにはCell Sphereという機能があり、指定した中心・半径の球の外に出た原子だけに押し戻す力をかけられます。Apixabanの重心を中心に半径14 Åの球を設定して再度20 ps走らせたところ、今度は水が飛び去ることなく、複数の分子が良い水素結合距離(2〜4 Å)まで自然に接近してくれました。

第四段階:3溶媒×10分子で比較

同じ「XTB2 + 球状拘束MD(20 ps)」を、Water・DMSO・MeOHそれぞれ10分子で実行しました。

接近分子数の推移を追跡したところ:

  • Water: 序盤2〜4psで平衡レベル(平均2.5個前後)に到達し、以降ほぼ横ばい
  • DMSO: 序盤1.5〜2psで急速に4〜5個まで到達。以降も緩やかに増加傾向(平均が4.5→5.5へ)が見られ、Waterより平衡化に時間がかかる系であることが示唆されました

その後、各MD軌道の最終構造からXTB2で構造最適化を行い(Apixabanガス相単体、溶媒単分子ガス相の参照値と合わせて)、概算の溶媒和エネルギーを算出しました。

溶媒 ΔE(10分子合計) ΔE(1分子あたり) 備考
DMSO -126.83 kcal/mol -12.68 kcal/mol 完全収束
Water -72.18 kcal/mol -7.22 kcal/mol 未収束だがエネルギーはほぼプラトー
MeOH -67.30 kcal/mol -6.73 kcal/mol 未収束、エネルギーもまだ変動中

Water・MeOHの構造最適化は勾配収束基準を満たさないまま終了しましたが、構造を確認したところ、終盤の変化は「まだ溶媒和していなかった遠くの分子がApixabanに近づいていく」という物理的に意味のあるプロセスであり、無理に収束させる必要はないと判断しました。

結果:一貫してDMSO ≫ Water ≈ MeOH

手法も分子数も異なる2つのアプローチ——

  1. r2SCAN-3c / Explicit4(人力配置・厳密収束)
  2. XTB2 / Explicit10(MD由来の配置・一部未収束)

——のどちらでも、DMSOがWater・MeOHよりもはっきり大きな安定化を示すという同じ傾向が得られました。これはApixabanの実験的な溶解度傾向(DMSO≫水・メタノール)とも一致しています。

今回分かったこと・反省点

  • 連続体モデル(SMD)だけでは実験傾向を再現できない場合があり、明示的溶媒分子を加えることが有効な場合がある
  • 分子動力学で「自然な」溶媒和構造を得ようとする場合、閉じ込めのない気相MDでは溶媒分子が拡散して逃げてしまうことがある。球状の壁ポテンシャルなどで系を適切に閉じ込める工夫が必要
  • 短いMD(0.5 ps程度)では、初期配置が離れていると溶媒和が間に合わないことがある。半経験的手法(XTB2など)で長時間の事前平衡化を行うのが実用的
  • 手法(r2SCAN-3c vs XTB2)や分子数(4個 vs 10個)が異なる結果を単純に数値で比較することはできないが、傾向(順序)が一致するかどうかは重要な検証になる
  • 構造最適化が収束しなくても、エネルギーや構造変化の中身を見て「物理的に意味のある変化が続いているだけ」と判断できれば、無理に収束を追わなくてよい場合がある

今後の課題

  • BSSE補正、エントロピー項(Gibbs自由エネルギー)を含めた、より厳密な溶媒和自由エネルギーの算出
  • Explicit10構造をベースにしたr2SCAN-3cレベルでの検証計算
  • ジエノゲストなど他の分子への展開

この記事は、ORCA 6.1.1を用いた量子化学計算(r2SCAN-3c、XTB2)の記録をもとにしています。