Skip to content

dengzhou5068/PyBIP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Python Boltz/Protenix/Seedfold Input Generator

简介

Python Boltz/Protenix/Seedfold Input Generator (简称 PyBIP) 是一个Python脚本,旨在简化为生物信息学工具 Boltz-2 (输出YAML格式)、Protenix (输出JSON格式) 和 Seedfold (输出JSON格式) 生成输入文件的过程。它能够解析FASTA格式的蛋白质、DNA、RNA序列文件,CCD配体信息,以及包含化合物ID和SMILES的CSV文件,然后根据所选工具的要求生成相应的结构化输入文件。

功能特性

  • 多类型序列支持: 从FASTA文件读取蛋白质、DNA、RNA序列,并支持指定每个序列的复制数量。
  • CCD配体支持: 支持通过命令行指定CCD配体及其数量。
  • 化合物数据集成: 从CSV文件中读取化合物ID和SMILES,并将其整合到生成的输入文件中。
  • Boltz-2 YAML生成:
    • 为每种序列和CCD配体生成带有唯一ID的条目。
    • 为CSV中的每个化合物生成一个独立的YAML文件,化合物在YAML中固定ID为B
  • Protenix JSON生成:
    • 为每种序列和CCD配体生成条目,不包含ID字段
    • 将CSV中的每个化合物作为一个独立条目整合到一个JSON文件中,化合物不包含ID字段。
    • 在输出JSON文件同目录下生成一个随机种子文件 seed.txt
  • Seedfold JSON生成:
    • 为每种序列和CCD配体生成条目,不包含ID字段
    • 为CSV中的每个化合物生成一个独立的JSON文件。
    • 文件命名格式为 [所有序列文件基础名用下划线连接]_[化合物ID].json
  • 统一错误处理: 使用自定义异常 InputGeneratorError 和错误码,提供清晰的错误信息。
  • 详细日志: 提供生成过程中的信息、警告和错误日志。
  • PEP8兼容: 代码风格符合Python PEP8规范。
  • 类型注解: 广泛使用类型注解,增强代码可读性和可维护性。
  • 单元测试: 包含完整的单元测试,确保代码质量和功能正确性。

版本

当前版本: 0.3.0

安装

1. 从源代码安装

  1. 克隆仓库:
    git clone https://gitee.com/coding_playground/pybip.git
    cd pybip
  2. 安装依赖:
    pip install -r requirements.txt
  3. 安装包:
    pip install -e .

2. 直接使用脚本

如果您不想安装包,也可以直接使用 pybip.py 脚本:

  1. 下载脚本: 将 pybip.py 文件下载到您的本地目录。
  2. 安装依赖:
    pip install pyyaml

使用方法

脚本通过子命令的方式工作,支持 boltzprotenixseedfold 三个主命令。

通用参数

以下参数可用于 boltzprotenixseedfold 子命令,用于指定输入数据:

  • --protein "PATH:COUNT[,PATH:COUNT]...": 蛋白质FASTA文件路径和数量。例如: "protein1.fasta:1,protein2.fasta:2"
  • --dna "PATH:COUNT[,PATH:COUNT]...": DNA FASTA文件路径和数量。格式同上。
  • --rna "PATH:COUNT[,PATH:COUNT]...": RNA FASTA文件路径和数量。格式同上。
  • --ccd "NAME:COUNT[,NAME:COUNT]...": CCD配体名称和数量。例如: "CCD_P4G:1,CCD_6OI:2"
  • --ion "NAME:COUNT[,NAME:COUNT]...": 离子名称和数量。例如: "CCD_NA:1,CCD_CL:2"
  • --csv CSV_FILE_PATH: (必需) 包含化合物ID和SMILES的CSV文件路径。CSV文件必须包含 idsmiles 两列。

1. 生成 Boltz-2 YAML 输入文件

使用 boltz 子命令生成 Boltz-2 YAML 文件。

特定参数:

  • --output DIR_PATH: YAML文件的输出目录(默认: . 当前目录)。
  • --pocket FILE_PATH: 口袋约束YAML文件路径,其内容将被直接添加到生成的YAML文件末尾。
  • --affinity true|false: 是否在输出YAML中包含亲和力计算部分(默认: true)。

