From 44959421d8f78d7f8da256e3ede53dd10527b716 Mon Sep 17 00:00:00 2001 From: Dror Kessler Date: Tue, 30 May 2023 10:50:10 +0100 Subject: [PATCH] X_FILTERED_COUNT the number of reads in the locus that pass the FeatureMap filters, regardless of whether the considered base matches the reference or not --- .../tools/walkers/featuremapping/FeatureMapper.java | 8 +++++++- .../walkers/featuremapping/FlowFeatureMapper.java | 4 ++-- .../tools/walkers/featuremapping/SNVMapper.java | 12 ++++++------ .../hellbender/utils/read/FlowBasedRead.java | 6 +++--- .../featureMapping/snv_feature_mapper_output.vcf | 4 ++-- .../featureMapping/snv_feature_mapper_output.vcf.idx | 2 +- .../snv_feature_mapper_smq_all_output.vcf | 4 ++-- .../snv_feature_mapper_smq_all_output.vcf.idx | 2 +- .../featureMapping/snv_feature_mapper_smq_output.vcf | 4 ++-- .../snv_feature_mapper_smq_output.vcf.idx | 2 +- 10 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/broadinstitute/hellbender/tools/walkers/featuremapping/FeatureMapper.java b/src/main/java/org/broadinstitute/hellbender/tools/walkers/featuremapping/FeatureMapper.java index 3845620294e..0a64d6d78dd 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/walkers/featuremapping/FeatureMapper.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/walkers/featuremapping/FeatureMapper.java @@ -7,6 +7,12 @@ public interface FeatureMapper { + enum FilterStatus { + None, + Filtered, + NoFeatureAndFiltered + }; + void forEachOnRead(GATKRead read, ReferenceContext referenceContext, Consumer action); - boolean noFeatureButFilterAt(GATKRead read, ReferenceContext referenceContext, int start); + FilterStatus noFeatureButFilterAt(GATKRead read, ReferenceContext referenceContext, int start); } diff --git a/src/main/java/org/broadinstitute/hellbender/tools/walkers/featuremapping/FlowFeatureMapper.java b/src/main/java/org/broadinstitute/hellbender/tools/walkers/featuremapping/FlowFeatureMapper.java index 669d97480bb..b3ddc3e21b6 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/walkers/featuremapping/FlowFeatureMapper.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/walkers/featuremapping/FlowFeatureMapper.java @@ -161,7 +161,7 @@ protected static class MappedFeature implements Comparable { byte[] readBases; byte[] refBases; int readBasesOffset; // offset of read bases array - int start; // location (on rerence) + int start; // location (on reference) int offsetDelta; double score; int readCount; @@ -405,7 +405,7 @@ private void enrichFeature(final MappedFeature fr) { for ( ReadContext rc : readQueue ) { if ( rc.read.contains(loc) ) { fr.readCount++; - if ( mapper.noFeatureButFilterAt(rc.read, rc.referenceContext, fr.start) ) { + if ( mapper.noFeatureButFilterAt(rc.read, rc.referenceContext, fr.start) == FeatureMapper.FilterStatus.Filtered ) { fr.filteredCount++; } } diff --git a/src/main/java/org/broadinstitute/hellbender/tools/walkers/featuremapping/SNVMapper.java b/src/main/java/org/broadinstitute/hellbender/tools/walkers/featuremapping/SNVMapper.java index 89ec9d65876..05c952c317a 100644 --- a/src/main/java/org/broadinstitute/hellbender/tools/walkers/featuremapping/SNVMapper.java +++ b/src/main/java/org/broadinstitute/hellbender/tools/walkers/featuremapping/SNVMapper.java @@ -222,7 +222,7 @@ private int calcSmq(final byte[] quals, int from, int to, boolean median) { } } - public boolean noFeatureButFilterAt(GATKRead read, ReferenceContext referenceContext, int start) { + public FilterStatus noFeatureButFilterAt(GATKRead read, ReferenceContext referenceContext, int start) { // access bases final byte[] bases = read.getBasesNoCopy(); @@ -245,7 +245,7 @@ public boolean noFeatureButFilterAt(GATKRead read, ReferenceContext referenceCon // break out if not enough clearing if ( (start < referenceContext.getStart() + refOfs + identBefore) || (start >= referenceContext.getStart() + refOfs + length - identAfter) ) - return false; + return FilterStatus.Filtered; int delta = start - (referenceContext.getStart() + refOfs); readOfs += delta; @@ -269,10 +269,10 @@ public boolean noFeatureButFilterAt(GATKRead read, ReferenceContext referenceCon continue; } - // this is it! no feature but filtred in - return true; + // this is it! no feature but filtered in + return FilterStatus.NoFeatureAndFiltered; } else - return false; + return FilterStatus.Filtered; } else { @@ -287,7 +287,7 @@ public boolean noFeatureButFilterAt(GATKRead read, ReferenceContext referenceCon }; // if here, false - return false; + return FilterStatus.None; } } diff --git a/src/main/java/org/broadinstitute/hellbender/utils/read/FlowBasedRead.java b/src/main/java/org/broadinstitute/hellbender/utils/read/FlowBasedRead.java index 4e2283040a4..75a30c2a8d3 100644 --- a/src/main/java/org/broadinstitute/hellbender/utils/read/FlowBasedRead.java +++ b/src/main/java/org/broadinstitute/hellbender/utils/read/FlowBasedRead.java @@ -591,11 +591,11 @@ public void applyBaseClipping(final int clipLeftBase, final int clipRightBase, b private void applyClipping(int clipLeft, final int leftHmerClip, int clipRight, final int rightHmerClip, final boolean spread){ if ((clipLeft < 0) || (clipRight < 0) || (clipLeft >= getKeyLength() ) || ( clipRight >= getKeyLength())) { - throw new IllegalStateException("Weird read clip calculated"); + throw new IllegalStateException(String.format("Weird read clip calculated: left/right/keyLength %d/%d/%d", clipLeft, clipRight, getKeyLength())); } - if ((leftHmerClip < 0) || (rightHmerClip < 0) || (leftHmerClip >= 14 ) || ( rightHmerClip >= 14)) { - throw new IllegalStateException("Weird read clip calculated"); + if ((leftHmerClip < 0) || (rightHmerClip < 0) || (leftHmerClip >= (getMaxHmer() + 2) ) || ( rightHmerClip >= (getMaxHmer() + 2))) { + throw new IllegalStateException(String.format("Weird read clip calculated: left/right/maxHmer+2 %d/%d/%d", leftHmerClip, rightHmerClip, getMaxHmer() + 2)); } final int originalLength = key.length; diff --git a/src/test/resources/large/featureMapping/snv_feature_mapper_output.vcf b/src/test/resources/large/featureMapping/snv_feature_mapper_output.vcf index 0e38d7a23da..49ca7d9f7b8 100644 --- a/src/test/resources/large/featureMapping/snv_feature_mapper_output.vcf +++ b/src/test/resources/large/featureMapping/snv_feature_mapper_output.vcf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4872f7697a9927f9173198484083fac9942bc87e6b4472aaef7afb4219d14082 -size 5045909 +oid sha256:35bc2fec6e49a2d6cdfc6def9f2c2e1b02eeea7e186b659f897bdb2b49f5c486 +size 5051888 diff --git a/src/test/resources/large/featureMapping/snv_feature_mapper_output.vcf.idx b/src/test/resources/large/featureMapping/snv_feature_mapper_output.vcf.idx index f4b651083fd..cd2d3c59194 100644 --- a/src/test/resources/large/featureMapping/snv_feature_mapper_output.vcf.idx +++ b/src/test/resources/large/featureMapping/snv_feature_mapper_output.vcf.idx @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a4b2867f072d4c26181479dbdf5eabfbb68047b3fa5c593900320fe73909aea7 +oid sha256:d22c3d2ada379e4460a7d2da1de1a9903fc7fecbacfa52101993282edb615518 size 120113 diff --git a/src/test/resources/large/featureMapping/snv_feature_mapper_smq_all_output.vcf b/src/test/resources/large/featureMapping/snv_feature_mapper_smq_all_output.vcf index 590d61cddd4..840e53f8408 100644 --- a/src/test/resources/large/featureMapping/snv_feature_mapper_smq_all_output.vcf +++ b/src/test/resources/large/featureMapping/snv_feature_mapper_smq_all_output.vcf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8f49904f7fb6e81e855a27a88311a5ec24ffaf519846303237e468cfc6e538bd -size 6749078 +oid sha256:4245184ac90c7dc1a0968285ddb0878c2a9d46f27b8cc1dd71b11074fd477d6e +size 6755057 diff --git a/src/test/resources/large/featureMapping/snv_feature_mapper_smq_all_output.vcf.idx b/src/test/resources/large/featureMapping/snv_feature_mapper_smq_all_output.vcf.idx index 699bc54393f..ad3b14238db 100644 --- a/src/test/resources/large/featureMapping/snv_feature_mapper_smq_all_output.vcf.idx +++ b/src/test/resources/large/featureMapping/snv_feature_mapper_smq_all_output.vcf.idx @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:74b1ae258840f9fe7aece8b56a2eb0410028cc2916aba6ad119f043c55f5ffaa +oid sha256:bdad1cfb039ec6d61f74a739d889adb65a1920a7a06c1e114522e7f229aacf84 size 120121 diff --git a/src/test/resources/large/featureMapping/snv_feature_mapper_smq_output.vcf b/src/test/resources/large/featureMapping/snv_feature_mapper_smq_output.vcf index e8c137f8946..6d79e8e0d16 100644 --- a/src/test/resources/large/featureMapping/snv_feature_mapper_smq_output.vcf +++ b/src/test/resources/large/featureMapping/snv_feature_mapper_smq_output.vcf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f33b8ae831beb33387667f891c8c056e90bc6372de2616cfa4b142b5ec8776ed -size 5772256 +oid sha256:694325ff66b4f1184593f22b5fc3171f6609e55286763c49b66fe7bc2f68275f +size 5778235 diff --git a/src/test/resources/large/featureMapping/snv_feature_mapper_smq_output.vcf.idx b/src/test/resources/large/featureMapping/snv_feature_mapper_smq_output.vcf.idx index 59dd31304a2..7bca4d3cd51 100644 --- a/src/test/resources/large/featureMapping/snv_feature_mapper_smq_output.vcf.idx +++ b/src/test/resources/large/featureMapping/snv_feature_mapper_smq_output.vcf.idx @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e3837e54bbd2a0319f83ff8acb5390ceb3384b5bb2d034260bbb544f1a89b6ff +oid sha256:0a3dac7c3980303af8f127a4cfcc98343f7e9a8be4755327237f4cdc155c99f2 size 120117