如何使用 RDKIT 从 mol 文件中获取所有 n 个原子片段(子结构)?

问题描述 投票:0回答:0

我有兴趣获得在较大分子中包含 4 个非氢原子的片段或子结构。

最接近完成此操作的示例参考自 https://iwatobipen.wordpress.com/2020/08/12/get-and-draw-molecular-fragment-with-user-defined-path-rdkit-memo/

我使用了他们的工作,但我不相信在他们的方法中可以找到“所有”4 原子子结构。他们使用中心原子周围的“半径”概念。这并没有区分我正在寻找的所有可能的子结构。

有没有人对改进此代码以实现我的目标或未来工作的不同方向有建议?

我按照上面链接提供的方法。提供了各种子结构,但在运行此方法时未指定“所有”4 原子片段。

具体例子:

子结构示例我没有看到使用这种方法,但我相信我应该在半径 1 或半径 2 处看到。1]1

from rdkit import Chem
from rdkit.Chem import Draw
from rdkit.Chem.Draw import IPythonConsole
from rdkit.Chem import AllChem
AllChem.SetPreferCoordGen(True)
def getSubmolRadN(mol, radius):
    atoms=mol.GetAtoms()
    submols=[]
    for atom in atoms:
        env=Chem.FindAtomEnvironmentOfRadiusN(mol, radius, atom.GetIdx())
        amap={}
        submol=Chem.PathToSubmol(mol, env, atomMap=amap)
        subsmi=Chem.MolToSmiles(submol, rootedAtAtom=amap[atom.GetIdx()], canonical=False)
        submols.append(Chem.MolFromSmiles(subsmi, sanitize=False))
    return submols
mol = Chem.MolFromSmiles('C=C(S)C(N)(O)C')
submols = getSubmolRadN(mol,1)
Draw.MolsToGridImage(submols, highlightAtomLists=[[0] for _ in range(len(submols))], molsPerRow=5)
submols = getSubmolRadN(mol,2)
Draw.MolsToGridImage(submols, highlightAtomLists=[[0] for _ in range(len(submols))], molsPerRow=5)
submols = getSubmolRadN(mol,3)
Draw.MolsToGridImage(submols, highlightAtomLists=[[0] for _ in range(len(submols))], molsPerRow=5)

半径 1 和 2 的输出,半径 3 我得到一个错误

polymer rdkit molecule cheminformatics
© www.soinside.com 2019 - 2024. All rights reserved.