From e2a16931f71a78629c0e8ee5d2336fee10e2fb67 Mon Sep 17 00:00:00 2001
From: Gabriel Studer <gabriel.studer@unibas.ch>
Date: Thu, 17 Nov 2022 22:44:56 +0100
Subject: [PATCH] stereochemistry unit tests

---
 modules/mol/alg/tests/test_stereochemistry.py | 58 ++++++++++++-------
 1 file changed, 38 insertions(+), 20 deletions(-)

diff --git a/modules/mol/alg/tests/test_stereochemistry.py b/modules/mol/alg/tests/test_stereochemistry.py
index 98889d650..c394b6d87 100644
--- a/modules/mol/alg/tests/test_stereochemistry.py
+++ b/modules/mol/alg/tests/test_stereochemistry.py
@@ -1,5 +1,3 @@
-
-
 import unittest, os, sys
 import ost
 from ost import io, mol, settings, conop, seq
@@ -143,23 +141,45 @@ class TestStereochemistry(unittest.TestCase):
                                                   stereo_link_data = link_data)
             self.assertTrue(None not in param)
 
+    def test_StereoCheck(self):
+        """ Test StereoCheck
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+        GetClashes, GetBadBonds and GetBadAngles get tested implicitely
+        """
+        ent = _LoadFile("10b2.pdb")
+        sterochecked_ent, clashes, bad_bonds, bad_angles = \
+        stereochemistry.StereoCheck(ent)
+
+        self.assertEqual(len(clashes), 0)
+        self.assertEqual(len(bad_bonds), 0)
+        self.assertEqual(len(bad_angles), 0)
+
+        phe_A_218 = ent.FindResidue("A", mol.ResNum(218))
+        c_B_75 = ent.FindResidue("B", mol.ResNum(75))
+
+        phe_at = phe_A_218.FindAtom("CD2")
+        c_at = c_B_75.FindAtom("C4'")
+        ed = ent.EditXCS()
+        ed.SetAtomPos(phe_at, 0.5*(phe_at.GetPos() + c_at.GetPos()))
+
+        stereochecked_ent, clashes, bad_bonds, bad_angles = \
+        stereochemistry.StereoCheck(ent)
+
+        self.assertEqual(len(clashes), 2)
+        self.assertEqual(len(bad_bonds), 2)
+        self.assertEqual(len(bad_angles), 2)
+
+        # c_B_75 gets completely removed as two backbone atoms are involved
+        # in clashes. phe_A_218 has the sidechain removed
+        self.assertEqual(len(ent.residues)-1,
+                         len(stereochecked_ent.residues))
+        c_B_75 = stereochecked_ent.FindResidue("B", mol.ResNum(75))
+        self.assertFalse(c_B_75.IsValid())
+        phe_A_218 = stereochecked_ent.FindResidue("A", mol.ResNum(218))
+        self.assertTrue(phe_A_218.IsValid())
+        phe_atoms = [a.GetName() for a in phe_A_218.atoms]
+        self.assertEqual(sorted(["N", "CA", "C", "O"]),
+                         sorted(phe_atoms))
 
 if __name__ == "__main__":
     from ost import testutils
@@ -167,5 +187,3 @@ if __name__ == "__main__":
         testutils.RunTests()
     else:
         print('No compound library available. Ignoring test_stereochemistry.py tests.')
-
-
-- 
GitLab