Skip to content

Commit

Permalink
Fixed max mapping quality calculation regression fault
Browse files Browse the repository at this point in the history
  • Loading branch information
d-cameron committed Sep 1, 2016
1 parent 9ab5cc5 commit 7b1a9a1
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 13 deletions.
22 changes: 9 additions & 13 deletions src/main/java/picard/analysis/directed/MapqMetricsCollector.java
Original file line number Diff line number Diff line change
Expand Up @@ -105,20 +105,16 @@ public void addMetricsToFile(final MetricsFile<MapqMetrics,Integer> file) {
metrics.LIBRARY = this.library;
metrics.READ_GROUP = this.readGroup;
metrics.MAPPED_READS = (long) histogram.getCount();
if (!histogram.isEmpty()) {
metrics.MIN_MAPQ = (int) histogram.getMin();
metrics.MIN_MAPQ = SAMRecord.UNKNOWN_MAPPING_QUALITY;
metrics.MAX_MAPQ = 0;
for (int key : histogram.keySet()) {
if (key != SAMRecord.UNKNOWN_MAPPING_QUALITY) {
if (histogram.get(key).getValue() > 0) {
metrics.MIN_MAPQ = Math.min(metrics.MIN_MAPQ, key);
metrics.MAX_MAPQ = Math.max(metrics.MAX_MAPQ, key);
}
}
}
int mapq = 0;
for (int i = SAMRecord.UNKNOWN_MAPPING_QUALITY; i >= 0; i++) {
if (histogram.containsKey(i)) {
if (histogram.get(i).getValue() > 0) {
mapq = (int) histogram.get(i).getValue();
break;
}
}
}
metrics.MAX_MAPQ = (int)mapq;

if (histogram.get(SAMRecord.NO_MAPPING_QUALITY) != null) {
metrics.ZERO_MAPQ = (long) histogram.get(SAMRecord.NO_MAPPING_QUALITY).getValue();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,4 +233,19 @@ public void mapq_should_be_calculated() {
assertEquals(2, mq.getMetrics().get(0).MIN_MAPQ);
assertEquals(2, mq.getMetrics().get(0).MAX_MAPQ);
}
@Test
public void mapq_should_be_extrema() {
IdsvSamFileMetricsCollector c = new IdsvSamFileMetricsCollector(null);
c.acceptRecord(withMapq(1, Read(0, 1, "100M"))[0], null);
c.acceptRecord(withMapq(2, Read(0, 1, "101M"))[0], null);
c.acceptRecord(withMapq(2, Read(0, 1, "102M"))[0], null);
c.acceptRecord(withMapq(3, Read(0, 1, "103M"))[0], null);
MetricsFile<IdsvMetrics, Integer> idsv = new MetricsFile<IdsvMetrics, Integer>();
MetricsFile<InsertSizeMetrics, Integer> is = new MetricsFile<InsertSizeMetrics, Integer>();
MetricsFile<CigarDetailMetrics, Integer> sc = new MetricsFile<CigarDetailMetrics, Integer>();
MetricsFile<MapqMetrics, Integer> mq = new MetricsFile<MapqMetrics, Integer>();
c.finish(is, idsv, mq, sc);
assertEquals(1, mq.getMetrics().get(0).MIN_MAPQ);
assertEquals(3, mq.getMetrics().get(0).MAX_MAPQ);
}
}

0 comments on commit 7b1a9a1

Please sign in to comment.