biosolveit::cli
组件 09 · 构建空间 Toolkit · v9.1

CoLibri — 构建化学空间工具包

CoLibri 是一个包含四个独立命令行工具的工具包,用来从构建块(building blocks / synthons)与形式化反应定义(.smirks.rxn)生成数十亿乃至更大规模的组合化学空间("fragment spaces")。生成的化学空间可被 FTreesSpaceLightSpaceMACS 检索,也可用 infiniSee 导航、用 HPSee 做 Chemical Space Docking。要做自己的"企业化学空间",CoLibri 是必备工具。

工具数
4 个独立 CLI
输入
构建块 + 反应定义
最终产物
.space 文件
枚举上限
每反应 100 万产物

01 四个工具与整体流程

CoLibri 的核心思路:把反应及其构建块编码成带"乐高式" linker 的片段,并附上兼容规则(灰砖只能接红砖、橙砖只能接绿砖……)。生成空间通常分两类路径,最后都用 FragspaceConverter 转成可检索的 .space

工具可执行文件作用
ReactionSynthesizerreaction_synthesizer为单个反应生成"经典片段空间"(单空间),也能枚举产物、为 FastGrow/共价对接做分子转换。
FragspaceMergerfragspace_merger把多个单反应空间合并成统一的"母"空间。
SpaceLightDBCreatorspacelight_db_creator生成"拓扑片段空间"数据库(.tfsdb),这是 SpaceLight 指纹搜索的前提。
FragspaceConverterfragspace_converter把经典/拓扑片段空间转成最终可检索的 .space 文件。
两条路径
经典片段空间(供 FTrees、SpaceMACS):ReactionSynthesizer 建单空间 → FragspaceMerger 合并 → FragspaceConverter 转 .space
拓扑片段空间(供 SpaceLight):SpaceLightDBCreator 建 .tfsdb → FragspaceConverter 转 .space
两条路径的输入相同:构建块 + 反应定义。
CoLibri 生成化学空间的流程总览
Figure 1:CoLibri 生成化学空间的流程总览——构建块 + 反应 →(经典 / 拓扑)片段空间 → FragspaceConverter → 可检索的 .space

02 前提与授权

需要 CoLibri 程序包、命令行环境与有效许可证。测试许可证直接放在各可执行文件旁(如 reaction_synthesizer)。每个工具都支持通用选项 --help--license-info--version-v(部分支持 --thread-count)。

03 ReactionSynthesizer — 生成单空间 / 枚举产物

最小输入:一个反应定义文件 + 一个含合适构建块的输入文件。下面为 amide coupling 反应生成单空间(-g 表示生成片段空间):

生成单个反应空间
./reaction_synthesizer -r amidecoupling.smirks -i building_blocks.smi \
                     -o amide_single_space -g

输出目录里会有 fragment 文件(.smi)、fragment-label 文件(.flf)、fragment-space 文件(.fsf)与 stats.log。也可同时枚举所有产物分子:

生成空间 + 枚举产物
./reaction_synthesizer -r suzuki.smirks -i building_blocks.smi \
                     -o suzuki_single_space -g -e suzuki_products.sdf

主要选项

选项说明
-r / --reaction反应定义文件(.smirks.rxn)。
-i / --input含构建块的输入文件(.smi .smiles .mol .mol2 .sdf),可多次使用;只读取兼容的构建块。
--input-reagent-1..4为特定试剂位置显式指定构建块文件(如反应物 1 放羧酸)。
-s / --smaSMARTS 官能团定义文件(仅当 .rxn 用了原子标签时需要);示例文件 FunctionalGroupLabel.txt
-p / --protecting-groups保护基 SMARTS 文件;clip 后从片段(及产物)中移除。示例 ProtectingGroups.txt
-o / --output-path输出目录(不存在则自动创建)。
-g / --generate-fragspace为该反应生成片段空间文件(.fsf/.flf/.smi)。
-e / --enumerate枚举产物到指定文件(.smi .smiles .mol2 .sdf),上限 100 万。
-c / --random-products随机枚举指定数量产物(需 -e;0 表示全枚举)。
--check-reaction仅检查反应定义是否有误,有误写 validation.log 后立即终止。
--informationstats.log 信息级别 1–3。

其他用途:为 FastGrow / 共价对接转换分子

写一个把官能团转换成带 linker 产物的反应定义,即可把化合物准备成共价对接(供 FlexX)或 FastGrow 入库所需的形式:

把乙烯砜弹头转换为蛋白结合态(带 linker)
./reaction_synthesizer -r vinylsulfon_transform.rxn -i vinylsulfones.smi \
                     -o vs_transformed -e vs_transformed.sdf

04 FragspaceMerger — 合并单空间

