rdkit中对于单个原子的操作,常常是通过GetAtomWithIdx这个函数来实现的,然后可以对该原子做各种下游操作,但对于本身没有明确序号的原子,人难以确认该输入哪个序号,这里展示如何将rdkit的内部序号可视化。
方式一
通过设定atomMapNumber
, 该方法修改后, 序号可体现在SMILES中易于保存。
from rdkit import Chem
def showAtomNum(smi):
try:
mol=Chem.MolFromSmiles(smi)
for i, atom in enumerate(mol.GetAtoms()):
atom.SetProp('molAtomMapNumber',str(i))
return Chem.MolToSmiles(mol)
except Exception as e:
print (e)
return None
showAtomNum('c1ccccc(C(N)=O)1')
output: '[cH:0]1[cH:1][cH:2][cH:3][cH:4][c:5]1[C:6]([NH2:7])=[O:8]'
方式二
类似于方式一相对更加美观,但保存结果不能体现在SMILES中。
mol = Chem.MolFromSmiles('c1ccccc(C(N)=O)1')
for atom in mol.GetAtoms():
atom.SetProp("atomNote", str(atom.GetIdx()))
mol
print (Chem.MolToSmiles(mol))
output: 'NC(=O)c1ccccc1'
然而,当你试图保存为SMILES时,不能留下刚刚的序号信息。
但可以通过存为sdf等格式的方式,在molProp下,依然保存着atomNote这个信息。