跳转至

商业原料库(building-block stock)

做什么:管理"哪些分子买得到"的商业原料库多步规划判断一条路线的叶子是否 可购、可合成性评分 SynScore据此打分,都用它。你可以切换内置库、并入自己的库、或只 用自己的库——同一个库会同时作用于规划和评分。

内置两个库(用时才下载):

  • zinc(默认)——ZINC in-stock 集;
  • molport——MolPort 在库砌块。

Python

内置库就是普通的 stock 对象,用集合运算自由组合:

from synomega.stock import zinc, molport, InMemoryStock

mine = InMemoryStock.from_file("my_building_blocks.smi")   # 你自己的库(SMILES 文件)
# 或从预先算好的键文件秒加载: InMemoryStock.from_keys_file("mine.keys")

stock = zinc()               # 只用内置 zinc(默认)
stock = molport()            # 只用内置 molport
stock = zinc() | mine        # 补充:内置 ∪ 自有(并集)
stock = mine                 # 独立:只用自己的库
stock = zinc() | molport()   # 两个内置一起用
stock = zinc() & molport()   # 交集(两边都在库)
stock = zinc() - blacklist   # 差集(排除某些)

把组合好的库传给规划或评分,两处都用它:

import synomega
planner = synomega.load_default_planner(stock=zinc() | mine)
scorer  = synomega.load_default_scorer(stock=molport())

不传 stock= 就用默认的 zinc同一个 stock 会同时流进多步规划和 SynScore

声明式快捷方式

不想手写组合,可以用 resolve_stock

from synomega.stock import resolve_stock

resolve_stock("molport")                                         # 只用内置 molport
resolve_stock("zinc", user_stock="mine.smi")                     # 补充(默认 supplement)
resolve_stock("zinc", user_stock="mine.smi", mode="standalone")  # 只用自己的库
resolve_stock("zinc", user_stock="mine.keys", user_is_keys=True) # 自有是预算好的键文件
  • mode="supplement"(默认)= 内置库 ∪ 自有库;
  • mode="standalone" = 只用自己的库。

命令行

# 切换内置库
synomega score --targets targets.smi --library molport --out scores.jsonl

# 补充:内置 zinc ∪ 你的库
synomega plan --target "CCO" --library zinc --stock mine.smi

# 独立:只用你的库
synomega plan --target "CCO" --stock mine.smi --stock-mode standalone

# 你的库是预算好的键文件
synomega score --targets targets.smi --stock mine.keys --stock-is-keys
  • --library {zinc,molport}:内置库,默认 zinc
  • --stock <文件>:你自己的库(SMILES;键文件要配 --stock-is-keys);
  • --stock-mode {supplement,standalone}:自有库与内置库的关系,默认 supplement(并集)。

自定义库与预算键文件

原始目录(SMILES)每次加载都要重算 InChIKey(千万级要几分钟)。算一次、存成键文件,以后秒加载:

synomega build-stock --catalogue my_catalogue.smi.gz --out my.keys.gz

之后 --stock my.keys.gz --stock-is-keys,或 Python 里 InMemoryStock.from_keys_file("my.keys.gz")。 是否可购按 InChIKey 匹配,所以自己的库和内置库的键在同一口径下比较,跨工具生成的目录也能对上。

加一个新的内置库

synomega/data.pyBUILTIN_STOCKS 注册表里加一行(库名 → 托管的键文件名),把键文件上传到资产 镜像即可。所有使用点(多步规划、SynScore、命令行)都通过同一处解析商业库,因此只改这一处,各处自动 生效