diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/BamStats.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/BamStats.scala index 10eb3587ebde323c0d51458694a5cb319edfb3b5..3d8defe138a746ab068ac069ae3177824b9e8a62 100644 --- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/BamStats.scala +++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/BamStats.scala @@ -104,21 +104,14 @@ object BamStats extends ToolCommand { val stats = waitOnFutures(processUnmappedReads(bamFile) :: contigsFutures.map(_._2)) stats.flagstat.writeAsTsv(new File(outputDir, "flagstats.tsv")) - stats.insertSizeHistogram.writeHistogramToTsv(new File(outputDir, "insertsize.histogram.tsv")) - stats.insertSizeHistogram.writeAggregateToTsv(new File(outputDir, "insertsize.stats.tsv")) - stats.mappingQualityHistogram.writeHistogramToTsv(new File(outputDir, "mappingQuality.histogram.tsv")) - stats.mappingQualityHistogram.writeAggregateToTsv(new File(outputDir, "mappingQualityHistogram.stats.tsv")) - stats.clippingHistogram.writeHistogramToTsv(new File(outputDir, "clipping.histogram.tsv")) - stats.clippingHistogram.writeAggregateToTsv(new File(outputDir, "clipping.stats.tsv")) - - stats.leftClippingHistogram.writeHistogramToTsv(new File(outputDir, "left_clipping.histogram.tsv")) - stats.leftClippingHistogram.writeAggregateToTsv(new File(outputDir, "left_clipping.stats.tsv")) - stats.rightClippingHistogram.writeHistogramToTsv(new File(outputDir, "right_clipping.histogram.tsv")) - stats.rightClippingHistogram.writeAggregateToTsv(new File(outputDir, "right_clipping.stats.tsv")) - stats._3_ClippingHistogram.writeHistogramToTsv(new File(outputDir, "3prime_clipping.histogram.tsv")) - stats._3_ClippingHistogram.writeAggregateToTsv(new File(outputDir, "3prime_clipping.stats.tsv")) - stats._5_ClippingHistogram.writeHistogramToTsv(new File(outputDir, "5prime_clipping.histogram.tsv")) - stats._5_ClippingHistogram.writeAggregateToTsv(new File(outputDir, "5prime_clipping.stats.tsv")) + stats.insertSizeHistogram.writeFilesAndPlot(outputDir, "insertsize", "Insertsize", "Reads", "Insertsize distribution") + stats.mappingQualityHistogram.writeFilesAndPlot(outputDir, "mappingQuality", "Mapping Quality", "Reads", "Mapping Quality distribution") + stats.clippingHistogram.writeFilesAndPlot(outputDir, "clipping", "CLipped bases", "Reads", "Clipping distribution") + + stats.leftClippingHistogram.writeFilesAndPlot(outputDir, "left_clipping", "CLipped bases", "Reads", "Left Clipping distribution") + stats.rightClippingHistogram.writeFilesAndPlot(outputDir, "right_clipping", "CLipped bases", "Reads", "Right Clipping distribution") + stats._3_ClippingHistogram.writeFilesAndPlot(outputDir, "3prime_clipping", "CLipped bases", "Reads", "3 Prime Clipping distribution") + stats._5_ClippingHistogram.writeFilesAndPlot(outputDir, "5prime_clipping", "CLipped bases", "Reads", "5 Prime Clipping distribution") val statsWriter = new PrintWriter(new File(outputDir, "bamstats.json")) val totalStats = stats.toSummaryMap diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/Histogram.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/Histogram.scala index 56644eb9952588eef5684386b812108cbae27828..140f327b07b5b94094fa9ab8f718b6faafccf875 100644 --- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/Histogram.scala +++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/Histogram.scala @@ -14,7 +14,9 @@ */ package nl.lumc.sasc.biopet.tools.bamstats -import java.io.{ File, PrintWriter } +import java.io.{File, PrintWriter} + +import nl.lumc.sasc.biopet.utils.rscript.LinePlot import nl.lumc.sasc.biopet.utils.sortAnyAny import scala.collection.mutable @@ -89,4 +91,16 @@ class Histogram[T](_counts: Map[T, Long] = Map[T, Long]())(implicit ord: Numeric writer.close() } + def writeFilesAndPlot(outputDir: File, prefix: String, xlabel: String, ylabel: String, title: String): Unit = { + writeHistogramToTsv(new File(outputDir, prefix + ".histogram.tsv")) + writeAggregateToTsv(new File(outputDir, prefix + ".stats.tsv")) + val plot = new LinePlot(null) + plot.input = new File(outputDir, prefix + ".histogram.tsv") + plot.output = new File(outputDir, prefix + ".histogram.png") + plot.xlabel = Some(xlabel) + plot.ylabel = Some(ylabel) + plot.title = Some(title) + plot.runLocal() + } + } diff --git a/biopet-tools/src/test/scala/nl/lumc/sasc/biopet/tools/bamstats/BamStatsTest.scala b/biopet-tools/src/test/scala/nl/lumc/sasc/biopet/tools/bamstats/BamStatsTest.scala index e93076696b75f95714b4bfa7d8858e0299b96753..6215605f21be849dc1db1419b8df8b7038038fb5 100644 --- a/biopet-tools/src/test/scala/nl/lumc/sasc/biopet/tools/bamstats/BamStatsTest.scala +++ b/biopet-tools/src/test/scala/nl/lumc/sasc/biopet/tools/bamstats/BamStatsTest.scala @@ -34,6 +34,15 @@ class BamStatsTest extends TestNGSuite with Matchers { new File(outputDir, "bamstats.json") should exist new File(outputDir, "bamstats.summary.json") should exist + + new File(outputDir, "flagstats.tsv") should exist + new File(outputDir, "insertsize.stats.tsv") should exist + new File(outputDir, "insertsize.histogram.tsv") should exist + new File(outputDir, "mappingQuality.stats.tsv") should exist + new File(outputDir, "mappingQuality.histogram.tsv") should exist + new File(outputDir, "clipping.stats.tsv") should exist + new File(outputDir, "clipping.histogram.tsv") should exist + new File(outputDir, "flagstats") shouldNot exist new File(outputDir, "flagstats.summary.json") shouldNot exist new File(outputDir, "mapping_quality.tsv") shouldNot exist