mcpField
Z
zinc-database

zinc-database

github.com/davila7数据与数据库33.0k215 次安装1 天前更新
代码仓库

关于 zinc-database

ZINC 是由 UCSF 维护的可购买化合物数据库,面向药物发现与化学研究。CartBlanche22 API 支持按标识符或结构搜索、相似性查询、随机抽样,并获取化合物数据和 3D 结构。

主要功能

  1. 01按 ZINC ID 或 SMILES 搜索
  2. 02查找结构类似物
  3. 03查询供应商代码和目录
  4. 04随机抽取化合物
  5. 05获取化合物字段和 3D 结构

适用场景

  1. 01构建分子对接库
  2. 02查找命中化合物的可购类似物
  3. 03批量获取化合物用于分析
  4. 04为筛选抽样探索化学空间

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/davila7/claude-code-templates --skill zinc-database

安装后在 Claude Code 中输入/zinc-database确认已加载。

附带文件references/api_reference.md

详细介绍

ZINC 数据库

概述

ZINC 是由 UCSF 维护的免费开放存取数据库,收录了超过 2.3 亿种可购买化合物。可通过 ZINC ID 或 SMILES 搜索,执行相似性搜索,下载可用于对接的 3D 结构,发掘用于虚拟筛选和药物发现的类似物。

何时使用此技能

在以下情况下应使用此技能:

  • 虚拟筛选:为分子对接研究查找化合物
  • 先导化合物发现:识别可用于药物开发的市售化合物
  • 结构搜索:通过 SMILES 执行相似性或类似物搜索
  • 化合物检索:通过 ZINC ID 或供应商代码查找分子
  • 化学空间探索:探索可购买的化学多样性
  • 对接研究:获取可用于对接的 3D 分子结构
  • 类似物搜索:根据结构相似性查找相似化合物
  • 供应商查询:识别特定化学品供应商提供的化合物
  • 随机抽样:获取用于筛选的随机化合物集合

数据库版本

ZINC 已历经多个版本:

  • ZINC22(当前版本):规模最大的版本,包含超过 2.3 亿种可购买化合物,以及数十亿种按需合成化合物
  • ZINC20:仍在维护,专注于先导样和类药化合物
  • ZINC15:前代版本,属于旧版,但仍有文档记录

此技能主要介绍当前最新、最全面的 ZINC22。

访问方式

Web 界面

主要访问入口:https://zinc.docking.org/ 交互式搜索:https://cartblanche22.docking.org/

API 访问

所有 ZINC22 搜索都可以通过 CartBlanche22 API 以编程方式执行:

基础 URL:https://cartblanche22.docking.org/

所有 API 端点均以文本或 JSON 格式返回数据,并支持自定义字段。

核心功能

1. 按 ZINC ID 搜索

使用 ZINC 标识符检索特定化合物。

Web 界面:https://cartblanche22.docking.org/search/zincid

API 端点:

curl "https://cartblanche22.docking.org/[email protected]_fields=smiles,zinc_id"

多个 ID:

curl "https://cartblanche22.docking.org/substances.txt:zinc_id=ZINC000000000001,ZINC000000000002&output_fields=smiles,zinc_id,tranche"

响应字段:zinc_id、smiles、sub_id、supplier_code、catalogs、tranche(包含 H-count、LogP、MW、phase)

2. 按 SMILES 搜索

使用 SMILES 表示法按化学结构查找化合物,并可选用距离参数搜索类似物。

Web 界面:https://cartblanche22.docking.org/search/smiles

API 端点:

curl "https://cartblanche22.docking.org/[email protected]=4-Fadist=4"

参数:

  • smiles:查询用的 SMILES 字符串(必要时进行 URL 编码)
  • dist:Tanimoto 距离阈值(默认值:0,即精确匹配)
  • adist:用于扩大搜索范围的替代距离参数(默认值:0)
  • output_fields:所需输出字段的逗号分隔列表

示例 — 精确匹配:

curl "https://cartblanche22.docking.org/smiles.txt:smiles=c1ccccc1"

示例 — 相似性搜索:

curl "https://cartblanche22.docking.org/smiles.txt:smiles=c1ccccc1&dist=3&output_fields=zinc_id,smiles,tranche"
3. 按供应商代码搜索

查询特定化学品供应商提供的化合物,或检索特定目录中的所有分子。

Web 界面:https://cartblanche22.docking.org/search/catitems

API 端点:

curl "https://cartblanche22.docking.org/catitems.txt:catitem_id=SUPPLIER-CODE-123"

使用场景:

  • 确认特定供应商提供的化合物是否有货
  • 检索某个目录中的所有化合物
  • 将供应商代码与 ZINC ID 交叉查询
4. 随机化合物抽样

生成随机化合物集合,用于筛选或基准测试。

