RDKit 记录

RDKit Learning

1.SMILES和MOL之间的转换常用函数:

  • MolFromSmiles(Smiles, (bool)sanitize=True , (dict)replacements={} ) -> None
    sanitize为TRUE执行合格性检查,replacements为替换的字符串的dict

  • MolToSmiles(
    (Mol)mol ,
    (bool)isomericSmiles=True ,
    (bool)kekuleSmiles=False ,
    (int)rootedAtAtom=-1,
    (bool)canonical=True,
    (bool)allBondsExplicit=False,
    (bool)allHsExplicit=False ,
    (bool)doRandom=False) -> str

    isomericSmiles:包括SMILES的立体化学信息
    kekuleSmiles:使用kekule形式
    rootedAtAtom: 为非负时,设定原子开始的根节点
    canonical: 规范化分子
    allBondsExplicit:所有的键序将在输出的SMILES中明确表示
    allHsExplicit:所有的H计数都将在输出的smile中显式显示

2.原子操作

对原子进行遍历:GetAtoms()
通过索引获取原子:GetAtomWithIdx()
获取原子索引:GetIdx()
获取原子序号:GetAtomicNum()
获取原子符号:GetSymbol()
获取原子连接数(受H是否隐藏影响):GetDegree()
获取原子总连接数(与H是否隐藏无关):GetTotalDegree()
获取原子形式电荷:GetFormalCharge()
获取原子杂化方式:GetHybridization()
获取原子显式化合价:GetExplicitValence()
获取原子隐式化合价:GetImplicitValence()
获取原子总的化合价:GetTotalValence()
获取相连的原子:GetNeighbors()
显示氢原子: AddHs() // 要生成和优化立体结构时可以将氢原子显示出来
隐藏氢原子: RemoveHs()
上面的函数使用形式都如下:

from rdkit import Chem
mol = Chem.MolFromSmiles(" ")
mol.getAtoms()

对Atom对象编辑操作
修改形式电荷:atom.SetFormalCharge(int)
修改杂化方式为SP3:atom.HybridizationType(Chem.HybridizationType.SP3)
修改为芳香原子:atom.SetIsAromatic(True)
修改为同位素标记原子:atom.SetIsotope(int)
不带隐式氢:atom.SetNoImplicit(True)
固定显示氢:atom.SetNumExplicitHs(int)
使用形式:

mol = Chem.MolFromSmiles(" ")
mol.getAtomsWithIdx(idx).SetFormalCharge(int)
Chem.Sanitize(mol)

Example.为分子中每个原子加上编号

def mol_with_atomidx(mol,num=0):
	for atom in mol.GetAtoms():
		atom.SetAtomMapNum(num)
	return mol

当num=atom.GetIdx()时,可标记每个原子的标号(原子的序号是从0开始的,在图中不会标出0),如下图:

3.对化学键的操作

对键进行遍历:GetBonds()
通过索引获取键:GetBondWithIdx()
获取键的索引:GetIdx()
获取键的类型:GetBondType()
以数字形式显示键的类型:GetBondTypeAsDouble()
是否为芳香键:GetIsAromatic()
是否为共轭键:GetIsConjugated()
是否在环中:IsInRing()
是否在n元环中:IsInRingSize(n)
获取起始原子:GetBeginAtom()
获取末尾原子:GetEndAtom()

对Bond对象的编辑操作:
修改键的显示方式:SetBondDir(Chem.BondDir.BEGINDASH)
修改为芳香键:SetBondType(Chem.BondType.AROMATIC)
修改键芳香性的Flags:SetIsAromatic(bool)
是否共轭:SetIsConjugated(bool)

mol = Chem.MolFromSmiles(" ")
for bond in mol.GetBonds():
	bond.GetBondType()

4.环

判断atom对象是否在环中(最小的环):IsInRingSize()
查看所有最小环(smallest set of smallest rings, SSSR)的信息:GetSymmSSSR()
直接获取环的信息:GetRingInfo()
查看一共有几个环:NumRings()
查看原子在几个环中:NumAtomRings()
查看id为n的原子是否在n1元环中:IsAtomInRingOfSize(n, n1)
查看id为n的键是否在n1元环中:IsAtomInRingOfSize(n , n1)

判断是否为芳香环:

# To detect aromatic rings, I would loop over the bonds in each ring and flag the ring as aromatic if all bonds are aromatic:(来源:官方文档)
def isRingAromatic(mol, bondRing):
	for id in bondRing:
		if not mol.GetBondWithIdx(id).GetIsAromatic():
			return False
	return True
ri = mol.GetRingInfo()
print(isRingAromatic(m, ri.BondRings()[0]))

寻找不在环中的化学键:

cliques = []
for bond in mol.GetBond():
	a1 = bond.GetBeginAtom().Idx()
	a2 = bond.GetEndAtom().Idx()
	if not bond.IsInRing():
		cliques.append([a1, a2])

5.立体化学

Chem.EnumerateStereoisomers() 生成一个分子的所有可能异构体
Chem.FindMolChiralCenters() 寻找手性中心
Chem.FindPotentialStereo() 寻找可能手性中心(API都可在pycharm中看到)
SetChiralTag(Chem.ChiralType.CHI_TETRAHEDRAL_CCW) 修改手性碳 (当为CHI_TETRAHEDRAL_CCW时,为S型,CW为R型,CHI_OTHER、CHI_UNSPECIFIED不指定类型)

from rdkit.Chem.EnumerateStereoisomers import EnumerateStereoisomers,StereoEnumerationOptions
from rdkit.Chem import Draw
m = Chem.MolFromSmiles('BrC=CC1OC(C2)(F)C2(Cl)C1')
isomers = tuple(EnumerateStereoisomers(m))
print(len(isomers))  # output: 16
Draw.MolsToGridImage(isomers)

在这里插入图片描述
前三个(貌似可以自动标记手性中心了)
前三个

m = Chem.MolFromSmiles('OC(N)C')
m.GetAtomWithIdx(1).SetChiralTag(Chem.ChiralType.CHI_TETRAHEDRAL_CW) # 修改为R型手性碳

6.分子片段操作
(待更新)

部分摘自:
知乎专栏 https://zhuanlan.zhihu.com/p/143111689
官方cookbook https://www.rdkit.org/docs/Cookbook.html
官方文档 http://www.rdkit.org/docs/GettingStartedInPython.html
向各位大佬学习

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值