Skip to content

Latest commit

 

History

History
86 lines (70 loc) · 5.26 KB

File metadata and controls

86 lines (70 loc) · 5.26 KB

可购性检查 CLI 使用说明

本说明介绍如何使用本仓库内的可购性检查工具,基于两部分:

  • scripts/check_accessible.py:单个 SMILES 可购性检查(本地库存优先,其次 PubChem)。
  • inference.py:命令行工具(CLI)。可对模型预测得到的合成路径(paths)进行筛选:若存在“全可购”路径优先保留;若不存在,则保留“不可购节点最少”的路径集合。也可先调用模型生成 paths 再筛选。

适用场景:你已有模型输出的 path_string 列表,想快速过滤出所有节点都可购的路线;或希望一步生成+筛选。

目录定位(默认):

  • 可购库存清单:data/compounds/buyables-stock.txt
  • 可视化/模型配置:data/configs/dms_dictionary.yaml
  • 模型权重目录:data/checkpoints/

注意:仅“检查模式”(只用 --paths-file)不需要安装 torch;只有选择“先生成再检查”时才会加载模型相关依赖。输入 paths 支持两种形式:

  • JSON 字符串 path_string(如 "{'smiles':'...','children':[...]}")
  • 已解析的字典对象路径(形如 {smiles, children} 的树)

一、快速开始(仅检查已有 paths)

  • 文件格式支持:
    • JSON 数组:元素可以是 path_string 字符串,或已解析好的路径字典对象
    • 行分隔文本:每行一个 path_string 字符串

示例:

  • 只检查 children(起始物料),不要求根节点(产物)可购:
    • python3 inference.py --paths-file my_paths.txt --children-only --output filtered.json
  • 要求路径中包含根节点在内所有节点都可购:
    • python3 inference.py --paths-file my_paths.txt --include-root --output filtered.json

可选参数:

  • --stock-file data/compounds/buyables-stock.txt 覆盖默认库存清单
  • --sleep 0.2 PubChem 查询限速(秒),默认 0.2

二、生成 + 检查(需要模型与 checkpoint) 示例:

  • python3 inference.py --target "CNCc1cc(-c2ccccc2F)n(S(=O)(=O)c2cccnc2)c1" --model explorer --beam-size 32 --children-only --output filtered.json
  • 可选:--n-steps, --starting-material, --ckpt-dir data/checkpoints, --config data/configs/dms_dictionary.yaml

提示:脚本会在运行时自动将 ./src 加入 sys.path,可直接以源码方式调用模块;若使用自定义安装环境,确保 directmultistep 模块可被导入。

三、筛选策略与输出说明(JSON)

  • 筛选策略:
    • 若存在“整条路径所有被检查节点都可购”的路径,优先保留这些(all_access)。
    • 若不存在全可购路径,则保留“不可购节点数最少”的路径集合(min_inaccessible)。若并列,全部保留。
  • 输出字段:
    • total: 候选路径数量
    • accessible: 全可购路径数量(仅统计 all_access)
    • include_root: 是否要求根节点一并检查
    • selection: all_accessmin_inaccessible
    • min_not_accessible: 若为 min_inaccessible 策略,给出最小不可购节点数;否则为 null
    • paths: 选中的路径列表(JSON 结构:每条路径为 {smiles, children} 的字典树,不是字符串)
    • statuses: 每个出现过的 SMILES 的判定结果,形如 {"status": "purchasable" | "no_vendors" | "not_found" | "error", "detail": "..."}
    • path_reports: 每条候选路径的诊断:{"path": <JSON路径>, "not_accessible": <数量>, "not_accessible_smiles": [..]}

四、判定逻辑与来源

  • 先查本地清单(精确匹配):data/compounds/buyables-stock.txt
  • 不在本地清单时,调用 PubChem PUG/PUG View:
    • SMILES → CID;若 CID == 0 或未找到,判为 not_found
    • CID → Chemical Vendors;若存在并为真,判为 purchasable;否则 no_vendors
  • 为减少对 PubChem 的压力,在网络查询间加入 --sleep 延迟。

五、返回码(exit code)

  • 0:至少有一条路径被选中(全可购或“最少不可购”)
  • 3:没有路径被选中
  • 2:输入错误或文件不存在等问题

六、常见用法小抄

  • 检查 children-only(最常用):
    • python3 inference.py --paths-file my_paths.txt --children-only --output filtered.json
  • 使用自定义库存清单:
    • python3 inference.py --paths-file my_paths.txt --children-only --stock-file path/to/stock.txt
  • 生成+检查(含根节点):
    • python3 inference.py --target "<SMILES>" --model explorer --include-root --output filtered.json
    • 若不存在全可购路径,输出会自动切换到 min_inaccessible 策略并保留不可购最少的路径集合。

七、局限与建议

  • PubChem 作为可购性代理指标对常见试剂较准,但对盐型/互变异构体/异常表示可能返回 not_foundno_vendors
  • 本地清单为精确字符串匹配;若需 SMILES 规范化后匹配,可扩展脚本进行标准化。
  • 批量大规模查询时适当增大 --sleep,避免过快触发限速。

相关脚本

  • inference.py:CLI 主脚本
  • scripts/check_accessible.py:单个 SMILES 判定逻辑(可独立运行)

问题反馈或扩展(建议)

  • 需要导出“不可购/未知”路径及不可购节点详细清单(CSV/JSON)?
  • 需要只检查叶子节点(起始原料)/只检查 children/包含根节点的不同策略?目前已支持 --children-only--include-root