[Biopython-dev] Bug: Bio.PDB.DSSP fails on PDB files with no header
    Jan Kosinski 
    jan.kosinski at gmail.com
       
    Tue Apr 23 08:09:30 UTC 2013
    
    
  
The following script:
import sys
import Bio
from Bio.PDB.DSSP import DSSP
from Bio.PDB.PDBParser import PDBParser
pdb_filename = sys.argv[1]
p = PDBParser()
structure = p.get_structure('chupacabra', pdb_filename)
model = structure[0]
biodssp = DSSP(model, pdb_filename, dssp="dssp")
will fail on files without HEADER with traceback:
Traceback (most recent call last):
  File "testdssp_fail.py", line 13, in <module>
    biodssp = DSSP(model, pdb_filename, dssp="dssp")
  File
"/home/modorama_dev/modorama/ENV_INI/lib/python2.7/site-packages/Bio/PDB/DSSP.py",
line 200, in __init__
    dssp_dict, dssp_keys = dssp_dict_from_pdb_file(pdb_file, dssp)
  File
"/home/modorama_dev/modorama/ENV_INI/lib/python2.7/site-packages/Bio/PDB/DSSP.py",
line 101, in dssp_dict_from_pdb_file
    out_dict, keys = make_dssp_dict(out_file.name)
  File
"/home/modorama_dev/modorama/ENV_INI/lib/python2.7/site-packages/Bio/PDB/DSSP.py",
line 121, in make_dssp_dict
    if sl[1] == "RESIDUE":
IndexError: list index out of range
This is because in newer dssp versions the header of DSSP output will have
empty lines if the PDB file had no HEADER and this part of make_dssp_dict
function will fail
        for l in handle.readlines():
            sl = l.split()
            if sl[1] == "RESIDUE:
Changing it to sth like:
if len(sl) > 1 and sl[1] == "RESIDUE":
fixes the problem.
Cheers,
Jan
    
    
More information about the Biopython-dev
mailing list