构建蛋白质复合体结构中所有链序列的同源性矩阵

为了生成蛋白质复合体结构中所有链之间的同源性矩阵,我们可以使用基于结构比对的工具(如 TM-align),逐对地比对所有链,并根据比对结果(通常是 TM-score)构建同源性矩阵。

具体步骤包括:

  1. 提取每条链的序列:从蛋白质复合体的 PDB 文件中提取每个链的序列,并保存成单独的文件。
  2. 使用 TM-align 进行比对:对每对链进行比对,计算它们的 TM-score。
  3. 构建同源性矩阵:将每对链的 TM-score 记录到矩阵中,形成链序列的同源性矩阵。

步骤 1:提取蛋白质复合体的所有链序列

可以使用 BioPython 提取每个链的序列并保存为单独的 .pdb 文件。

复制代码
from Bio import PDB

def extract_chain_sequences(pdb_file, output_dir):
    """
    从PDB文件中提取所有链的序列,并保存为独立的PDB文件。
    
    :param pdb_file: 蛋白质复合体PDB文件路径
    :param output_dir: 输出目录,用于保存各链的PDB文件
    """
    parser = PDB.PDBParser(QUIET=True)
    structure = parser.get_structure('complex', pdb_file)
    
    io = PDB.PDBIO()
    for model in structure:
        for chain in model:
            chain_id = chain.get_id()
            chain_pdb_file = f"{output_dir}/{chain_id}.pdb"
            io.set_structure(chain)
            io.save(chain_pdb_file)
            print(f"Saved chain {chain_id} to {chain_pdb_file}")

# 示例用法
pdb_file = 'complex.pdb'  # 你的复合体PDB文件
output_dir = 'chains_pdb'  # 输出目录
extract_chain_sequences(pdb_file, output_dir)

步骤 2:使用 TM-align 比对链

创建一个函数,使用 TM-align 比对每对链,并提取比对结果中的 TM-score。

复制代码
import subprocess
import os
import numpy as np

def run_tmalign(chain1_pdb, chain2_pdb):
    """
    使用 TM-align 对两个蛋白质链进行比对,返回 TM-score。
    
    :param chain1_pdb: 第一个链的PDB文件路径
    :param chain2_pdb: 第二个链的PDB文件路径
    :return: 两个链之间的 TM-score
    """
    tmalign_cmd = f"TM-align {chain1_pdb} {chain2_pdb}"
    result = subprocess.run(tmalign_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    output = result.stdout.decode('utf-8')
    
    for line in output.splitlines():
        if line.startswith("TM-score="):
            return float(line.split()[1])
    return 0.0

步骤 3:构建同源性矩阵

每个链之间的 TM-score 保存在对称矩阵的对应位置,构成同源性矩阵。该矩阵的每个元素表示两个链之间的结构相似性(TM-score),范围为 0 到 1,值越接近 1,表示相似性越高。

复制代码
def generate_homology_matrix(pdb_dir):
    """
    使用 TM-align 对复合体中所有链进行比对,生成同源性矩阵。
    
    :param pdb_dir: 存放链PDB文件的目录
    :return: 同源性矩阵
    """
    chain_files = [f for f in os.listdir(pdb_dir) if f.endswith('.pdb')]
    chain_ids = [f.split('.')[0] for f in chain_files]
    num_chains = len(chain_ids)
    
    homology_matrix = np.zeros((num_chains, num_chains))
    
    for i in range(num_chains):
        for j in range(i, num_chains):
            chain1_pdb = os.path.join(pdb_dir, chain_files[i])
            chain2_pdb = os.path.join(pdb_dir, chain_files[j])
            
            tm_score = run_tmalign(chain1_pdb, chain2_pdb)
            homology_matrix[i, j] = tm_score
            homology_matrix[j, i] = tm_score
    
    return chain_ids, homology_matrix

# 示例用法
pdb_dir = 'chains_pdb'  # 保存各链PDB文件的目录
chain_ids, homology_matrix = generate_homology_matrix(pdb_dir)

print("链ID列表:", chain_ids)
print("同源性矩阵:")
print(homology_matrix)

代码解读

  1. extract_chain_sequences 函数

    • 从给定的 PDB 文件中提取每个链,并将它们保存为单独的 PDB 文件。
    • 使用 BioPython 库进行 PDB 文件的解析和操作。
  2. run_tmalign 函数

    • 使用 TM-align 工具比对两个链的结构,输出比对结果,并从输出中提取 TM-score。
  3. generate_homology_matrix 函数

    • 遍历每对链,对其进行比对,构建同源性矩阵。
    • 矩阵是对称的,矩阵中的值表示 TM-score,体现链之间的结构相似性。

结果

homology_matrix 是蛋白质复合体中所有链的同源性矩阵,chain_ids 是与矩阵行和列对应的链的标识符。

相关推荐
青少儿编程课堂1 小时前
威佐夫博弈(双堆取子游戏)解析
c++·python·算法·bfs·信息学竞赛
hhzz1 小时前
【OpenCV 入门到精通 03】图像入门:读取、显示、保存完全指南
人工智能·python·opencv·计算机视觉
金融小师妹2 小时前
AI趋势识别:黄仁勋宣布“AGI时代”到来,Astra能力跃迁背后的AI安全边界
大数据·python·深度学习·重构·逻辑回归
2501_941875285 小时前
从配置中心到动态管理的互联网工程语法演进与多语言实践分享
开发语言·python
hfywmsj5 小时前
广州餐饮铺位招租决策模型:多因子选址系统设计
开发语言·人工智能·python·广州餐饮铺位招租
泡海椒8 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb8 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
sanjiaomao3339 小时前
从论文公式到Python实现:用单元测试校验滑动平均算法
python·算法·单元测试
linweidong11 小时前
中科闻歌Java面试题及参考答案
java·python·大模型·提示词·ai agent·mcp·rag原理
小玮看世界11 小时前
[Python]OD算法在OD实际运用转化参考清单
开发语言·python·算法