SMILES标准化方法以及其中的一个坑(手性)
rdkit.Chem.MolToSmiles()
方法是用于将RDKit分子对象转换为SMILES字符串的方法。它的参数如下:
mol
:必需,要转换为SMILES字符串的RDKit分子对象。isomericSmiles
:bool类型,是否生成同分异构体SMILES,默认为False,即不生成同分异构体SMILES。kekuleSmiles
:bool类型,是否生成Kekule SMILES,默认为False,即生成熔合环上的芳香性保持未指定的杂化,如果是True,则生成使用Kekule表示法的SMILES。canonical
:bool类型,是否生成规范化的SMILES,默认为True,即生成规范化的SMILES。allBondsExplicit
:bool类型,是否为所有化学键添加显式的方向性和序数,即无论它们是单键、双键还是三键。默认为False。allHsExplicit
:bool类型,是否为所有氢原子添加显式的表示,默认为False。sanitize
:bool类型,是否在生成SMILES之前对分子进行净化,默认为True。净化操作将包括在分子中添加氢原子、移除未配对的电荷、设置正确的杂化和检查化学键长度等。
其中重要的一个参数:“
isomericSmiles
”,它表示是否保存原始分子的手性,当时做分子生成的时候坑惨了,我说怎么生成的分子都是不带有手性的呢???
from rdkit import Chem
# 创建一个 SMILES 字符串
smiles = 'O=C(N[C@@H](C)C1=CC=C(C(O)=O)C=C1)C2=C(CC3=CC=C(OC(F)F)C(OC(F)F)=C3)SC4=C2CCOC4'
# 将 SMILES 字符串转换为 RDKit 分子对象
mol = Chem.MolFromSmiles(smiles)
# 输出标准化后的 不带有手性SMILES
print(Chem.MolToSmiles(mol, isomericSmiles=False, canonical=True))
# 输出标准化后的 带有手性SMILES
print(Chem.MolToSmiles(mol, isomericSmiles=True, canonical=True))
结果分析:
所以一定要保留手性:isomericSmiles = True
备注:手性
手性不会影响基本性质,例如MG,LogP....
手性中心个数(chiral_centers):过多的手性中心,会导致合成与纯化工艺难度的大幅提高。【chiral_center = len(Chem.FindMolChiralCenters(m, includeUnassigned=True))】
且会影响湿实验的结果,
我原来一直以为手性无关紧要,其实很有必要!!
"C@@H"和"C@H"区别以及和rdkit的标准化方法
"C@@H"和"C@H"这两种手性也是不一样的,以下两幅图的手性也是不同的,他们对应的化学反应可能也是不同的,
需要注意的是:带有"C@@H"的SMILES不一定就是第一幅图的实体黑色手性,它也有可能是第二附图的虚线手性,仅仅通过SMILES中的"C@@H"和"C@H"是无法判断手性是实体黑色还是虚线黑色,且带有"C@@H"的SMIELS和带有"C@H"的SMIELS可能是同一种物质【它们没有任何不同,也就说明rdkit的标准化方法可以很好的保留手性】:
标准化之前:O=C(N[C@@H](C)C1=CC=C(C(O)=O)C=C1)C2=C(CC3=CC=C(OC(F)F)C(OC(F)F)=C3)SC4=C2CCOC4
标准化之后:C[C@H](NC(=O)c1c(Cc2ccc(OC(F)F)c(OC(F)F)c2)sc2c1CCOC2)c1ccc(C(=O)O)cc1
相关文章
- 能否掌控复杂性,是一个分布式数据库生存下去的唯一方法
- calendar类常用方法_设计一个日期类date
- hbuilderx打包android证书的三种生成方法
- 2023-04-02:设计一个仓库管理器,提供如下的方法: 1) void supply(String item, int num, int price) 名字
- SpringMVC07处理器方法的返回值详解编程语言
- 值MySQL中ID最大值的获取方法(mysqlid最大)
- MySQL中快速删除一个表的方法(mysql删除一个表)
- MySQL计算用户留存率:一种有效的用户衡量方法(mysql计算留存率)
- 定情况MySQL查看表锁定情况的实现方法(mysql查看表锁)
- MSSQL查询记录总数:一个实现方法(mssql 记录总数)
- Linux查看链接文件:一个方法探索(linux查看链接文件)
- 让Redis保持隐秘简单有效的保护方法(如何隐藏redis)
- MySQL查询下一个月份的方法(mysql下月的月份)
- 一个防止被采集的方法
- MySQL1067错误解决方法集合
- jspinclude文件时的一个乱码解决方法
- jquery创建一个新的节点对象(自定义结构/内容)的好方法
- 使用C#Winform应用程序获取网页源文件的解决方法
- php定时计划任务的实现方法详解
- JS清除IE浏览器缓存的方法
- 一个js导致的jquery失效问题的解决方法
- log4net配置和使用方法分享
- ShareSDK造成App崩溃的一个BUG原因分析以及Fix方法
- 多个jsp页面共享一个js对象的超级方法
- PHP获取数组最后一个值的2种方法
- ajaxFileUpload.js插件支持多文件上传的方法
- 页面加载完后自动执行一个方法的js代码