1
SMILES和SMARTS的区别
SMILES: 分子描述语言
SMILES (Simplified Molecular Input Line Entry System)是一种分子描述语言,由Daylight C.I.S.的创始人 Dr. David Weininger 博士发明。它简单,易于理解,且广泛使用的分子描述方法。
SMILES的几种类型
仅描述原子及原子之间键的SMILES是“generic SMILES”。
根据首先出现的原子,在哪个方向上追踪原子以及在分支中将哪一侧视为侧链,可以针对同一结构描述多种类型的generic SMILES。
包含同位素和不对称中心描述的SMILES被称为“isomeric SMILES”。像通用SMILES一样,isomeric SMILES可以有多个isomeric SMILES。
通过选择头部原子,从其遵循的方向以及基于某些规则的侧链,可以确定单个结构的unique SMILES。
仅generic SMILES被称为“generic SMILES”或“canonical SMILES”。
通用SMILES到canonical SMILES的转换称为SMILES的canonicalization。
由于Canonical SMILES与分子结构一一对应,因此它也被用作THOR / Merlin数据库中的关键项。
标准化的isomeric SMILES称为absolute SMILES。
SMARTS:模式描述语言
SMARTS (SMiles ARbitrary Target Specification) 是延伸于所述搜索查询的SMILES模式描述语言。
2
Reaction SMILES / SMARTS
SMILES还具有Reaction SMILES,它是可以描述化学反应的扩展。
Murai reaction
首先,来自村井伸二教授等人的世界上第一个实用的催化CH键活化型反应
Reaction SMILES是“原料/试剂>>产品”
O = C-C1 = CC = CC = C1.CCO [Si](OCC)(OCC)C = C >> CCO [Si](CCC1 = C(C = O)C = CC = C1)(OCC)OCC
两种原材料通过SMILES用“ . ”连接。
实际尝试一下反应。准备要反应的Mol对象和反应模式后,执行RunReactant(Reaction SMARTS)
导入库
from rdkit import rdBase, Chem
from rdkit.ChemimportAllChem, Draw
准备反应模式
reactant_1 = Chem.MolFromSmiles('O=C-C1=CC=CC=C1')
reactant_2 = Chem.MolFromSmiles('CCO[Si](OCC)(OCC)C=C')
reaction_pattern = '[O:1]=[C:2]-[c:3][c:4].[C:5]=[C:6]-[Si:7] >> [O:1]=[C:2]-[c:3][c:4]-[C:5]=[C:6]-[Si:7]'
rxn = AllChem.ReactionFromSmarts(reaction_pattern)
x = rxn.RunReactants([reactant_1, reactant_2])
print(x)
标准化分子后绘制产物结构
Chem.SanitizeMol(x_0)
Draw.MolToImage(x_0)
MacMillan:Late-Stage Trifluoromethylation
关于C-H活化反应,通常将其用作后期Late-Stage Functionalization,其在合成结束时增加分子的多样性,尤其是其在小分子药物上的应用,以证明其有用性。如三氟甲基(一种常用于药物发现化学中的部分结构)可以一步一步直接引入到药物分子本身中,是否有可能创造出一个具有新特性的有用分子?如果一口气就能制造出来,它们就能增加有潜力分子的种类!”
反应形式是芳环的C-H键向三氟甲基的转化。
Reaction SMILES如下: FC(F)(F)S(Cl)(= O)= O.C1 = CC = CC = C1 >> FC(F)(F)C1 = CC = CC = C1
以立普妥(Atrovastatin)为底物进行反应,以合成三氟甲基化CF3-立普妥。
导入库
from rdkit import rdBase, Chem
from rdkit.Chem import AllChem, Draw
import pubchempy as pcp
import pandas as pd
准备底物
Lipitor_df = pcp.get_properties('canonical_smiles', 'Lipitor', 'name', as_dataframe=True)
Lipitor_smi = Lipitor_df.loc[60823, 'CanonicalSMILES']
Lipitor_mol = Chem.MolFromSmiles(Lipitor_smi)
Draw.MolToImage(Lipitor_mol)
立普妥(Lipitor)具有三个苯环和大量反应位点,但MacMillan及其同事在1:1:1的区域异构体混合物中生产了三种主要的三氟甲基化产物(产率为74%)。
CF3_reaction = '[c:1][cH1:2][c:3]>>[c:1][c:2](C(F)(F)F)[c:3]'
rxn = AllChem.ReactionFromSmarts(CF3_reaction)
x = rxn.RunReactants([Lipitor_mol,])
#获取分子
CF3_Lipitors = {}
for p in x:
Chem.SanitizeMol(p[0])
smi = Chem.MolToSmiles(p[0])
CF3_Lipitors[smi] = p[0]
print(len(CF3_Lipitors))
#8分子已生成
#将字典转换为列表并绘制
CF3_Lipitor_list = list(CF3_Lipitors.values())
Draw.MolsToGridImage(CF3_Lipitor_list, molsPerRow=4, subImgSize=(200,200))
由于不知道CF3进入的位置,因此使用立普妥(Lipitor)的骨架进行对齐。
AllChem.Compute2DCoords(Lipitor_mol)
for m in CF3_Lipitor_list:
AllChem.GenerateDepictionMatching2DStructure(m, Lipitor_mol)
要突出显示CF3,请获取与子结构搜索匹配的原子数。
CF3_list = []
CF3_subst = Chem.MolFromSmarts('C(F)(F)F')
for mol in CF3_Lipitor_list:
matched_atoms = mol.GetSubstructMatches(CF3_subst)
CF3_list.append(matched_atoms[0])
绘制
legends = [str(i) for i in range(8)]
Draw.MolsToGridImage(CF3_Lipitor_list, molsPerRow=4, subImgSize=(200,200), legends=legends, highlightAtomLists=CF3_list)
上述结构中,实际产生的三个分子是4号(4'-CF3-Lipitor,分离产率为22%)和5号(2-CF3-Lipitor,分离产率)。比率为25%)和7(4-CF3-Lipitor,分离产率为27%)。
考虑到该反应不会与氟苯基一起进行,而与苯胺的反应这一事实,该三氟甲基化反应的选择性似乎受到富电子环和空间空位的影响。
参考资料
1.http://www.rdkit.org/docs/RDKit_Book.html#chemical-reaction-handling
2.https://www.molsis.co.jp/datamanagement/daylight/smiles/
3.https://www.daylight.com/dayhtml/doc/theory/theory.smarts.html
作者 / 编辑:王建民
DrugAI
本文为DrugAI原创编译整理,如需转载,请在公众号后台留言。