From 87fd24b03a73a65df04b2f0ed9f02f8085d795b6 Mon Sep 17 00:00:00 2001 From: Milot Mirdita Date: Thu, 6 Feb 2025 16:16:48 +0900 Subject: [PATCH] Fix LDDT becoming NaN for residues with very large distances #419 --- src/commons/LDDT.h | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/commons/LDDT.h b/src/commons/LDDT.h index 1c0939e5..8cc754fe 100644 --- a/src/commons/LDDT.h +++ b/src/commons/LDDT.h @@ -100,15 +100,20 @@ class LDDTCalculator { scoreLength = 0; } LDDTScoreResult(float *reduce_score, int alignLength) { - scoreLength = alignLength; if(perCaLddtScore) { delete[] perCaLddtScore; } - perCaLddtScore = new float[scoreLength]; + perCaLddtScore = new float[alignLength]; float sum = 0.0; - for(int i = 0; i < scoreLength; i++) { - sum += reduce_score[i]; - perCaLddtScore[i] = reduce_score[i]; + scoreLength = alignLength; + for(int i = 0; i < alignLength; i++) { + if (std::isnan(reduce_score[i])) { + scoreLength = scoreLength - 1; + perCaLddtScore[i] = 0; + } else { + sum += reduce_score[i]; + perCaLddtScore[i] = reduce_score[i]; + } } avgLddtScore = (double)(sum/(float)scoreLength); }