From 38e13cdd75f229b121e74ce612a555c8df8cc2ae Mon Sep 17 00:00:00 2001 From: Peter van 't Hof <p.j.van_t_hof@lumc.nl> Date: Thu, 24 Dec 2015 17:04:27 +0100 Subject: [PATCH] Switch to krona plots --- .../nl/lumc/sasc/biopet/core/report/krona.ssp | 24 ++++++++++++++ .../nl/lumc/sasc/biopet/core/report/main.ssp | 2 +- .../biopet/pipelines/gears/krakenKrona.ssp | 33 +++++++++++++++++++ .../biopet/pipelines/gears/GearsReport.scala | 4 +-- .../pipelines/gears/GearsSingleReport.scala | 4 +-- 5 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/core/report/krona.ssp create mode 100644 public/gears/src/main/resources/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp diff --git a/public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/core/report/krona.ssp b/public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/core/report/krona.ssp new file mode 100644 index 000000000..8c5f1e5d0 --- /dev/null +++ b/public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/core/report/krona.ssp @@ -0,0 +1,24 @@ +#import(java.io.File) +#import(scala.io.Source) +<%@ var rootPath: String %> +<%@ var kronaXml: File %> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> +<meta charset="utf-8"/> +<link rel="shortcut icon" href="${rootPath}ext/img/krona/favicon.ico"/> +<!--<script id="notfound">window.onload=function(){document.body.innerHTML="Could not get resources from \"http://krona.sourceforge.net\"."}</script>--> +<script src="${rootPath}ext/js/krona-2.0.js"></script> +</head> +<body> +<img id="hiddenImage" src="${rootPath}ext/img/krona/hidden.png" style="display:none"/> +<img id="loadingImage" src="${rootPath}ext/img/krona/loading.gif" style="display:none"/> +<noscript>Javascript must be enabled to view this page.</noscript> +<div style="display:none"> +<% + val reader = Source.fromFile(kronaXml) + val xml = reader.getLines().mkString("\n") + reader.close() +%> +${unescape(xml)} +</div></body></html> diff --git a/public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/core/report/main.ssp b/public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/core/report/main.ssp index 7102c5ef7..356ddc00e 100644 --- a/public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/core/report/main.ssp +++ b/public/biopet-core/src/main/resources/nl/lumc/sasc/biopet/core/report/main.ssp @@ -148,7 +148,7 @@ ${name} </h3> </div> - ${unescape(section.render(args))} + ${unescape(section.render(args ++ Map("args" -> args)))} </div> #end </div> diff --git a/public/gears/src/main/resources/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp b/public/gears/src/main/resources/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp new file mode 100644 index 000000000..a57d62ebb --- /dev/null +++ b/public/gears/src/main/resources/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp @@ -0,0 +1,33 @@ +#import(nl.lumc.sasc.biopet.utils.summary.Summary) +#import(nl.lumc.sasc.biopet.core.report.ReportPage) +#import(nl.lumc.sasc.biopet.core.report.ReportBuilder) +#import(nl.lumc.sasc.biopet.pipelines.gears.GearsKraken) +#import(java.io.File) +#import(java.io.PrintWriter) +<%@ var summary: Summary %> +<%@ var rootPath: String %> +<%@ var sampleId: Option[String] = None %> +<%@ var libId: Option[String] = None %> +<%@ var args: Map[String, Any] %> +<%@ var outputDir: File %> + +<% + val bla = if (sampleId.isEmpty && libId.isEmpty) { + summary.getSampleValues("gearskraken", "stats", "krakenreport").map(x => x._1 -> x._2.get.asInstanceOf[Map[String, Any]]) + } else summary.getValue(sampleId, libId, "gearskraken", "stats", "krakenreport").map(sampleId.get -> _.asInstanceOf[Map[String, Any]]).toList.toMap + + val tempFile = File.createTempFile("krona.", ".xml") + tempFile.deleteOnExit() + GearsKraken.convertKrakenSummariesToKronaXml(bla, tempFile) + + val output = ReportBuilder.renderTemplate("/nl/lumc/sasc/biopet/core/report/krona.ssp", + args ++ Map("kronaXml" -> tempFile)) + + + val file = new File(outputDir, "kraken_krona.html") + val writer = new PrintWriter(file) + writer.println(output) + writer.close() +%> + +<iframe src="kraken_krona.html" style="width:100%;height:80vh;border:none;"></iframe> diff --git a/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/GearsReport.scala b/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/GearsReport.scala index 622a481d0..ff4397af5 100644 --- a/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/GearsReport.scala +++ b/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/GearsReport.scala @@ -16,7 +16,7 @@ object GearsReport extends MultisampleReportBuilder { def reportName = "Gears Report" - override def extFiles = super.extFiles ++ List("js/gears.js") + override def extFiles = super.extFiles ++ List("js/gears.js", "js/krona-2.0.js", "img/krona/loading.gif", "img/krona/hidden.png", "img/krona/favicon.ico") .map(x => ExtFile("/nl/lumc/sasc/biopet/pipelines/gears/report/ext/" + x, x)) def indexPage = { @@ -54,7 +54,7 @@ object GearsReport extends MultisampleReportBuilder { ReportPage( if (krakenExecuted) List("Gears - Metagenomics" -> ReportPage(List(), List( - "Sunburst analysis" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/gears/gearsSunburst.ssp" + "Kraken analysis" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp" )), Map())) else Nil, List( "QC reads" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepReadSummary.ssp"), diff --git a/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/GearsSingleReport.scala b/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/GearsSingleReport.scala index 5ceb961b0..2532afb51 100644 --- a/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/GearsSingleReport.scala +++ b/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/GearsSingleReport.scala @@ -27,7 +27,7 @@ object GearsSingleReport extends ReportBuilder { // TODO: Add dustbin analysis (aggregated) // TODO: Add alignment stats per sample for the dustbin analysis - override def extFiles = super.extFiles ++ List("js/gears.js") + override def extFiles = super.extFiles ++ List("js/gears.js", "js/krona-2.0.js", "img/krona/loading.gif", "img/krona/hidden.png", "img/krona/favicon.ico") .map(x => ExtFile("/nl/lumc/sasc/biopet/pipelines/gears/report/ext/" + x, x)) def indexPage = { @@ -39,7 +39,7 @@ object GearsSingleReport extends ReportBuilder { ), List( "Gears intro" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/gears/gearsSingleFront.ssp"), - "Sunburst analysis" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/gears/gearsSunburst.ssp") + "Kraken analysis" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp") ), pageArgs ) -- GitLab