diff options
author | Navan Chauhan <navanchauhan@gmail.com> | 2020-07-02 20:48:33 +0530 |
---|---|---|
committer | Navan Chauhan <navanchauhan@gmail.com> | 2020-07-02 20:48:33 +0530 |
commit | 4be08f7bdd77991e9e453c1cda863c3f20c338d5 (patch) | |
tree | 083e8e91622221185a28fd50754abc2f86b1df43 /plip/test/test_xml_parser.py |
initial commit
Diffstat (limited to 'plip/test/test_xml_parser.py')
-rw-r--r-- | plip/test/test_xml_parser.py | 146 |
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) |