From dcb7735d3c8cf8254f0bd80b42f827c654961ee0 Mon Sep 17 00:00:00 2001 From: Joel Thibault Date: Wed, 2 Jan 2013 13:46:33 -0500 Subject: [PATCH 1/2] Active Region extensions must stay on contig --- .../traversals/TraverseActiveRegionsUnitTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/public/java/test/org/broadinstitute/sting/gatk/traversals/TraverseActiveRegionsUnitTest.java b/public/java/test/org/broadinstitute/sting/gatk/traversals/TraverseActiveRegionsUnitTest.java index e82dc28e1..4cda1455e 100644 --- a/public/java/test/org/broadinstitute/sting/gatk/traversals/TraverseActiveRegionsUnitTest.java +++ b/public/java/test/org/broadinstitute/sting/gatk/traversals/TraverseActiveRegionsUnitTest.java @@ -241,6 +241,21 @@ public class TraverseActiveRegionsUnitTest extends BaseTest { Assert.assertEquals(intervalStops.size(), 0, "Interval stop location does not match an active region stop location"); } + @Test + public void testActiveRegionExtensionOnContig() { + DummyActiveRegionWalker walker = new DummyActiveRegionWalker(); + + Collection activeRegions = getActiveRegions(walker, intervals).values(); + for (ActiveRegion activeRegion : activeRegions) { + GenomeLoc loc = activeRegion.getExtendedLoc(); + + // Contract: active region extensions must stay on the contig + Assert.assertTrue(loc.getStart() > 0, "Active region extension begins at location " + loc.getStart() + ", past the left end of the contig"); + int refLen = dictionary.getSequence(loc.getContigIndex()).getSequenceLength(); + Assert.assertTrue(loc.getStop() <= refLen, "Active region extension ends at location " + loc.getStop() + ", past the right end of the contig"); + } + } + @Test public void testPrimaryReadMapping() { DummyActiveRegionWalker walker = new DummyActiveRegionWalker(); From c515175313e802bdc7b9e87df6d1498897c2ee1a Mon Sep 17 00:00:00 2001 From: Joel Thibault Date: Wed, 2 Jan 2013 14:10:55 -0500 Subject: [PATCH 2/2] Ensure that active region extensions stay on contig --- .../src/org/broadinstitute/sting/utils/GenomeLocParser.java | 5 +++++ .../sting/utils/activeregion/ActiveRegion.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/public/java/src/org/broadinstitute/sting/utils/GenomeLocParser.java b/public/java/src/org/broadinstitute/sting/utils/GenomeLocParser.java index dbffacfbc..c18eef23f 100644 --- a/public/java/src/org/broadinstitute/sting/utils/GenomeLocParser.java +++ b/public/java/src/org/broadinstitute/sting/utils/GenomeLocParser.java @@ -287,6 +287,11 @@ public final class GenomeLocParser { return new GenomeLoc(contig, index, start, stop); } + public GenomeLoc createGenomeLocOnContig(final String contig, final int start, final int stop) { + GenomeLoc contigLoc = createOverEntireContig(contig); + return new GenomeLoc(contig, getContigIndex(contig), start, stop).intersect(contigLoc); + } + /** * validate a position or interval on the genome as valid * diff --git a/public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRegion.java b/public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRegion.java index 0d12d53cc..c12dfcee9 100644 --- a/public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRegion.java +++ b/public/java/src/org/broadinstitute/sting/utils/activeregion/ActiveRegion.java @@ -31,7 +31,7 @@ public class ActiveRegion implements HasGenomeLocation { this.isActive = isActive; this.genomeLocParser = genomeLocParser; this.extension = extension; - extendedLoc = genomeLocParser.createGenomeLoc(activeRegionLoc.getContig(), activeRegionLoc.getStart() - extension, activeRegionLoc.getStop() + extension); + extendedLoc = genomeLocParser.createGenomeLocOnContig(activeRegionLoc.getContig(), activeRegionLoc.getStart() - extension, activeRegionLoc.getStop() + extension); fullExtentReferenceLoc = extendedLoc; }