2.3 三维构象与立体化学表征


文档摘要

2.3 三维构象与立体化学表征 本节摘要:二维图抹掉了两类关键事实——原子的空间排布(手性、顺反)与键旋转产生的构象系综。本节讲清 R/S 与 E/Z 如何在 SMILES 中标注、构象系综如何生成与优化,并用"一对对映体 + 一个柔性药物"的完整代码案例,划出"何时必须上三维"的实用边界。 编目柜台的最后一课,补回被字符串和图牺牲掉的空间信息。它直接服务于第7章的分子对接(受体口袋是三维的)和第6章的三维定量构效关系;如果你的项目只做相似性检索与二维建模,本节知识则是你判断"能不能省"的依据。 立体化学:一只手性中心的两种命运 分子的化学式与连接关系完全相同、空间排布互为镜像的一对分子,叫对映体。

2.3 三维构象与立体化学表征

本节摘要:二维图抹掉了两类关键事实——原子的空间排布(手性、顺反)与键旋转产生的构象系综。本节讲清 R/S 与 E/Z 如何在 SMILES 中标注、构象系综如何生成与优化,并用"一对对映体 + 一个柔性药物"的完整代码案例,划出"何时必须上三维"的实用边界。

编目柜台的最后一课,补回被字符串和图牺牲掉的空间信息。它直接服务于第7章的分子对接(受体口袋是三维的)和第6章的三维定量构效关系;如果你的项目只做相似性检索与二维建模,本节知识则是你判断"能不能省"的依据。

立体化学:一只手性中心的两种命运

分子的化学式与连接关系完全相同、空间排布互为镜像的一对分子,叫对映体。它们的熔点、谱图几乎一样,在普通储藏条件下能量也相同——但在手性环境里(酶、受体、另一只手性分子面前)行为可以天差地别:一个是药,另一个可能无效甚至有害。反应停(沙利度胺)事件让全行业为这一课付出了代价,此后单一构型成了小分子药物的基本要求。

SMILES 用 @@@ 标注手性中心,含义是"从该原子看去,邻居原子按书写顺序呈顺时针还是逆时针排列"。L-丙氨酸与 D-丙氨酸只差一个符号:

from rdkit import Chem from rdkit.Chem import rdCIPLabeler # CIP 规则打 R S 标签 ala_L = Chem.MolFromSmiles("C[C@H](N)C(=O)O") ala_D = Chem.MolFromSmiles("C[C@@H](N)C(=O)O") for m, tag in [(ala_L, "L 型"), (ala_D, "D 型")]: rdCIPLabeler.AssignCIPLabels(m) center = Chem.FindMolChiralCenters(m, includeUnassigned=True) print(tag, center) # L 型 [(1, 'S')];D 型 [(1, 'R')] from rdkit.Chem import inchi print(inchi.MolToInchiKey(ala_L)) # 两个 Key 首段相同 print(inchi.MolToInchiKey(ala_D)) # 次段不同:立体差异写进了身份

两件事值得停一下。其一,@@@ 的具体意义取决于原子在字符串中的书写顺序——同一个分子换个写法,标记可能要从 @ 改成 @@,所以永远不要手工"修正"立体标记,交给规范化流程。其二,标准 InChIKey 把立体信息编入次段之前的首段之后区域,R 型与 S 型会得到不同的 Key:立体差异是身份差异,对账系统里绝不能把对映体混成一条记录。

双键的顺反异构用斜杠标记:F/C=C/F 是反式(两个氟在双键两侧),F/C=C\F 是顺式。规律与手性同理——几何信息写进字符串,身份随之分裂。

构象:一个分子的无数个影子

可旋转的单键让同一张分子图拥有大量空间形态(构象)。构象之间能量不同:跨过旋转势垒互相转化,常温下柔性分子是一束构象的动态混合物。药物设计关心的是这束混合物里哪些构象能摆出与靶点结合的姿态——二维表征对此完全失明。

