mcpField
Z
zinc-database

zinc-database

github.com/jackspace数据与数据库1636 次安装12 周前更新
代码仓库

关于 zinc-database

ZINC Database 技能介绍如何通过 ZINC22 查询可购买化合物,面向虚拟筛选、药物发现和分子对接研究者。它支持按 ZINC ID、SMILES 或供应商代码检索,也可进行相似性搜索、随机抽样和 3D 结构获取。

主要功能

  1. 01按 ZINC ID、SMILES 或供应商代码查询
  2. 02按结构相似性查找类似化合物
  3. 03按子集随机抽取化合物
  4. 04自定义 API 返回字段
  5. 05获取用于对接的 3D 结构
  6. 06按分子属性筛选化合物

适用场景

  1. 01为分子对接准备化合物库
  2. 02为候选化合物查找可购买类似物
  3. 03批量检索指定 ZINC ID
  4. 04抽样探索化学空间

安装

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

$npx skills add https://github.com/jackspace/claudeskillz --skill zinc-database

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

附带文件SKILL.json

详细介绍

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