输出文件结构:

  • 每个化合物会生成一个独立的YAML文件,命名格式为 [所有序列文件基础名用下划线连接]_[化合物ID].yaml
  • YAML文件中的序列(蛋白质、DNA、RNA)和CCD配体都会被分配一个唯一的 id (如 P1, D2, CCD_P4G)。
  • 从CSV读取的化合物在YAML中将固定使用 id: B
  • --affinitytrue (默认) 时,YAML文件会包含 properties 部分,用于指定亲和力计算的binder。
  • --affinityfalse 时,YAML文件不会包含 properties 部分。

示例:

假设您有以下文件:

  • protein.fasta (包含一个蛋白质序列)
  • compounds.csv (内容如下: id,smiles COMP1,CCCC COMP2,O=C(N)C)
  • pocket.yaml (包含口袋约束信息)
python pybip.py boltz \
    --protein "protein.fasta:1" \
    --ccd "P4G:1" \
    --csv compounds.csv \
    --output boltz_inputs \
    --pocket pocket.yaml

示例 (不包含亲和力计算部分):

python pybip.py boltz \
    --protein "protein.fasta:1" \
    --ccd "P4G:1" \
    --csv compounds.csv \
    --output boltz_inputs \
    --pocket pocket.yaml \
    --affinity false

这将会在 boltz_inputs 目录下生成类似的文件:

  • protein_COMP1.yaml
  • protein_COMP2.yaml

protein_COMP1.yaml 的大致内容:

version: 1
sequences:
- protein:
    id: P1
    sequence: YOUR_PROTEIN_SEQUENCE_HERE
    count: 1
- ligand:
    id: P4G
    ligand: P4G
    count: 1
- ligand:
    id: B
    smiles: CCCC
    count: 1
properties:
- affinity:
    binder: B
constraints:
- pocket:
    binder: B           # Ligand chain
    contacts: [[P1, AA No.], [P1, AA No.], [P1, AA No.]...] # Contact residues
    max_distance: x  # Angstroms
    force: true         # Use potential to enforce

2. 生成 Protenix JSON 输入文件

使用 protenix 子命令生成 Protenix JSON 文件。

特定参数:

  • --output FILE_PATH: 输出JSON文件的名字(默认: input.json)。

输出文件结构:

  • 所有化合物的条目都会被整合到一个JSON文件中。
  • JSON文件中的序列(蛋白质、DNA、RNA)和CCD配体 不会 包含 id 字段。
  • JSON文件中的化合物也不会包含 id 字段,只有 ligandcount
  • 在输出JSON文件所在的目录下,会生成一个名为 seed.txt 的文件,其中包含一个随机生成的整数种子。

示例:

python pybip.py protenix \
    --protein "protein.fasta:1" \
    --dna "dna.fasta:1" \
    --ccd "CCD_6OI:2" \
    --ion "CCD_NA:1,CCD_CL:2" \
    --csv compounds.csv \
    --output protenix_data.json

这将在当前目录下生成 protenix_data.jsonseed.txt

protenix_data.json 的大致内容:

[
    {
        "sequences": [
            {
                "proteinChain": {
                    "sequence": "YOUR_PROTEIN_SEQUENCE_HERE",
                    "count": 1
                }
            },
            {
                "dnaSequence": {
                    "sequence": "YOUR_DNA_SEQUENCE_HERE",
                    "count": 1
                }
            },
            {
                "ligand": {
                    "ligand": "CCD_6OI",
                    "count": 2
                }
            },
            {
                "ion": {
                    "ion": "CCD_NA",
                    "count": 1
                }
            },
            {
                "ion": {
                    "ion": "CCD_CL",
                    "count": 2
                }
            },
            {
                "ligand": {
                    "ligand": "CCCC",
                    "count": 1
                }
            }
        ],
        "name": "protein_COMP1"
    },
    {
        "sequences": [
            {
                "proteinChain": {
                    "sequence": "YOUR_PROTEIN_SEQUENCE_HERE",
                    "count": 1
                }
            },
            {
                "dnaSequence": {
                    "sequence": "YOUR_DNA_SEQUENCE_HERE",
                    "count": 1
                }
            },
            {
                "ligand": {
                    "ligand": "CCD_6OI",
                    "count": 2
                }
            },
            {
                "ion": {
                    "ion": "CCD_NA",
                    "count": 1
                }
            },
            {
                "ion": {
                    "ion": "CCD_CL",
                    "count": 2
                }
            },
            {
                "ligand": {
                    "ligand": "O=C(N)C",
                    "count": 1
                }
            }
        ],
        "name": "protein_dna_COMP2"
    }
]

