rdkit&python | 超全化合物分子清理方法

分子结构处理 Molecular Sanitization

默认情况下,RDKit读入分子的时候会进行分子结构检查处理(Molecular Sanitization)。 结构处理的过程中会自动计算一些有用信息,如杂化、环信息等,保证分子的结构在化学上是合理的:价键合理。

Sanitization的检查过程,包含11步。

  1. clearComputedProps: 清除已有的分子、原子、键的计算性质,如 This step is always performed.
  2. cleanUp: 对非标准价键进行标准化处理,如: 5根键的N转换成两性离子的形式。
    Example: N(=O)=O 自动变成 [N+](=O)O-]。Example: C-N=N#N 变成 C-N=[N+]=[N-]。
    Example: C=P(=O)O -> C=[P+]([O-])O Example: O=Cl(=O)O -> [O-][Cl+2][O-]O
    注意: 非标准价键形式作为输入不会产生异常*
  3. updatePropertyCache: 计算所有原子的显式和隐式价态。如果价态超过该原子的最高价态,则会产生异常报错。
  4. symmetrizeSSSR: 执行SSSR 算法计算环的信息。
  5. Kekulize: 把kekule形式转换成芳香环。如果单双键的kekulized形式不能转换成芳香环或者方向键在环外, 则会产生异常。
  6. assignRadicals: 检测原子上的自由基电子的情况。
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现化合物分子的子结构频次统计,可以使用RDKit Python库。下面是一些参考代码: 1. 加载化合物库 ```python from rdkit import Chem from rdkit.Chem import AllChem # 从文件中读取化合物库 suppl = Chem.SDMolSupplier('compound.sdf') mols = [x for x in suppl if x is not None] print('共读取到{}个分子'.format(len(mols))) ``` 2. 提取分子中的子结构 ```python # 提取分子中的环 def extract_rings(mol): rings = Chem.GetSymmSSSR(mol) return [Chem.MolToSmiles(mol, rootedAtAtom=r) for r in rings] # 提取分子中的官能团 def extract_functional_groups(mol): fgs = ['[{}]'.format(Chem.MolToSmiles(mol, rootedAtAtom=a, includeAtomNumbers=True)) for a in mol.GetAtoms() if a.GetAtomicNum() != 6] return fgs # 提取分子中的子结构 def extract_substructures(mol): rings = extract_rings(mol) fgs = extract_functional_groups(mol) return rings + fgs # 提取化合物库中所有分子的子结构 substructures = [] for mol in mols: substructures += extract_substructures(mol) substructures = list(set(substructures)) print('共提取到{}个子结构'.format(len(substructures))) ``` 3. 计算每个子结构在化合物库中出现的频次 ```python # 计算每个子结构在化合物库中出现的频次 substructure_count = {} for substructure in substructures: substructure_count[substructure] = 0 for mol in mols: for substructure in extract_substructures(mol): substructure_count[substructure] += 1 print(substructure_count) ``` 这样就可以得到每个子结构在化合物库中出现的频次了。可以根据需要,进一步对子结构进行聚类、筛选等操作,以便更好地分析化合物库中的结构信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ASKCOS

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值