RDKit对象

分子对象

分子对象是RDKit里最重要的一种对象,大部分的操作都围绕它展开。得到分子对象的方式通常是由SMILES字符串转换而来。比如我们想要得到苯的分子对象:

1
2
3
from rdkit import Chem

mol = Chem.MolFromSmiles('c1ccccc1')

SMILES以及分子对象中一般不显式写出氢原子,而是通过化学规则推断。如果要显示出显式氢,可以使用:

1
mol = Chem.AddHs(mol)

同理,去掉显式氢则使用:

1
mol = Chem.RemoveHs(mol)

获取分子的原子数和化学键数

1
2
mol.GetNumAtoms()
mol.GetNumBonds()

获取分子中的原子:

1
2
3
4
5
GetAtoms()

atoms = mol.GetAtoms()
for atom in atoms:
...

获取分子中的键:

1
2
3
4
5
GetBonds()

bonds = mol.GetBonds()
for bond in bonds:
...

根据原子编号获取原子:

1
GetAtomWithIdx()

原子对象

对于上文得到的原子对象atom,我们可以对其做大量的操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
GetAtomMapNum: 原子smarts形式冒号后面的数字,如[N:4], map id 就是4
GetAtomicNum: 获取原子对应的元素编号,如碳原子的AtomicNum就是6
GetBonds: 该原子参与形成的键的列表。
GetFormalCharge: 该原子的电荷
GetChiralTag: 原子的手性信息
GetDegree: 原子的度,这里的度指的是这个原子参与形成键的数目
GetIsAromatic: 判断原子是否是芳香性原子
GetIdx: 获取原子的编号
GetNeighbors: 获取相连的原子列表
GetSmarts: 获取原子的Smarts形式
GetSymbol:获取原子的元素符号
IsInRing(): 判断原子是否在环上
IsInRingSize(n): 判断原字是否在n-元环上

化学键对象

同理,对于上文得到的键对象bond,我们也可以对其做大量的操作。

1
2
3
4
5
6
7
GetBondType():获取键的类型
GetBeginAtom(): 组成键的第一个原子
GetBeginAtomIdx(): 键的第一个组成原子编号
GetEndAtomIdx():键的第二个组成原子编号
GetEndAtom(): 组成键的第二个原子
IsInRing(): 判断是否在环上
IsInRingSize(n):判断是否在n-元环上

构象对象

我们可以使用RDKit内置的力场优化方法,通过分子对象直接得到它的构象:

1
2
3
4
5
6
from rdkit import AllChem

mol2 = Chem.AddHs(mol)
success = AllChem.EmbedMolecule(mol, randomSeed=2022)
conf = mol2.GetGonformer(0)
pos = conf.GetPositions()

分子的可视化

  1. 将分子对象显示为图片

    1
    Draw.MolToImage(mol)
  2. 将分子对象保存为图片

    1
    Draw.MolToFile(mol,’filename.png’)
  3. 绘制多个分子对象

    1
    Draw.MolsToGridImage(mols, molsPerRow=4, subImgSize=(200,200))