3. 生成 Seedfold JSON 输入文件

使用 seedfold 子命令生成 Seedfold JSON 文件。

特定参数:

  • --output DIR_PATH: JSON文件的输出目录(默认: . 当前目录)。

输出文件结构:

  • 每个化合物会生成一个独立的JSON文件,命名格式为 [所有序列文件基础名用下划线连接]_[化合物ID].json
  • JSON文件是一个数组,包含一个完整的任务对象。
  • 任务对象包含 job_namemodelentities 字段。
  • job_name 格式为 [所有序列文件基础名用下划线连接]_[化合物ID]
  • model 默认值为 SeedFold-Linear_v1.0.0
  • entities 数组中的每个实体包含 entitycopiessequence 字段。
  • 实体类型包括:ProteinDNARNALigand/Ion-CCDLigand-Smiles

示例:

python pybip.py seedfold \
    --protein "protein.fasta:4" \
    --dna "dna.fasta:1" \
    --rna "rna.fasta:1" \
    --ccd "SO4:2" \
    --csv compounds.csv \
    --output seedfold_inputs

这将会在 seedfold_inputs 目录下生成类似的文件:

  • protein_COMP1.json
  • protein_COMP2.json

protein_COMP1.json 的大致内容:

[
    {
        "job_name": "protein_COMP1",
        "model": "SeedFold-Linear_v1.0.0",
        "entities": [
            {
                "entity": "Protein",
                "copies": 4,
                "sequence": "YOUR_PROTEIN_SEQUENCE_HERE"
            },
            {
                "entity": "DNA",
                "copies": 1,
                "sequence": "YOUR_DNA_SEQUENCE_HERE"
            },
            {
                "entity": "RNA",
                "copies": 1,
                "sequence": "YOUR_RNA_SEQUENCE_HERE"
            },
            {
                "entity": "Ligand/Ion-CCD",
                "copies": 2,
                "sequence": "SO4"
            },
            {
                "entity": "Ligand-Smiles",
                "copies": 1,
                "sequence": "CCCC"
            }
        ]
    }
]

项目结构

pybip/
├── pybip.py              # 主脚本文件
├── exceptions.py          # 自定义异常类
├── commands/              # 命令相关模块
│   ├── __init__.py
│   ├── base.py           # 命令基类
│   ├── boltz.py          # Boltz命令实现
│   ├── protenix.py       # Protenix命令实现
│   └── seedfold.py       # Seedfold命令实现
├── utils/                # 工具函数
│   ├── __init__.py
│   ├── fasta.py          # FASTA文件读取
│   ├── csv_reader.py     # CSV文件读取
│   └── seed.py           # 随机种子生成
├── requirements.txt       # 依赖列表
├── setup.py              # 安装配置
└── README.md             # 项目文档

错误处理

脚本使用自定义的 InputGeneratorError 异常来处理各种预期错误,例如文件未找到、CSV格式错误、参数解析失败等。当发生此类错误时,脚本会输出详细的错误信息到标准错误流,并以相应的错误码退出。

许可证

本项目采用 GNU General Public License v3 (GPLv3) 许可证。详见 LICENSE 文件。

联系方式

如有问题或建议,请通过以下方式联系我们:

About

Python Boltz/Protenix/Seedfold Input Generator 是一个Python脚本,旨在简化为生物信息学工具 Boltz-2 (输出YAML格式) 和 Protenix、SeedFold (输出JSON格式) 生成输入文件的过程。

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages