一、分子片段生成
分子片段(Molecular Fragments)是一组相连的原子,并可能包含有相关官能团。在rdkit中提供了一系列用于分析、操作分子片段的工具。说起来比较抽象,操作起来也比较抽象。
- 获取官能团库:RDConfig.RDDataDir目录下的’FunctionalGroups.txt’
- 根据官能团库实例化一个参数器:FragmentCatalog.FragCatParams()
>>> import os
>>> from rdkit import Chem
>>> from rdkit.Chem import Draw
>>> from rdkit.Chem import RDConfig
>>> from rdkit.Chem import FragmentCatalog
>>> fName = os.path.join(RDConfig.RDDataDir, 'FunctionalGroups.txt')
>>> fparams = FragmentCatalog.FragCatParams(1, 6, fName)
- 查看库中包含的官能团数量:GetNumFuncGroups()
- 查看每个官能团对应的基团:GetFuncGroup()
>>> print(fparams.GetNumFuncGroups())
>>> m = fparams.GetFuncGroup(0)
>>> m
39
- 传入参数器,创建一个片段存储器:FragmentCatalog.FragCatalog()
产生的分子片段都会存储在该对象中 - 创建一个片段生成器:FragmentCatalog.FragCatGenerator()
通过该对象生成片段 - 计算分子片段:AddFragsFromMol()
- 查看分子片段数量:GetNumEntries()
>>> m = Chem.MolFromSmiles('OCC=CC(=O)O')
>>> fcat = FragmentCatalog.FragCatalog(fparams)
>>> fcgen = FragmentCatalog.FragCatGenerator()
>>> fcgen.AddFragsFromMol(m, fcat)
>>> fcat.GetNumEntries()
3
- 通过存储器查看片段:fcat.GetEntryDescription()
尖括号中的内容:表示与片段相连的官能团,以下面的结果为例:
第0号片段中,对应着一个乙基片段,该乙基与一个羟基相连。
第1号片段中,对应着一个乙烯片段,该乙烯与一个羧基相连。
>>> print(fcat.GetEntryDescription(0))
>>> print(fcat.GetEntryDescription(1))
C<-O>C
C=C<-C(=O)O>
关于官能团的详细信息,可以通过下述方法获取:
- 向存储器传入分子片段id,获取片段中所包含的官能团编号:fcat.GetEntryFuncGroupIds()
- 向参数器传入官能团编号,获取官能团对应的mol对象:fparams.GetFuncGroup()
>>> print(list(fcat.GetEntryFuncGroupIds(0)))
>>> funcgroup = fparams.GetFuncGroup(34)
>>&