Skip to content

Commit

Permalink
Handle CIF fields with a single entry (which are returned as a single…
Browse files Browse the repository at this point in the history
… item, not alist)
  • Loading branch information
avirshup committed Oct 5, 2017
1 parent cf86600 commit fe2720c
Showing 1 changed file with 19 additions and 10 deletions.
29 changes: 19 additions & 10 deletions moldesign/interfaces/parmed_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -261,23 +261,26 @@ def _reassign_chains(f, mol):
"""
data = mdt.interfaces.biopython_interface.get_mmcif_data(f)
f.seek(0)

try:
newchain_names = set(data['_pdbx_poly_seq_scheme.asym_id']+
data['_pdbx_nonpoly_scheme.asym_id'])
poly_seq_ids = _aslist(data['_pdbx_poly_seq_scheme.asym_id'])
nonpoly_ids = _aslist(data['_pdbx_nonpoly_scheme.asym_id'])
except KeyError:
return mol.copy(name=mol.name)

newchain_names = set(poly_seq_ids + nonpoly_ids)
newchains = {name: mdt.Chain(name) for name in newchain_names}

residue_iterator = itertools.chain(
zip(data['_pdbx_poly_seq_scheme.mon_id'],
data['_pdbx_poly_seq_scheme.pdb_seq_num'],
data['_pdbx_poly_seq_scheme.pdb_strand_id'],
data['_pdbx_poly_seq_scheme.asym_id']),
zip(_aslist(data['_pdbx_poly_seq_scheme.mon_id']),
_aslist(data['_pdbx_poly_seq_scheme.pdb_seq_num']),
_aslist(data['_pdbx_poly_seq_scheme.pdb_strand_id']),
_aslist(data['_pdbx_poly_seq_scheme.asym_id'])),

zip(data['_pdbx_nonpoly_scheme.mon_id'],
data['_pdbx_nonpoly_scheme.pdb_seq_num'],
data['_pdbx_nonpoly_scheme.pdb_strand_id'],
data['_pdbx_nonpoly_scheme.asym_id']))
zip(_aslist(data['_pdbx_nonpoly_scheme.mon_id']),
_aslist(data['_pdbx_nonpoly_scheme.pdb_seq_num']),
_aslist(data['_pdbx_nonpoly_scheme.pdb_strand_id']),
_aslist(data['_pdbx_nonpoly_scheme.asym_id'])))

reschains = {(rname, ridx, rchain): newchains[chainid]
for rname, ridx, rchain, chainid in residue_iterator}
Expand All @@ -290,3 +293,9 @@ def _reassign_chains(f, mol):
return mdt.Molecule(mol.atoms,
name=mol.name, metadata=mol.metadata)


def _aslist(l):
if isinstance(l, list):
return l
else:
return [l]

0 comments on commit fe2720c

Please sign in to comment.