eMolecules 是化合物采购的聚合平台,把全球数百家供应商的目录整合到一个可检索的数据库里。它与 Mcule 功能相近但更偏供应链视角:同一个分子有哪些供应商、各家价格多少、交付多快、纯度如何——这些正是把虚拟筛选结果变成实验样品时要回答的问题。
分层体系
| Tier | 含义 | 交付周期 |
|---|---|---|
| Tier 1 | 现货,立即发货 | 数天~2 周 |
| Tier 2 | 供应商可快速制备 | 2~4 周 |
| Tier 3 | 按需合成 | 4 周以上 |
| Screening compounds | 筛选用化合物库 | 视层级 |
| Building blocks | 合成砌块 | 多为现货 |
Tier 分层直接对应项目节奏:需要两周内拿到样品做验证,就只看 Tier 1;可以等一个月扩大探索范围,才纳入 Tier 2/3。
典型使用流程
- 批量上传候选:把筛选出的 SMILES 列表批量提交,一次性查全部分子的可得性。这是最主要的用法。
- 比价:同一化合物往往有多家供应商,价格差异可达数倍。批量采购时这笔差价不小。
- 相似化合物检索:目标分子买不到时,搜结构相近的替代品——很多时候一个相似类似物就足以验证 SAR 假设。
- API 集成:把可得性查询接进内部筛选流程,让计算结果自动带上采购信息。
# 把可得性作为筛选流程的一个过滤层(示意)
def enrich_with_procurement(df_hits, lookup_fn):
"""给候选分子加上可得性、价格、交付周期,用于最终排序"""
recs = []
for smi in df_hits["smiles"]:
info = lookup_fn(smi) # 调用采购平台 API
recs.append({
"smiles": smi,
"available": info.get("available", False),
"tier": info.get("tier"),
"best_price_usd": info.get("min_price"),
"lead_time_days": info.get("lead_time"),
"n_suppliers": info.get("supplier_count", 0),
})
return df_hits.merge(pd.DataFrame(recs), on="smiles")
# 最终排序综合考虑:打分、可得性、价格、多样性
ranked = enriched[enriched["available"]].sort_values(
["tier", "docking_score"], ascending=[True, True])
把采购信息纳入决策
成熟的虚拟筛选流程不会只按对接分数排序,而是综合考虑分数、可得性、价格和多样性。一个实用的取舍框架:
- 预算固定时:与其买 10 个昂贵的高分分子,不如买 30 个中高分但覆盖多个骨架的分子。首轮筛选的目标是找到「哪类骨架有戏」,而不是找到最强的那一个——化学多样性比单点分数更重要。
- 时间紧时:Tier 1 现货优先,哪怕分数略低。两周拿到数据推动决策,胜过一个月后的完美样品。
- 已有苗头做 SAR 时:这时反过来,围绕特定骨架买一系列类似物更有价值,可以接受更长交付周期。
注意事项
- 目录与实际库存有滞后:显示有货不代表下单一定能拿到,尤其是冷门分子。
- 纯度与表征差异:不同供应商的质控标准不同。关键分子应索要 NMR / LC-MS 数据。
- 最小订购量与运费:小批量采购时运费和最低消费可能占成本大头,集中在少数供应商下单更划算。
- 国际运输限制:某些化学品跨境运输受限,跨国采购要提前确认。
- 结构一致性:不同供应商对同一化合物的立体化学标注可能不一致,手性分子采购要格外核对。
上手提示
- 核心价值是比价与多供应商可得性核查,批量采购时省钱明显;
- Tier 分层直接对应项目节奏,紧急验证只看 Tier 1;
- 首轮筛选优先化学多样性而非单点最高分;
- 手性分子采购务必核对立体化学标注的一致性。
延伸资源
- 采购平台对照:232《Mcule》;化合物库:230《ZINC》、231《Enamine REAL》;
- 虚拟筛选与命中确认见「实战流程」模块。