计算化学信息学处理构象的标准流程是:生成(距离几何或系统搜索,产出多样化构象集)、优化(力场弛豫,消除原子重叠与键角畸变)、聚类去冗余(按骨架重原子均方根偏差截断)。RDKit 的 ETKDG 加 MMFF 组合就是这条流水线的现成实现。

图 2-3:构象系综与能量地形

图 2-3:构象系综与能量地形

构象生成的目标不是"找到唯一正确构象",而是用尽量少的构象覆盖结合姿态可能出现的那片地形——受体结合会诱导分子变形,所以与最低能量构象相差几 kcal 且骨架形状不同的构象,都值得留进候选。

案例:为布洛芬准备构象系综

背景。布洛芬是典型的柔性药物:丙酸链加异丁基苯环,可旋转键让它在溶液里呈多种姿态。假设它要进分子对接(第 7.2 节),对接程序需要一批三维构象当输入。这件事在二维表征看来毫无难度——毕竟只是一张图——而三维流程的每一步都有讲究。

操作。生成、优化、按均方根偏差去冗余,一套走完:

from rdkit import Chem from rdkit.Chem import AllChem ibp = Chem.AddHs(Chem.MolFromSmiles("CC(C)Cc1ccc(cc1)C(C)C(=O)O")) # 生成最多 200 个构象,骨架重原子 RMSD 小于 0.5 埃的视为重复 cids = AllChem.EmbedMultipleConfs( ibp, numConfs=200, pruneRmsThresh=0.5, params=AllChem.ETKDGv3()) print("去冗余后构象数:", len(cids)) # 典型输出:10 上下 # MMFF 力场批量优化并按能量排序 res = AllChem.MMFFOptimizeMoleculeConfs(ibp) res.sort(key=lambda r: r[1]) # r 为(是否收敛,能量)元组 best_e, worst_e = res[0][1], res[-1][1] print("最低能量:%.1f;最高:%.1f kcal/mol" % (best_e, worst_e)) conf0 = ibp.GetConformer(cids[0]) # 取最低能构象的三维坐标 print(tuple(round(v, 2) for v in conf0.GetPositions()[0]))

结果。两百次尝试经去冗余收敛到十余个彼此偏离超过 0.5 埃的构象;能量优化后,系综的能量跨度通常在几 kcal/mol 之内,最低能构象的酸链多朝向远离苯环的一侧。把这套构象交给对接程序,就是柔性配体的标准出厂设置。

解读。三处工程判断藏在参数里。pruneRmsThresh 越小保留越多——构象多则覆盖广,但对接耗时线性上涨,常规做法是零点五到一埃之间取值;先加氢再优化(AddHs)不可省,力场没有氢会把几何优化成灾难;能量最低不等于结合构象——受体诱导契合完全可能选中能量高两三个千卡的构象,这正是要保留系综而不是只留最低能的理由

变式。若目的从对接换成三维描述符计算(第 6 章的 3D-QSAR),构象处理策略要反过来:需要把所有分子对齐到共同参照系,构象选择偏保守(最低能或药效团匹配构象),否则描述符的方差被构象噪声污染。同一套工具,两个用途,参数哲学相反——本节给出的判断框架,比任何固定参数都耐用。

本节要点回顾

  • 立体是身份@@@/\ 写进字符串,R/S、顺反差异让 InChIKey 分道扬镳。
  • 标记别手改:立体符号语义依赖书写顺序,规范化流程之外的"手工修正"是事故源。
  • 构象是系综不是构象:柔性分子以一族构象存在,对接输入要覆盖地形,而非单点最优。
  • 参数即取舍:RMSD 阈值与构象数量是覆盖与成本的旋钮,用途不同、拧法相反。
  • 编目柜台毕业:字符串、图、空间三件套齐了;第 3 章带着这套表示能力去管理真实馆藏——先见一见那几座公共大库。

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U