From 48eeff98af71a6709350b7e45e86a491dde08d65 Mon Sep 17 00:00:00 2001 From: Sreenath Sasidharan Nair Date: Wed, 12 Mar 2025 12:50:40 +0000 Subject: [PATCH] fix: Phmmer enhance e-value handling to support both number and string types --- .../flax/biosolr/pdbe/phmmer/Alignment.java | 30 +++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/sequence/phmmer/src/main/java/uk/co/flax/biosolr/pdbe/phmmer/Alignment.java b/sequence/phmmer/src/main/java/uk/co/flax/biosolr/pdbe/phmmer/Alignment.java index ac2ca249..84015a76 100644 --- a/sequence/phmmer/src/main/java/uk/co/flax/biosolr/pdbe/phmmer/Alignment.java +++ b/sequence/phmmer/src/main/java/uk/co/flax/biosolr/pdbe/phmmer/Alignment.java @@ -2,6 +2,7 @@ import javax.json.JsonArray; import javax.json.JsonObject; +import javax.json.JsonValue; public class Alignment { @@ -60,18 +61,37 @@ public Alignment(JsonObject hit) { species = hit.getString("species"); description = hit.getString("desc"); score = Double.parseDouble(hit.getString("score")); - eValue = Double.parseDouble(hit.getString("evalue")); + + JsonValue eValueJSON = hit.get("evalue"); + + if (eValueJSON.getValueType() == JsonValue.ValueType.NUMBER) { + eValue = hit.getJsonNumber("evalue").doubleValue(); + } else if (eValueJSON.getValueType() == JsonValue.ValueType.STRING) { + eValue = Double.parseDouble(hit.getString("evalue")); + } JsonArray domains = hit.getJsonArray("domains"); for (int i = 0; i < domains.size(); ++i) { JsonObject domain = domains.getJsonObject(i); // skip insignificant matches (by ind. eValue) - eValueInd = Double.parseDouble(domain.getString("ievalue")); + JsonValue eValue = domain.get("ievalue"); + if (eValue.getValueType() == JsonValue.ValueType.NUMBER) { + eValueInd = domain.getJsonNumber("ievalue").doubleValue(); + } else if (eValue.getValueType() == JsonValue.ValueType.STRING) { + eValueInd = Double.parseDouble(domain.getString("ievalue")); + } + if (eValueInd >= SIGNIFICANCE_THRESHOLD) continue; - - eValueCond = Double.parseDouble(domain.getString("cevalue")); - + + JsonValue ceValue = domain.get("cevalue"); + + if (ceValue.getValueType() == JsonValue.ValueType.NUMBER) { + eValueCond = domain.getJsonNumber("cevalue").doubleValue(); + } else if (ceValue.getValueType() == JsonValue.ValueType.STRING) { + eValueCond = Double.parseDouble(domain.getString("cevalue")); + } + querySequence = domain.getString("alimodel"); querySequenceStart = domain.getInt("alihmmfrom"); querySequenceEnd = domain.getInt("alihmmto");