Web 界面:https://cartblanche22.docking.org/search/random

API 端点:

curl "https://cartblanche22.docking.org/substance/random.txt:count=100"

参数:

  • count:要检索的随机化合物数量(默认值:100)
  • subset:按子集筛选(例如,'lead-like'、'drug-like'、'fragment')
  • output_fields:自定义返回的数据字段

示例 — 随机抽取先导样分子:

curl "https://cartblanche22.docking.org/substance/random.txt:count=1000&subset=lead-like&output_fields=zinc_id,smiles,tranche"

常见工作流

工作流 1:准备对接化合物库
  1. 根据靶标属性或目标化学空间定义搜索条件

  2. 使用合适的搜索方法查询 ZINC22:

    # Example: Get drug-like compounds with specific LogP and MW
    curl "https://cartblanche22.docking.org/substance/random.txt:count=10000&subset=drug-like&output_fields=zinc_id,smiles,tranche" > docking_library.txt
    
  3. 解析结果以提取 ZINC ID 和 SMILES:

    import pandas as pd
    
    # Load results
    df = pd.read_csv('docking_library.txt', sep='\t')
    
    # Filter by properties in tranche data
    # Tranche format: H##P###M###-phase
    # H = H-bond donors, P = LogP*10, M = MW
    
  4. 使用 ZINC ID 下载 3D 结构用于对接,或从文件存储库下载

工作流 2:查找热门化合物的类似物
  1. 获取热门化合物的 SMILES:

    hit_smiles = "CC(C)Cc1ccc(cc1)C(C)C(=O)O"  # Example: Ibuprofen
    
  2. 使用距离阈值执行相似性搜索:

    curl "https://cartblanche22.docking.org/smiles.txt:smiles=CC(C)Cc1ccc(cc1)C(C)C(=O)O&dist=5&output_fields=zinc_id,smiles,catalogs" > analogs.txt
    
  3. 分析结果,找出可购买的类似物:

    import pandas as pd
    
    analogs = pd.read_csv('analogs.txt', sep='\t')
    print(f"Found {len(analogs)} analogs")
    print(analogs[['zinc_id', 'smiles', 'catalogs']].head(10))
    
  4. 获取最有前景的类似物的 3D 结构

工作流 3:批量检索化合物
  1. 从文献、数据库或之前的筛选中整理 ZINC ID 列表:

    zinc_ids = [
        "ZINC000000000001",
        "ZINC000000000002",
        "ZINC000000000003"
    ]
    zinc_ids_str = ",".join(zinc_ids)
    
  2. 查询 ZINC22 API:

    curl "https://cartblanche22.docking.org/substances.txt:zinc_id=ZINC000000000001,ZINC000000000002&output_fields=zinc_id,smiles,supplier_code,catalogs"
    
  3. 处理结果,用于后续分析或采购

工作流 4:化学空间采样
  1. 根据筛选目标选择子集参数:

    • 片段:MW < 250,适合基于片段的药物发现
    • 类先导化合物:MW 250-350,LogP ≤ 3.5
    • 类药化合物:MW 350-500,符合 Lipinski 五法则
  2. 生成随机样本:

    curl "https://cartblanche22.docking.org/substance/random.txt:count=5000&subset=lead-like&output_fields=zinc_id,smiles,tranche" > chemical_space_sample.txt
    
  3. 分析化学多样性,为虚拟筛选做准备

输出字段

使用 output_fields 参数自定义 API 响应:

可用字段:

  • zinc_id:ZINC 标识符
  • smiles:SMILES 字符串表示
  • sub_id:内部物质 ID
  • supplier_code:供应商目录编号
  • catalogs:提供该化合物的供应商列表
  • tranche:编码后的分子属性(H 数量、LogP、MW、反应性阶段)

示例:

curl "https://cartblanche22.docking.org/substances.txt:zinc_id=ZINC000000000001&output_fields=zinc_id,smiles,catalogs,tranche"

Tranche 系统

ZINC 根据分子属性将化合物划分为不同的“tranche”:

格式:H##P###M###-phase

  • H##:氢键供体数量(00-99)
  • P###:LogP × 10(例如,P035 = LogP 3.5)
  • M###:分子量,单位为道尔顿(例如,M400 = 400 Da)
  • phase:反应性分类

Tranche 示例:H05P035M400-0

  • 5 个氢键供体
  • LogP = 3.5
  • MW = 400 Da
  • 反应性阶段 0

使用 tranche 数据根据类药性标准筛选化合物。

下载 3D 结构

用于分子对接的 3D 结构可通过文件仓库获取:

文件仓库:https://files.docking.org/zinc22/

