今の会社がRDKitを使っていたり、gamessで計算したエネルギーとか軌道係数をそのままRDKit+Pandasに持っていけると都合が良かったりするので、バックエンドをRDKitに変更しようとしている。
とりあえず、このコミットでtotal energyが出るようになった。
久々にコードの修正していて、 なんじゃ、この書きなぐったようなコードは? と感じたのでもう少し綺麗に書き直したい。
>>> from pygamess import Gamess >>> from rdkit import Chem >>> from rdkit.Chem import AllChem >>> m = Chem.MolFromSmiles("CC") >>> m = Chem.AddHs(m) >>> AllChem.UFFOptimizeMolecule(m,maxIters=200) 0 >>> g = Gamess() >>> g.input(m) ' $contrl runtyp=energy scftyp=rhf mult=1 $end\n $basis gbasis=sto ngauss=3 $end\n $system mwords=30 $end\n $DATA\n6324\nC1\nC 6.0 -0.7593407291 0.0107048487 -0.0162273112 \nC 6.0 0.7593414912 -0.0107048029 0.0162270652 \nH 1.0 -1.1594363804 -0.1004995560 1.0135868837 \nH 1.0 -1.1131931576 0.9732198527 -0.4420381632 \nH 1.0 -1.1342180646 -0.8246918478 -0.6443526878 \nH 1.0 1.1342169299 0.8246865647 0.6443564239 \nH 1.0 1.1594357587 0.1005043120 -1.0135855392 \nH 1.0 1.1131941519 -0.9732193715 0.4420333286 \n$END\n' >>> nm = g.run(m) >>> nm.GetProp("total_energy") '-78.302511907400003'
なんでGamessなんて使うかというと光毒性予測モデルのようなHOMO-LUMOギャップとか励起状態が効いてくるような現象を予測しようとした場合それなりの計算してあげないといけないからね。