added support for overlapping exons/genes in DepthOfCoverage

This commit is contained in:
seru71 2016-01-29 14:30:43 +01:00 committed by Ron Levine
parent 8c15d3ccd8
commit 4d203b895a
2 changed files with 26 additions and 16 deletions

View File

@ -523,14 +523,16 @@ public class DepthOfCoverage extends LocusWalker<Map<DoCOutputType.Partition,Map
Map<String,DepthOfCoverageStats> geneNamesToStats = new HashMap<String,DepthOfCoverageStats>(); // allows indirect updating of objects in list
for ( Pair<GenomeLoc, CoveragePartitioner> 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<String,DepthOfCoverageStats>(gene,merger));
List<String> 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<String,DepthOfCoverageStats>(gene,merger));
}
}
}
@ -574,24 +576,32 @@ public class DepthOfCoverage extends LocusWalker<Map<DoCOutputType.Partition,Map
}
//blatantly stolen from Andrew Kernytsky
private String getGeneName(GenomeLoc target, LocationAwareSeekableRODIterator refseqIterator) {
// edited by Pawel Sztromwasser to support overlap with multiple exons/genes
private List<String> getGeneNames(GenomeLoc target, LocationAwareSeekableRODIterator refseqIterator) {
logger.debug("Examining "+target.toString());
if (refseqIterator == null) { return "UNKNOWN"; }
List<String> 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<String> geneNames = new ArrayList<String>();
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() {

View File

@ -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"));