pdbfixer
pdbfixer copied to clipboard
Fail to find missing residues on PDB retrieved from OPM database
Hi,
PDBFixer is not finding the missing residues in 3sy7.pdb as retrieved from the OPM database, while it did work for the 3sy7.pdb taken from the RCSB database. The SEQRES section is identical in both pdbs. I uploaded both files in https://gist.github.com/ajsilveira/8663ac3c1287e9d994c82fa0dd424b10
from pdbfixer import PDBFixer
from simtk.openmm.app import PDBFile
fixer = PDBFixer(filename='3sy7_rcsb.pdb')
fixer.findMissingResidues()
fixer.missingResidues
{(0, 31): ['GLY', 'LYS', 'SER', 'GLY', 'SER', 'GLY'],
(0, 70): ['SER', 'ASP', 'LYS', 'THR', 'GLY', 'THR', 'GLY', 'ASN', 'LEU', 'PRO', 'VAL', 'MET', 'ASN', 'ASP', 'GLY', 'LYS', 'PRO', 'ARG'],
(0, 135): ['GLY', 'LYS', 'GLU', 'PRO', 'THR', 'THR', 'VAL', 'LYS', 'SER', 'ARG', 'GLY'], (0, 251): ['ARG', 'ASN', 'GLY', 'SER'],
(0, 382): ['GLY', 'HIS', 'HIS', 'HIS', 'HIS', 'HIS', 'HIS']}
When using the pdb retrieved from OPM, I get
from pdbfixer import PDBFixer
from simtk.openmm.app import PDBFile
fixer = PDBFixer(filename='3sy7_opm.pdb')
fixer.findMissingResidues()
fixer.missingResidues
{}
The issue seems to be that, in the RCSB file, all the residues in chain A are amino acids from the one polypeptide chain. In the OPM file, C8E and HOH residues are added at the end of the same chain:
['ASP', 'ALA', 'PHE', 'VAL', 'SER', 'ASP', 'GLN', 'ALA', 'GLU', 'ALA', 'LYS', 'GLY', 'PHE', 'ILE', 'GLU', 'ASP', 'SER', 'SER', 'LEU', 'ASP', 'LEU', 'LEU', 'LEU', 'ARG', 'ASN', 'TYR', 'TYR', 'PHE', 'ASN', 'ARG', 'ASP', None, None, None, None, None, None, 'ASP', 'ARG', 'VAL', 'ASP', 'TRP', 'THR', 'GLN', 'GLY', 'PHE', 'LEU', 'THR', 'THR', 'TYR', 'GLU', 'SER', 'GLY', 'PHE', 'THR', 'GLN', 'GLY', 'THR', 'VAL', 'GLY', 'PHE', 'GLY', 'VAL', 'ASP', 'ALA', 'PHE', 'GLY', 'TYR', 'LEU', 'GLY', 'LEU', 'LYS', 'LEU', 'ASP', 'GLY', 'THR', None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'ASP', 'ASP', 'TYR', 'SER', 'ARG', 'ALA', 'GLY', 'GLY', 'ALA', 'VAL', 'LYS', 'VAL', 'ARG', 'ILE', 'SER', 'LYS', 'THR', 'MET', 'LEU', 'LYS', 'TRP', 'GLY', 'GLU', 'MET', 'GLN', 'PRO', 'THR', 'ALA', 'PRO', 'VAL', 'PHE', 'ALA', 'ALA', 'GLY', 'GLY', 'SER', 'ARG', 'LEU', 'PHE', 'PRO', 'GLN', 'THR', 'ALA', 'THR', 'GLY', 'VAL', 'GLN', 'LEU', 'GLN', 'SER', 'SER', 'GLU', 'PHE', 'GLU', 'GLY', 'LEU', 'ASP', 'LEU', 'GLU', 'ALA', 'GLY', 'HIS', 'PHE', 'THR', 'GLU', None, None, None, None, None, None, None, None, None, None, None, 'GLU', 'LEU', 'TYR', 'ALA', 'THR', 'TYR', 'ALA', 'GLY', 'GLU', 'THR', 'ALA', 'LYS', 'SER', 'ALA', 'ASP', 'PHE', 'ILE', 'GLY', 'GLY', 'ARG', 'TYR', 'ALA', 'ILE', 'THR', 'ASP', 'ASN', 'LEU', 'SER', 'ALA', 'SER', 'LEU', 'TYR', 'GLY', 'ALA', 'GLU', 'LEU', 'GLU', 'ASP', 'ILE', 'TYR', 'ARG', 'GLN', 'TYR', 'TYR', 'LEU', 'ASN', 'SER', 'ASN', 'TYR', 'THR', 'ILE', 'PRO', 'LEU', 'ALA', 'SER', 'ASP', 'GLN', 'SER', 'LEU', 'GLY', 'PHE', 'ASP', 'PHE', 'ASN', 'ILE', 'TYR', 'ARG', 'THR', 'ASN', 'ASP', 'GLU', 'GLY', 'LYS', 'ALA', 'LYS', 'ALA', 'GLY', 'ASP', 'ILE', 'SER', 'ASN', 'THR', 'THR', 'TRP', 'SER', 'LEU', 'ALA', 'ALA', 'ALA', 'TYR', 'THR', 'LEU', 'ASP', 'ALA', 'HIS', 'THR', 'PHE', 'THR', 'LEU', 'ALA', 'TYR', 'GLN', 'LYS', 'VAL', 'HIS', 'GLY', 'ASP', 'GLN', 'PRO', 'PHE', 'ASP', 'TYR', 'ILE', 'GLY', 'PHE', 'GLY', None, None, None, None, 'GLY', 'ALA', 'GLY', 'GLY', 'ASP', 'SER', 'ILE', 'PHE', 'LEU', 'ALA', 'ASN', 'SER', 'VAL', 'GLN', 'TYR', 'SER', 'ASP', 'PHE', 'ASN', 'GLY', 'PRO', 'GLY', 'GLU', 'LYS', 'SER', 'TRP', 'GLN', 'ALA', 'ARG', 'TYR', 'ASP', 'LEU', 'ASN', 'LEU', 'ALA', 'SER', 'TYR', 'GLY', 'VAL', 'PRO', 'GLY', 'LEU', 'THR', 'PHE', 'MET', 'VAL', 'ARG', 'TYR', 'ILE', 'ASN', 'GLY', 'LYS', 'ASP', 'ILE', 'ASP', 'GLY', 'THR', 'LYS', 'MET', 'SER', 'ASP', 'ASN', 'ASN', 'VAL', 'GLY', 'TYR', 'LYS', 'ASN', 'TYR', 'GLY', 'TYR', 'GLY', 'GLU', 'ASP', 'GLY', 'LYS', 'HIS', 'HIS', 'GLU', 'THR', 'ASN', 'LEU', 'GLU', 'ALA', 'LYS', 'TYR', 'VAL', 'VAL', 'GLN', 'SER', 'GLY', 'PRO', 'ALA', 'LYS', 'ASP', 'LEU', 'SER', 'PHE', 'ARG', 'ILE', 'ARG', 'GLN', 'ALA', 'TRP', 'HIS', 'ARG', 'ALA', 'ASN', 'ALA', 'ASP', 'GLN', 'GLY', 'GLU', 'GLY', 'ASP', 'GLN', 'ASN', 'GLU', 'PHE', 'ARG', 'LEU', 'ILE', 'VAL', 'ASP', 'TYR', 'PRO', 'LEU', 'SER', 'ILE', 'LEU', 'GLY', None, None, None, None, None, None, None, 'C8E', 'C8E', 'C8E', 'C8E', 'C8E', 'C8E', 'C8E', 'C8E', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH', 'HOH']
As a result, pdbfixer
can't align the SEQRES
to the sequence found in the RCSB file.
If you move the C8E
and HOH
residues to a different chain name, things work:
>>> from pdbfixer import PDBFixer
>>> from simtk.openmm.app import PDBFile
>>> fixer = PDBFixer(filename='3sy7_opm_newchains.pdb')
>>> fixer.findMissingResidues()
['ASP', 'ALA', 'PHE', 'VAL', 'SER', 'ASP', 'GLN', 'ALA', 'GLU', 'ALA', 'LYS', 'GLY', 'PHE', 'ILE', 'GLU', 'ASP', 'SER', 'SER', 'LEU', 'ASP', 'LEU', 'LEU', 'LEU', 'ARG', 'ASN', 'TYR', 'TYR', 'PHE', 'ASN', 'ARG', 'ASP', None, None, None, None, None, None, 'ASP', 'ARG', 'VAL', 'ASP', 'TRP', 'THR', 'GLN', 'GLY', 'PHE', 'LEU', 'THR', 'THR', 'TYR', 'GLU', 'SER', 'GLY', 'PHE', 'THR', 'GLN', 'GLY', 'THR', 'VAL', 'GLY', 'PHE', 'GLY', 'VAL', 'ASP', 'ALA', 'PHE', 'GLY', 'TYR', 'LEU', 'GLY', 'LEU', 'LYS', 'LEU', 'ASP', 'GLY', 'THR', None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'ASP', 'ASP', 'TYR', 'SER', 'ARG', 'ALA', 'GLY', 'GLY', 'ALA', 'VAL', 'LYS', 'VAL', 'ARG', 'ILE', 'SER', 'LYS', 'THR', 'MET', 'LEU', 'LYS', 'TRP', 'GLY', 'GLU', 'MET', 'GLN', 'PRO', 'THR', 'ALA', 'PRO', 'VAL', 'PHE', 'ALA', 'ALA', 'GLY', 'GLY', 'SER', 'ARG', 'LEU', 'PHE', 'PRO', 'GLN', 'THR', 'ALA', 'THR', 'GLY', 'VAL', 'GLN', 'LEU', 'GLN', 'SER', 'SER', 'GLU', 'PHE', 'GLU', 'GLY', 'LEU', 'ASP', 'LEU', 'GLU', 'ALA', 'GLY', 'HIS', 'PHE', 'THR', 'GLU', None, None, None, None, None, None, None, None, None, None, None, 'GLU', 'LEU', 'TYR', 'ALA', 'THR', 'TYR', 'ALA', 'GLY', 'GLU', 'THR', 'ALA', 'LYS', 'SER', 'ALA', 'ASP', 'PHE', 'ILE', 'GLY', 'GLY', 'ARG', 'TYR', 'ALA', 'ILE', 'THR', 'ASP', 'ASN', 'LEU', 'SER', 'ALA', 'SER', 'LEU', 'TYR', 'GLY', 'ALA', 'GLU', 'LEU', 'GLU', 'ASP', 'ILE', 'TYR', 'ARG', 'GLN', 'TYR', 'TYR', 'LEU', 'ASN', 'SER', 'ASN', 'TYR', 'THR', 'ILE', 'PRO', 'LEU', 'ALA', 'SER', 'ASP', 'GLN', 'SER', 'LEU', 'GLY', 'PHE', 'ASP', 'PHE', 'ASN', 'ILE', 'TYR', 'ARG', 'THR', 'ASN', 'ASP', 'GLU', 'GLY', 'LYS', 'ALA', 'LYS', 'ALA', 'GLY', 'ASP', 'ILE', 'SER', 'ASN', 'THR', 'THR', 'TRP', 'SER', 'LEU', 'ALA', 'ALA', 'ALA', 'TYR', 'THR', 'LEU', 'ASP', 'ALA', 'HIS', 'THR', 'PHE', 'THR', 'LEU', 'ALA', 'TYR', 'GLN', 'LYS', 'VAL', 'HIS', 'GLY', 'ASP', 'GLN', 'PRO', 'PHE', 'ASP', 'TYR', 'ILE', 'GLY', 'PHE', 'GLY', None, None, None, None, 'GLY', 'ALA', 'GLY', 'GLY', 'ASP', 'SER', 'ILE', 'PHE', 'LEU', 'ALA', 'ASN', 'SER', 'VAL', 'GLN', 'TYR', 'SER', 'ASP', 'PHE', 'ASN', 'GLY', 'PRO', 'GLY', 'GLU', 'LYS', 'SER', 'TRP', 'GLN', 'ALA', 'ARG', 'TYR', 'ASP', 'LEU', 'ASN', 'LEU', 'ALA', 'SER', 'TYR', 'GLY', 'VAL', 'PRO', 'GLY', 'LEU', 'THR', 'PHE', 'MET', 'VAL', 'ARG', 'TYR', 'ILE', 'ASN', 'GLY', 'LYS', 'ASP', 'ILE', 'ASP', 'GLY', 'THR', 'LYS', 'MET', 'SER', 'ASP', 'ASN', 'ASN', 'VAL', 'GLY', 'TYR', 'LYS', 'ASN', 'TYR', 'GLY', 'TYR', 'GLY', 'GLU', 'ASP', 'GLY', 'LYS', 'HIS', 'HIS', 'GLU', 'THR', 'ASN', 'LEU', 'GLU', 'ALA', 'LYS', 'TYR', 'VAL', 'VAL', 'GLN', 'SER', 'GLY', 'PRO', 'ALA', 'LYS', 'ASP', 'LEU', 'SER', 'PHE', 'ARG', 'ILE', 'ARG', 'GLN', 'ALA', 'TRP', 'HIS', 'ARG', 'ALA', 'ASN', 'ALA', 'ASP', 'GLN', 'GLY', 'GLU', 'GLY', 'ASP', 'GLN', 'ASN', 'GLU', 'PHE', 'ARG', 'LEU', 'ILE', 'VAL', 'ASP', 'TYR', 'PRO', 'LEU', 'SER', 'ILE', 'LEU', 'GLY']
>>> fixer.missingResidues
{(0, 31): ['GLY', 'LYS', 'SER', 'GLY', 'SER', 'GLY'], (0, 70): ['SER', 'ASP', 'LYS', 'THR', 'GLY', 'THR', 'GLY', 'ASN', 'LEU', 'PRO', 'VAL', 'MET', 'ASN', 'ASP', 'GLY', 'LYS', 'PRO', 'ARG'], (0, 135): ['GLY', 'LYS', 'GLU', 'PRO', 'THR', 'THR', 'VAL', 'LYS', 'SER', 'ARG', 'GLY'], (0, 251): ['ARG', 'ASN', 'GLY', 'SER'], (0, 382): ['GLY', 'HIS', 'HIS', 'HIS', 'HIS', 'HIS', 'HIS']}
Thanks! Are you able to visualize correctly the secondary structure of that pdb with new chains?
Yes! Though I would not recommend building N- and C-terminal residues, since they just stick into solvent: output.pdb.zip