aboutsummaryrefslogtreecommitdiff
path: root/plip/test/test_metal_coordination.py
diff options
context:
space:
mode:
authorNavan Chauhan <navanchauhan@gmail.com>2020-07-02 20:48:33 +0530
committerNavan Chauhan <navanchauhan@gmail.com>2020-07-02 20:48:33 +0530
commit4be08f7bdd77991e9e453c1cda863c3f20c338d5 (patch)
tree083e8e91622221185a28fd50754abc2f86b1df43 /plip/test/test_metal_coordination.py
initial commit
Diffstat (limited to 'plip/test/test_metal_coordination.py')
-rw-r--r--plip/test/test_metal_coordination.py132
1 files changed, 132 insertions, 0 deletions
diff --git a/plip/test/test_metal_coordination.py b/plip/test/test_metal_coordination.py
new file mode 100644
index 0000000..424b8df
--- /dev/null
+++ b/plip/test/test_metal_coordination.py
@@ -0,0 +1,132 @@
+# coding=utf-8
+"""
+Protein-Ligand Interaction Profiler - Analyze and visualize protein-ligand interactions in PDB files.
+test_metal_coordination.py - Unit Tests for Metal Coordination.
+"""
+
+
+import unittest
+from plip.structure.preparation import PDBComplex
+
+
+class MetalCoordinationTest(unittest.TestCase):
+ """Checks predictions against literature-validated interactions for metal coordination."""
+
+ ###############################################
+ # Literature-validated cases from publication #
+ ###############################################
+
+ def test_1rmd(self):
+ """Zinc binding sites in RAG1 dimerization domain (1rmd)
+ Reference: Harding. The architecture of metal coordination groups in proteins. (2004), Fig. 1a
+ """
+
+ tmpmol = PDBComplex()
+ tmpmol.load_pdb('./pdb/1rmd.pdb')
+ bsid = 'ZN:A:119'
+ for ligand in tmpmol.ligands:
+ if ':'.join([ligand.hetid, ligand.chain, str(ligand.position)]) == bsid:
+ tmpmol.characterize_complex(ligand)
+ s = tmpmol.interaction_sets[bsid]
+ # Coordination by three cysteines and one histidine of the protein
+ metalres = [mres.restype for mres in s.metal_complexes]
+ self.assertEqual(metalres.count('CYS'), 3)
+ self.assertEqual(metalres.count('HIS'), 1)
+ # Zn atom with tetrahedral geometry (coordination number 4)
+ self.assertEqual(s.metal_complexes[0].coordination_num, 4)
+ self.assertEqual(s.metal_complexes[0].geometry, 'tetrahedral')
+
+ def test_1rla(self):
+ """Rat liver arginase, a binuclear manganese metalloenzyme (1rmd)
+ Reference: Harding. The architecture of metal coordination groups in proteins. (2004), Fig. 1b
+ """
+
+ tmpmol = PDBComplex()
+ tmpmol.load_pdb('./pdb/1rla.pdb')
+ bsid = 'MN:A:500'
+ for ligand in tmpmol.ligands:
+ if ':'.join([ligand.hetid, ligand.chain, str(ligand.position)]) == bsid:
+ tmpmol.characterize_complex(ligand)
+ s = tmpmol.interaction_sets[bsid]
+ # Coordination by one histidine, three aspartic acid residues, and one water molecule
+ metalres = [mres.restype for mres in s.metal_complexes]
+ self.assertEqual(metalres.count('HIS'), 1)
+ self.assertEqual(metalres.count('ASP'), 3)
+ self.assertEqual(metalres.count('HOH'), 1)
+ # Mn atom with square pyramidal geometry (coordination number 5)
+ self.assertEqual(s.metal_complexes[0].coordination_num, 5)
+ self.assertEqual(s.metal_complexes[0].geometry, 'square.pyramidal')
+
+ def test_1het(self):
+ """Liver alcohol deshydrogenase (1het)
+ Reference: Harding. The architecture of metal coordination groups in proteins. (2004), Fig. 2
+ """
+
+ tmpmol = PDBComplex()
+ tmpmol.load_pdb('./pdb/1het.pdb')
+ bsid = 'ZN:A:401'
+ for ligand in tmpmol.ligands:
+ if ':'.join([ligand.hetid, ligand.chain, str(ligand.position)]) == bsid:
+ tmpmol.characterize_complex(ligand)
+ s = tmpmol.interaction_sets[bsid]
+ # Coordination by four cysteines
+ metalres = [mres.restype + str(mres.resnr) for mres in s.metal_complexes]
+ self.assertEqual(set(metalres), {'CYS97', 'CYS100', 'CYS103', 'CYS111'})
+ # Zn atom with tetrahedral geometry (coordination number 4)
+ self.assertEqual(s.metal_complexes[0].coordination_num, 4)
+ self.assertEqual(s.metal_complexes[0].geometry, 'tetrahedral')
+
+ def test_1vfy(self):
+ """Phosphatidylinositol-3-phosphate binding FYVE domain of VPS27P protein (1vfy)
+ Reference: Harding. The architecture of metal coordination groups in proteins. (2004), Fig. 5
+ """
+
+ tmpmol = PDBComplex()
+ tmpmol.load_pdb('./pdb/1vfy.pdb')
+ bsid = 'ZN:A:300'
+ for ligand in tmpmol.ligands:
+ if ':'.join([ligand.hetid, ligand.chain, str(ligand.position)]) == bsid:
+ tmpmol.characterize_complex(ligand)
+ s = tmpmol.interaction_sets[bsid]
+ # Coordination by four cysteines
+ metalres = [mres.restype for mres in s.metal_complexes]
+ self.assertEqual(set(metalres), {'CYS'})
+ # Zn atom with tetrahedral geometry (coordination number 4)
+ self.assertEqual(s.metal_complexes[0].coordination_num, 4)
+ self.assertEqual(s.metal_complexes[0].geometry, 'tetrahedral')
+
+ def test_2pvb(self):
+ """Pike parvalbumin binding calcium (2pvb)
+ Reference: Harding. The architecture of metal coordination groups in proteins. (2004), Fig. 6
+ """
+
+ tmpmol = PDBComplex()
+ tmpmol.load_pdb('./pdb/2pvb.pdb')
+ bsid = 'CA:A:110'
+ for ligand in tmpmol.ligands:
+ if ':'.join([ligand.hetid, ligand.chain, str(ligand.position)]) == bsid:
+ tmpmol.characterize_complex(ligand)
+ s = tmpmol.interaction_sets[bsid]
+ # Ca atom with square pyramidal geometry (coordination number 5)
+ self.assertEqual(s.metal_complexes[0].coordination_num, 5)
+ self.assertEqual(s.metal_complexes[0].geometry, 'square.pyramidal')
+
+ def test_2q8q(self):
+ """Crystal Structure of S. aureus IsdE complexed with heme (2q8q)
+ Reference: Grigg et al. Heme coordination by Staphylococcus aureus IsdE. (2007)
+ """
+
+ tmpmol = PDBComplex()
+ tmpmol.load_pdb('./pdb/2q8q.pdb')
+ bsid = 'HEM:A:300'
+ for ligand in tmpmol.ligands:
+ if ':'.join([ligand.hetid, ligand.chain, str(ligand.position)]) == bsid:
+ tmpmol.characterize_complex(ligand)
+ s = tmpmol.interaction_sets[bsid]
+ # Coordination by four nitrogens of heme itself and one additional histidine from the protein
+ metalres = [mres.restype for mres in s.metal_complexes]
+ self.assertEqual(metalres.count('HEM'), 4)
+ self.assertEqual(metalres.count('HIS'), 1)
+ # Fe atom with square pyramidal geometry (coordination number 5)
+ self.assertEqual(s.metal_complexes[0].coordination_num, 5)
+ self.assertEqual(s.metal_complexes[0].geometry, 'square.pyramidal')