diff --git a/modules/mol/alg/tests/test_qsscoring.py b/modules/mol/alg/tests/test_qsscoring.py index 17735209ed23910d30abf4d565dbb246ffbeb30a..01d39430475dc6648d89107c1631a93b388ff0b3 100644 --- a/modules/mol/alg/tests/test_qsscoring.py +++ b/modules/mol/alg/tests/test_qsscoring.py @@ -92,17 +92,17 @@ class TestQSscore(unittest.TestCase): ent_empty = ent.CreateEmptyView() qs_ent_invalid = QSscoreEntity(ent_empty) self.assertFalse(qs_ent_invalid.is_valid) - # monomer + # monomer - should be valid ent_mono = ent.Select('cname=A') - qs_ent_invalid = QSscoreEntity(ent_mono) - self.assertFalse(qs_ent_invalid.is_valid) + qs_ent_mono = QSscoreEntity(ent_mono) + self.assertTrue(qs_ent_mono.is_valid) # short chain removed ent_short = ent.Select('cname=A or rnum<20') - qs_ent_invalid = QSscoreEntity(ent_short) - self.assertFalse(qs_ent_invalid.is_valid) - self.assertEqual(sorted(qs_ent_invalid.removed_chains), ['B', '_']) + qs_ent_mono = QSscoreEntity(ent_short) + self.assertTrue(qs_ent_mono.is_valid) + self.assertEqual(sorted(qs_ent_mono.removed_chains), ['B', '_']) # non-AA chain removal - ent_non_AA = ent_extra.Select('cname=A,C,D') + ent_non_AA = ent_extra.Select('cname=C,D') qs_ent_invalid = QSscoreEntity(ent_non_AA) self.assertFalse(qs_ent_invalid.is_valid) self.assertEqual(sorted(qs_ent_invalid.removed_chains), ['C', 'D']) @@ -380,16 +380,24 @@ class TestQSscore(unittest.TestCase): ref = _LoadFile('4br6.1.pdb').Select('cname=A,B') mdl = _LoadFile('4br6.1.pdb') qs_scorer = QSscorer(ref, mdl) + lddt_oligo_scorer = OligoLDDTScorer( + qs_scorer.qs_ent_1.ent, + qs_scorer.qs_ent_2.ent, + qs_scorer.alignments, + qs_scorer.calpha_only) self.assertAlmostEqual(qs_scorer.global_score, 0.171, 2) self.assertAlmostEqual(qs_scorer.best_score, 1.00, 2) - self.assertAlmostEqual(qs_scorer.lddt_score, 1.00, 2) - self._CheckScorerLDDT(qs_scorer) + self.assertAlmostEqual(lddt_oligo_scorer.lddt, 1.00, 2) # flip them (use QSscoreEntity to go faster) qs_scorer2 = QSscorer(qs_scorer.qs_ent_2, qs_scorer.qs_ent_1) + lddt_oligo_scorer = OligoLDDTScorer( + qs_scorer.qs_ent_2.ent, + qs_scorer.qs_ent_1.ent, + qs_scorer.alignments, + qs_scorer.calpha_only) self.assertAlmostEqual(qs_scorer2.global_score, 0.171, 2) self.assertAlmostEqual(qs_scorer2.best_score, 1.00, 2) - self.assertAlmostEqual(qs_scorer2.lddt_score, 0.483, 2) - self._CheckScorerLDDT(qs_scorer) + self.assertAlmostEqual(lddt_oligo_scorer.lddt, 0.483, 2) # check properties self.assertFalse(qs_scorer.calpha_only) self.assertEqual(qs_scorer.chem_mapping, {('B', 'A'): ('B', 'C', 'D', 'A')}) @@ -663,33 +671,6 @@ class TestQSscore(unittest.TestCase): self.assertLessEqual(qs_scorer.global_score, 1.0) - def _CheckScorerLDDT(self, qs_scorer): - # check if we live up to our promises (assume: we did global and lddt score) - self._CheckScorer(qs_scorer) - # check lddt_mdl and lddt_ref - self.assertEqual(qs_scorer.lddt_mdl.chain_count, 1) - self.assertEqual(qs_scorer.lddt_ref.chain_count, 1) - # unique resnum? - resnum_mdl = [r.number.num for r in qs_scorer.lddt_mdl.residues] - resnum_mdl_set = set(resnum_mdl) - self.assertEqual(len(resnum_mdl), len(resnum_mdl_set)) - resnum_ref = [r.number.num for r in qs_scorer.lddt_ref.residues] - resnum_ref_set = set(resnum_ref) - self.assertEqual(len(resnum_ref), len(resnum_ref_set)) - # independent shared residues count from mapped_residues - num_shared = sum(len(v) for _,v in qs_scorer.mapped_residues.iteritems()) - shared_set = resnum_ref_set.intersection(resnum_mdl_set) - self.assertEqual(len(shared_set), num_shared) - # "lddt" prop on residues and B-factors? - for r in qs_scorer.lddt_mdl.residues: - if r.number.num in shared_set: - self.assertTrue(r.HasProp('lddt')) - r_lddt = r.GetFloatProp('lddt') - else: - r_lddt = 0 - self.assertTrue(all([a.b_factor == r_lddt for a in r.atoms])) - - if __name__ == "__main__": try: settings.Locate(('clustalw', 'clustalw2'))