added support for overlapping exons/genes in DepthOfCoverage
This commit is contained in:
parent
8c15d3ccd8
commit
4d203b895a
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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"));
|
||||
|
|
|
|||
Loading…
Reference in New Issue