复合物pdb加上链ID信息

import os,sys
def add_chain_id_to_pdb(pdb_file_path, chain_ids):
    try:
        with open(pdb_file_path, 'r') as pdb_file:
            pdb_lines = pdb_file.readlines()
        
        modified_pdb_lines = []
        for line in pdb_lines:
            if line.startswith('ATOM'):
                modified_line = line[:21] + chain_id + line[22:]
                modified_pdb_lines.append(modified_line)
            else:
                modified_pdb_lines.append(modified_line)

        with open(pdb_file_path, 'w') as modified_pdb_file:
            modified_pdb_file.writelines(modified_pdb_lines)

    except FileNotFoundError:
        return f"{pdb_file_path} not exist"

def main():
    pdb_file_path = 'sample52_processed.pdb'
    chain_id_to_add = ['A', 'H', 'L']
    result = add_chain_id_to_pdb(pdb_file, chain_id_to_add)

if __name__ == '__main__':
    main()

我想给复合物pdb加上链ID信息,比如说有A, H, L三条链,我的三条链的残基编号都是从1开始,也就是当残基编号为1时就用新的链ID, 程序该修改

import os, sys

def add_chain_id_to_pdb(pdb_file_path, chain_ids):
    try:
        with open(pdb_file_path, 'r') as pdb_file:
            pdb_lines = pdb_file.readlines()

        current_chain_id = None
        modified_pdb_lines = []

        for line in pdb_lines:
            if line.startswith('ATOM'):
                residue_number = int(line[22:26].strip())

                if residue_number == 1:
                    # Update the chain ID for a new chain
                    current_chain_id = chain_ids.pop(0)

                modified_line = line[:21] + current_chain_id + line[22:]
                modified_pdb_lines.append(modified_line)
            else:
                modified_pdb_lines.append(line)

        with open(pdb_file_path, 'w') as modified_pdb_file:
            modified_pdb_file.writelines(modified_pdb_lines)

    except FileNotFoundError:
        return f"{pdb_file_path} not exist"

def main():
    pdb_file_path = 'sample52_processed.pdb'
    chain_ids_to_add = ['A', 'H', 'L']
    result = add_chain_id_to_pdb(pdb_file_path, chain_ids_to_add)

if __name__ == '__main__':
    main()
程序报错:
Traceback (most recent call last):
  File "/home/yhm/Protein_design/RSVF/MD_em02/p0002/add_chain_name01.py", line 36, in <module>
    main()
  File "/home/yhm/Protein_design/RSVF/MD_em02/p0002/add_chain_name01.py", line 33, in main
    result = add_chain_id_to_pdb(pdb_file_path, chain_ids_to_add)
  File "/home/yhm/Protein_design/RSVF/MD_em02/p0002/add_chain_name01.py", line 17, in add_chain_id_to_pdb
    current_chain_id = chain_ids.pop(0)
IndexError: pop from empty list

修改

import os, sys

def add_chain_id_to_pdb(pdb_file_path, chain_ids):
    try:
        with open(pdb_file_path, 'r') as pdb_file:
            pdb_lines = pdb_file.readlines()

        current_chain_id = None
        modified_pdb_lines = []

        for line in pdb_lines:
            if line.startswith('ATOM'):
                residue_number = int(line[22:26].strip())

                if residue_number == 1:
                    # Check if there are still chain IDs available
                    if chain_ids:
                        current_chain_id = chain_ids.pop(0)
                    else:
                        # Handle the case when there are more residues than chain IDs
                        current_chain_id = 'Z'  # You can choose another character or handle it differently

                modified_line = line[:21] + current_chain_id + line[22:]
                modified_pdb_lines.append(modified_line)
            else:
                modified_pdb_lines.append(line)

        with open(pdb_file_path, 'w') as modified_pdb_file:
            modified_pdb_file.writelines(modified_pdb_lines)

    except FileNotFoundError:
        return f"{pdb_file_path} not exist"

def main():
    pdb_file_path = 'sample52_processed.pdb'
    chain_ids_to_add = ['A', 'H', 'L']
    result = add_chain_id_to_pdb(pdb_file_path, chain_ids_to_add)

if __name__ == '__main__':
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值