I have a heterodimeric protein PDB file. However, unfortunately all residues have a chain ID of "A". I wish to change the chain ID to "B" for residues with residue number over 275.
Below two attempts at this. I'm able to change the chain names so that when I call get the full residue IDs of the model I see the correct chain ID associated with the correct residues. However, when I try to export this edited PDB the new format isn't there. Hoping it's a simple solution. (Will try an easier solution with bash in the meantime).
structure = PDBParser().get_structure(dirPath, 'heterodimer/heterodimer.pdb')
model = structure[0]
chains = structure.get_chains()
chainA = 275
for model in structure:
for chains in model:
for residues in chains:
if residues.get_id()[1] > chainA:
chains.id = "B"
else:
chains.id = "A"
io.set_structure(chains)
savename = "{}_edit.pdb".format(name)
io.save(savename)
or
structure = PDBParser().get_structure(dirPath, 'heterodimer/heterodimer.pdb')
model = structure[0]
chainOriginal = model["A"]
residues = chainOriginal.get_residues()
chainA = 275
for res in residues:
if res.get_full_id()[3][1] > chainA:
chainOriginal.id = "B"
else:
chainOriginal.id = "A"
io.set_structure(structure)
savename = "{}_edit.pdb".format(name)
io.save(savename)
Thank you in advance for any help. Seems like I'm missing something simple.
P.S. I've also tried converting the tuple from .get_full_id() to a list, editing the value of the chain index, then converting back to tuple. However, after that point I'm stuck.
OK kind of figured out a way to do it.
My input
test.pdb
file, goes from res 28 to res 38:my code, aims to change res > 33 from chain A to chain B :
it saves two pdb files, both correct to me. I tried both ways because I was getting wrong results in the chain A TER atom numbering such as:
Wasnt able to figure out why, got better results using:
io.save(savename, write_end = False, preserve_atom_numbering = True)
;preserve_atom_numbering = True/False( as default) makes the difference see:
dont understand why, hopefully somebody here could help.