def as_unit(self, unit_id): """Turn a unit id into a Unit. :param str unit_id: The unit id. """ parts = fuid.decode(unit_id) del parts['component_id'] del parts['atom_name'] return Unit(**parts)
def test_decodes_full_atom_id(self): val = decode("2AVY|1|A|C|50|C1'|A|c|6_555") ans = { 'pdb': '2AVY', 'model': 1, 'chain': 'A', 'component_id': 'C', 'component_number': 50, 'atom_name': "C1'", 'alt_id': 'A', 'insertion_code': 'c', 'symmetry': '6_555' } self.assertEqual(val, ans)
def test_decodes_short_with_default_data(self): val = decode('2AVY|1|A|C|50') ans = { 'pdb': '2AVY', 'model': 1, 'chain': 'A', 'component_id': 'C', 'component_number': 50, 'atom_name': None, 'alt_id': None, 'insertion_code': None, 'symmetry': '1_555' } self.assertEqual(val, ans)
def test_decodes_a_full_residue_id(self): val = decode('2AVY|1|A|C|50||||1_555') ans = { 'pdb': '2AVY', 'model': 1, 'chain': 'A', 'component_id': 'C', 'component_number': 50, 'atom_name': None, 'alt_id': None, 'insertion_code': None, 'symmetry': '1_555' } self.assertEquals(val, ans)
def too_many_sym_ops(self, loop): """Detect if we have only 1 symmetry operator in this loop. This is an invalid loop. :param dict loop: The loop to examine. :returns: Bool, true if there is more symmetry operator. """ ops = set() for unit in loop['nts']: parts = decode(unit) ops.add(parts['symmetry']) if loop['type'] == 'HL': return len(ops) != 1 if loop['type'] == 'IL': return len(ops) > 2 if loop['type'] == 'J3': return len(ops) > 3
def compatabile_units(self, unit_id1, unit_id2): unit1 = decode(unit_id1) unit2 = decode(unit_id2) return unit1['model'] == unit2['model'] and \ unit1['symmetry'] == unit2['symmetry']
def test_resets_the_index(self): chain_of = lambda d: decode(d['unit_id'])['chain'] chain_a = [d['index'] for d in self.data if chain_of(d) == 'A'] chain_b = [d['index'] for d in self.data if chain_of(d) == 'B'] assert chain_a == range(0, 158) assert chain_b == range(0, 158)
def test_can_get_for_both_chains(self): ans = set('AB') assert set(decode(d['unit_id'])['chain'] for d in self.data) == ans assert set(d['seq_id'].split('|')[2] for d in self.data) == ans
def chain_of(self, uid): return decode(uid)['chain']
def test_can_generate_mappings(self): mapping = self.cif.experimental_sequence_mapping('1') val = decode(next(mapping)[2]) self.assertEquals('P_1', val['symmetry'])
def test_round_trips_an_id(self): ans = '2AVY|1|A|C|50' val = encode(decode(ans)) self.assertEqual(val, ans)
def test_maps_both_symmetry_operators(self): ops = set(decode(d['unit_id'])['symmetry'] for d in self.data) assert ops == set(['P_P', 'P_1'])
def test_can_generate_mapping_to_model_0(self): mapping = self.cif.experimental_sequence_mapping('B') val = decode(next(mapping)[2]) self.assertEquals(0, val['model'])
def test_it_uses_a_single_symmetry_operator(self): units = [pos.unit_id for pos in self.positions] sym_ops = set(decode(uid)['symmetry'] for uid in units) assert sym_ops == set(['1_555'])