生物学的等価体として知られているものにカルボン酸とテトラゾールがありますね。
医薬化学において、テトラゾール環はカルボン酸の等価体と見なされ、医薬品の部分構造に汎用されている。これは前述のようにpKaがほぼ等しいため、
テトラゾールってこんな構造だからpKaは同じだとしてもアニオン化した状態で負電荷どこにたまるのかなという素朴な疑問を持っていた。
ま、計算すればいいだけなので、pygamessを使って計算してみた。以下コード。チャージがcontrlセクションに入力するっていうのが気持ち悪い。
あと、最適化がなかなか終わらないのでmaxitとnstepは増やした。デフォルトをこの値にしてもいいかもしれない。
from pygamess import Gamess, GamessError import openbabel as ob g = Gamess() g.contrl['maxit'] = 200 g.contrl['icharg'] = -1 g.statpt['nstep'] = 300 g.system['mwords'] = 80 g.basis_type('631g') g.run_type('optimize') obc = ob.OBConversion() obc.SetInAndOutFormats("mol","mol") mol = ob.OBMol() obc.ReadFile(mol, "tetrazole.mol") print g.gamess_input(mol) try: newmol = g.run(mol) except GamessError, gerr: print gerr.value else: for obatom in ob.OBMolAtomIter(newmol): print obatom.GetIdx(), obatom.GetType(), obatom.GetPartialCharge()
いろいろ試していたので、GAMESSインプットを出力するようにしてある。
結果を見ると、確かに6,9番目の窒素のマイナスチャージが大きくなっているので、カルボン酸等価なんだろうなと納得したのであった。
$ /opt/local/bin/python optimize.py $contrl runtyp=optimize scftyp=rhf icharg=-1 maxit=200 mult=1 $end $basis gbasis=N31 ndfunc=1 ngauss=6 $end $system mwords=80 $end $statpt opttol=0.0001 nstep=300 $end $DATA C1 C 6.0 -5.1500000000 0.5694000000 0.3351000000 C 6.0 -3.6632000000 0.3894000000 0.3044000000 H 1.0 -5.3940000000 1.6144000000 0.4937000000 H 1.0 -5.6014000000 -0.0166000000 1.1314000000 H 1.0 -5.6123000000 0.2533000000 -0.5982000000 N 7.0 -2.8049000000 1.3874000000 0.2522000000 N 7.0 -1.6217000000 0.7950000000 0.2303000000 N 7.0 -1.7700000000 -0.4762000000 0.2679000000 N 7.0 -3.0563000000 -0.7807000000 0.3162000000 $END 1 C3 -0.5149 2 Car 0.437823 3 HC 0.153658 4 HC 0.142616 5 HC 0.138266 6 Nar -0.487902 7 Nar -0.192393 8 Nar -0.188063 9 Nar -0.489106
量子化学計算っていうのは意外にトライアンドエラーが多い。だからといってGUIのコンソールからちまちまと作業すると時間が取られて困るし、作業ログが残りにくいので、こういったスクリプトで幾つかの条件を用意してforループでグルグルまわして計算させれば手順がきちんとドキュメントとして残るのでよい。