From d21601228e428809060158c5fb59a68e9f5b58d3 Mon Sep 17 00:00:00 2001 From: Gabriel Studer <gabriel.studer@unibas.ch> Date: Tue, 29 Aug 2023 15:50:10 +0200 Subject: [PATCH] ICS/IPS scores: guard against 0-divisions --- modules/mol/alg/pymod/contact_score.py | 33 ++++++++++++++++++-------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/modules/mol/alg/pymod/contact_score.py b/modules/mol/alg/pymod/contact_score.py index 256ff4d8f..802a2e7c1 100644 --- a/modules/mol/alg/pymod/contact_score.py +++ b/modules/mol/alg/pymod/contact_score.py @@ -226,12 +226,8 @@ class ContactEntity: hr2.strip("\u0000"))) def _SetupInterfaceResidues(self): - self._interface_residues = dict() + self._interface_residues = {cname: set() for cname in self.chain_names} for k,v in self.contacts.items(): - if k[0] not in self._interface_residues: - self._interface_residues[k[0]] = set() - if k[1] not in self._interface_residues: - self._interface_residues[k[1]] = set() for item in v: self._interface_residues[k[0]].add(item[0]) self._interface_residues[k[1]].add(item[1]) @@ -278,7 +274,10 @@ class ContactScorerResultICS: :type: :class:`int` """ - return self._n_intersection / self._n_mdl_contacts + if self._n_mdl_contacts != 0: + return self._n_intersection / self._n_mdl_contacts + else: + return 0.0 @property def recall(self): @@ -288,7 +287,10 @@ class ContactScorerResultICS: :type: :class:`int` """ - return self._n_intersection / self._n_trg_contacts + if self._n_trg_contacts != 0: + return self._n_intersection / self._n_trg_contacts + else: + return 0.0 @property def ics(self): @@ -300,7 +302,12 @@ class ContactScorerResultICS: """ p = self.precision r = self.recall - return 2*p*r/(p+r) + nominator = p*r + denominator = p + r + if denominator != 0.0: + return 2*nominator/denominator + else: + return 0.0 class ContactScorerResultIPS: """ @@ -337,7 +344,10 @@ class ContactScorerResultIPS: :type: :class:`int` """ - return self._n_intersection / self._n_mdl_int_res + if self._n_mdl_int_res != 0: + return self._n_intersection / self._n_mdl_int_res + else: + return 0.0 @property def recall(self): @@ -348,7 +358,10 @@ class ContactScorerResultIPS: :type: :class:`int` """ - return self._n_intersection / self._n_trg_int_res + if self._n_trg_int_res != 0: + return self._n_intersection / self._n_trg_int_res + else: + return 0.0 @property def ips(self): -- GitLab