ChEMBL EGFR 查询
5568
Ro5 通过集(分析批次)
4635
PAINS 命中
408/4635 (8.8%)
Brenk 命中
2454/4635 (52.9%)
冻结最大簇 / 共同于全部
145 / 22 原子
候选(严格 违规=0)
767
候选(违规≤1 上游批次)
1113

Module 02 · EGFR 分子比较:表示、性质、结构警示、指纹相似性与共同子结构

数据来源:TeachOpenCADD 数据包(Volkamer Lab,固定提交 4efdbd36…),原始表来自 ChEMBL。 计算环境:RDKit 2025.09.6 / Python 3.11。 本文档为修订版:修订内容与原因见 REVISIONS.md。

阅读约定:下文每条结论都标注类型—— [实测] 由本模块代码在冻结输入上算出,可用 data/ 或 figures/*.csv 复核; [推测] 化学/软件常识的读法,本模块未提供独立证据; [边界] 方法适用范围、已知失败或未覆盖之处。


1. 数据与语义

冻结输入 文件 规模 角色
T001 EGFR 活性表 T001_query_chembl/data/EGFR_compounds.csv 5568 全量 ChEMBL 查询集,含 IC50(nM) 与 pIC50
T002 类药性子集 T002_compound_adme/data/EGFR_compounds_lipinski.csv 4635 上游 Ro5 通过集(本模块的分析批次)
T003 警示目录 T003_compound_unwanted_substructures/data/unwanted_substructures.csv 105 条 SMARTS 结构警示分子式目录
T005 最大簇 T005_compound_clustering/data/molecule_set_largest_cluster.sdf 145 冻结聚类参照(成员身份用于校验)

路径与 SHA256 记录在 data/input_inventory.csv。原始输入只读。

[实测] pIC50 = −log10(IC50 / M) 逐行成立(pIC50 范围 1.602–11.523)。 [边界] 每个分子只有一条 ChEMBL IC50 记录;gefitinib 的 pIC50 = 6.29 是"这条记录",不是临床效力排名。 [实测+选择] "活性"沿用 T004 定义 pIC50 ≥ 6.3,即 IC50 ≤ 501 nM ≈ 0.50 µM;全量中 3256 个达到该线。这是人为选择,不是普适分界(图示为虚线)。


2. 结果

2.0 一图总览

图 0:模块总览
图 0:模块总览

A 筛选漏斗;B 两套警示目录的命中率;C 相似度对指纹表示的依赖;D 冻结 T005/T006 参照结果。

2.1 同一批例子的四种表示(图 A)

图 A:四种分子表示
图 A:四种分子表示

以 gefitinib(CHEMBL939) 为例:

表示 它是什么 关键区别
SMILES 一串字符 [实测] 46 个字符,分子只有 31 个重原子;Cl 占两字符,括号与环闭合数字各成字符类别
One-hot 字符→向量(词表 12 × 位置 46) 位置是字符位置,不是原子编号;长度随写法变化
分子图 原子=节点、键=边 [边界] 图保留的是它所编码的属性(元素/键级/电荷/手性),不是三维构象
指纹 定长比特向量 [边界] 有损摘要,不保留原子对应关系

[实测] gefitinib 的 MACCS 与 Morgan 恰好都是 60 位为 1——巧合,含义不同。MACCS = 预定义结构键;Morgan = 哈希后的环形环境。 [实测] MACCS 的 167 位里有 30 位在整批 4635 个分子中几乎不出现,故其置位偏靠后。

2.2 性质与类药性(图 B)

图 B:性质与 Ro5
图 B:性质与 Ro5

Ro5 采用 T002 参考过滤(500 Da / HBA 10 / HBD 5 / logP 5,允许至多一项违规)。

[实测] 按分子 ID 的过滤表比对(data/property_membership_check.csv):

项 结果
T002 是否为重算 ≤1 集合的子集 是;唯一差异 27 个分子(重算接纳、上游排除)
ExactMolWt / MolLogP 完全一致
NumHDonors 100% 一致
NumHAcceptors 仅 76.2% 一致;上游系统性更高(差值 0~3,23.8% 的行上游更高)

[推测] 首版称该差异源于"旧版 RDKit 的 HBA 定义"。本模块无独立版本证据:我检验并否定了一个具体机制假说("上游把某类氮计入受体",成立率仅 0.477)。因此成因未证实,仅能确认两套数值不同。 [边界] 上游未保留被排除分子的 HBA 值,该比对只能在 4635 个保留分子上进行;被排除的 933 个分子只能核对通过/不通过归属。 [实测] 大体积的 lapatinib(580 Da、logP 6.14)有 2 项违规而被排除——[推测] 这正是"规则是启发式、不等于疗效判决"的例证。

2.3 结构警示(图 C)

图 C:结构警示
图 C:结构警示

[实测] 警示在全量 5568 个分子上计算(覆盖 5568/5568,证据 data/alerts_all.csv 的 alert_checked 列);下表为 4635 个批次分子上的命中率:

目录 条目数 命中
PAINS 480 408(8.8%)
Brenk 105 2454(52.9%)

[实测] 随附 unwanted_substructures.csv(105 条)与 RDKit BRENK 在本批次上命中集合一致(一致率 1.000)。 [推测] 这不等于两者定义完全相同,也不能解释上游派生文件(_noPAINS)的命名与历史。 [实测] 最常见 Brenk 警示:Michael_acceptor_1 1252、Aliphatic_long_chain 507、Oxygen-nitrogen_single_bond 426。 [猜测→已降级] 首版把"迈克尔受体警示"等同于"共价 EGFR 抑制剂的药效团"。警示本身不能证明某个化合物具有实验验证过的共价机制;它只提示需要核查。 [实测] 带警示的分子里同样有高活性成员(图 C 箱线图),所以警示不是丢弃的理由。

2.4 指纹相似性(图 D)

图 D:指纹相似性
图 D:指纹相似性

[实测] 随机取 400 个分子(seed 0),计算 79,800 对:

量 MACCS(167) Morgan r2(2048)
Tanimoto 均值 0.441 0.158
相似度 = 1.00 的分子对 8 对(并列) 0(除自身)

[实测] gefitinib 的前 8 个近邻中,两种指纹下只有 4 个重合 → 相似性排序依赖表示。 [实测] Tanimoto c/(a+b−c) 与 Dice 2c/(a+b) 单调相关但数值不同(a、b 为各自为 1 的位数,c 为共同为 1 的位数),Dice 通常更大。 [实测] gefitinib 与 dacomitinib 最接近(Morgan 0.53),与 osimertinib 仅 0.17——与结构直觉一致。

2.5 冻结最大簇与共同子结构(图 E)

图 E:冻结最大簇与共同子结构
图 E:冻结最大簇与共同子结构

(a)忠实重建 T005 — [实测] 参照实现为 RDKit path 指纹 maxPath=5 + Butina 距离 0.2:1128 个簇,最大簇 145 个成员,与随附 SDF 的成员 Jaccard = 1.0000(完全一致)。 [边界] Butina 阈值只约束中心↔成员距离:冻结簇内仅 73.0% 的分子对满足距离 ≤0.2,最大簇内距离 0.33。 [边界] 参照说明明确:"Matching a cluster's size does not establish matching membership" —— 不能靠换指纹/阈值去凑数量。

(b)冻结集上的 MCS(T006) — [实测](data/frozen_mcs_records.csv,含每次搜索的 SMARTS、145 个成员 ID、约束与状态):

设置 原子/键 状态
support 1.0(共同于全部),RingMatchesRingOnly=True 22 / 24 0.0 s 完成
support 0.8,RingMatchesRingOnly=True 28 / 30 63.9 s 完成
support 0.8 + CompleteRingsOnly=True (28) 60.5 s 被取消

[边界] CompleteRingsOnly 是额外约束(要求映射环的原子全部在场),与 RingMatchesRingOnly 不是同一选项;加上它,同一 support 在预算内无法完成。取消 ≠ 证明最大值(图中以斜纹柱与图注标示)。

(c)返回的查询图本身(不推断骨架名) — [实测] 22 原子 / 24 键,元素 C16 N4 O2,3 个六元环。 [实测] 在 145 个冻结成员上的基序支持:4-苯胺基喹唑啉基序 145/145、喹唑啉双环 145/145、酰胺 145/145(data/frozen_motif_support.csv,各含 SMARTS)。 [推测] 把该查询图读作"4-苯胺基喹唑啉核心 + 酰胺 + 醚连接"是化学解读;上文给出的是可核验的实测支持数。

2.6 聚类与 MCS 扩展(图 G,独立于冻结参照)

图 G:扩展探索
图 G:扩展探索

以下为本模块新增的探索,与 T005/T006 冻结参照严格分开,不能当作参照结果引用。

2.7 哪些分子值得继续研究(图 F)

图 F:候选规则
图 F:候选规则

[实测] 三条候选谓词的实际含义(data/candidate_rules.csv,alert_unchecked 均为 0):

规则 类药集合 无警示 且活性 pIC50≥6.3
Ro5 违规 =0(严格) 3056 1488 767
Ro5 违规 ≤1(上游 T002 批次) 4635 2088 1113
Ro5 违规 ≤1(RDKit2025 重算) 4662 2089 1114

[边界] 三条谓词的分母不同("至多一项违规"与"零违规"是不同规则),引用时必须写明用了哪一条。图 B 的 B 面板用严格规则。 [实测] 严格规则下 pIC50 最高的候选包括 CHEMBL35820(11.22, 387 Da)、CHEMBL53711(11.22, 343 Da)、CHEMBL66031(11.10, 339 Da)。

推荐等级(区分证据强度)

  1. 优先深入:违规 0 + 无警示 + 高 pIC50(上表第一行集合)——结构紧凑、性质友好。
  2. 值得优化:高活性但带 1 条警示(如 Michael_acceptor_1)——[推测] 这类基团在共价抑制剂中常见,但警示本身不证明共价机制,应核实而非直接丢弃。
  3. 需要谨慎:违规 ≥2(如 lapatinib 型大分子)——类药性风险更高。

[边界] 全部结论的适用范围:以上基于计算属性与结构规则。pIC50 来自 ChEMBL 单条 IC50 记录、未做实验重复;Ro5 与警示目录均为启发式;指纹相似度依赖所选指纹;共同子结构依赖簇与 support。这些结论支持"排优先级",不构成亲和力、选择性、成药性或临床有效性的证明。


3. 产物与复现

module-02/
├── REVISIONS.md                     # 修订记录(含本次补充)
├── README.md                        # 模块说明与命令
├── summary.json                     # 机器可读摘要
├── code/
│   ├── molkit.py                    # 化学工具库(输入目录可配置)
│   ├── figures_mod02.py             # 8 组图 + 字形守卫
│   ├── run_module02.py              # 单一命令入口(--input-dir/--out/--redraw)
│   ├── patch_alerts_and_mcs.py      # 本次针对性修正脚本
│   └── build_report_html.py         # 报告渲染
├── data/                            # 全部派生表(含 input_inventory.csv 与各证据记录)
├── figures/                         # 8 组图,每张 .png(+.pdf/.svg) 配同名 .csv
└── report/REPORT.md · REPORT.html
# 完整分析(新目录、全新进程)
python code/run_module02.py --input-dir <data pack> --out <new dir> --report-md report/REPORT.md
# 仅重绘(读取已存记录,不重跑聚类/MCS)
python code/run_module02.py --input-dir <data pack> --out <existing dir> --redraw

独立验证:本次已在一个新目录(module-02-cli-run/)中用全新进程执行上述命令(约 4.4 分钟),8 组图与全部数据表均由该命令产出;随后用 --redraw(约 32 s,不调用 MCS 搜索)套用图表修正。

依赖:python≥3.10、rdkit、numpy、pandas、matplotlib(--report 另需 markdown)。固定 seed=0。


4. 来源与许可