From fe2720cfaf00788cdec73522cbda3d70dca9dc9c Mon Sep 17 00:00:00 2001 From: Aaron Virshup Date: Thu, 5 Oct 2017 14:01:20 -0700 Subject: [PATCH] Handle CIF fields with a single entry (which are returned as a single item, not alist) --- moldesign/interfaces/parmed_interface.py | 29 ++++++++++++++++-------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/moldesign/interfaces/parmed_interface.py b/moldesign/interfaces/parmed_interface.py index b5fe99f..2663265 100644 --- a/moldesign/interfaces/parmed_interface.py +++ b/moldesign/interfaces/parmed_interface.py @@ -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} @@ -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]