aboutsummaryrefslogtreecommitdiff
path: root/plip/test/test_xml_parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'plip/test/test_xml_parser.py')
-rw-r--r--plip/test/test_xml_parser.py146
1 files changed, 146 insertions, 0 deletions
diff --git a/plip/test/test_xml_parser.py b/plip/test/test_xml_parser.py
new file mode 100644
index 0000000..1f45daa
--- /dev/null
+++ b/plip/test/test_xml_parser.py
@@ -0,0 +1,146 @@
+# coding=utf-8
+"""
+Protein-Ligand Interaction Profiler - Analyze and visualize protein-ligand interactions in PDB files.
+test_xml_parser.py - Unit Tests for XML Parser.
+"""
+
+
+import unittest
+from plip.exchange.xml import PlipXML
+
+
+class XMLParserTest(unittest.TestCase):
+ """Checks if the XML parser is working correctly"""
+
+ def setUp(self):
+ self.px = PlipXML('./xml/1vsn.report.xml')
+ self.bsite = self.px.bsites['NFT:A:283']
+ self.smiles = 'CC(C)CC(NC(c1ccc(cc1)c1ccc(cc1)S(N)(=O)=O)C(F)(F)F)C(=O)NCC=N'
+
+ def test_general_information(self):
+ """Test if general information is correctly parsed."""
+ self.assertEqual(self.px.version, '1.4.2')
+ self.assertEqual(self.px.pdbid, '1VSN')
+ self.assertFalse(self.px.fixed)
+ self.assertEqual(self.px.filename, '1vsn.pdb')
+ self.assertEqual(self.px.excluded, [])
+
+ def test_bsite_information(self):
+ """Test if the binding site information is correctly parsed."""
+ self.assertEqual(self.bsite.pdbid, '1VSN')
+ self.assertEqual(self.bsite.uniqueid, '1VSN:NFT:A:283')
+ self.assertEqual(self.bsite.hetid, 'NFT')
+ self.assertEqual(self.bsite.longname, 'NFT')
+ self.assertEqual(self.bsite.ligtype, 'SMALLMOLECULE')
+ self.assertEqual(self.bsite.smiles, self.smiles)
+ self.assertEqual(self.bsite.members, ['NFT:A:283'])
+ self.assertFalse(self.bsite.composite)
+
+ # ligand properties
+ self.assertEqual(self.bsite.heavy_atoms, 33)
+ self.assertEqual(self.bsite.hbd, 5)
+ self.assertEqual(self.bsite.unpaired_hbd, 0)
+ self.assertEqual(self.bsite.hba, 7)
+ self.assertEqual(self.bsite.unpaired_hba, 2)
+ self.assertEqual(self.bsite.hal, 3)
+ self.assertEqual(self.bsite.unpaired_hal, 1)
+ self.assertEqual(self.bsite.rings, 2)
+ self.assertEqual(self.bsite.rotatable_bonds, 12)
+ self.assertAlmostEqual(self.bsite.molweight, 484, 0)
+ self.assertAlmostEqual(self.bsite.logp, 6, 0)
+
+ # Atom mappings (non-exhaustive test)
+ lmap = self.bsite.mappings['pdb_to_smiles']
+ self.assertEqual(lmap[1625], 24)
+ self.assertEqual(lmap[1649], 33)
+ self.assertEqual(lmap[1617], 14)
+
+ # Binding site residues
+ self.assertEqual(len(self.bsite.bs_res), 35)
+
+ # Interacting chains
+ self.assertEqual(self.bsite.interacting_chains, ['A'])
+
+ # Has Interactions?
+ self.assertTrue(self.bsite.has_interactions, True)
+
+ def test_interactions(self):
+ """Test if interaction information is correctly parsed."""
+
+ # Hydrophobic Contacts
+ self.assertEqual(len(self.bsite.hydrophobics), 4)
+ hydrophobic1 = self.bsite.hydrophobics[0]
+ self.assertEqual(hydrophobic1.dist, 3.67)
+ self.assertEqual(hydrophobic1.resnr, 61)
+ self.assertEqual(hydrophobic1.restype, 'ASP')
+ self.assertEqual(hydrophobic1.reschain, 'A')
+ self.assertEqual(hydrophobic1.ligcarbonidx, 1639)
+ self.assertEqual(hydrophobic1.protcarbonidx, 448)
+ self.assertEqual(hydrophobic1.ligcoo, (-7.395, 24.225, 6.614))
+ self.assertEqual(hydrophobic1.protcoo, (-6.900, 21.561, 9.090))
+
+ # Hydrogen Bonds
+ self.assertEqual(len(self.bsite.hbonds), 6)
+ hbond1 = self.bsite.hbonds[0]
+ self.assertEqual(hbond1.resnr, 19)
+ self.assertEqual(hbond1.restype, 'GLN')
+ self.assertEqual(hbond1.reschain, 'A')
+ self.assertTrue(hbond1.sidechain)
+ self.assertEqual(hbond1.dist_h_a, 2.16)
+ self.assertEqual(hbond1.dist_d_a, 3.11)
+ self.assertEqual(hbond1.don_angle, 160.05)
+ self.assertTrue(hbond1.protisdon)
+ self.assertEqual(hbond1.donoridx, 153)
+ self.assertEqual(hbond1.donortype, 'Nam')
+ self.assertEqual(hbond1.acceptoridx, 1649)
+ self.assertEqual(hbond1.acceptortype, 'N2')
+ self.assertEqual(hbond1.ligcoo, (2.820, 18.145, 6.806))
+ self.assertEqual(hbond1.protcoo, (3.976, 15.409, 7.712))
+
+ # Water Bridges
+ self.assertEqual(len(self.bsite.wbridges), 1)
+ wbridge1 = self.bsite.wbridges[0]
+ self.assertEqual(wbridge1.resnr, 159)
+ self.assertEqual(wbridge1.restype, 'HIS')
+ self.assertEqual(wbridge1.reschain, 'A')
+ self.assertEqual(wbridge1.dist_a_w, 3.67)
+ self.assertEqual(wbridge1.dist_d_w, 3.13)
+ self.assertEqual(wbridge1.don_angle, 126.73)
+ self.assertEqual(wbridge1.water_angle, 116.36)
+ self.assertTrue(wbridge1.protisdon)
+ self.assertEqual(wbridge1.donor_idx, 1210)
+ self.assertEqual(wbridge1.donortype, 'Nar')
+ self.assertEqual(wbridge1.acceptor_idx, 1649)
+ self.assertEqual(wbridge1.acceptortype, 'N2')
+ self.assertEqual(wbridge1.ligcoo, (2.820, 18.145, 6.806))
+ self.assertEqual(wbridge1.protcoo, (6.401, 19.307, 4.971))
+ self.assertEqual(wbridge1.watercoo, (3.860, 18.563, 3.309))
+
+ # Salt Bridges
+ self.assertEqual(len(self.bsite.sbridges), 0)
+
+ # Pi stacking
+ self.assertEqual(len(self.bsite.pi_stacks), 0)
+
+ # Pi cation interactions
+ self.assertEqual(len(self.bsite.pi_cations), 0)
+
+ # Halogen Bonds
+ self.assertEqual(len(self.bsite.halogens), 2)
+ hal1 = self.bsite.halogens[0]
+ self.assertEqual(hal1.resnr, 67)
+ self.assertEqual(hal1.restype, 'TYR')
+ self.assertEqual(hal1.reschain, 'A')
+ self.assertTrue(hal1.sidechain)
+ self.assertEqual(hal1.dist, 3.37)
+ self.assertEqual(hal1.don_angle, 156.70)
+ self.assertEqual(hal1.acc_angle, 100.53)
+ self.assertEqual(hal1.don_idx, 1627)
+ self.assertEqual(hal1.donortype, 'F')
+ self.assertEqual(hal1.acc_idx, 485)
+ self.assertEqual(hal1.acceptortype, 'O3')
+ self.assertEqual(hal1.ligcoo, (-1.862, 29.303, 4.507))
+ self.assertEqual(hal1.protcoo, (-1.005, 26.276, 3.287))
+
+ # Metal complexes
+ self.assertEqual(len(self.bsite.metal_complexes), 0)