TeachOpenCADD 是一套开源的计算机辅助药物设计教程,最大的特点是「端到端」:从数据获取、分子处理、筛选、对接到机器学习,用可运行的 Notebook 串成完整流程。对想理解 CADD 全貌的人,它是最合适的起点。
教程模块与流程对应
| 模块主题 | 对应的实际环节 | 价值 |
|---|---|---|
| ChEMBL 数据获取 | 拿到靶点的已知配体与活性 | 高 |
| 类药性过滤 | Lipinski 等规则(见 064《Lipinski 五规则》) | 高 |
| 不需要的子结构过滤 | PAINS、结构警示(见 069《Brenk Alert》) | 高 |
| 分子相似性与聚类 | 库的整理与去冗余(见 039《Tanimoto 相似性》、050《分子相似性聚类》) | 高 |
| 最大公共子结构 | SAR 分析 | 中 |
| 蛋白数据获取与比对 | 靶点结构准备 | 高 |
| 配体基筛选 | 相似性搜索、药效团 | 高 |
| 结构基筛选(对接) | 见 017《AutoDock Vina 教程》、336《用 AutoDock Vina 跑 Docking》 | 高 |
| 机器学习 | QSAR 建模 | 中(其它资源更深) |
| 激酶相似性 | 选择性分析的实例 | 中 |
最有价值的部分:完整流程的串联
# 【多数教程只教一个环节,而 TeachOpenCADD 教「怎么串起来」】
#
# 一个完整的配体基筛选流程:
#
# 第 1 步:从 ChEMBL 获取靶点数据
from chembl_webresource_client.new_client import new_client
targets = new_client.target
target = targets.filter(target_chembl_id="CHEMBL203") # EGFR
activities = new_client.activity.filter(
target_chembl_id="CHEMBL203",
standard_type="IC50",
).only(["molecule_chembl_id", "canonical_smiles",
"standard_value", "standard_units"])
# 第 2 步:数据清洗(见 046、056)
# - 去掉单位不一致的
# - 转成 pIC50
# - 【处理重复测量】:同一分子多个值取中位数
# - 去盐、标准化
# 第 3 步:类药性过滤(见 064)
from rdkit.Chem import Descriptors, Lipinski
def lipinski_pass(mol):
violations = sum([
Descriptors.MolWt(mol) > 500,
Descriptors.MolLogP(mol) > 5,
Lipinski.NumHDonors(mol) > 5,
Lipinski.NumHAcceptors(mol) > 10,
])
return violations <= 1
# 第 4 步:结构警示过滤(见 069)
from rdkit.Chem import FilterCatalog
params = FilterCatalog.FilterCatalogParams()
params.AddCatalog(FilterCatalog.FilterCatalogParams.FilterCatalogs.PAINS)
catalog = FilterCatalog.FilterCatalog(params)
# 第 5 步:相似性搜索(见 048)
# 用已知活性分子作为查询,从大库中找相似分子
# 第 6 步:聚类去冗余(见 050)
# 避免采购一批高度相似的分子
# 第 7 步:对接(见 017、336)
# 第 8 步:结果分析与可视化
#
# 【学完这个流程,你就能独立完成一次虚拟筛选】
教程中容易被忽略但重要的细节
- 数据清洗的工作量:教程会让你直观感受到,从 ChEMBL 拿到的原始数据有多脏——单位混乱、重复测量、异常值、无效结构。这个体验比任何说教都有用;
- 过滤器的取舍:PAINS 过滤会误杀一些真实的活性分子——教程会展示过滤前后的数量变化,让你理解这个权衡(见 069《Brenk Alert》);
- 聚类的参数敏感性:Butina 聚类的阈值选择直接影响簇数——没有「正确」的值,取决于你要什么;
- 对接的准备工作:真正跑对接之前,结构准备、盒子设置、格式转换占了大部分时间(见 105《PDBFixer》、106《Meeko》);
- 可视化的价值:教程大量使用分子网格图——养成「看分子」的习惯。
建议的学习路径
# 【第 1 阶段】:跑通(1~2 周)
# 按顺序过一遍所有 Notebook
# 目标:知道每一步在做什么,代码能跑通
# 【不要纠结细节】
#
# 【第 2 阶段】:换靶点重做(1 周)
# 选一个自己感兴趣的靶点,
# 把整个流程重做一遍
# → 【会遇到教程里没有的问题,这才是学习】
#
# 常见的新问题:
# - 这个靶点的数据量太少怎么办
# - 活性数据类型混杂(IC50/Ki/EC50)怎么统一
# - 没有共晶结构怎么办
# - 对接跑不出合理结果怎么排查
#
# 【第 3 阶段】:加入自己的改进(持续)
# - 加入更严格的评测(骨架划分,见 051)
# - 加入不确定性估计(见 166)
# - 加入相互作用分析(见 108)
# - 加入生成模型(见 158)
#
# 【关键建议】:
# 第 2 阶段是分水岭
# 只跑教程的人,与换个靶点重做过的人,
# 理解深度完全不同
与其它资源的分工
| 资源 | 侧重 |
|---|---|
| TeachOpenCADD | 端到端的 CADD 流程 |
| DeepChem(见 004《DeepChem 教程体系入门》) | 机器学习模型与数据集 |
| RDKit Cookbook(见 013《RDKit Cookbook》) | 具体操作的速查 |
| Practical Cheminformatics(见 011《Practical Cheminformatics 博客》) | 批判视角与实践陷阱 |
| Deep Learning for Molecules(见 010《Deep Learning for Molecules and Materials》) | 深度学习方法与实现 |
| 对接工具教程(见 017《AutoDock Vina 教程》、016《GNINA 教程》) | 单个工具的深入 |
学完之后能做什么
- 独立完成一次虚拟筛选:从靶点到候选化合物列表;
- 处理真实的化学数据:知道数据会有什么问题、怎么清洗;
- 理解各环节的取舍:过滤太严会漏、太松会淹没在噪声里;
- 与化学家沟通:知道每一步的输出对化学家意味着什么;
- 判断工具的适用性:知道什么问题该用什么方法。
关键要点
- 最大价值是端到端的流程串联——多数教程只教一个环节;
- 它会让你直观感受到真实化学数据有多脏,这个体验比说教有用;
- 换一个靶点重做一遍是分水岭——会遇到教程里没有的真实问题;
- 学完能独立完成一次虚拟筛选,并理解各环节的取舍。
延伸资源
- RDKit Cookbook:013《RDKit Cookbook》;Practical Cheminformatics:011《Practical Cheminformatics 博客》;
- Vina 教程:017《AutoDock Vina 教程》;实战筛选:336《用 AutoDock Vina 跑 Docking》;ChEMBL:226《ChEMBL》。