From 4d203b895ad71a331969d35d9aa831ef6222add6 Mon Sep 17 00:00:00 2001 From: seru71 Date: Fri, 29 Jan 2016 14:30:43 +0100 Subject: [PATCH] added support for overlapping exons/genes in DepthOfCoverage --- .../walkers/coverage/DepthOfCoverage.java | 40 ++++++++++++------- .../DepthOfCoverageIntegrationTest.java | 2 +- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/coverage/DepthOfCoverage.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/coverage/DepthOfCoverage.java index 96144ce13..1907cbe8f 100644 --- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/coverage/DepthOfCoverage.java +++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/coverage/DepthOfCoverage.java @@ -523,14 +523,16 @@ public class DepthOfCoverage extends LocusWalker geneNamesToStats = new HashMap(); // allows indirect updating of objects in list for ( Pair targetStats : statsByTarget ) { - String gene = getGeneName(targetStats.first,refseqIterator); - if ( geneNamesToStats.keySet().contains(gene) ) { - logger.debug("Merging "+geneNamesToStats.get(gene).toString()+" and "+targetStats.second.getCoverageByAggregationType(DoCOutputType.Partition.sample).toString()); - geneNamesToStats.get(gene).merge(targetStats.second.getCoverageByAggregationType(DoCOutputType.Partition.sample)); - } else { - DepthOfCoverageStats merger = new DepthOfCoverageStats(targetStats.second.getCoverageByAggregationType(DoCOutputType.Partition.sample)); - geneNamesToStats.put(gene,merger); - statsByGene.add(new Pair(gene,merger)); + List genes = getGeneNames(targetStats.first,refseqIterator); + for (String gene : genes) { + if ( geneNamesToStats.keySet().contains(gene) ) { + logger.debug("Merging "+geneNamesToStats.get(gene).toString()+" and "+targetStats.second.getCoverageByAggregationType(DoCOutputType.Partition.sample).toString()); + geneNamesToStats.get(gene).merge(targetStats.second.getCoverageByAggregationType(DoCOutputType.Partition.sample)); + } else { + DepthOfCoverageStats merger = new DepthOfCoverageStats(targetStats.second.getCoverageByAggregationType(DoCOutputType.Partition.sample)); + geneNamesToStats.put(gene,merger); + statsByGene.add(new Pair(gene,merger)); + } } } @@ -574,24 +576,32 @@ public class DepthOfCoverage extends LocusWalker getGeneNames(GenomeLoc target, LocationAwareSeekableRODIterator refseqIterator) { logger.debug("Examining "+target.toString()); - if (refseqIterator == null) { return "UNKNOWN"; } + + List unknown = Arrays.asList("UNKNOWN"); + + if (refseqIterator == null) { return unknown; } RODRecordList annotationList = refseqIterator.seekForward(target); logger.debug("Annotation list is " + (annotationList == null ? "null" : annotationList.getName())); - if (annotationList == null) { return "UNKNOWN"; } + if (annotationList == null) { return unknown; } + List geneNames = new ArrayList(); for(GATKFeature rec : annotationList) { if ( ((RefSeqFeature)rec.getUnderlyingObject()).overlapsExonP(target) ) { logger.debug("We do overlap "+ rec.getUnderlyingObject().toString()); - return ((RefSeqFeature)rec.getUnderlyingObject()).getGeneName(); + geneNames.add(((RefSeqFeature)rec.getUnderlyingObject()).getGeneName()); + } else { + logger.debug("No overlap"); } - logger.debug("No overlap"); } - return "UNKNOWN"; - + if (geneNames.isEmpty()) { geneNames = unknown; } + + return geneNames; + } private LocationAwareSeekableRODIterator initializeRefSeq() { diff --git a/public/gatk-tools-public/src/test/java/org/broadinstitute/gatk/tools/walkers/coverage/DepthOfCoverageIntegrationTest.java b/public/gatk-tools-public/src/test/java/org/broadinstitute/gatk/tools/walkers/coverage/DepthOfCoverageIntegrationTest.java index f25ac3a94..9c421fb0a 100644 --- a/public/gatk-tools-public/src/test/java/org/broadinstitute/gatk/tools/walkers/coverage/DepthOfCoverageIntegrationTest.java +++ b/public/gatk-tools-public/src/test/java/org/broadinstitute/gatk/tools/walkers/coverage/DepthOfCoverageIntegrationTest.java @@ -164,7 +164,7 @@ public class DepthOfCoverageIntegrationTest extends WalkerTest { spec.addAuxFile("a148e50f9db207adfd5d5f0f29eb54d8", baseOutputFile); spec.addAuxFile("7ccd5193a3c035d1cc856cbc89e3daf4", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".sample_cumulative_coverage_counts")); spec.addAuxFile("2efe59c20721ce61bc5b334a26d11720", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".sample_cumulative_coverage_proportions")); - spec.addAuxFile("9194cec953e0fe0b84a681f9bb63ffbe", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".sample_gene_summary")); + spec.addAuxFile("3dd61151e758c1f3c4bd1150b6577b45", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".sample_gene_summary")); spec.addAuxFile("cf62d95ec1f459fbbe35370c3f0ca481", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".sample_interval_statistics")); spec.addAuxFile("b4fcb739b7f9e309e38a7d5e7e4ebb9f", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".sample_interval_summary")); spec.addAuxFile("6bf63f9c62071e850c6f0b6356fb63eb", createTempFileFromBase(baseOutputFile.getAbsolutePath()+".sample_statistics"));