From f5efafc7748ac323f3ca27647a001948c28e4b8e Mon Sep 17 00:00:00 2001 From: Gabriel Studer <gabriel.studer@unibas.ch> Date: Tue, 31 Oct 2023 13:49:54 +0100 Subject: [PATCH] Scoring: add number of native and model contacts as attributes to Scorer --- actions/ost-compare-structures | 2 ++ modules/mol/alg/pymod/scoring.py | 32 +++++++++++++++++++++++++++----- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/actions/ost-compare-structures b/actions/ost-compare-structures index f7021ffd9..9dacd7786 100644 --- a/actions/ost-compare-structures +++ b/actions/ost-compare-structures @@ -700,6 +700,8 @@ def _Process(model, reference, args): out["fnat"] = scorer.fnat out["irmsd"] = scorer.irmsd out["lrmsd"] = scorer.lrmsd + out["nnat"] = scorer.nnat + out["nmdl"] = scorer.nmdl out["dockq_ave"] = scorer.dockq_ave out["dockq_wave"] = scorer.dockq_wave out["dockq_ave_full"] = scorer.dockq_ave_full diff --git a/modules/mol/alg/pymod/scoring.py b/modules/mol/alg/pymod/scoring.py index 54dba0937..45ccb439e 100644 --- a/modules/mol/alg/pymod/scoring.py +++ b/modules/mol/alg/pymod/scoring.py @@ -289,6 +289,8 @@ class Scorer: self._fnonnat = None self._irmsd = None self._lrmsd = None + self._nnat = None + self._nmdl = None self._dockq_scores = None self._dockq_ave = None self._dockq_wave = None @@ -953,6 +955,26 @@ class Scorer: self._compute_dockq_scores() return self._fnat + @property + def nnat(self): + """ N native contacts for interfaces in :attr:`~dockq_interfaces` + + :class:`list` of :class:`int` + """ + if self._nnat is None: + self._compute_dockq_scores() + return self._nnat + + @property + def nmdl(self): + """ N model contacts for interfaces in :attr:`~dockq_interfaces` + + :class:`list` of :class:`int` + """ + if self._nmdl is None: + self._compute_dockq_scores() + return self._nmdl + @property def fnonnat(self): """ fnonnat scores for interfaces in :attr:`~dockq_interfaces` @@ -1506,9 +1528,8 @@ class Scorer: self._fnonnat = list() self._irmsd = list() self._lrmsd = list() - - # keep track of native counts for weights in dockq_wave/dockq_wave_full - native_counts = list() + self._nnat = list() + self._nmdl = list() dockq_alns = dict() for aln in self.aln: @@ -1531,7 +1552,8 @@ class Scorer: self._irmsd.append(res["irmsd"]) self._lrmsd.append(res["lrmsd"]) self._dockq_scores.append(res["DockQ"]) - native_counts.append(res["nnat"]) + self._nnat.append(res["nnat"]) + self._nmdl.append(res["nmdl"]) # keep track of native counts in target interfaces which are # not covered in model in order to compute @@ -1554,7 +1576,7 @@ class Scorer: # - average weighted by native_contacts # - the two above including nonmapped_contact_interfaces => set DockQ to 0.0 scores = np.array([self._dockq_scores]) - weights = np.array([native_counts]) + weights = np.array([self._nnat]) if len(scores) > 0: self._dockq_ave = np.mean(scores) else: -- GitLab