From 857e05d4fa32c8e7cfaec6539281e59ca5686038 Mon Sep 17 00:00:00 2001
From: Xavier Robin <xavier.robin@unibas.ch>
Date: Fri, 26 Apr 2024 11:37:18 +0200
Subject: [PATCH] ligand scoring: prevent infinite loop in assignment

This indicates a bug that must be fixed but at least we don't run
forever.
---
 modules/mol/alg/pymod/ligand_scoring.py | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/modules/mol/alg/pymod/ligand_scoring.py b/modules/mol/alg/pymod/ligand_scoring.py
index 4d8bac436..4c7ebdf54 100644
--- a/modules/mol/alg/pymod/ligand_scoring.py
+++ b/modules/mol/alg/pymod/ligand_scoring.py
@@ -880,6 +880,7 @@ class LigandScorer:
 
         # First only consider top coverage matches.
         min_coverage = np.max(coverage)
+        i = mat1.size + 1
         while min_coverage > 0 and not np.all(np.isnan(mat1)):
             LogVerbose("Looking for matches with coverage >= %s" % min_coverage)
             min_mat1 = LigandScorer._nanmin_nowarn(mat1, coverage < min_coverage)
@@ -909,8 +910,14 @@ class LigandScorer:
 
                 # Recompute min
                 min_mat1 = LigandScorer._nanmin_nowarn(mat1, coverage < min_coverage)
+                if i < 0:
+                    raise Exception("Ligand scoring bug: hit appatent infinite loop!")
+                i -= 1
             # Recompute min_coverage
             min_coverage = np.max(coverage)
+            if i < 0:
+                raise Exception("Ligand scoring bug: hit appatent infinite loop!")
+            i -= 1
         return assignments
 
     @staticmethod
-- 
GitLab