pdbfixer icon indicating copy to clipboard operation
pdbfixer copied to clipboard

Fail to find missing residues on PDB retrieved from OPM database

Open ajsilveira opened this issue 5 years ago • 3 comments

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
{}

ajsilveira avatar Mar 15 '19 19:03 ajsilveira

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']}

3sy7_opm_newchains.pdb.zip

jchodera avatar Mar 16 '19 01:03 jchodera

Thanks! Are you able to visualize correctly the secondary structure of that pdb with new chains?

ajsilveira avatar Mar 16 '19 02:03 ajsilveira

Yes! Though I would not recommend building N- and C-terminal residues, since they just stick into solvent: output.pdb.zip

jchodera avatar Mar 16 '19 02:03 jchodera