RDKit|化学反应操作与处理

  • 化学反应
    • 1.SMARTS创建反应
    • 2.rxn文件创建反应
    • 3.产物后处理

化学反应

Rdkit中提供了基于SMARTS的化学反应操作,可以通过SMARTS或rxn反应文件构建反应模式,再对指定的反应物进行匹配,将匹配上的结构按反应模式进行合成。

1.SMARTS创建反应

  • 从SMARTS创建一个反应模式:Chem.ReactionFromSmarts()
    下面这个反应表示一个羧基,与至少带有一个氢的氮原子反应,形成酰胺
  • 定义反应物:reactants
  • 进行一个反应:RunReactants(reactants, maxProducts)
    对反应物依次进行反应,返回结果为一个元组
>>> from rdkit import Chem
>>> from rdkit.Chem import AllChem as Chem
>>> rxn = Chem.ReactionFromSmarts('[C:1](=[O:2])-[OD1].[N!H0:3]>>[C:1](=[O:2])[N:3]')
>>> reactants = (Chem.MolFromSmiles('CC(=O)O'), Chem.MolFromSmiles('NC'))
>>> products = rxn.RunReactants(reactants)
>>> print(len(products))
1
  • 看看反应方程式
>>> Chem.Draw.ReactionToImage(rxn)
1
  • 元组中的每个元素(也是个元组)对应着一个产物。
>>> print(len(products[0]))
1
>>> Chem.Draw.MolToImage(products[0][0])
2
  • 用含两个羧基的化合物与甲胺反应,对应着两种匹配的方式,会产生两个反应结果。
>>> double = Chem.MolFromSmiles('C(COC(=O)O)C(=O)O')
>>> reacts = (double, Chem.MolFromSmiles('NC'))
>>> ps = rxn.RunReactants(reacts)
>>> print(len(ps))
2
>>> Chem.Draw.MolsToGridImage([x[0] for x in ps])
3

2.rxn文件创建反应

  • 通过MDL rxn文件来创建反应
>>> import os
>>> from rdkit.Chem import RDConfig
>>> rxn_file = os.path.join(RDConfig.RDDocsDir, 'Book\data\AmideBond.rxn')
>>> rxn = Chem.ReactionFromRxnFile(rxn_file)
  • 查看反应模版(反应物)数量:GetNumReactantTemplates()
  • 查看产物模版(产物)数量:GetNumProductTemplates()
  • 其他进行反应及查看产物的方法一样
>>> print(rxn.GetNumReactantTemplates())
>>> print(rxn.GetNumProductTemplates())
2
1

3.产物后处理

  • 做个更复杂的反应,例如1,3丁二烯与乙烯加成反应
>>> rxn = Chem.ReactionFromSmarts('[C:1]=[C:2].[C:3]=[*:4][*:5]=[C:6]>>[C:1]1[C:2][C:3][*:4]=[*:5][C:6]1')
>>> ps = rxn.RunReactants((Chem.MolFromSmiles('OC=C'), Chem.MolFromSmiles('C=CC(N)=C')))
>>> len(ps)
4
  • 查看一下产生的所有分子
    反应物在反应模板中可以有多种映射方式,所以产生了多种产物,但有一些是重复的
>>> Chem.Draw.MolsToGridImage([x[0] for x in ps], molsPerRow=4)
4
  • 可以通过字典来获得不重复的结构
>>> uniqps = {}
>>> for p in ps:
>>>     smi = Chem.MolToSmiles(p[0])
>>>     uniqps[smi] = p[0]
>>> sorted(uniqps.keys())
['NC1=CCC(O)CC1', 'NC1=CCCC(O)C1']
  • 此外,需要注意的是,通过化学反应产生的分子,是没有经过核对的,可以手动检查一下:SanitizeMol()
>>> rxn = Chem.ReactionFromSmarts('[C:1]=[C:2][C:3]=[C:4].[C:5]=[C:6]>>[C:1]1=[C:2][C:3]=[C:4][C:5]=[C:6]1')
>>> ps = rxn.RunReactants((Chem.MolFromSmiles('C=CC=C'), Chem.MolFromSmiles('C=C')))
>>> Chem.MolToSmiles(ps[0][0])
'C1=CC=CC=C1'
5
>>> Chem.SanitizeMol(ps[0][0])
>>> Chem.MolToSmiles(ps[0][0])
'c1ccccc1'

本文参考自rdkit官方文档
代码及源文件在这里

RDKit是一种常用的分子仿真、分析和可视化工具,它可以对化学分子进行多种操作和计算。其中包括基于片段的分子生成,这也是RDKit在药物发现和化学合成中的一个重要应用。 基于片段的分子生成是指根据已知的分子结构中所包含的骨架a和骨架b,生成与之相似但不完全相同的化合物。这种方法可以用于研究药物分子结构的多样性、发现药物活性的结构相关性,以及优化化合物的代谢性质、药效学性质等。 具体来说,基于片段的分子生成一般分为两个步骤。首先,需要对已知的骨架a和骨架b进行分段,得到不同的化学片段。然后,根据这些片段的性质和结构,结合组成分子的其他原子和键,利用相应的算法和软件程序生成相似的化合物。这些化合物可以通过计算化学性质、分析构效关系等方法进行进一步的研究和优化。 RDKit提供了一系列用于基于片段的分子生成的工具和函数,如MolFragmenter,MolStandardize,MolInterchange等。这些工具可以高效地对分子进行分段、生成相似分子、处理化学反应操作,加速药物发现和化学研究的过程。同时,RDKit还支持多种化学文件格式、API接口、可视化效果等,方便用户使用和操作。 总之,基于片段的分子生成是RDKit在药物发现和化学合成领域中的重要应用之一。它为研究药物结构、优化化合物性质、设计新的药物分子等方面提供了有效的工具和方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值