Opened 9 years ago

Closed 8 years ago

Last modified 8 years ago

#576 closed enhancement (fixed)

Use SSBOND records

Reported by: tic20@… Owned by: pett
Priority: major Milestone: 0.5
Component: Input/Output Version:
Keywords: Cc:
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description (last modified by pett)

As per Tristan: "Phenix does not write out CONECT records for disulfide bonds - but it *does* write out SSBOND records giving the two bonded residues."

So, process SSBOND records after CONECT records and form the disulphide bond if it's missing (check that the bond is between atoms in the same symmetry partner).

Attachments (1)

1pmx.pdb (124.7 KB ) - added by tic20@… 8 years ago.
Added by email2trac

Download all attachments as: .zip

Change History (7)

comment:1 by pett, 9 years ago

Description: modified (diff)
Reporter: changed from pett to tic20@…

comment:2 by Conrad Huang, 9 years ago

Milestone: Beta Release
Priority: blockermajor

comment:3 by pett, 8 years ago

Status: assignedfeedback

Hi Tristan,

Looking at the Chimera/ChimeraX code for SSBONDs, it does create the bond based on the record. Can you provide an example file where the bond indicated by the SSBOND record isn't being formed? Thanks.

--Eric

in reply to:  4 ; comment:4 by tic20@…, 8 years ago

Hi Eric,

The attached (1PMX, with all models past the first removed along with 
CONECT cards, but retaining the SSBOND cards) still fails to form 
disulfides on open. I've been routinely using the below method (written 
some time back -it can undoubtedly be done more neatly) to fill them in 
as necessary - it does so correctly in this case, so the SSBONDs are 
being loaded into the metadata dict correctly.

Cheers,

Tristan

{{{
def add_disulfides_from_model_metadata(model):
     m_id = model.id_string()
     from chimerax.core.commands import atomspec
     metadata = model.metadata
     try:
         disulfide_list = metadata['SSBOND']
     except KeyError:
         return
     for disulfide in disulfide_list:
         sym1 = None
         sym2 = None
         d = disulfide.split()
         chain1, res1 = d[3], d[4]
         chain2, res2 = d[6], d[7]
         if len(d) > 8:
             sym1, sym2 = d[8], d[9]
         if sym1 is not None and sym1 != sym2:
             # Disulfide across a symmetry interface. Ignore for now.
             continue
         arg = atomspec.AtomSpecArg('ss')
         thearg = '#{}/{}:{}@{}|#{}/{}:{}@{}'.format(
             m_id, chain1, res1, 'SG', m_id, chain2, res2, 'SG')
         aspec = arg.parse(thearg, model.session)
         atoms = aspec[0].evaluate(model.session).atoms
         bonds = atoms.intra_bonds
         if not len(bonds):
             a1, a2 = atoms
             b = model.new_bond(a1, a2)
}}}

On 2017-11-22 19:20, ChimeraX wrote:

1pmx.pdb

by tic20@…, 8 years ago

Attachment: 1pmx.pdb added

Added by email2trac

comment:5 by pett, 8 years ago

Resolution: fixed
Status: feedbackclosed

The SSBONDs were being processed immediately, before any ATOM records. Processing now delayed in the same way as LINK records.

comment:6 by pett, 8 years ago

Milestone: Beta Release0.5

Milestone renamed

Note: See TracTickets for help on using tickets.