From 36f70f66705e909d58b4879ca52d78e21907f754 Mon Sep 17 00:00:00 2001 From: Wai Yi Leung <w.y.leung@lumc.nl> Date: Tue, 20 Oct 2015 12:57:42 +0200 Subject: [PATCH] Report update --- .../biopet/pipelines/gears/gearsFront.ssp | 4 +- .../biopet/pipelines/gears/gearsSunburst.ssp | 83 +++++++------------ .../sasc/biopet/pipelines/gears/Gears.scala | 33 ++++---- .../biopet/pipelines/gears/GearsReport.scala | 42 +--------- 4 files changed, 55 insertions(+), 107 deletions(-) diff --git a/public/gears/src/main/resources/nl/lumc/sasc/biopet/pipelines/gears/gearsFront.ssp b/public/gears/src/main/resources/nl/lumc/sasc/biopet/pipelines/gears/gearsFront.ssp index 31b67ba3d..21feab6c9 100644 --- a/public/gears/src/main/resources/nl/lumc/sasc/biopet/pipelines/gears/gearsFront.ssp +++ b/public/gears/src/main/resources/nl/lumc/sasc/biopet/pipelines/gears/gearsFront.ssp @@ -1,11 +1,11 @@ -#import(nl.lumc.sasc.biopet.core.summary.Summary) +#import(nl.lumc.sasc.biopet.utils.summary.Summary) #import(nl.lumc.sasc.biopet.core.report.ReportPage) <%@ var summary: Summary %> <%@ var rootPath: String %> <table class="table"> <tbody> - <tr><th>Pipeline</th><td>Shiva</td></tr> + <tr><th>Pipeline</th><td>Gears</td></tr> <tr><th>Version</th><td>${summary.getValue("meta", "pipeline_version")}</td></tr> <tr><th>Last commit hash</th><td>${summary.getValue("meta", "last_commit_hash")}</td></tr> <tr><th>Output directory</th><td>${summary.getValue("meta", "output_dir")}</td></tr> diff --git a/public/gears/src/main/resources/nl/lumc/sasc/biopet/pipelines/gears/gearsSunburst.ssp b/public/gears/src/main/resources/nl/lumc/sasc/biopet/pipelines/gears/gearsSunburst.ssp index 690c5e3e7..8e9761cdd 100644 --- a/public/gears/src/main/resources/nl/lumc/sasc/biopet/pipelines/gears/gearsSunburst.ssp +++ b/public/gears/src/main/resources/nl/lumc/sasc/biopet/pipelines/gears/gearsSunburst.ssp @@ -1,6 +1,4 @@ -#import(nl.lumc.sasc.biopet.core.summary.Summary) -#import(nl.lumc.sasc.biopet.core.report.ReportPage) -#import(nl.lumc.sasc.biopet.pipelines.flexiprep.FlexiprepReport) +#import(nl.lumc.sasc.biopet.utils.summary.Summary) #import(java.io.File) <%@ var summary: Summary %> <%@ var sampleId: Option[String] = None %> @@ -19,63 +17,42 @@ val librariesCount = summary.samples.foldLeft(0)(_ + summary.libraries(_).size) }# -<!-- -Javascript required for showing the sunburst plot -//--> - -<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js" charset="utf-8"></script> -<!-- Gears specific javascript --> -<script src="${rootPath}ext/js/gears.js"></script> - -<h2 id='currentlevel'>Root</h2> -<div> - <span id="selection_name"></span> - - <span id="selection_size"></span> - - <span id="selection_value"></span> -</div> - -<form> - <label><input type="radio" name="mode" value="size"> Size</label> - <label><input type="radio" name="mode" value="count" checked> Count</label> -</form> -<div id="sequence"></div> - -<div id="datatable"></div> - - #if (showIntro) <div class="row"> - <div class="col-md-1"></div> - <%--<div class="col-md-6">--%> - <p> - #if (sampleId.isDefined && libId.isDefined) - Here we show aggregated quality statistics sequencing library ${libId} for sample ${sampleId}. It shows the total number of bases used after quality control, and the total number of bases discarded during quality control. This is done for both forward and reverse reads. - #elseif (sampleId.isDefined) - Here we show aggregated quality statistics for every sequencing library for sample ${sampleId}. It shows the total number of bases used after quality control, and the total number of bases discarded during quality control. This is done for both forward and reverse reads. - #else - Here we show aggregated quality statistics for every sequencing library. It shows the total number of bases used after quality control, and the total number of bases discarded during quality control. This is done for both forward and reverse reads. - #end - </p> - </div> + <div class="col-md-1"></div> + <div class="col-md-10"> + Here we show a sunburst visualisation of the analysis of the metagenome in sample: ${sampleId} + </div> + <div class="col-md-1"></div> </div> #end #if (showPlot) - #{ - -// FlexiprepReport.baseSummaryPlot(outputDir, "QC_Bases_R1","R1", summary, sampleId = sampleId) -// FlexiprepReport.baseSummaryPlot(outputDir, "QC_Bases_R2","R2", summary, sampleId = sampleId) - - }# - <div class="panel-body"> - - </div> - - </div> - <div class="panel-footer"> - - </div> +<div class="row"> + <!-- + Javascript required for showing the sunburst plot + //--> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js" charset="utf-8"></script> + <!-- Gears specific javascript --> + <script src="${rootPath}ext/js/gears.js"></script> + + <h3 id='currentlevel'>Root</h3> + <div> + <span id="selection_name"></span> - + <span id="selection_size"></span> - + <span id="selection_value"></span> + </div> + + <form> + <label><input type="radio" name="mode" value="size"> Size</label> + <label><input type="radio" name="mode" value="count" checked> Count</label> + </form> + <div id="sequence"></div> + + <div id="datatable"></div> +</div> #end diff --git a/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/Gears.scala b/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/Gears.scala index f67b1b8fc..9362fde72 100644 --- a/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/Gears.scala +++ b/public/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/Gears.scala @@ -25,8 +25,7 @@ import nl.lumc.sasc.biopet.utils.config.Configurable import org.broadinstitute.gatk.queue.QScript /** - * This is a trait for the Gears pipeline - * The ShivaTrait is used as template for this pipeline + * Created by wyleung */ class Gears(val root: Configurable) extends QScript with SummaryQScript { qscript => @@ -44,7 +43,7 @@ class Gears(val root: Configurable) extends QScript with SummaryQScript { @Argument(required = false) var outputName: String = _ - var GearsOutputFiles: Map[String, File] = Map.empty + var GearsOutputFiles: scala.collection.mutable.Map[String, File] = scala.collection.mutable.Map.empty /** Executed before running the script */ def init(): Unit = { @@ -61,6 +60,12 @@ class Gears(val root: Configurable) extends QScript with SummaryQScript { } } + override def reportClass = { + val gears = new GearsReport(this) + gears.outputDir = new File(outputDir, "report") + gears.summaryFile = summaryFile + Some(gears) + } /** Method to add jobs */ def biopetScript(): Unit = { @@ -96,9 +101,9 @@ class Gears(val root: Configurable) extends QScript with SummaryQScript { fastqSync.outputStats = new File(outputDir, s"$outputName.sync.stats.json") add(fastqSync) - GearsOutputFiles ++ Map("fastqsync_stats" -> fastqSync.outputStats) - GearsOutputFiles ++ Map("fastqsync_R1" -> fastqSync.outputFastq1) - GearsOutputFiles ++ Map("fastqsync_R2" -> fastqSync.outputFastq2) + GearsOutputFiles += ("fastqsync_stats" -> fastqSync.outputStats) + GearsOutputFiles += ("fastqsync_R1" -> fastqSync.outputFastq1) + GearsOutputFiles += ("fastqsync_R2" -> fastqSync.outputFastq2) List(fastqSync.outputFastq1, fastqSync.outputFastq2) }.getOrElse(List(fastqFileR1, fastqFileR2).flatten) @@ -114,9 +119,9 @@ class Gears(val root: Configurable) extends QScript with SummaryQScript { krakenAnalysis.unclassified_out = Option(new File(outputDir, s"$outputName.krkn.unclassified.fastq")) add(krakenAnalysis) - GearsOutputFiles ++ Map("kraken_output_raw" -> krakenAnalysis.output) - GearsOutputFiles ++ Map("kraken_classified_out" -> krakenAnalysis.classified_out) - GearsOutputFiles ++ Map("kraken_unclassified_out" -> krakenAnalysis.unclassified_out) + GearsOutputFiles += ("kraken_output_raw" -> krakenAnalysis.output) + GearsOutputFiles += ("kraken_classified_out" -> krakenAnalysis.classified_out.getOrElse("")) + GearsOutputFiles += ("kraken_unclassified_out" -> krakenAnalysis.unclassified_out.getOrElse("")) // create kraken summary file @@ -126,8 +131,8 @@ class Gears(val root: Configurable) extends QScript with SummaryQScript { krakenReport.output = new File(outputDir, s"$outputName.krkn.full") add(krakenReport) - GearsOutputFiles ++ Map("kraken_report_input" -> krakenReport.input) - GearsOutputFiles ++ Map("kraken_report_output" -> krakenReport.output) + GearsOutputFiles += ("kraken_report_input" -> krakenReport.input) + GearsOutputFiles += ("kraken_report_output" -> krakenReport.output) val krakenReportJSON = new KrakenReportToJson(qscript) krakenReportJSON.inputReport = krakenReport.output @@ -135,10 +140,10 @@ class Gears(val root: Configurable) extends QScript with SummaryQScript { krakenReportJSON.skipNames = config("skipNames", default = false) add(krakenReportJSON) - addSummaryJobs() + GearsOutputFiles += ("kraken_report_json_input" -> krakenReportJSON.inputReport) + GearsOutputFiles += ("kraken_report_json_output" -> krakenReportJSON.output) - GearsOutputFiles ++ Map("kraken_report_json_input" -> krakenReportJSON.inputReport) - GearsOutputFiles ++ Map("kraken_report_json_output" -> krakenReportJSON.output) + addSummaryJobs() } /** Location of summary file */ 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 7fc93225e..02a2684c3 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 @@ -2,16 +2,11 @@ package nl.lumc.sasc.biopet.pipelines.gears import java.io.{ PrintWriter, File } -import nl.lumc.sasc.biopet.core.config.Configurable import nl.lumc.sasc.biopet.core.report.MultisampleReportBuilder import nl.lumc.sasc.biopet.core.report.ReportBuilderExtension import nl.lumc.sasc.biopet.core.report.ReportPage import nl.lumc.sasc.biopet.core.report.ReportSection -import nl.lumc.sasc.biopet.core.report._ -import nl.lumc.sasc.biopet.core.summary.{ SummaryValue, Summary } -import nl.lumc.sasc.biopet.extensions.rscript.StackedBarPlot -import nl.lumc.sasc.biopet.pipelines.bammetrics.BammetricsReport -import nl.lumc.sasc.biopet.pipelines.flexiprep.FlexiprepReport +import nl.lumc.sasc.biopet.utils.config.Configurable class GearsReport(val root: Configurable) extends ReportBuilderExtension { val builder = GearsReport @@ -30,58 +25,29 @@ object GearsReport extends MultisampleReportBuilder { def indexPage = { ReportPage( List("Samples" -> generateSamplesPage(pageArgs)) ++ - Map("Files" -> filesPage, + Map( "Versions" -> ReportPage(List(), List(( "Executables" -> ReportSection("/nl/lumc/sasc/biopet/core/report/executables.ssp" ))), Map()) ), List( - "Report" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/gears/gearsFront.ssp"), - "Alignment" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/bammetrics/alignmentSummary.ssp", - Map("sampleLevel" -> true, "showPlot" -> true, "showTable" -> false) - ), - "Insert Size" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/bammetrics/insertSize.ssp", - Map("sampleLevel" -> true, "showPlot" -> true, "showTable" -> false)), - "QC reads" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepReadSummary.ssp", - Map("showPlot" -> true, "showTable" -> false)), - "QC bases" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepBaseSummary.ssp", - Map("showPlot" -> true, "showTable" -> false)) + "Gears intro" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/gears/gearsFront.ssp"), + "Sunburst analysis" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/gears/gearsSunburst.ssp") ), pageArgs ) } - def filesPage = ReportPage(List(), List( - "Input fastq files" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepInputfiles.ssp"), - "After QC fastq files" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepOutputfiles.ssp"), - "Bam files per lib" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/mapping/outputBamfiles.ssp", Map("sampleLevel" -> false)), - "Preprocessed bam files" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/mapping/outputBamfiles.ssp", - Map("pipelineName" -> "gears", "fileTag" -> "preProcessBam")) - ), Map()) - def samplePage(sampleId: String, args: Map[String, Any]) = { ReportPage(List( - "Libraries" -> generateLibraryPage(args), - "Alignment" -> BammetricsReport.bamMetricsPage(summary, Some(sampleId), None), - "Files" -> filesPage ), List( - "Alignment" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/bammetrics/alignmentSummary.ssp", - if (summary.libraries(sampleId).size > 1) Map("showPlot" -> true) else Map()), - "Preprocessing" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/bammetrics/alignmentSummary.ssp", Map("sampleLevel" -> true)), - "QC reads" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepReadSummary.ssp"), - "QC bases" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepBaseSummary.ssp"), "Sunburst analysis" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/gears/gearsSunburst.ssp") ), args) } def libraryPage(sampleId: String, libId: String, args: Map[String, Any]) = { ReportPage(List( - "Alignment" -> BammetricsReport.bamMetricsPage(summary, Some(sampleId), Some(libId)), - "QC" -> FlexiprepReport.flexiprepPage ), List( - "Alignment" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/bammetrics/alignmentSummary.ssp"), - "QC reads" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepReadSummary.ssp"), - "QC bases" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepBaseSummary.ssp") ), args) } -- GitLab