Skip to content

Commit

Permalink
#243 only reference filtering precise variants when then nominal posi…
Browse files Browse the repository at this point in the history
…tion is reference
  • Loading branch information
Daniel Cameron committed Sep 18, 2019
1 parent aaf2ae9 commit 715c594
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 9 deletions.
9 changes: 7 additions & 2 deletions src/main/java/au/edu/wehi/idsv/BreakpointSummary.java
Original file line number Diff line number Diff line change
Expand Up @@ -177,8 +177,13 @@ public boolean couldBeDeletionOfSize(int minSize, int maxSize) {
* Determines whether this breakpoint could just be the reference allele
* @return
*/
public boolean couldBeReferenceAllele() {
return couldBeDeletionOfSize(0, 0);
public boolean couldBeReferenceAllele(boolean isPrecise) {
if (!isPrecise) {
return couldBeDeletionOfSize(0, 0);
} else {
return new BreakpointSummary(referenceIndex, direction, nominal, referenceIndex2, direction2, nominal2)
.couldBeReferenceAllele(false);
}
}
/**
* Gets the nominal position of the variant for variant calling purposes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,8 +131,8 @@ public List<VcfFilter> calculateBreakpointFilters(VariantContextDirectedBreakpoi
// we allow the default output
filters.add(VcfFilter.SMALL_EVENT);
}
if (bp.couldBeReferenceAllele() && call.getUntemplatedSequence().length() == 0) {
// add condition: (IMPRECISE or (nominal is reference))
if (bp.couldBeReferenceAllele(call.isBreakendExact()) && call.getUntemplatedSequence().length() == 0) {
// unhandled edge case: precise only on one side
filters.add(VcfFilter.REFERENCE_ALLELE);
}
if (call.getBreakpointQual() < minScore) {
Expand Down
8 changes: 8 additions & 0 deletions src/test/java/au/edu/wehi/idsv/BreakpointSummaryTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -218,4 +218,12 @@ public void isValid_should_check_both_breakends() {
assertTrue(new BreakpointSummary(0, BWD, 10, 1, FWD, 1).isValid(dict));
assertTrue(new BreakpointSummary(0, BWD, 1, 1, FWD, 10).isValid(dict));
}
@Test
public void couldBeReferenceAllele() {
assertTrue(new BreakpointSummary(0, FWD, 10, 0, BWD, 11).couldBeReferenceAllele(true));
assertTrue(new BreakpointSummary(0, FWD, 10, 0, BWD, 11).couldBeReferenceAllele(false));
// Can't be reference since the nominal position is non-reference
assertFalse(new BreakpointSummary(0, FWD, 6, 5,7, 0, BWD, 8, 7, 9).couldBeReferenceAllele(true));
assertTrue(new BreakpointSummary(0, FWD, 6, 5,7, 0, BWD, 8, 7, 9).couldBeReferenceAllele(false));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import au.edu.wehi.idsv.vcf.VcfSvConstants;
import htsjdk.variant.variantcontext.VariantContextBuilder;
import org.junit.Test;

Expand All @@ -18,17 +19,28 @@

public class VariantCallingConfigurationTest extends TestHelper {
public VariantContextDirectedBreakpoint V(BreakpointSummary bs, String untemplated) {
return V(true, bs, untemplated);
}
public VariantContextDirectedBreakpoint V(boolean precise, BreakpointSummary bs, String untemplated) {
IdsvVariantContextBuilder builder = new IdsvVariantContextBuilder(getContext());
builder.breakpoint(bs, untemplated);
if (!precise) {
builder.attribute(VcfSvConstants.IMPRECISE_KEY, true);
}
return (VariantContextDirectedBreakpoint)builder.make();
}
@Test
public void breakpointFilters_should_filter_reference_allele() {
public void breakpointFilters_should_filter_reference_allele_imprecise() {
VariantCallingConfiguration p = getConfig().getVariantCalling();
assertTrue(p.calculateBreakpointFilters(V(new BreakpointSummary(0, FWD, 150, 100, 200, 0, BWD, 150, 100, 200), "")).contains(VcfFilter.REFERENCE_ALLELE));
assertTrue(p.calculateBreakpointFilters(V(new BreakpointSummary(0, FWD, 1, 1, 1, 0, BWD, 2, 2, 2), "")).contains(VcfFilter.REFERENCE_ALLELE));
assertFalse(p.calculateBreakpointFilters(V(new BreakpointSummary(0, FWD, 1, 1, 1, 0, BWD, 3, 3, 3), "")).contains(VcfFilter.REFERENCE_ALLELE));
assertFalse(p.calculateBreakpointFilters(V(new BreakpointSummary(0, FWD, 1, 1, 1, 0, FWD, 2, 2, 2), "")).contains(VcfFilter.REFERENCE_ALLELE));
assertTrue(p.calculateBreakpointFilters(V(false, new BreakpointSummary(0, FWD, 150, 100, 200, 0, BWD, 150, 100, 200), "")).contains(VcfFilter.REFERENCE_ALLELE));
assertTrue(p.calculateBreakpointFilters(V(false, new BreakpointSummary(0, FWD, 1, 1, 1, 0, BWD, 2, 2, 2), "")).contains(VcfFilter.REFERENCE_ALLELE));
assertFalse(p.calculateBreakpointFilters(V(false, new BreakpointSummary(0, FWD, 1, 1, 1, 0, BWD, 3, 3, 3), "")).contains(VcfFilter.REFERENCE_ALLELE));
assertFalse(p.calculateBreakpointFilters(V(false, new BreakpointSummary(0, FWD, 1, 1, 1, 0, FWD, 2, 2, 2), "")).contains(VcfFilter.REFERENCE_ALLELE));

assertFalse(p.calculateBreakpointFilters(V(true, new BreakpointSummary(0, FWD, 150, 100, 200, 0, BWD, 150, 100, 200), "")).contains(VcfFilter.REFERENCE_ALLELE));
assertTrue(p.calculateBreakpointFilters(V(true, new BreakpointSummary(0, FWD, 1, 1, 1, 0, BWD, 2, 2, 2), "")).contains(VcfFilter.REFERENCE_ALLELE));
assertFalse(p.calculateBreakpointFilters(V(true, new BreakpointSummary(0, FWD, 1, 1, 1, 0, BWD, 3, 3, 3), "")).contains(VcfFilter.REFERENCE_ALLELE));
assertFalse(p.calculateBreakpointFilters(V(true, new BreakpointSummary(0, FWD, 1, 1, 1, 0, FWD, 2, 2, 2), "")).contains(VcfFilter.REFERENCE_ALLELE));
}
@Test
public void breakpointFilters_should_filter_insertion() {
Expand Down

0 comments on commit 715c594

Please sign in to comment.