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