Open Babel API

介绍

此文章不完全翻译自官方文档,不定期更新,欢迎关注

Open Babel是一个非常优秀的支持多种分子格式的开源软件,同时可以进行2D 3D格式的转换,也可以编写脚本。编译安装方法可以查看我们之前的文章

对于python,Open Babel是支持的很好的,其包括了两个Python包,分别为openbabel模块和Pybel模块。

1.Openbabel模块

其包含标准的Python粘合,来自于C++API,通过SWIG自动生成

2.Pybel模块 这是一个轻量级的openbabel封装类和方法,其提供更多的便利和Pythonic方式来操控Open Babel工具

openbabel模块

包含基本类 OBMol,OBAtom,OBBond和OBResidue,以及转换框架 OBConversion

示例

(以下均为python3测试通过) 普通的自编分子

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import openbabel

# 创建实例
mol=openbabel.OBMol()
print('Should print 0 (atoms)')
print(mol.NumAtoms())

# 创建新原子
a=mol.NewAtom()
# C原子,见元素周期表
a.SetAtomicNum(6)
# 设置坐标
a.SetVector(0.0,1.0,2.0)

b = mol.NewAtom()
# 原子键索引为1
mol.AddBond(1, 2, 1)  
# 输出原子树木
print(mol.NumAtoms())
# 输出键树木
print(mol.NumBonds())

mol.Clear()

当然也可以通过阅读SML码读取已有分子进行加氢,输出其他文件的操作,主要是使用OBConversion框架

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import openbabel

obConversion=openbabel.OBConversion()
obConversion.SetInAndOutFormats('smi','mdl')

mol=openbabel.OBMol()
obConversion.ReadString(mol,"C1=CC=CS1")

# 将会显示5个原子
print(mol.NumAtoms())

#加氢
mol.AddHydrogens()

# 将会显示9个原子
print(mol.NumAtoms())

outMDL=obConversion.WriteString(mol)

当然也可以阅读文件模式进行阅读

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import openbabel

obConversion = openbabel.OBConversion()
obConversion.SetInAndOutFormats("pdb", "mol2")

mol = openbabel.OBMol()
obConversion.ReadFile(mol, "1ABC.pdb.gz")   # Open Babel will uncompress automatically

mol.AddHydrogens()

print(mol.NumAtoms())
print(mol.NumBonds())
print(mol.NumResidues())

obConversion.WriteFile(mol, '1abc.mol2')

使用迭代器

许多Open Babel工具包提供迭代器,其后缀为"iter",所有的API可以在官网查询

Pybel模块

Pybel我觉得是更加好用更加容易理解的工具,使用的方法也很容易,就是import pybel或者from pybel import *

原子和分子

分子可以通过三种方法进行创建: 1.使用OBMol 2.从文件中阅读(见下) 3.从字符串中阅读(见下)

原子可以通过两种方法创建: 1.使用OBAtom 2.分子中的原子

分子的话有如下属性:atoms,charge,data,dim,energy,exactmass,formula,molwt,spin,sssr,titleunitcell(这个需要晶体数据),atoms属性主要是提供分子中的所有原子列表,data属性可以看作一个字典,可以阅读和编辑数据。

以下为一个示例,让我们假设有一个SD文件包含数据的描述

湘ICP备18006841号-4
Built with Hugo
主题 StackJimmy 设计