化合物の2次元構造から体積を算出する、ということが案外openbabelやrdkitのbuilt-inでは出来なさそうだったので(私の勘違いだったら悲しいなこれ)、論文を参考に[1]実装をした。単位は立方オングストローム。
openbabelに依存した実装をしている。
これを使うと、例えばbenzeneを入力してみると、
from calc_mol_volume import *
import pybel
mol = pybel.readfile("sdf", "benzene.sdf").next()
print estimate_volume(mol)
# -> 81.1800000...
となる。また、calc_mol_volume.pyにはannotate_sdf_volume
を用意している。
from calc_mol_volume import *
annotate_sdf_volume("benzene.sdf", "benzene_annotated.sdf")
とすることで新しいsdfファイルを出力することもできる。
[1] Zhao YH, et al., "Fast calculation of van der Waals volume as a sum of atomic and bond contributions and its application to drug compounds", The Journal of Organic Chemistry, 68(19), 7368-7373, 2003.