[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