Skip to content
Snippets Groups Projects
Unverified Commit 23b750a9 authored by Xavier Robin's avatar Xavier Robin
Browse files

fix: SCHWED-5783 don't erase better chain mappings

The code would previously only consider the last chain mapping in
consideration. As a result we find better scores in tests.
parent 8a38690a
Branches
Tags
No related merge requests found
...@@ -430,21 +430,26 @@ class LigandScorer: ...@@ -430,21 +430,26 @@ class LigandScorer:
str(model_ligand), str(target_ligand))) str(model_ligand), str(target_ligand)))
continue continue
#LogVerbose("Compute RMSD for model ligand %s" % model_ligand)
rmsd = SCRMSD(model_ligand, target_ligand, rmsd = SCRMSD(model_ligand, target_ligand,
transformation=binding_site.transform, transformation=binding_site.transform,
substructure_match=self.substructure_match) substructure_match=self.substructure_match)
rmsd_full_matrix[target_i, model_i] = { LogDebug("RMSD: %.4f" % rmsd)
"rmsd": rmsd,
"chain_mapping": binding_site.GetFlatChainMapping(), # Save results?
"lddt_bs": binding_site.lDDT, if not rmsd_full_matrix[target_i, model_i] or \
"bb_rmsd": binding_site.bb_rmsd, rmsd_full_matrix[target_i, model_i]["rmsd"] > rmsd:
"transform": binding_site.transform, rmsd_full_matrix[target_i, model_i] = {
"bs_num_res": len(binding_site.substructure.residues), "rmsd": rmsd,
"bs_num_overlap_res": len(binding_site.ref_residues), "chain_mapping": binding_site.GetFlatChainMapping(),
"target_ligand": target_ligand, "lddt_bs": binding_site.lDDT,
"model_ligand": model_ligand "bb_rmsd": binding_site.bb_rmsd,
} "transform": binding_site.transform,
"bs_num_res": len(binding_site.substructure.residues),
"bs_num_overlap_res": len(binding_site.ref_residues),
"target_ligand": target_ligand,
"model_ligand": model_ligand
}
LogDebug("Saved RMSD")
mdl_bs_ent = self._build_binding_site_entity( mdl_bs_ent = self._build_binding_site_entity(
model_ligand, binding_site.mdl_residues, []) model_ligand, binding_site.mdl_residues, [])
...@@ -459,20 +464,6 @@ class LigandScorer: ...@@ -459,20 +464,6 @@ class LigandScorer:
# LogWarning("Can't calculate backbone RMSD: %s" # LogWarning("Can't calculate backbone RMSD: %s"
# " - setting to Infinity" % str(err)) # " - setting to Infinity" % str(err))
# bb_rmsd = float("inf") # bb_rmsd = float("inf")
lddt_pli_full_matrix[target_i, model_i] = {
"lddt_pli": np.nan,
"lddt_pli_n_contacts": None,
"rmsd": rmsd,
# "symmetry_number": i,
"chain_mapping": binding_site.GetFlatChainMapping(),
"lddt_bs": binding_site.lDDT,
"bb_rmsd": binding_site.bb_rmsd,
"transform": binding_site.transform,
"bs_num_res": len(binding_site.substructure.residues),
"bs_num_overlap_res": len(binding_site.ref_residues),
"target_ligand": target_ligand,
"model_ligand": model_ligand
}
# Now for each symmetry, loop and rename atoms according # Now for each symmetry, loop and rename atoms according
# to ref. # to ref.
...@@ -492,15 +483,28 @@ class LigandScorer: ...@@ -492,15 +483,28 @@ class LigandScorer:
no_intrachain=True, no_intrachain=True,
return_dist_test=True, return_dist_test=True,
check_resnames=self.check_resnames) check_resnames=self.check_resnames)
LogDebug("lDDT-PLI for symmetry %d: %.4f" % (i, global_lddt))
# Save results? # Save results?
best_lddt = lddt_pli_full_matrix[ if not lddt_pli_full_matrix[target_i, model_i] or \
target_i, model_i]["lddt_pli"] global_lddt > lddt_pli_full_matrix[
if global_lddt > best_lddt or np.isnan(best_lddt): target_i, model_i]["lddt_pli"] :
lddt_pli_full_matrix[target_i, model_i].update({ lddt_pli_full_matrix[target_i, model_i] = {
"lddt_pli": global_lddt, "lddt_pli": global_lddt,
"lddt_pli_n_contacts": lddt_tot, "lddt_pli_n_contacts": lddt_tot,
}) "rmsd": rmsd,
# "symmetry_number": i,
"chain_mapping": binding_site.GetFlatChainMapping(),
"lddt_bs": binding_site.lDDT,
"bb_rmsd": binding_site.bb_rmsd,
"transform": binding_site.transform,
"bs_num_res": len(binding_site.substructure.residues),
"bs_num_overlap_res": len(binding_site.ref_residues),
"target_ligand": target_ligand,
"model_ligand": model_ligand
}
LogDebug("Saved lDDT-PLI")
self._rmsd_full_matrix = rmsd_full_matrix self._rmsd_full_matrix = rmsd_full_matrix
self._lddt_pli_full_matrix = lddt_pli_full_matrix self._lddt_pli_full_matrix = lddt_pli_full_matrix
......
...@@ -301,37 +301,37 @@ class TestLigandScoring(unittest.TestCase): ...@@ -301,37 +301,37 @@ class TestLigandScoring(unittest.TestCase):
self.assertFalse(expected_keys.symmetric_difference(sc.lddt_pli_details.keys())) self.assertFalse(expected_keys.symmetric_difference(sc.lddt_pli_details.keys()))
# rmsd # rmsd
self.assertAlmostEqual(sc.rmsd["J"][(1, "\x00")], 3.8498, 3) self.assertAlmostEqual(sc.rmsd["J"][(1, "\x00")], 0.8016608357429504, 5)
self.assertAlmostEqual(sc.rmsd["F"][(1, "\x00")], 57.6295, 3) self.assertAlmostEqual(sc.rmsd["F"][(1, "\x00")], 0.9286373257637024, 5)
# rmsd_details # rmsd_details
self.assertEqual(sc.rmsd_details["J"][(1, "\x00")]["chain_mapping"], {'A': 'B', 'H': 'C'}) self.assertEqual(sc.rmsd_details["J"][(1, "\x00")]["chain_mapping"], {'F': 'D', 'C': 'C'})
self.assertEqual(sc.rmsd_details["J"][(1, "\x00")]["bs_num_res"], 16) self.assertEqual(sc.rmsd_details["J"][(1, "\x00")]["bs_num_res"], 15)
self.assertEqual(sc.rmsd_details["J"][(1, "\x00")]["bs_num_overlap_res"], 16) self.assertEqual(sc.rmsd_details["J"][(1, "\x00")]["bs_num_overlap_res"], 15)
self.assertEqual(sc.rmsd_details["J"][(1, "\x00")]["target_ligand"].qualified_name, 'L.G3D1') self.assertEqual(sc.rmsd_details["J"][(1, "\x00")]["target_ligand"].qualified_name, 'I.G3D1')
self.assertEqual(sc.rmsd_details["J"][(1, "\x00")]["model_ligand"].qualified_name, 'J.G3D1') self.assertEqual(sc.rmsd_details["J"][(1, "\x00")]["model_ligand"].qualified_name, 'J.G3D1')
self.assertEqual(sc.rmsd_details["F"][(1, "\x00")]["chain_mapping"], {'F': 'B', 'C': 'C'}) self.assertEqual(sc.rmsd_details["F"][(1, "\x00")]["chain_mapping"], {'B': 'B', 'G': 'A'})
self.assertEqual(sc.rmsd_details["F"][(1, "\x00")]["bs_num_res"], 15) self.assertEqual(sc.rmsd_details["F"][(1, "\x00")]["bs_num_res"], 15)
self.assertEqual(sc.rmsd_details["F"][(1, "\x00")]["bs_num_overlap_res"], 15) self.assertEqual(sc.rmsd_details["F"][(1, "\x00")]["bs_num_overlap_res"], 15)
self.assertEqual(sc.rmsd_details["F"][(1, "\x00")]["target_ligand"].qualified_name, 'I.G3D1') self.assertEqual(sc.rmsd_details["F"][(1, "\x00")]["target_ligand"].qualified_name, 'K.G3D1')
self.assertEqual(sc.rmsd_details["F"][(1, "\x00")]["model_ligand"].qualified_name, 'F.G3D1') self.assertEqual(sc.rmsd_details["F"][(1, "\x00")]["model_ligand"].qualified_name, 'F.G3D1')
# lddt_pli # lddt_pli
self.assertAlmostEqual(sc.lddt_pli["J"][(1, "\x00")], 0.91194, 5) self.assertAlmostEqual(sc.lddt_pli["J"][(1, "\x00")], 0.9127105666156202, 5)
self.assertAlmostEqual(sc.lddt_pli["F"][(1, "\x00")], 0.0014598, 6) self.assertAlmostEqual(sc.lddt_pli["F"][(1, "\x00")], 0.915929203539823, 6)
# lddt_pli_details # lddt_pli_details
self.assertAlmostEqual(sc.lddt_pli_details["J"][(1, "\x00")]["rmsd"], 4.1008, 4) self.assertAlmostEqual(sc.lddt_pli_details["J"][(1, "\x00")]["rmsd"], 0.8016608357429504, 4)
self.assertEqual(sc.lddt_pli_details["J"][(1, "\x00")]["lddt_pli_n_contacts"], 5224) self.assertEqual(sc.lddt_pli_details["J"][(1, "\x00")]["lddt_pli_n_contacts"], 5224)
self.assertEqual(sc.lddt_pli_details["J"][(1, "\x00")]["chain_mapping"], {'F': 'B', 'C': 'C'}) self.assertEqual(sc.lddt_pli_details["J"][(1, "\x00")]["chain_mapping"], {'F': 'D', 'C': 'C'})
self.assertEqual(sc.lddt_pli_details["J"][(1, "\x00")]["bs_num_res"], 15) self.assertEqual(sc.lddt_pli_details["J"][(1, "\x00")]["bs_num_res"], 15)
self.assertEqual(sc.lddt_pli_details["J"][(1, "\x00")]["bs_num_overlap_res"], 15) self.assertEqual(sc.lddt_pli_details["J"][(1, "\x00")]["bs_num_overlap_res"], 15)
self.assertEqual(sc.lddt_pli_details["J"][(1, "\x00")]["target_ligand"].qualified_name, 'I.G3D1') self.assertEqual(sc.lddt_pli_details["J"][(1, "\x00")]["target_ligand"].qualified_name, 'I.G3D1')
self.assertEqual(sc.lddt_pli_details["J"][(1, "\x00")]["model_ligand"].qualified_name, 'J.G3D1') self.assertEqual(sc.lddt_pli_details["J"][(1, "\x00")]["model_ligand"].qualified_name, 'J.G3D1')
self.assertAlmostEqual(sc.lddt_pli_details["F"][(1, "\x00")]["rmsd"], 57.7868, 4) self.assertAlmostEqual(sc.lddt_pli_details["F"][(1, "\x00")]["rmsd"], 0.9286373257637024, 4)
self.assertEqual(sc.lddt_pli_details["F"][(1, "\x00")]["lddt_pli_n_contacts"], 5480) self.assertEqual(sc.lddt_pli_details["F"][(1, "\x00")]["lddt_pli_n_contacts"], 5424)
self.assertEqual(sc.lddt_pli_details["F"][(1, "\x00")]["chain_mapping"], {'E': 'B', 'D': 'C'}) self.assertEqual(sc.lddt_pli_details["F"][(1, "\x00")]["chain_mapping"], {'B': 'B', 'G': 'A'})
self.assertEqual(sc.lddt_pli_details["F"][(1, "\x00")]["bs_num_res"], 16) self.assertEqual(sc.lddt_pli_details["F"][(1, "\x00")]["bs_num_res"], 15)
self.assertEqual(sc.lddt_pli_details["F"][(1, "\x00")]["bs_num_overlap_res"], 16) self.assertEqual(sc.lddt_pli_details["F"][(1, "\x00")]["bs_num_overlap_res"], 15)
self.assertEqual(sc.lddt_pli_details["F"][(1, "\x00")]["target_ligand"].qualified_name, 'J.G3D1') self.assertEqual(sc.lddt_pli_details["F"][(1, "\x00")]["target_ligand"].qualified_name, 'K.G3D1')
self.assertEqual(sc.lddt_pli_details["F"][(1, "\x00")]["model_ligand"].qualified_name, 'F.G3D1') self.assertEqual(sc.lddt_pli_details["F"][(1, "\x00")]["model_ligand"].qualified_name, 'F.G3D1')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment