From 58dfbf88a1254583bb1b621bb4a8c88bac35c54b Mon Sep 17 00:00:00 2001 From: Gabriel Studer <gabriel.studer@unibas.ch> Date: Tue, 20 Sep 2022 08:53:47 +0200 Subject: [PATCH] chain mapping: Get one-to-one flat mapping out of mapping result --- modules/mol/alg/pymod/chain_mapping.py | 19 +++++++++++++++++++ modules/mol/alg/tests/test_chain_mapping.py | 13 +++++++++++++ 2 files changed, 32 insertions(+) diff --git a/modules/mol/alg/pymod/chain_mapping.py b/modules/mol/alg/pymod/chain_mapping.py index 865e3b2ab..4b90652f2 100644 --- a/modules/mol/alg/pymod/chain_mapping.py +++ b/modules/mol/alg/pymod/chain_mapping.py @@ -89,6 +89,25 @@ class MappingResult: """ return self._alns + def GetFlatMapping(self, mdl_as_key=False): + """ Returns flat mapping as :class:`dict` for all mapable chains + + :param mdl_as_key: Default is target chain name as key and model chain + name as value. This can be reversed with this flag. + :returns: :class:`dict` with :class:`str` as key/value that describe + one-to-one mapping + """ + flat_mapping = dict() + for trg_chem_group, mdl_chem_group in zip(self.chem_groups, + self.mapping): + for a,b in zip(trg_chem_group, mdl_chem_group): + if a is not None and b is not None: + if mdl_as_key: + flat_mapping[b] = a + else: + flat_mapping[a] = b + return flat_mapping + def JSONSummary(self): """ Returns JSON serializable summary of results """ diff --git a/modules/mol/alg/tests/test_chain_mapping.py b/modules/mol/alg/tests/test_chain_mapping.py index d9a9362eb..0a663081c 100644 --- a/modules/mol/alg/tests/test_chain_mapping.py +++ b/modules/mol/alg/tests/test_chain_mapping.py @@ -284,6 +284,19 @@ class TestChainMapper(unittest.TestCase): greedy_rigid_res = mapper.GetRigidMapping(mdl, strategy="greedy_iterative_rmsd") self.assertEqual(greedy_rigid_res.mapping, [['X', 'Y'],[None],['Z']]) + # test flat mapping functionality of MappingResult + flat_map = greedy_rigid_res.GetFlatMapping() + self.assertEqual(len(flat_map), 3) + self.assertEqual(flat_map[greedy_rigid_res.chem_groups[0][0]], 'X') + self.assertEqual(flat_map[greedy_rigid_res.chem_groups[0][1]], 'Y') + self.assertEqual(flat_map[greedy_rigid_res.chem_groups[2][0]], 'Z') + flat_map = greedy_rigid_res.GetFlatMapping(mdl_as_key=True) + self.assertEqual(len(flat_map), 3) + self.assertEqual(greedy_rigid_res.chem_groups[0][0], flat_map['X']) + self.assertEqual(greedy_rigid_res.chem_groups[0][1], flat_map['Y']) + self.assertEqual(greedy_rigid_res.chem_groups[2][0], flat_map['Z']) + + if __name__ == "__main__": from ost import testutils if testutils.SetDefaultCompoundLib(): -- GitLab