diff --git a/exomiser-cli/CHANGELOG.md b/exomiser-cli/CHANGELOG.md
index 15659a4e8..618ae1dc9 100644
--- a/exomiser-cli/CHANGELOG.md
+++ b/exomiser-cli/CHANGELOG.md
@@ -1,5 +1,13 @@
# The Exomiser Command Line Executable - Changelog
+## 14.0.2 2024-09-20
+
+- Fix for issue #571. This is a bug-fix release to prevent erroneous assignment of `PVS1` to recessive-compatible variants in LOF-tolerant genes.
+
+## 14.0.1 2024-09-03
+
+- Fix for Issue #565. This is a patch release to prevent a possible ArrayIndexOutOfBoundsException being thrown when outputting the variants TSV file. There are no other changes.
+
## 14.0.0 2024-02-29
- Minimum Java version is now **Java 17**
diff --git a/exomiser-cli/pom.xml b/exomiser-cli/pom.xml
index 8dfbafcae..13caf5017 100644
--- a/exomiser-cli/pom.xml
+++ b/exomiser-cli/pom.xml
@@ -32,7 +32,7 @@
org.monarchinitiative.exomiser
exomiser
- 14.0.0
+ 14.0.2
diff --git a/exomiser-core/CHANGELOG.md b/exomiser-core/CHANGELOG.md
index a528ffc25..ff2282600 100644
--- a/exomiser-core/CHANGELOG.md
+++ b/exomiser-core/CHANGELOG.md
@@ -1,5 +1,13 @@
# The Exomiser - Core Library Changelog
+## 14.0.2 2024-09-20
+
+- Fix for issue #571. This is a bug-fix release to prevent erroneous assignment of `PVS1` to recessive-compatible variants in LOF-tolerant genes.
+
+## 14.0.1 2024-09-03
+
+- Fix for Issue #565. This is a patch release to prevent a possible ArrayIndexOutOfBoundsException being thrown when outputting the variants TSV file. There are no other changes.
+
## 14.0.0 2024-02-29
This release **requires data version >= 2402** and **Java version >= 17** (the previous LTS release).
diff --git a/exomiser-core/pom.xml b/exomiser-core/pom.xml
index 55135dc45..550715ad8 100644
--- a/exomiser-core/pom.xml
+++ b/exomiser-core/pom.xml
@@ -30,7 +30,7 @@
org.monarchinitiative.exomiser
exomiser
- 14.0.0
+ 14.0.2
diff --git a/exomiser-core/src/main/java/org/monarchinitiative/exomiser/core/analysis/util/acmg/Acmg2015EvidenceAssigner.java b/exomiser-core/src/main/java/org/monarchinitiative/exomiser/core/analysis/util/acmg/Acmg2015EvidenceAssigner.java
index 78d3466ce..8ddb92860 100644
--- a/exomiser-core/src/main/java/org/monarchinitiative/exomiser/core/analysis/util/acmg/Acmg2015EvidenceAssigner.java
+++ b/exomiser-core/src/main/java/org/monarchinitiative/exomiser/core/analysis/util/acmg/Acmg2015EvidenceAssigner.java
@@ -237,10 +237,7 @@ private void assignPVS1(AcmgEvidence.Builder acmgEvidenceBuilder, VariantEvaluat
// Should this be using the hasCompatibleDiseaseMatches variable?
boolean inGeneWithKnownDiseaseAssociations = !knownDiseases.isEmpty();
if (inGeneWithKnownDiseaseAssociations && isLossOfFunctionEffect(variantEvaluation.getVariantEffect())
- && (modeOfInheritance == ModeOfInheritance.ANY
- || compatibleWithRecessive(modeOfInheritance)
- || compatibleWithDominant(modeOfInheritance) && (geneContraint != null && geneContraint.isLossOfFunctionIntolerant())
- )
+ && (geneContraint != null && geneContraint.isLossOfFunctionIntolerant())
) {
if (variantEvaluation.hasTranscriptAnnotations()) {
TranscriptAnnotation transcriptAnnotation = variantEvaluation.getTranscriptAnnotations().get(0);
diff --git a/exomiser-core/src/main/java/org/monarchinitiative/exomiser/core/model/frequency/FrequencyData.java b/exomiser-core/src/main/java/org/monarchinitiative/exomiser/core/model/frequency/FrequencyData.java
index 6c11dd277..8b3cb47da 100644
--- a/exomiser-core/src/main/java/org/monarchinitiative/exomiser/core/model/frequency/FrequencyData.java
+++ b/exomiser-core/src/main/java/org/monarchinitiative/exomiser/core/model/frequency/FrequencyData.java
@@ -324,7 +324,7 @@ public float maxFreq() {
@JsonIgnore
@Nullable
public Frequency maxFrequency() {
- return this.size == 0 ? null : frequency(maxSource);
+ return maxSource == -1 ? null : frequency(maxSource);
}
/**
@@ -454,10 +454,11 @@ public Builder addFrequency(FrequencySource frequencySource, int ac, int an, int
*/
private Builder addFrequency(FrequencySource frequencySource, float frequency, int ac, int an, int homCount) {
frequencySources[frequencySource.ordinal()] = frequencySource;
- frequencyData[frequencySource.ordinal() * WORD_SIZE + FREQ_OFFSET] = frequency;
- frequencyData[frequencySource.ordinal() * WORD_SIZE + AC_OFFSET] = ac;
- frequencyData[frequencySource.ordinal() * WORD_SIZE + AN_OFFSET] = an;
- frequencyData[frequencySource.ordinal() * WORD_SIZE + HOM_OFFSET] = homCount;
+ int freqIndex = frequencySource.ordinal() * WORD_SIZE;
+ frequencyData[freqIndex + FREQ_OFFSET] = frequency;
+ frequencyData[freqIndex + AC_OFFSET] = ac;
+ frequencyData[freqIndex + AN_OFFSET] = an;
+ frequencyData[freqIndex + HOM_OFFSET] = homCount;
return this;
}
@@ -517,10 +518,12 @@ public FrequencyData build() {
FrequencySource source = values[i];
if (frequencySources[source.ordinal()] != null) {
sources[dataPos] = source;
- data[dataPos * WORD_SIZE + FREQ_OFFSET] = frequencyData[source.ordinal() * WORD_SIZE + FREQ_OFFSET];
- data[dataPos * WORD_SIZE + AC_OFFSET] = frequencyData[source.ordinal() * WORD_SIZE + AC_OFFSET];
- data[dataPos * WORD_SIZE + AN_OFFSET] = frequencyData[source.ordinal() * WORD_SIZE + AN_OFFSET];
- data[dataPos * WORD_SIZE + HOM_OFFSET] = frequencyData[source.ordinal() * WORD_SIZE + HOM_OFFSET];
+ int dataIndex = dataPos * WORD_SIZE;
+ int freqIndex = source.ordinal() * WORD_SIZE;
+ data[dataIndex + FREQ_OFFSET] = frequencyData[freqIndex + FREQ_OFFSET];
+ data[dataIndex + AC_OFFSET] = frequencyData[freqIndex + AC_OFFSET];
+ data[dataIndex + AN_OFFSET] = frequencyData[freqIndex + AN_OFFSET];
+ data[dataIndex + HOM_OFFSET] = frequencyData[freqIndex + HOM_OFFSET];
dataPos++;
}
}
diff --git a/exomiser-core/src/test/java/org/monarchinitiative/exomiser/core/analysis/util/acmg/Acmg2015EvidenceAssignerTest.java b/exomiser-core/src/test/java/org/monarchinitiative/exomiser/core/analysis/util/acmg/Acmg2015EvidenceAssignerTest.java
index 79f5d7853..a60df8c2e 100644
--- a/exomiser-core/src/test/java/org/monarchinitiative/exomiser/core/analysis/util/acmg/Acmg2015EvidenceAssignerTest.java
+++ b/exomiser-core/src/test/java/org/monarchinitiative/exomiser/core/analysis/util/acmg/Acmg2015EvidenceAssignerTest.java
@@ -103,7 +103,7 @@ void testAssignsPVS1() {
"MALE, X_RECESSIVE, X_RECESSIVE, true",
"FEMALE, X_RECESSIVE, X_RECESSIVE, true",
- "UNKNOWN, X_RECESSIVE, X_RECESSIVE, false",
+ "UNKNOWN, X_RECESSIVE, X_RECESSIVE, true",
"MALE, X_DOMINANT, X_DOMINANT, true",
"FEMALE, X_DOMINANT, X_DOMINANT, true",
diff --git a/exomiser-core/src/test/java/org/monarchinitiative/exomiser/core/model/frequency/FrequencyDataTest.java b/exomiser-core/src/test/java/org/monarchinitiative/exomiser/core/model/frequency/FrequencyDataTest.java
index 1f09347aa..8db886462 100644
--- a/exomiser-core/src/test/java/org/monarchinitiative/exomiser/core/model/frequency/FrequencyDataTest.java
+++ b/exomiser-core/src/test/java/org/monarchinitiative/exomiser/core/model/frequency/FrequencyDataTest.java
@@ -26,12 +26,15 @@
package org.monarchinitiative.exomiser.core.model.frequency;
+import org.h2.mvstore.MVStore;
+import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
+import org.monarchinitiative.exomiser.core.genome.dao.serialisers.MvStoreUtil;
+import org.monarchinitiative.exomiser.core.model.AlleleProtoAdaptor;
+import org.monarchinitiative.exomiser.core.proto.AlleleProto;
+import org.monarchinitiative.exomiser.core.proto.AlleleProtoFormatter;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
@@ -287,6 +290,17 @@ public void testGetMaxFrequencyWithData() {
assertThat(instance.maxFrequency(), equalTo(maxFrequency));
}
+ @Test
+ public void testGetMaxFrequencyWhenZeroData() {
+ Frequency maxFrequency = Frequency.of(GNOMAD_E_AFR, 0, 1000, 0);
+ Frequency minFrequency = Frequency.of(TOPMED, 0f);
+ FrequencyData instance = FrequencyData.of("rs545662810", minFrequency, maxFrequency);
+
+ assertThat(instance.maxFrequency(), equalTo(null));
+ assertThat(instance.maxFreq(), equalTo(0f));
+ assertThat(instance.frequencies(), equalTo(List.of(minFrequency, maxFrequency)));
+ }
+
@Test
public void testHasFrequencyOverPercentageValue() {
float maxFreq = 0.05f;
@@ -482,12 +496,12 @@ void floatArray() {
var an = 10000;
var hom = 10;
var af = Frequency.percentageFrequency(ac, an);
- System.out.println("AF=" + af);
+
data[0] = (float) ac;
data[1] = (float) an;
data[2] = (float) hom;
data[3] = (float) af;
- System.out.println("dataAF=" + data[3]);
+
assertThat(Frequency.percentageFrequency((int) data[0], (int) data[1]), equalTo((float) data[3]));
}
diff --git a/exomiser-data-genome/pom.xml b/exomiser-data-genome/pom.xml
index 8e758ec44..198882fc5 100644
--- a/exomiser-data-genome/pom.xml
+++ b/exomiser-data-genome/pom.xml
@@ -31,7 +31,7 @@
org.monarchinitiative.exomiser
exomiser
- 14.0.0
+ 14.0.2
diff --git a/exomiser-data-phenotype/pom.xml b/exomiser-data-phenotype/pom.xml
index 888a26cd9..79034b9f6 100644
--- a/exomiser-data-phenotype/pom.xml
+++ b/exomiser-data-phenotype/pom.xml
@@ -31,7 +31,7 @@
org.monarchinitiative.exomiser
exomiser
- 14.0.0
+ 14.0.2
diff --git a/exomiser-rest-prioritiser/pom.xml b/exomiser-rest-prioritiser/pom.xml
index 200bc2409..410424d28 100644
--- a/exomiser-rest-prioritiser/pom.xml
+++ b/exomiser-rest-prioritiser/pom.xml
@@ -27,7 +27,7 @@
org.monarchinitiative.exomiser
exomiser
- 14.0.0
+ 14.0.2
exomiser-rest-prioritiser
diff --git a/exomiser-spring-boot-autoconfigure/pom.xml b/exomiser-spring-boot-autoconfigure/pom.xml
index f36eff528..f7b6387dc 100644
--- a/exomiser-spring-boot-autoconfigure/pom.xml
+++ b/exomiser-spring-boot-autoconfigure/pom.xml
@@ -35,7 +35,7 @@
org.monarchinitiative.exomiser
exomiser
- 14.0.0
+ 14.0.2
diff --git a/exomiser-spring-boot-starter/pom.xml b/exomiser-spring-boot-starter/pom.xml
index 92513d85f..c7c045e11 100644
--- a/exomiser-spring-boot-starter/pom.xml
+++ b/exomiser-spring-boot-starter/pom.xml
@@ -28,7 +28,7 @@
org.monarchinitiative.exomiser
exomiser
- 14.0.0
+ 14.0.2
exomiser-spring-boot-starter
diff --git a/exomiser-spring-boot-test/pom.xml b/exomiser-spring-boot-test/pom.xml
index 11a6ee2cd..1b4491c94 100644
--- a/exomiser-spring-boot-test/pom.xml
+++ b/exomiser-spring-boot-test/pom.xml
@@ -27,7 +27,7 @@
org.monarchinitiative.exomiser
exomiser
- 14.0.0
+ 14.0.2
exomiser-spring-boot-test
diff --git a/exomiser-web/pom.xml b/exomiser-web/pom.xml
index 47e0d64ef..5adf01eee 100644
--- a/exomiser-web/pom.xml
+++ b/exomiser-web/pom.xml
@@ -31,7 +31,7 @@
org.monarchinitiative.exomiser
exomiser
- 14.0.0
+ 14.0.2
diff --git a/phenix-repository/pom.xml b/phenix-repository/pom.xml
index 8fa671333..b3bfd5633 100644
--- a/phenix-repository/pom.xml
+++ b/phenix-repository/pom.xml
@@ -7,7 +7,7 @@
org.monarchinitiative.exomiser
exomiser
- 14.0.0
+ 14.0.2
phenix-repository
diff --git a/pom.xml b/pom.xml
index 614a3c406..ad2622e3a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
org.monarchinitiative.exomiser
exomiser
- 14.0.0
+ 14.0.2
pom
exomiser