目录
1. 导入相关包
from rdkit import Chem
from rdkit.Chem import Draw
from rdkit.Chem.Draw import IPythonConsole
from rdkit.Chem import rdFMCS
from rdkit.Chem.Draw import rdDepictor
rdDepictor.SetPreferCoordGen(True)
IPythonConsole.drawOptions.minFontSize=20
如果出现导入失败,请先安装RDKit,'pip install RdKit’即可。
2. 两种高亮方式
方法一:通过子结构匹配进行高亮
m = Chem.MolFromSmiles('[H][C@]1(CO)O[C@@]([H])(N2C=NC3=C(N)N=C(F)N=C23)[C@]([H])(O)[C@]1([H])O')
substructure = Chem.MolFromSmarts('CO')
print(m.GetSubstructMatches(substructure))
m
输出:
((0, 3), (1, 2), (4, 3), (16, 17), (18, 19))
图1 高亮分子子结构图
方法二:直接高亮指定的原子编号
根据方法一打印出来的原子编号,在方法二中使用该原子编号。
m.__sssAtoms = [0,1,2,3,4,16,17,18,19]
m
图2 方法二高亮分子子结构图
图1和图2,标记出的分子子结构是一样的,可想而知,两种方法都能够达到同样的效果。但是方法一更简单直观。
3. 高亮分子的不同子结构
定义两种分子并可视化:
mol1 = Chem.MolFromSmiles('FC1=CC=C2C(=C1)C=NN2')
mol2 = Chem.MolFromSmiles('CCC1=C2NN=CC2=CC(Cl)=C1')
Draw.MolsToGridImage([mol1, mol2])
图3 分子可视化
定义比较分子不同的方法:
def view_difference(mol1, mol2):
mcs = rdFMCS.FindMCS([mol1,mol2])
mcs_mol = Chem.MolFromSmarts(mcs.smartsString)
match1 = mol1.GetSubstructMatch(mcs_mol)
target_atm1 = []
for atom in mol1.GetAtoms():
if atom.GetIdx() not in match1:
target_atm1.append(atom.GetIdx())
match2 = mol2.GetSubstructMatch(mcs_mol)
target_atm2 = []
for atom in mol2.GetAtoms():
if atom.GetIdx() not in match2:
target_atm2.append(atom.GetIdx())
return Draw.MolsToGridImage([mol1, mol2],highlightAtomLists=[target
_atm1, target_atm2])
调用view_difference 方法:
view_difference(mol1,mol2)
图4 分子不同子结构高亮图
这种方法你可以随时可视化并高亮两个分子间的不同子结构,喜欢本文的欢迎点赞、转发和评论哦!