结构按 tranche 组织,并提供多种格式:

  • MOL2:包含 3D 坐标的多分子格式
  • SDF:结构数据文件格式
  • DB2.GZ:用于 DOCK 的压缩数据库格式

有关下载协议和批量访问方式,请参阅 ZINC 文档:https://wiki.docking.org。

Python 集成

在 Python 中使用 curl
import subprocess
import json

def query_zinc_by_id(zinc_id, output_fields="zinc_id,smiles,catalogs"):
    """Query ZINC22 by ZINC ID."""
    url = f"https://cartblanche22.docking.org/[email protected]_id={zinc_id}&output_fields={output_fields}"
    result = subprocess.run(['curl', url], capture_output=True, text=True)
    return result.stdout

def search_by_smiles(smiles, dist=0, adist=0, output_fields="zinc_id,smiles"):
    """Search ZINC22 by SMILES with optional distance parameters."""
    url = f"https://cartblanche22.docking.org/smiles.txt:smiles={smiles}&dist={dist}&adist={adist}&output_fields={output_fields}"
    result = subprocess.run(['curl', url], capture_output=True, text=True)
    return result.stdout

def get_random_compounds(count=100, subset=None, output_fields="zinc_id,smiles,tranche"):
    """Get random compounds from ZINC22."""
    url = f"https://cartblanche22.docking.org/substance/random.txt:count={count}&output_fields={output_fields}"
    if subset:
        url += f"&subset={subset}"
    result = subprocess.run(['curl', url], capture_output=True, text=True)
    return result.stdout
解析结果
import pandas as pd
from io import StringIO

# Query ZINC and parse as DataFrame
result = query_zinc_by_id("ZINC000000000001")
df = pd.read_csv(StringIO(result), sep='\t')

# Extract tranche properties
def parse_tranche(tranche_str):
    """Parse ZINC tranche code to extract properties."""
    # Format: H##P###M###-phase
    import re
    match = re.match(r'H(\d+)P(\d+)M(\d+)-(\d+)', tranche_str)
    if match:
        return {
            'h_donors': int(match.group(1)),
            'logP': int(match.group(2)) / 10.0,
            'mw': int(match.group(3)),
            'phase': int(match.group(4))
        }
    return None

df['tranche_props'] = df['tranche'].apply(parse_tranche)

最佳实践

查询优化
  • 从具体查询开始:先执行精确搜索,再扩展到相似性搜索
  • 使用合适的距离参数:较小的 dist 值(1-3)用于搜索近似类似物,较大的值(5-10)用于搜索多样化类似物
  • 限制输出字段:仅请求必要字段,以减少数据传输
  • 批量查询:尽可能在一次 API 调用中合并多个 ZINC ID
性能注意事项
  • 速率限制:尊重服务器资源;避免连续快速发送请求
  • 缓存:在本地存储常用化合物
  • 并行下载:下载 3D 结构时,可对文件仓库使用并行 wget 或 aria2c
  • 子集筛选:使用类先导化合物、类药化合物或片段子集来缩小搜索空间
数据质量
  • 确认可用性:供应商目录会发生变化;大批量订购前请确认化合物是否有货
  • 检查立体化学:SMILES 可能无法完整指定立体化学;请核验 3D 结构
  • 验证结构:使用化学信息学工具(RDKit、OpenBabel)验证结构有效性
  • 交叉引用:如有可能,请与其他数据库(PubChem、ChEMBL)交叉核对

资源

references/api_reference.md

全面的文档,包括:

  • 完整的 API 端点参考
  • URL 语法和参数规范
  • 高级查询模式和示例
  • 文件存储库的组织与访问
  • 批量下载方法
  • 错误处理和故障排除
  • 与分子对接软件的集成

如需详细的技术信息和高级用法,请参阅此文档。

重要免责声明

数据可靠性

ZINC 明确声明:“我们不保证任何分子适用于任何用途的质量,也不对因使用此数据库而产生的错误承担责任。”

  • 化合物的可用性可能会在不另行通知的情况下发生变化
  • 结构表示可能包含错误
  • 应独立核实供应商信息
  • 在开展实验工作前,应进行适当的验证
适当使用
  • ZINC 旨在用于药物发现领域的学术和研究用途
  • 商业使用前请核实许可条款
  • 使用专利化合物时,请尊重知识产权
  • 获取化合物时,请遵循所在机构的指南

其他资源

引用

在出版物中使用 ZINC 时,请引用相应版本:

ZINC22: Irwin, J. J., et al. "ZINC22—A Free Multi-Billion-Scale Database of Tangible Compounds for Ligand Discovery." Journal of Chemical Information and Modeling 2023.

ZINC15: Irwin, J. J., et al. "ZINC15 – Ligand Discovery for Everyone." Journal of Chemical Information and Modeling 2020, 60, 6065–6073.

评论

支持 Markdown