把多个单反应空间合并成统一母空间,会统一所有片段、增强兼容性编码,从而加快 FTrees / SpaceMACS 搜索。输出三个文件:合并后的 .flf.fsf.smi

用 -i 指定多个 .fsf 合并
./fragspace_merger -i amide_single_space/amidecoupling.fsf \
                 -i suzuki_single_space/suzuki.fsf \
                 -o merged_space -f parent_space

或用 -d 指定一个基目录(其每个子目录恰好含一个单空间):

用 -d 基目录合并
./fragspace_merger -d . -o merged_space -f parent_space

选项:-i 指定 .fsf(对应的 .flf 与片段文件须在同目录,可多次使用)/ -d 基目录(与 -i 互斥)/ -o 输出目录 / -f 输出基名(不带后缀)。

05 SpaceLightDBCreator — 拓扑片段空间

为 SpaceLight 的指纹搜索生成拓扑片段空间数据库(.tfsdb)。输入与 ReactionSynthesizer 相同(构建块 + 反应定义)。

选项说明
-r / --reaction反应定义(.smirks/.rxn)。
-i / --input构建块文件,可多次使用;也可用 --input-reagent-1..4 指定各试剂位。
-s / --sma / -p / --protecting-groups同 ReactionSynthesizer:官能团标签文件 / 保护基文件。
-o / --output-file输出 .tfsdb(后缀必需)。可逐步把不同反应的拓扑图写入同一数据库;建议放本地磁盘。
--include-macrocycles允许在拓扑空间中纳入/生成含 >9 元单环的大环化合物。
生成拓扑片段空间数据库
./spacelight_db_creator -r amidecoupling.smirks -i building_blocks.smi \
                      -o my_topological_space.tfsdb

06 FragspaceConverter — 生成最终 .space

流水线的最后一步:把经典片段空间(ReactionSynthesizer + FragspaceMerger 的输出)或拓扑片段空间(.tfsdb)转成最终可检索的 Chemical Space(.space 文件)。转换时会预计算更多描述符并高效存储片段,使得在标准硬件上数秒内检索数万亿分子成为可能。.space 可交给 FTrees / SpaceLight / SpaceMACS 搜索、用 infiniSee 导航,或用于 HPSee 的 Chemical Space Docking。

程序选项

选项说明
--space把单个旧版 .space.zip 转成新格式(旧版指 CoLibri 3.1–8.3 生成的 zip 式文件)。不能--fsf/--tfsdb/--full-molecules/--insert-macrocycles 同用。注意:转换可能在极少数情况下丢失部分信息、且新格式的部分增强不可用,官方建议从构建块重新构建;从官网下载的空间无法转换(只能转你自己创建的)。
--fsf把一个或多个经典片段空间文件(.fsf)纳入输出空间。对应的 .flf 与片段 .smi 须在相同相对路径。可指定多个 .fsf,但这不能替代 FragspaceMerger 的合并,只是把若干已独立合并的子空间组合进一个 .space。不能与 --space 同用。
--tfsdb把单个拓扑片段空间(.tfsdb)纳入输出空间。建议放本地磁盘。不能与 --space 同用。
--full-molecules把一个文件里的分子(.sdf .mol2 .mol .smi .smiles)作为完整分子直接加入空间(不做组合枚举)。不能与 --space 同用。
-o / --output输出 Chemical Space 文件(.space),即可用于搜索。建议放本地磁盘。
--insert-macrocycles--full-molecules 文件里的大环(含 >9 元单环)作为完整分子直接加入空间。需同时指定 --full-molecules--tfsdb;目前大环只加进拓扑片段空间,即仅对 SpaceLight 的指纹搜索可用。

空间信息选项(Space Info,均为可选)

这些信息会作为 Space Info 写入 .space 文件,可在 infiniSee 图形界面里显示。取字符串的选项建议用引号括起。

选项说明
--space-name化学空间名称(字符串)。
--space-id数字标识符(> 0)。
--release-date发布日期,如 '2021-10-01'
--vendor-name公司 / 部门 / 供应商名。
--vendor-contact关联邮箱。
--vendor-type类型,如商业空间或内部空间。
--vendor-webpage关联网页。
--vendor-image-filelogo 图(.png/.svg),在 infiniSee 中显示。
--number-of-products虚拟产物数量(整数)。

示例 9:生成 Chemical Space

合并经典空间 + 拓扑空间 → 完整 .space
../fragspace_converter --fsf merged_space/parent_space.fsf --tfsdb topo_space.tfsdb \
                       -o final_chemical_space.space

得到的 final_chemical_space.space 可用于 SpaceLight、SpaceMACS、FTrees、infiniSee 与 HPSee。也可只用其中一种片段空间:

只用经典空间 / 只用拓扑空间
# 只用经典空间:可被 SpaceMACS、FTrees 搜索,但会被 SpaceLight 与 HPSee 拒绝
../fragspace_converter --fsf merged_space/parent_space.fsf -o classical_only.space

# 只用拓扑空间:可被 SpaceLight 搜索、用于 HPSee 对接,但会被 SpaceMACS 与 FTrees 拒绝
../fragspace_converter --tfsdb topo_space.tfsdb -o topo_only.space
哪种空间能被哪个工具搜索
经典片段空间 → FTrees、SpaceMACS;拓扑片段空间 → SpaceLight、HPSee 对接。要让一个 .space 被全部四者使用,就把经典(--fsf)与拓扑(--tfsdb)一起转。
把整条链串起来
经典路径:reaction_synthesizer -gfragspace_mergerfragspace_converter --fsf.space
拓扑路径:spacelight_db_creatorfragspace_converter --tfsdb.space
拿到 .space 后,回到 FTrees / SpaceLight / SpaceMACS 页面即可开始检索。

07 如何编写反应定义(RXN / SMIRKS)

ReactionSynthesizer 与 SpaceLightDBCreator 都需要精确的反应定义作输入,才能生成化学上有意义的空间。接受 RXN 或 SMIRKS 格式。生成 Reaction-SMARTS/SMIRKS 可借助能可视化 SMARTS 表达式的工具,如 SMARTSEditor 与 SMARTS.plus 网站

第一步:画出反应

最直观的方式是用化学绘图程序(下面以 MarvinSketch 为例,ChemDraw 等类似)画出反应并导出 .rxn。通常只画相互反应的官能团就够了(见 Figure 6 的酯化反应 A)。所画分子被当作子结构解释,因此 A 比 B 更通用。若画芳香环,务必把所有环键的键型设为芳香

酯化反应 A 与 B 的绘制
Figure 6:绘制酯化反应的两种画法。A 比 B 更通用

第二步:为原子分配映射编号(mapping number)

为所有同时出现在反应物与产物两侧的原子分配映射编号:在反应物侧右键某原子 → 选 "Map" → 赋一个数字;再在产物中对应原子赋相同的数字。务必让反应物与产物两侧的每一对相关原子都有唯一且一致的映射编号(见 Figure 7)。本例中,反应物酸的 OH 氧分配映射编号——它在产物里不存在,反应时作为离去基团被移除。

为相关原子对分配映射编号
Figure 7:为反应物与产物两侧每一对相关原子分配映射编号

第三步:用递归 SMARTS 精确定义化学环境

到这一步反应原则上已能用,但还不够精确,会产生不想要的产物与"伪产物"(artifacts)。如 Figure 8:产物 1 是想要的酯;产物 3 在化学上无效;产物 2、4 并非本意要生成的。因此关键是尽量精确地定义官能团原子的化学环境,这可通过递归 SMARTS 实现——且 SMARTS 必须只匹配恰好一个原子。

不精确反应定义产生的伪产物
Figure 8:用不精确反应定义生成的产物与伪产物示例

例如,精确定义反应物醇的氧原子:

醇氧原子的递归 SMARTS
[OD1;$(O-[#6;!$(C=[O,N,S])])]

它匹配:只有一个重原子邻居的氧(OD1),且该邻居是一个不允许与 O/S/N 形成双键的碳($(O-[#6;!$(C=[O,N,S])]))。把它赋给反应物醇的氧,可消除产物 3、4。再精确定义酸的羰基碳来消除产物 2:

羧酸羰基碳的递归 SMARTS
[C$(C(=[OD1])([OD1])[#6,#1])]

这个模式只匹配羧酸的羰基碳,而不匹配酯的。最后把反应导出为 .rxn 文件(选 MDL Rxnfile,不要用 MDL Extended Rxnfile),再用 ReactionSynthesizer / SpaceLightDBCreator 的 -r 指定它即可。

替代方案:用官能团标签(labels)

除了直接给原子赋 SMARTS,也可以用"标签"——即预定义好、便于人读的 SMARTS 模式。预定义的 SMARTS 与其可读标签在 ReactionSynthesizer 或 SpaceLightDBCreator 目录的 example 文件夹下的 FunctionalGroupLabel.txt 中;在 MarvinSketch 里给原子赋对应标签即可(方式与赋 SMARTS 类似)。该文件的 comment 列说明了标签应加到官能团的哪个原子上。本例:把 Alcohol 标签赋给醇氧,把 CarboxylicAcid 标签赋给羧基的羰基碳(见 Figure 11)。

带官能团标签的酯化反应
Figure 11:带官能团标签的酯化反应
用标签时务必带 -s
使用含标签的反应定义时,始终要用 -s / --sma 指定 FunctionalGroupLabel.txt(见第 03、05 节示例)。你也可以按需扩展这个标签文件。