Skip to content

Commit

Permalink
Alter PathogenicityData 'get' prefixed methods to remove the 'get' e.…
Browse files Browse the repository at this point in the history
…g. getPredictedPathogenicityScores() is now pathogenicityScores(), getPredictedScore(PathogenicitySource source) -> pathogenicityScore(PathogenicitySource source), getScore() -> pathogenicityScore()
  • Loading branch information
julesjacobsen committed Feb 13, 2024
1 parent 12731b5 commit 099175c
Show file tree
Hide file tree
Showing 18 changed files with 102 additions and 102 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ public AcmgEvidence assignVariantAcmgEvidence(VariantEvaluation variantEvaluatio
assignPP4(acmgEvidenceBuilder, compatibleDiseaseMatches);

PathogenicityData pathogenicityData = variantEvaluation.getPathogenicityData();
ClinVarData clinVarData = variantEvaluation.getPathogenicityData().getClinVarData();
ClinVarData clinVarData = variantEvaluation.getPathogenicityData().clinVarData();
if (!clinVarData.isEmpty()) {
// PP5 "Reputable source recently reports variant as pathogenic, but the evidence is not available to the laboratory to perform an independent evaluation"
assignPP5(acmgEvidenceBuilder, clinVarData);
Expand Down Expand Up @@ -281,7 +281,7 @@ private void assignPM3orBP2(AcmgEvidence.Builder acmgEvidenceBuilder, VariantEva
if (contributingVariants.size() >= 2 && contributingVariants.contains(variantEvaluation)) {
for (VariantEvaluation otherVariant : contributingVariants) {
SampleGenotype otherVariantGenotype = otherVariant.getSampleGenotype(probandId);
ClinVarData otherClinVarData = otherVariant.getPathogenicityData().getClinVarData();
ClinVarData otherClinVarData = otherVariant.getPathogenicityData().clinVarData();
if (otherClinVarData.getPrimaryInterpretation() == ClinVarData.ClinSig.PATHOGENIC && !otherVariant.equals(variantEvaluation)) {
// X = this variant, P = other pathogenic variant
boolean inTrans = inTrans(thisVariantGenotype, otherVariantGenotype);
Expand Down Expand Up @@ -487,7 +487,7 @@ private void assignPP3orBP4(AcmgEvidence.Builder acmgEvidenceBuilder, Pathogenic
// classification and ClinGen recommendations for clinical use of PP3/BP4 criteria"
// https://www.biorxiv.org/content/10.1101/2022.03.17.484479v1
//
var revelScore = pathogenicityData.getPredictedScore(PathogenicitySource.REVEL);
var revelScore = pathogenicityData.pathogenicityScore(PathogenicitySource.REVEL);
if (revelScore != null) {
assignRevelBasedPP3BP4Classification(acmgEvidenceBuilder, revelScore);
} else {
Expand Down Expand Up @@ -538,18 +538,18 @@ else if (revel > 0.183f && revel <= 0.290f) {
private void assignEnsembleBasedPP3BP4Classification(AcmgEvidence.Builder acmgEvidenceBuilder, PathogenicityData pathogenicityData) {
int numBenign = 0;
int numPathogenic = 0;
List<PathogenicityScore> predictedPathogenicityScores = pathogenicityData.getPredictedPathogenicityScores();
for (PathogenicityScore pathogenicityScore : predictedPathogenicityScores) {
List<PathogenicityScore> pathogenicityScores = pathogenicityData.pathogenicityScores();
for (PathogenicityScore pathogenicityScore : pathogenicityScores) {
if (isPathogenic(pathogenicityScore)) {
numPathogenic++;
} else {
numBenign++;
}
}
if (predictedPathogenicityScores.size() > 1 && numPathogenic > numBenign) {
if (pathogenicityScores.size() > 1 && numPathogenic > numBenign) {
acmgEvidenceBuilder.add(PP3);
}
if (predictedPathogenicityScores.size() > 1 && numBenign > numPathogenic) {
if (pathogenicityScores.size() > 1 && numBenign > numPathogenic) {
acmgEvidenceBuilder.add(BP4);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ public PathogenicityData getVariantPathogenicityData(Variant variant, Set<Pathog
}
for (CompletableFuture<PathogenicityData> pathogenicityDataCompletableFuture : futurePathData) {
PathogenicityData pathogenicityData = pathogenicityDataCompletableFuture.join();
allPathScores.addAll(pathogenicityData.getPredictedPathogenicityScores());
allPathScores.addAll(pathogenicityData.pathogenicityScores());
}
defaultPathogenicityData = futureDefaultData.join();
} else {
Expand All @@ -173,7 +173,7 @@ private boolean containsTabixSource(Set<PathogenicitySource> pathogenicitySource
}

private void addAllWantedScores(Set<PathogenicitySource> pathogenicitySources, PathogenicityData defaultPathogenicityData, List<PathogenicityScore> allPathScores) {
for (PathogenicityScore score : defaultPathogenicityData.getPredictedPathogenicityScores()) {
for (PathogenicityScore score : defaultPathogenicityData.pathogenicityScores()) {
if (pathogenicitySources.contains(score.getSource())) {
allPathScores.add(score);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -379,8 +379,8 @@ public float getPathogenicityScore() {
if (whiteListed) {
return 1f;
}
float predictedScore = pathogenicityData.getScore();
float variantEffectScore = VariantEffectPathogenicityScore.getPathogenicityScoreOf(variantEffect);
float predictedScore = pathogenicityData.pathogenicityScore();
float variantEffectScore = VariantEffectPathogenicityScore.pathogenicityScoreOf(variantEffect);
if (this.isSymbolic()) {
// SvAnna scoring https://genomemedicine.biomedcentral.com/articles/10.1186/s13073-022-01046-6/tables/1
// | element contains v
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ public boolean containsFrequencySource(FrequencySource frequencySource) {
}

@Nullable
public Frequency frequencyForSource(FrequencySource source) {
public Frequency frequency(FrequencySource source) {
int i = frequencySourceIndex(source);
return i < 0 ? null : frequency(i);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ private PathogenicityData(ClinVarData clinVarData, Collection<PathogenicityScore
* @return a {@code ClinVarData} object
* @since 10.1.0
*/
public ClinVarData getClinVarData() {
public ClinVarData clinVarData() {
return clinVarData;
}

Expand All @@ -112,7 +112,7 @@ public boolean hasClinVarData() {
return !clinVarData.isEmpty();
}

public List<PathogenicityScore> getPredictedPathogenicityScores() {
public List<PathogenicityScore> pathogenicityScores() {
return new ArrayList<>(pathogenicityScores.values());
}

Expand All @@ -136,27 +136,27 @@ public boolean hasPredictedScore(PathogenicitySource pathogenicitySource) {
* @param pathogenicitySource
* @return
*/
public PathogenicityScore getPredictedScore(PathogenicitySource pathogenicitySource) {
public PathogenicityScore pathogenicityScore(PathogenicitySource pathogenicitySource) {
return pathogenicityScores.get(pathogenicitySource);
}

/**
* @return the predicted pathogenicity score for this data set. The score is ranked from 0 (non-pathogenic) to 1 (highly pathogenic)
*/
public float getScore() {
public float pathogenicityScore() {
if (pathogenicityScores.isEmpty()) {
return VariantEffectPathogenicityScore.NON_PATHOGENIC_SCORE;
}
return getPredictedPathScore();
return maxPredictedPathScore();
}

private float getPredictedPathScore() {
private float maxPredictedPathScore() {
// Once upon a time we used score-specific cutoffs. These are present in the score classes:
// Mutation Taster: >0.95 assumed pathogenic, prediction categories not shown
// Polyphen2 (HVAR): "D" (> 0.956,probably damaging), "P": [0.447-0.955], possibly damaging, and "B", <0.447, benign.
// SIFT: "D"<0.05, damaging and "T">0.05, tolerated
// TODO: re-implement this and add isPredictedPathogenic() to the PathogenicityScore
PathogenicityScore mostPathogenicPredictedScore = getMostPathogenicScore();
PathogenicityScore mostPathogenicPredictedScore = mostPathogenicScore();
if (mostPathogenicPredictedScore != null) {
// As of v12.0.0 scores are normalised internally so SIFT scores no longer need to be inverted here.
return mostPathogenicPredictedScore.getScore();
Expand All @@ -168,7 +168,7 @@ private float getPredictedPathScore() {
* @return The most pathogenic score or null if there are no predicted scores
*/
@Nullable
public PathogenicityScore getMostPathogenicScore() {
public PathogenicityScore mostPathogenicScore() {
// Add filter step using PathogenicityScore::isPredictedPathogenic?
// n.b. here min() is referring to the *first* element in a sorted list, rather than the minimum numeric value
// PathogenicityScore compareTo returns the most pathogenic first e.g. 1.0, 0.9, 0.8 ... which is the reverse of
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ private VariantEffectPathogenicityScore() {
//Uninstantiable. This class should be an enum, but then it doesn't code nicely :(
}

public static float getPathogenicityScoreOf(VariantEffect variantEffect) {
public static float pathogenicityScoreOf(VariantEffect variantEffect) {
switch (variantEffect) {
case SEQUENCE_VARIANT:
return NON_PATHOGENIC_SCORE;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ private List<Object> buildVariantRecord(int rank, VariantEvaluation ve, GeneScor
fields.add(assignment.map(acmgAssignment -> acmgAssignment.disease().getDiseaseId()).orElse(""));
fields.add(assignment.map(acmgAssignment -> acmgAssignment.disease().getDiseaseName()).orElse(""));
PathogenicityData pathogenicityData = ve.getPathogenicityData();
ClinVarData clinVarData = pathogenicityData.getClinVarData();
ClinVarData clinVarData = pathogenicityData.clinVarData();
fields.add(clinVarData.getVariationId());
fields.add(clinVarData.getPrimaryInterpretation());
fields.add(clinVarData.starRating());
Expand All @@ -175,10 +175,10 @@ private List<Object> buildVariantRecord(int rank, VariantEvaluation ve, GeneScor
fields.add(maxFreq == null ? "" : maxFreq.source());
fields.add(maxFreq == null ? "" : maxFreq.frequency());
fields.add(toVcfFreqInfo(frequencyData.frequencies()));
PathogenicityScore maxPath = pathogenicityData.getMostPathogenicScore();
PathogenicityScore maxPath = pathogenicityData.mostPathogenicScore();
fields.add(maxPath == null ? "" : maxPath.getSource());
fields.add(maxPath == null ? "" : maxPath.getScore());
fields.add(toVcfPathInfo(pathogenicityData.getPredictedPathogenicityScores()));
fields.add(toVcfPathInfo(pathogenicityData.pathogenicityScores()));
return fields;
}

Expand Down
8 changes: 4 additions & 4 deletions exomiser-core/src/main/resources/templates/results.html
Original file line number Diff line number Diff line change
Expand Up @@ -378,10 +378,10 @@ <h4>Variant Score: <b
<dd th:each="mostPathogenicScore: ${pathogenicityData.mostPathogenicScore}"
th:text="${#strings.prepend(mostPathogenicScore.score, 'Best Score: ')}">1.00
</dd>
<dd th:if="${#lists.isEmpty(pathogenicityData.predictedPathogenicityScores)}">No
<dd th:if="${#lists.isEmpty(pathogenicityData.pathogenicityScores)}">No
pathogenicity data
</dd>
<dd th:each="pathScore: ${pathogenicityData.predictedPathogenicityScores}"
<dd th:each="pathScore: ${pathogenicityData.pathogenicityScores}"
th:text="${pathScore}">Mutation Taster: 0.999 (P)
</dd>
</dl>
Expand Down Expand Up @@ -519,10 +519,10 @@ <h4>Variant Score: <b
<dd th:each="mostPathogenicScore: ${pathogenicityData.mostPathogenicScore}"
th:text="${#strings.prepend(mostPathogenicScore.score, 'Best Score: ')}">1.00
</dd>
<dd th:if="${#lists.isEmpty(pathogenicityData.predictedPathogenicityScores)}">No
<dd th:if="${#lists.isEmpty(pathogenicityData.pathogenicityScores)}">No
pathogenicity data
</dd>
<dd th:each="pathScore: ${pathogenicityData.predictedPathogenicityScores}"
<dd th:each="pathScore: ${pathogenicityData.pathogenicityScores}"
th:text="${pathScore}">Mutation Taster: 0.999 (P)
</dd>
</dl>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,12 +111,12 @@ public FrequencyData getVariantFrequencyData(Variant variant, Set<FrequencySourc
public PathogenicityData getVariantPathogenicityData(Variant variant, Set<PathogenicitySource> pathogenicitySources) {
PathogenicityData pathData = expectedPathogenicityData.getOrDefault(variant, PathogenicityData.empty());

List<PathogenicityScore> wanted = pathData.getPredictedPathogenicityScores()
List<PathogenicityScore> wanted = pathData.pathogenicityScores()
.stream()
.filter(pathogenicity -> pathogenicitySources.contains(pathogenicity.getSource()))
.collect(Collectors.toList());
.toList();

return PathogenicityData.of(pathData.getClinVarData(), wanted);
return PathogenicityData.of(pathData.clinVarData(), wanted);
}

public static Builder builder() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ public void serviceReturnsSpecifiedPathogenicityDataForMissenseVariant() {
public void serviceReturnsCaddDataForMissenseVariant() {
variant = buildVariantOfType(VariantEffect.MISSENSE_VARIANT);
PathogenicityData result = instance.getVariantPathogenicityData(variant, EnumSet.of(PathogenicitySource.CADD));
assertThat(result, equalTo(PathogenicityData.of(PATH_CLINVAR_DATA, CADD_DATA.getPredictedScore(PathogenicitySource.CADD))));
assertThat(result, equalTo(PathogenicityData.of(PATH_CLINVAR_DATA, CADD_DATA.pathogenicityScore(PathogenicitySource.CADD))));
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ private Consumer<VariantEvaluation> printVariant() {
variantEvaluation.getTranscriptAnnotations().get(0).getHgvsCdna(),
variantEvaluation.getVariantScore(),
variantEvaluation.getFrequencyScore(), variantEvaluation.getFrequencyData().maxFreq(),
variantEvaluation.getPathogenicityScore(), variantEvaluation.getPathogenicityData().getPredictedPathogenicityScores()
variantEvaluation.getPathogenicityScore(), variantEvaluation.getPathogenicityData().pathogenicityScores()
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ void manualDataExplorer() {
if (pathogenicityData.isEmpty()) {
System.out.println("\t-");
} else {
pathogenicityData.getPredictedPathogenicityScores().forEach(path -> System.out.println("\t" + path));
pathogenicityData.pathogenicityScores().forEach(path -> System.out.println("\t" + path));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,6 @@ class SvPathogenicityDaoTest {
void getPathogenicityData(int chr, int start, int end, String alt, int changeLength, ClinVarData.ClinSig expected) {
Variant variant = TestFactory.variantBuilder(chr, start, end, "", alt, changeLength).build();
PathogenicityData result = instance.getPathogenicityData(variant);
assertThat(result.getClinVarData().getPrimaryInterpretation(), equalTo(expected));
assertThat(result.clinVarData().getPrimaryInterpretation(), equalTo(expected));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,7 @@ public void testGetPathogenicityScoreNonMissenseVariantNoPredictions() {
VariantEffect type = VariantEffect.DOWNSTREAM_GENE_VARIANT;
instance = testVariantBuilder().variantEffect(type).build();

float expected = VariantEffectPathogenicityScore.getPathogenicityScoreOf(type);
float expected = VariantEffectPathogenicityScore.pathogenicityScoreOf(type);
assertThat(instance.getPathogenicityScore(), equalTo(expected));
}

Expand All @@ -389,15 +389,15 @@ public void testGetPathogenicityScoreNonMissenseVariantWithPredictions() {
PathogenicityData pathData = PathogenicityData.of(CaddScore.of(1f));
instance = testVariantBuilder().pathogenicityData(pathData).variantEffect(type).build();

assertThat(instance.getPathogenicityScore(), equalTo(pathData.getScore()));
assertThat(instance.getPathogenicityScore(), equalTo(pathData.pathogenicityScore()));
}

@Test
public void testGetPathogenicityScoreMissenseVariantNoPredictions() {
VariantEffect type = VariantEffect.MISSENSE_VARIANT;
instance = testVariantBuilder().variantEffect(type).build();

float expected = VariantEffectPathogenicityScore.getPathogenicityScoreOf(type);
float expected = VariantEffectPathogenicityScore.pathogenicityScoreOf(type);
assertThat(instance.getPathogenicityScore(), equalTo(expected));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,37 +114,37 @@ public void testGetRsId() {

@Test
public void testGetNonExistentFrequency() {
assertThat(EMPTY_DATA.frequencyForSource(THOUSAND_GENOMES), equalTo(null));
assertThat(EMPTY_DATA.frequency(THOUSAND_GENOMES), equalTo(null));
}

@Test
public void testGetDbSnpMaf() {
assertThat(FREQUENCY_DATA.frequencyForSource(THOUSAND_GENOMES), equalTo(DBSNP_PASS));
assertThat(FREQUENCY_DATA.frequency(THOUSAND_GENOMES), equalTo(DBSNP_PASS));
}

@Test
public void testGetEspEaMaf() {
assertThat(FREQUENCY_DATA.frequencyForSource(ESP_EA), equalTo(ESP_EA_PASS));
assertThat(FREQUENCY_DATA.frequency(ESP_EA), equalTo(ESP_EA_PASS));
}

@Test
public void testGetEspAaMaf() {
assertThat(FREQUENCY_DATA.frequencyForSource(ESP_AA), equalTo(ESP_AA_PASS));
assertThat(FREQUENCY_DATA.frequency(ESP_AA), equalTo(ESP_AA_PASS));
}

@Test
public void testGetEspAllMaf() {
assertThat(FREQUENCY_DATA.frequencyForSource(ESP_ALL), equalTo(ESP_ALL_PASS));
assertThat(FREQUENCY_DATA.frequency(ESP_ALL), equalTo(ESP_ALL_PASS));
}

@Test
public void testGetFrequencyForUnavailableSource() {
assertThat(FREQUENCY_DATA.frequencyForSource(GNOMAD_E_NFE), equalTo(null));
assertThat(FREQUENCY_DATA.frequency(GNOMAD_E_NFE), equalTo(null));
}

@Test
public void testGetFrequencyForUnavailableSourceBefore() {
assertThat(FREQUENCY_DATA.frequencyForSource(UNKNOWN), equalTo(null));
assertThat(FREQUENCY_DATA.frequency(UNKNOWN), equalTo(null));
}

@Test
Expand Down
Loading

0 comments on commit 099175c

Please sign in to comment.