012

TeachOpenCADD 教程:用开源工具完成 CADD 全流程

TeachOpenCADD 用开源工具串起完整的 CADD 流程。这篇给出学习路径与各模块的实践价值。

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 教程》 单个工具的深入

学完之后能做什么

  • 独立完成一次虚拟筛选:从靶点到候选化合物列表;
  • 处理真实的化学数据:知道数据会有什么问题、怎么清洗;
  • 理解各环节的取舍:过滤太严会漏、太松会淹没在噪声里;
  • 与化学家沟通:知道每一步的输出对化学家意味着什么;
  • 判断工具的适用性:知道什么问题该用什么方法。

关键要点

  • 最大价值是端到端的流程串联——多数教程只教一个环节;
  • 它会让你直观感受到真实化学数据有多脏,这个体验比说教有用;
  • 换一个靶点重做一遍是分水岭——会遇到教程里没有的真实问题;
  • 学完能独立完成一次虚拟筛选,并理解各环节的取舍。

延伸资源