从单个残基 pdb 创建非标准残基的聚合物链

Create a polymer chain of nonstandard residues from a single residue pdb

我创建了一个简单的 PDB 文件,其中包含聚乙二醇 (CH2-O-CH2) 重复单元的非标准残基,如下所示

REMARK   Materials Studio PDB file
REMARK   Created:  Mon Dec 04 09:52:49  2017
ATOM      1  CT1 EGR H   1     -14.882   2.339   0.134  1.00  0.00           C    
ATOM      2 HC11 EGR H   1     -14.677   2.559   1.234  1.00  0.00           H    
ATOM      3 HC12 EGR H   1     -14.774   3.298  -0.472  1.00  0.00           H    
ATOM      4  OS1 EGR H   1     -13.892   1.317  -0.371  1.00  0.00           O    
ATOM      5  CT2 EGR H   1     -12.493   1.852  -0.184  1.00  0.00           C    
ATOM      6 HC21 EGR H   1     -12.292   2.009   0.928  1.00  0.00           H    
ATOM      7 HC22 EGR H   1     -12.392   2.846  -0.732  1.00  0.00           H     
TER       8  
CONECT    1    2    3    4
CONECT    2    1
CONECT    3    1
CONECT    4    1    5
CONECT    5    4    7    8    6
CONECT    6    5
CONECT    7    5
END

我能够使用 bioPDB class 使用以下代码成功读取此 pdb 文件

parser = PDBParser()
structure = parser.get_structure('EGR', pdb_file)

如何使用此结构对象创建 `'n' 残基聚合物链的 pdb 文件?

假设您想在 x 轴上复制 10 倍的残基,每个残基之间的间隙为 5 埃。你可以尝试这样的事情:

import numpy as np
from Bio.PDB import PDBParser
from Bio.PDB.Residue import Residue
from Bio.PDB.Atom import Atom

parser = PDBParser()
io = PDBIO()
structure = parser.get_structure('EGR', pdb_file)
chain = list(structure.get_chains())[0]
atoms = list(structure.get_atoms())
serial_number = len(atoms)
gap = 5.0

for resnum in range(10):
    resnum += 2  # position along the sequence
    res_id = ('', resnum, '')
    res_name = "EGR" + str(resnum)  # define name of residue
    res_segid = '    '
    new_res = Residue(res_id, res_name, res_segid)
    chain.add(new_res)
    for atom in atoms:
        serial_number += 1
        atom_name = atom.name
        atom_coord = atom.coord + [gap * (resnum + 1), 0, 0]
        atom_bfactor = atom.bfactor
        atom_occ = atom.occupancy
        atom_altloc = atom.altloc
        atom_fullname = atom.fullname
        atom_serial = serial_number
        atom_element = atom.element
        new_atom = Atom(atom_name, atom_coord, atom_bfactor, atom_occ, atom_altloc, atom_fullname, atom_serial, element=atom_element)
        new_res.add(new_atom)