diff --git a/bammetrics/src/main/resources/nl/lumc/sasc/biopet/pipelines/bammetrics/covstatsPlot.ssp b/bammetrics/src/main/resources/nl/lumc/sasc/biopet/pipelines/bammetrics/covstatsPlot.ssp index 0440793afc561ea593d619c78a2eb91f84e97fbd..10ca7cc6b098f7f7b23b6eee54cf67301d781128 100644 --- a/bammetrics/src/main/resources/nl/lumc/sasc/biopet/pipelines/bammetrics/covstatsPlot.ssp +++ b/bammetrics/src/main/resources/nl/lumc/sasc/biopet/pipelines/bammetrics/covstatsPlot.ssp @@ -7,6 +7,7 @@ #import(scala.concurrent.Await) #import(scala.concurrent.duration.Duration) #import(nl.lumc.sasc.biopet.pipelines.bammetrics.BammetricsReport) +#import(nl.lumc.sasc.biopet.utils.summary.db.Schema) #import(java.io.File) <%@ var summary: SummaryDb %> <%@ var sampleId: Option[Int] %> @@ -16,17 +17,15 @@ <%@ var target: Option[String] %> <%@ var runId: Int %> <%@ var fields: List[String] = List("mean", "median", "max", "horizontal", "frac_min_10x", "frac_min_20x", "frac_min_30x", "frac_min_40x", "frac_min_50x") %> +<%@ var plotFile: Option[Schema.File] %> +<%@ var values: Map[String, Option[Any]] %> #{ val moduleName = target.get + "_cov_stats" - val statsPaths = fields.map(x => x -> List("coverage", "_all", x)).toMap - val plotFile = Await.result(summary.getFile(runId, PipelineName(metricsTag), ModuleName(moduleName), sampleId.map(SampleId).get, libId.map(LibraryId).getOrElse(NoLibrary), "plot"), Duration.Inf) val originalPlot = new File(plotFile.get.path) val plot = new File(outputDir, target.get + "_cov_stats.png") - val values = summary.getStatKeys(runId, PipelineName(metricsTag), ModuleName(moduleName), sampleId.map(SampleId).get, libId.map(LibraryId).getOrElse(NoLibrary), statsPaths) - - if (originalPlot.exists()) IoUtils.copyFile(originalPlot, plot) + if (originalPlot.exists()) IoUtils.copyFile(originalPlot, plot) }# diff --git a/bammetrics/src/main/resources/nl/lumc/sasc/biopet/pipelines/bammetrics/wgsHistogram.ssp b/bammetrics/src/main/resources/nl/lumc/sasc/biopet/pipelines/bammetrics/wgsHistogram.ssp index 65a52811bf78dab263d59ed38503eb40d2d6c9c2..f2afc6ab527b9f6c0a35340ff4c35739993737ed 100644 --- a/bammetrics/src/main/resources/nl/lumc/sasc/biopet/pipelines/bammetrics/wgsHistogram.ssp +++ b/bammetrics/src/main/resources/nl/lumc/sasc/biopet/pipelines/bammetrics/wgsHistogram.ssp @@ -85,6 +85,7 @@ #for (field <- fields) ${results(field)} #end + #end #end #end diff --git a/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BammetricsReport.scala b/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BammetricsReport.scala index c9bcf9ed45c1885beaa94f6af684ca981220016f..3df7dfce75d2e68a886d641dc8ba816b192f7e10 100644 --- a/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BammetricsReport.scala +++ b/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BammetricsReport.scala @@ -23,13 +23,11 @@ import nl.lumc.sasc.biopet.core.report.{ ReportPage, ReportSection } -import nl.lumc.sasc.biopet.pipelines.bammetrics.BammetricsReport.mappingQualityPlotTables import nl.lumc.sasc.biopet.utils.ConfigUtils import nl.lumc.sasc.biopet.utils.rscript.{LinePlot, StackedBarPlot} import nl.lumc.sasc.biopet.utils.summary.db.SummaryDb import nl.lumc.sasc.biopet.utils.summary.db.SummaryDb.Implicts._ import nl.lumc.sasc.biopet.utils.summary.db.SummaryDb._ -import nl.lumc.sasc.biopet.utils.summary.db.Schema._ import scala.collection.mutable.ArrayBuffer import scala.concurrent.{Await, Future} @@ -71,11 +69,20 @@ object BammetricsReport extends ReportBuilder { ) } + /** Generates values for bamMetricsPage */ + def bamMetricsPageValues(summary: SummaryDb, + sampleId: Option[Int], + libId: Option[Int], + metricsTag: String = "bammetrics"): Map[String, Any] = { + Map("" -> "") + } + /** Generates a page with alignment stats */ def bamMetricsPage(summary: SummaryDb, sampleId: Option[Int], libId: Option[Int], - metricsTag: String = "bammetrics"): Future[ReportPage] = Future { + metricsTag: String = "bammetrics"): Future[ReportPage] = { + val wgsExecuted = summary.getStatsSize(runId, metricsTag, "wgs", @@ -115,45 +122,55 @@ object BammetricsReport extends ReportBuilder { case _ => Nil } - ReportPage( - if (targets.isEmpty) List() - else + val covstatsPlotValuesArray = ArrayBuffer[(String, Map[String,Any])]() + for (t <- targets) { + covstatsPlotValuesArray += Tuple2(t,BammetricsReportPage.covstatsPlotValues(summary, runId, sampleId, libId, Some(t))) + } + + val covstatsPlotValuesList = covstatsPlotValuesArray.toList + + + Future { + ReportPage( + if (targets.isEmpty) List() + else + List( + "Targets" -> Future.successful( + ReportPage( + List(), + covstatsPlotValuesList.map(covstats => + covstats._1 -> ReportSection("/nl/lumc/sasc/biopet/pipelines/bammetrics/covstatsPlot.ssp", + covstats._2)), + Map()))), List( - "Targets" -> Future.successful( - ReportPage( - List(), - targets.map(t => - t -> ReportSection("/nl/lumc/sasc/biopet/pipelines/bammetrics/covstatsPlot.ssp", - Map("target" -> Some(t)))), - Map()))), - List( - "Summary" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/bammetrics/alignmentSummary.ssp"), - "Mapping Quality" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/bammetrics/mappingQuality.ssp", - Map("showPlot" -> true)), - "Clipping" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/bammetrics/clipping.ssp", - Map("showPlot" -> true)) - ) ++ - (if (insertsizeMetrics) - List( - "Insert Size" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/bammetrics/insertSize.ssp", - Map("showPlot" -> true))) - else Nil) ++ (if (wgsExecuted) - List( - "Whole genome coverage" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/bammetrics/wgsHistogram.ssp", - Map("showPlot" -> true))) - else Nil) ++ - (if (rnaExecuted) - List( - "Rna coverage" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/bammetrics/rnaHistogram.ssp", - Map("showPlot" -> true))) - else Nil), - Map("metricsTag" -> metricsTag) - ) + "Summary" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/bammetrics/alignmentSummary.ssp"), + "Mapping Quality" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/bammetrics/mappingQuality.ssp", + Map("showPlot" -> true)), + "Clipping" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/bammetrics/clipping.ssp", + Map("showPlot" -> true)) + ) ++ + (if (insertsizeMetrics) + List( + "Insert Size" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/bammetrics/insertSize.ssp", + Map("showPlot" -> true))) + else Nil) ++ (if (wgsExecuted) + List( + "Whole genome coverage" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/bammetrics/wgsHistogram.ssp", + Map("showPlot" -> true))) + else Nil) ++ + (if (rnaExecuted) + List( + "Rna coverage" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/bammetrics/rnaHistogram.ssp", + Map("showPlot" -> true))) + else Nil), + Map("metricsTag" -> metricsTag) + ) + } } /** @@ -541,4 +558,4 @@ object BammetricsReport extends ReportBuilder { } writer.close() } -} \ No newline at end of file +} diff --git a/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BammetricsReportPage.scala b/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BammetricsReportPage.scala index 8f425f646f1a1d5acf4ed9ae576e3c381a6d1c81..1e2559314cf88e2b45d1678329d3fd1c5ff14a95 100644 --- a/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BammetricsReportPage.scala +++ b/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BammetricsReportPage.scala @@ -2,10 +2,14 @@ package nl.lumc.sasc.biopet.pipelines.bammetrics import nl.lumc.sasc.biopet.pipelines.bammetrics.BammetricsReport.mappingQualityPlotTables import nl.lumc.sasc.biopet.utils.summary.db.Schema.{Library, Sample} -import nl.lumc.sasc.biopet.utils.summary.db.SummaryDb +import nl.lumc.sasc.biopet.utils.summary.db.{Schema, SummaryDb} import nl.lumc.sasc.biopet.utils.summary.db.SummaryDb.Implicts._ import nl.lumc.sasc.biopet.utils.summary.db.SummaryDb._ +import scala.concurrent.Await +import scala.concurrent.duration.Duration +import java.io.File + object BammetricsReportPage { def alignmentSummaryValues(summary: SummaryDb, runId: Int, @@ -99,7 +103,8 @@ object BammetricsReportPage { else None val statsPaths = fields.map(x => x -> List("clipping", "general", x)).toMap - val clippingTableResults = summary.getStatsForLibraries(runId, "bammetrics", "bamstats", sampleId, statsPaths) + val clippingTableResults = + summary.getStatsForLibraries(runId, "bammetrics", "bamstats", sampleId, statsPaths) Map( "clippingPlotTables" -> clippingPlotTables, "clippingTableResults" -> clippingTableResults, @@ -117,7 +122,8 @@ object BammetricsReportPage { allLibraries: Seq[Library], sampleId: Option[Int], libId: Option[Int], - fields: List[String] = List("mean_insert_size", "standard_deviation", "median_insert_size"), + fields: List[String] = + List("mean_insert_size", "standard_deviation", "median_insert_size"), sampleLevel: Boolean = false, showPlot: Boolean = false, showIntro: Boolean = true, @@ -133,7 +139,11 @@ object BammetricsReportPage { else None val statsPaths = fields.map(x => x -> List("metrics", x.toUpperCase)).toMap - val insertSizeTableResults = summary.getStatsForLibraries(runId, "bammetrics", "CollectInsertSizeMetrics", sampleId, statsPaths) + val insertSizeTableResults = summary.getStatsForLibraries(runId, + "bammetrics", + "CollectInsertSizeMetrics", + sampleId, + statsPaths) Map( "insertSizePlotTables" -> insertSizePlotTables, "insertSizeTableResults" -> insertSizeTableResults, @@ -145,16 +155,19 @@ object BammetricsReportPage { ) } def rnaHistogramValues(summary: SummaryDb, - runId: Int, - allSamples: Seq[Sample], - allLibraries: Seq[Library], - sampleId: Option[Int], - libId: Option[Int], - fields: List[String] = List("PF_ALIGNED_BASES", "MEDIAN_5PRIME_BIAS", "MEDIAN_3PRIME_BIAS", "MEDIAN_5PRIME_TO_3PRIME_BIAS"), - sampleLevel: Boolean = false, - showPlot: Boolean = false, - showIntro: Boolean = true, - showTable: Boolean = true): Map[String, Any] = { + runId: Int, + allSamples: Seq[Sample], + allLibraries: Seq[Library], + sampleId: Option[Int], + libId: Option[Int], + fields: List[String] = List("PF_ALIGNED_BASES", + "MEDIAN_5PRIME_BIAS", + "MEDIAN_3PRIME_BIAS", + "MEDIAN_5PRIME_TO_3PRIME_BIAS"), + sampleLevel: Boolean = false, + showPlot: Boolean = false, + showIntro: Boolean = true, + showTable: Boolean = true): Map[String, Any] = { val samples = sampleId match { case Some(id) => allSamples.filter(_.id == id).toList @@ -166,7 +179,8 @@ object BammetricsReportPage { else None val statsPaths = fields.map(x => x -> List("metrics", x.toUpperCase)).toMap - val rnaHistogramTableResults = summary.getStatsForLibraries(runId, "bammetrics", "rna", sampleId, statsPaths) + val rnaHistogramTableResults = + summary.getStatsForLibraries(runId, "bammetrics", "rna", sampleId, statsPaths) Map( "rnaHistogramPlotTables" -> rnaHistogramPlotTables, "rnaHistogramTableResults" -> rnaHistogramTableResults, @@ -183,7 +197,20 @@ object BammetricsReportPage { allLibraries: Seq[Library], sampleId: Option[Int], libId: Option[Int], - fields: List[String] = List("mean_coverage", "pct_5x", "pct_10x", "pct_15x", "pct_20x", "pct_25x", "pct_30x", "pct_40x", "pct_50x", "pct_60x", "pct_70x", "pct_80x", "pct_90x", "pct_100x"), + fields: List[String] = List("mean_coverage", + "pct_5x", + "pct_10x", + "pct_15x", + "pct_20x", + "pct_25x", + "pct_30x", + "pct_40x", + "pct_50x", + "pct_60x", + "pct_70x", + "pct_80x", + "pct_90x", + "pct_100x"), sampleLevel: Boolean = false, showPlot: Boolean = false, showIntro: Boolean = true, @@ -199,7 +226,8 @@ object BammetricsReportPage { else None val statsPaths = fields.map(x => x -> List("metrics", x.toUpperCase)).toMap - val wgsHistogramTableResults = summary.getStatsForLibraries(runId, "bammetrics", "wgs", sampleId, statsPaths) + val wgsHistogramTableResults = + summary.getStatsForLibraries(runId, "bammetrics", "wgs", sampleId, statsPaths) Map( "wgsHistogramPlotTables" -> wgsHistogramPlotTables, "wgsHistogramTableResults" -> wgsHistogramTableResults, @@ -210,5 +238,41 @@ object BammetricsReportPage { "libId" -> libId ) } + def covstatsPlotValues(summary: SummaryDb, + runId: Int, + sampleId: Option[Int], + libId: Option[Int], + target: Option[String], + metricsTag: String = "bammetrics", + fields: List[String] = List("mean", + "median", + "max", + "horizontal", + "frac_min_10x", + "frac_min_20x", + "frac_min_30x", + "frac_min_40x", + "frac_min_50x")): Map[String, Any] = { + val moduleName = target.get + "_cov_stats" + val plotFile: Option[Schema.File] = Await.result( + summary.getFile(runId, + PipelineName(metricsTag), + ModuleName(moduleName), + sampleId.map(SampleId).get, + libId.map(LibraryId).getOrElse(NoLibrary), + "plot"), + Duration.Inf + ) + val statsPaths = fields.map(x => x -> List("coverage", "_all", x)).toMap + val values: Map[String, Option[Any]] = summary.getStatKeys( + runId, + PipelineName(metricsTag), + ModuleName(moduleName), + sampleId.map(SampleId).get, + libId.map(LibraryId).getOrElse(NoLibrary), + statsPaths) + Map("plotFile" -> plotFile, "values" -> values, + "target" -> target, + "metricsTag" -> metricsTag) + } } - diff --git a/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepReport.scala b/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepReport.scala index 06cefc82c99e64a2daa7eda38feeb3e174428af8..a5dd8f4a07b3ab569d32e8a9b370ff00fbb7577e 100644 --- a/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepReport.scala +++ b/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepReport.scala @@ -53,36 +53,36 @@ object FlexiprepReport extends ReportBuilder { /** Index page for a flexiprep report */ def indexPage: Future[ReportPage] = { val flexiprepPageSummaries = this.flexiprepPageSummaries(summary, sampleId.get, libId.get) - this.flexiprepPage(flexiprepPageSummaries).map { - page => - ReportPage( - Nil, - List( - "Report" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepFront.ssp") - ) ::: page.sections, - Map()) - }} + this.flexiprepPage(flexiprepPageSummaries).map { page => + ReportPage( + Nil, + List( + "Report" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepFront.ssp") + ) ::: page.sections, + Map()) + } + } + /** Generate a QC report page for 1 single library, sampleId and libId must be defined in the arguments */ def flexiprepPageSummaries(summary: SummaryDb, - sampleId: Int, - libId: Int): Map[String, Map[String, Any]] = { + sampleId: Int, + libId: Int): Map[String, Map[String, Any]] = { val flexiprepReadSummary: Map[String, Any] = FlexiprepReadSummary.values(summary, - runId, - samples, - libraries, - sampleId, - libId, - multisample = false) - val flexiprepBaseSummary: Map[String,Any] = FlexiprepBaseSummary.values(summary, - runId, - samples, - libraries, - sampleId, - libId, - multisample = false) + runId, + samples, + libraries, + sampleId, + libId, + multisample = false) + val flexiprepBaseSummary: Map[String, Any] = FlexiprepBaseSummary.values(summary, + runId, + samples, + libraries, + sampleId, + libId, + multisample = false) Map("flexiprepReadSummary" -> flexiprepReadSummary, - "flexiprepBaseSummary" -> flexiprepBaseSummary - ) + "flexiprepBaseSummary" -> flexiprepBaseSummary) } def flexiprepPage(summaries: Map[String, Map[String, Any]]): Future[ReportPage] = { diff --git a/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/GearsReport.scala b/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/GearsReport.scala index 1e606fe971793c0fa7560702a4c5f1b6d833a32e..af68d532efe42253e88c3c25209c669c9809fa7a 100644 --- a/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/GearsReport.scala +++ b/gears/src/main/scala/nl/lumc/sasc/biopet/pipelines/gears/GearsReport.scala @@ -345,10 +345,10 @@ object GearsReport extends MultisampleReportBuilder { val flexiprepReportPage = if (flexiprepExecuted) { - val flexiprepPageSummaries = FlexiprepReport.flexiprepPageSummaries(summary,sampleId,libId) + val flexiprepPageSummaries = + FlexiprepReport.flexiprepPageSummaries(summary, sampleId, libId) Some("QC" -> FlexiprepReport.flexiprepPage(flexiprepPageSummaries)) - } - else None + } else None val centrifugePageAllMappingsKronaPlot = GearsKronaPlot.values(summary, runId, diff --git a/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingReport.scala b/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingReport.scala index ba1c3f5928390de1de8526ef546dec4d3812bc17..8f3d08fb871cceeb47931a4f1a2495bb6330ee6b 100644 --- a/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingReport.scala +++ b/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/MultisampleMappingReport.scala @@ -14,9 +14,18 @@ */ package nl.lumc.sasc.biopet.pipelines.mapping -import nl.lumc.sasc.biopet.core.report.{MultisampleReportBuilder, ReportBuilderExtension, ReportPage, ReportSection} +import nl.lumc.sasc.biopet.core.report.{ + MultisampleReportBuilder, + ReportBuilderExtension, + ReportPage, + ReportSection +} import nl.lumc.sasc.biopet.pipelines.bammetrics.{BammetricsReport, BammetricsReportPage} -import nl.lumc.sasc.biopet.pipelines.flexiprep.{FlexiprepReadSummary,FlexiprepBaseSummary, FlexiprepReport} +import nl.lumc.sasc.biopet.pipelines.flexiprep.{ + FlexiprepReadSummary, + FlexiprepBaseSummary, + FlexiprepReport +} import nl.lumc.sasc.biopet.pipelines.gears.GearsKronaPlot import nl.lumc.sasc.biopet.utils.config.Configurable import nl.lumc.sasc.biopet.utils.summary.db.SummaryDb.Implicts._ @@ -50,27 +59,27 @@ trait MultisampleMappingReportTrait extends MultisampleReportBuilder { 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") + "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)) /** Root page for the carp report */ def indexPage: Future[ReportPage] = { val krakenExecuted = Await.result(summary.getStatsSize(runId, - "gearskraken", - "krakenreport", - library = NoLibrary, - mustHaveSample = true), - Duration.Inf) >= 1 + "gearskraken", + "krakenreport", + library = NoLibrary, + mustHaveSample = true), + Duration.Inf) >= 1 val centrifugeExecuted = Await.result(summary.getStatsSize(runId, - "gearscentrifuge", - "centrifuge_report", - library = NoLibrary, - mustHaveSample = true), - Duration.Inf) >= 1 + "gearscentrifuge", + "centrifuge_report", + library = NoLibrary, + mustHaveSample = true), + Duration.Inf) >= 1 val wgsExecuted = Await.result( summary.getStatsSize(runId, "bammetrics", "wgs", library = NoLibrary, mustHaveSample = true), Duration.Inf) >= 1 @@ -79,109 +88,151 @@ trait MultisampleMappingReportTrait extends MultisampleReportBuilder { Duration.Inf) >= 1 val insertsizeExecuted = summary .getStatsForSamples(runId, - "bammetrics", - "CollectInsertSizeMetrics", - keyValues = Map("metrics" -> List("metrics"))) + "bammetrics", + "CollectInsertSizeMetrics", + keyValues = Map("metrics" -> List("metrics"))) .exists(_._2("metrics").isDefined) val mappingExecuted = Await.result( summary.getStatsSize(runId, "mapping", NoModule, mustHaveLibrary = true), Duration.Inf) >= 1 val mappingSettings = summary.getSettingsForLibraries(runId, - "mapping", - NoModule, - keyValues = - Map("paired" -> List("paired"))) + "mapping", + NoModule, + keyValues = + Map("paired" -> List("paired"))) val pairedFound = !mappingExecuted || mappingSettings.exists(_._2.exists(_._2 == Option(true))) val flexiprepExecuted = Await .result(summary.getStatsSize(runId, "flexiprep", mustHaveLibrary = true), Duration.Inf) >= 1 val krakenDustbinAnalysis = GearsKronaPlot.values(summary, - runId, - "gearskraken", - "krakenreport", - samples, - libraries, - sampleId, - libId) + runId, + "gearskraken", + "krakenreport", + samples, + libraries, + sampleId, + libId) val centrifugeAnalysis = GearsKronaPlot.values(summary, - runId, - "gearscentrifuge", - "centrifuge_report", - samples, - libraries, - sampleId, - libId) + runId, + "gearscentrifuge", + "centrifuge_report", + samples, + libraries, + sampleId, + libId) val centrifugeUniqueAnalysis = GearsKronaPlot.values(summary, - runId, - "gearscentrifuge", - "centrifuge_unique_report", - samples, - libraries, - sampleId, - libId) + runId, + "gearscentrifuge", + "centrifuge_unique_report", + samples, + libraries, + sampleId, + libId) val alignmentReportValues = BammetricsReportPage.alignmentSummaryValues(summary, - runId, - samples, - libraries, - sampleId, - libId, - sampleLevel = true, - showPlot = true, - showTable = false) + runId, + samples, + libraries, + sampleId, + libId, + sampleLevel = true, + showPlot = true, + showTable = false) val mappingQualityReportValues = BammetricsReportPage.mappingQualityValues(summary, - runId, - samples, - libraries, - sampleId, - libId, - sampleLevel = true, - showPlot = true, - showTable = false) - val clippingReportValues = BammetricsReportPage.clippingValues(summary, runId, samples, - libraries, sampleId, libId, sampleLevel = true, showPlot = true, showTable = false) - val insertSizeReportValues = BammetricsReportPage.insertSizeValues(summary, runId, samples, - libraries, sampleId, libId, sampleLevel = true, showPlot = true, showTable = false) - val wgsHistogramReportValues = BammetricsReportPage.wgsHistogramValues(summary, runId, samples, - libraries, sampleId, libId, sampleLevel = true, showPlot = true, showTable = false) - val rnaHistogramReportValues = BammetricsReportPage.rnaHistogramValues(summary, runId, samples, - libraries, sampleId, libId, sampleLevel = true, showPlot = true, showTable = false) - val flexiprepReadSummary = FlexiprepReadSummary.values(summary, runId, samples, libraries, sampleId, libId, showPlot = true, showTable = false) - val flexiprepBaseSummary = FlexiprepBaseSummary.values(summary, runId, samples, libraries, sampleId, libId, showPlot = true, showTable = false) + runId, + samples, + libraries, + sampleId, + libId, + sampleLevel = true, + showPlot = true, + showTable = false) + val clippingReportValues = BammetricsReportPage.clippingValues(summary, + runId, + samples, + libraries, + sampleId, + libId, + sampleLevel = true, + showPlot = true, + showTable = false) + val insertSizeReportValues = BammetricsReportPage.insertSizeValues(summary, + runId, + samples, + libraries, + sampleId, + libId, + sampleLevel = true, + showPlot = true, + showTable = false) + val wgsHistogramReportValues = BammetricsReportPage.wgsHistogramValues(summary, + runId, + samples, + libraries, + sampleId, + libId, + sampleLevel = true, + showPlot = true, + showTable = false) + val rnaHistogramReportValues = BammetricsReportPage.rnaHistogramValues(summary, + runId, + samples, + libraries, + sampleId, + libId, + sampleLevel = true, + showPlot = true, + showTable = false) + val flexiprepReadSummary = FlexiprepReadSummary.values(summary, + runId, + samples, + libraries, + sampleId, + libId, + showPlot = true, + showTable = false) + val flexiprepBaseSummary = FlexiprepBaseSummary.values(summary, + runId, + samples, + libraries, + sampleId, + libId, + showPlot = true, + showTable = false) Future { ReportPage( List("Samples" -> generateSamplesPage(pageArgs)) ++ (if (krakenExecuted) - List( - "Dustbin analysis - Kraken" -> Future.successful( - ReportPage(List(), - List("Krona plot" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", - krakenDustbinAnalysis)), - Map()))) - else Nil) ++ (if (centrifugeExecuted) - List( - "Centrifuge analysis" -> Future.successful(ReportPage( - List( - "Non-unique" -> Future.successful(ReportPage( - List(), - List("All mappings" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", - centrifugeAnalysis)), - Map()))), - List("Unique mappings" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", - centrifugeUniqueAnalysis)), - Map("summaryModuleTag" -> "gearscentrifuge", - "centrifugeTag" -> Some("centrifuge")) - ))) - else Nil) ++ + List( + "Dustbin analysis - Kraken" -> Future.successful( + ReportPage(List(), + List("Krona plot" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", + krakenDustbinAnalysis)), + Map()))) + else Nil) ++ (if (centrifugeExecuted) + List( + "Centrifuge analysis" -> Future.successful(ReportPage( + List( + "Non-unique" -> Future.successful(ReportPage( + List(), + List("All mappings" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", + centrifugeAnalysis)), + Map()))), + List("Unique mappings" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", + centrifugeUniqueAnalysis)), + Map("summaryModuleTag" -> "gearscentrifuge", + "centrifugeTag" -> Some("centrifuge")) + ))) + else Nil) ++ List( "Reference" -> Future.successful( ReportPage( List(), List( "Reference" -> ReportSection("/nl/lumc/sasc/biopet/core/report/reference.ssp", - Map("pipeline" -> pipelineName)) + Map("pipeline" -> pipelineName)) ), Map()))), List("Report" -> frontSection) ++ @@ -194,36 +245,36 @@ trait MultisampleMappingReportTrait extends MultisampleReportBuilder { "/nl/lumc/sasc/biopet/pipelines/bammetrics/mappingQuality.ssp", mappingQualityReportValues), "Clipping" -> ReportSection("/nl/lumc/sasc/biopet/pipelines/bammetrics/clipping.ssp", - clippingReportValues) + clippingReportValues) ) ++ (if (pairedFound && insertsizeExecuted) - List( - "Insert Size" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/bammetrics/insertSize.ssp", - insertSizeReportValues)) - else Nil) ++ + List( + "Insert Size" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/bammetrics/insertSize.ssp", + insertSizeReportValues)) + else Nil) ++ (if (wgsExecuted) - List( - "Whole genome coverage" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/bammetrics/wgsHistogram.ssp", - wgsHistogramReportValues)) - else Nil) ++ + List( + "Whole genome coverage" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/bammetrics/wgsHistogram.ssp", + wgsHistogramReportValues)) + else Nil) ++ (if (rnaExecuted) - List( - "Rna coverage" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/bammetrics/rnaHistogram.ssp", - rnaHistogramReportValues)) - else Nil) ++ + List( + "Rna coverage" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/bammetrics/rnaHistogram.ssp", + rnaHistogramReportValues)) + else Nil) ++ (if (flexiprepExecuted) - List( - "QC reads" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepReadSummary.ssp", - flexiprepReadSummary), - "QC bases" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepBaseSummary.ssp", - flexiprepBaseSummary) - ) - else Nil), + List( + "QC reads" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepReadSummary.ssp", + flexiprepReadSummary), + "QC bases" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepBaseSummary.ssp", + flexiprepBaseSummary) + ) + else Nil), pageArgs ++ Map("pipeline" -> pipelineName) ) } @@ -232,63 +283,97 @@ trait MultisampleMappingReportTrait extends MultisampleReportBuilder { /** Single sample page */ def samplePage(sampleId: Int, args: Map[String, Any]): Future[ReportPage] = { val krakenExecuted = Await.result(summary.getStatsSize(runId, - "gearskraken", - "krakenreport", - library = NoLibrary, - sample = sampleId), - Duration.Inf) >= 1 + "gearskraken", + "krakenreport", + library = NoLibrary, + sample = sampleId), + Duration.Inf) >= 1 val centrifugeExecuted = Await.result(summary.getStatsSize(runId, - "gearscentrifuge", - "centrifuge_report", - library = NoLibrary, - sample = sampleId, - mustHaveSample = true), - Duration.Inf) >= 1 + "gearscentrifuge", + "centrifuge_report", + library = NoLibrary, + sample = sampleId, + mustHaveSample = true), + Duration.Inf) >= 1 val flexiprepExecuted = Await.result( summary.getStatsSize(runId, "flexiprep", sample = sampleId, mustHaveLibrary = true), Duration.Inf) >= 1 - val centrifugeAllMappingsReportValues = GearsKronaPlot.values(summary, runId, "gearscentrifuge", - "centrifuge_report", samples, libraries, sampleId, libId, Some("centrifuge")) - val centrifugeUniqueMappingsReportValues = GearsKronaPlot.values(summary, runId, "gearscentrifuge", - "centrifuge_unique_report", samples, libraries, sampleId, libId) - val dustbinAnalysisReportValues = GearsKronaPlot.values(summary, runId, "gearskraken", "krakenreport", - samples, libraries, sampleId, libId) - val alignmentSummaryReportValues = BammetricsReportPage.alignmentSummaryValues(summary, runId, - samples, libraries, sampleId, libId, showPlot = true) - val preprocessingReportValues = BammetricsReportPage.alignmentSummaryValues(summary, runId, - samples, libraries, sampleId, libId, sampleLevel = true) - val flexiprepReadSummary = FlexiprepReadSummary.values(summary, runId, samples, libraries, sampleId, libId) - val flexiprepBaseSummary = FlexiprepBaseSummary.values(summary, runId, samples, libraries, sampleId, libId) + val centrifugeAllMappingsReportValues = GearsKronaPlot.values(summary, + runId, + "gearscentrifuge", + "centrifuge_report", + samples, + libraries, + sampleId, + libId, + Some("centrifuge")) + val centrifugeUniqueMappingsReportValues = GearsKronaPlot.values(summary, + runId, + "gearscentrifuge", + "centrifuge_unique_report", + samples, + libraries, + sampleId, + libId) + val dustbinAnalysisReportValues = GearsKronaPlot.values(summary, + runId, + "gearskraken", + "krakenreport", + samples, + libraries, + sampleId, + libId) + val alignmentSummaryReportValues = BammetricsReportPage.alignmentSummaryValues(summary, + runId, + samples, + libraries, + sampleId, + libId, + showPlot = true) + val preprocessingReportValues = BammetricsReportPage.alignmentSummaryValues(summary, + runId, + samples, + libraries, + sampleId, + libId, + sampleLevel = true) + val flexiprepReadSummary = + FlexiprepReadSummary.values(summary, runId, samples, libraries, sampleId, libId) + val flexiprepBaseSummary = + FlexiprepBaseSummary.values(summary, runId, samples, libraries, sampleId, libId) Future { ReportPage( List("Libraries" -> generateLibraryPage(args), - "Alignment" -> BammetricsReport.bamMetricsPage(summary, Some(sampleId), None)) ++ + "Alignment" -> BammetricsReport.bamMetricsPage(summary, Some(sampleId), None)) ++ (if (centrifugeExecuted) - List( - "Centrifuge analysis" -> Future.successful(ReportPage( - List("Non-unique" -> Future.successful(ReportPage( - List(), - List("All mappings" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", - centrifugeAllMappingsReportValues)), - Map() - ))), - List("Unique mappings" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", - centrifugeUniqueMappingsReportValues)), - Map("summaryPipelineName" -> "gearscentrifuge") - ))) - else - Nil) ::: (if (krakenExecuted) - List( - "Dustbin analysis" -> Future.successful( - ReportPage(List(), - List("Krona Plot" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", dustbinAnalysisReportValues)), - Map()))) - else Nil), + List( + "Centrifuge analysis" -> Future.successful(ReportPage( + List( + "Non-unique" -> Future.successful( + ReportPage( + List(), + List("All mappings" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", + centrifugeAllMappingsReportValues)), + Map() + ))), + List("Unique mappings" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", + centrifugeUniqueMappingsReportValues)), + Map("summaryPipelineName" -> "gearscentrifuge") + ))) + else + Nil) ::: (if (krakenExecuted) + List( + "Dustbin analysis" -> Future.successful( + ReportPage(List(), + List("Krona Plot" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", + dustbinAnalysisReportValues)), + Map()))) + else Nil), List( "Alignment" -> ReportSection( "/nl/lumc/sasc/biopet/pipelines/bammetrics/alignmentSummary.ssp", @@ -298,81 +383,82 @@ trait MultisampleMappingReportTrait extends MultisampleReportBuilder { preprocessingReportValues) ) ++ (if (flexiprepExecuted) - List( - "QC reads" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepReadSummary.ssp", flexiprepReadSummary), - "QC bases" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepBaseSummary.ssp", flexiprepBaseSummary) - ) - else Nil), + List( + "QC reads" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepReadSummary.ssp", + flexiprepReadSummary), + "QC bases" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepBaseSummary.ssp", + flexiprepBaseSummary) + ) + else Nil), args ) } /** Library page */ - def libraryPage(sampleId: Int, - libId: Int, - args: Map[String, Any]): Future[ReportPage] = { + def libraryPage(sampleId: Int, libId: Int, args: Map[String, Any]): Future[ReportPage] = { val krakenExecuted = Await.result(summary.getStatsSize(runId, - "gearskraken", - "krakenreport", - library = libId, - sample = sampleId), - Duration.Inf) >= 1 + "gearskraken", + "krakenreport", + library = libId, + sample = sampleId), + Duration.Inf) >= 1 val centrifugeExecuted = Await.result(summary.getStatsSize(runId, - "gearscentrifuge", - "centrifuge_report", - library = libId, - sample = sampleId, - mustHaveSample = true), - Duration.Inf) >= 1 + "gearscentrifuge", + "centrifuge_report", + library = libId, + sample = sampleId, + mustHaveSample = true), + Duration.Inf) >= 1 val flexiprepExecuted = Await.result(summary.getStatsSize(runId, - "flexiprep", - library = libId, - sample = sampleId, - mustHaveLibrary = true), - Duration.Inf) >= 1 - + "flexiprep", + library = libId, + sample = sampleId, + mustHaveLibrary = true), + Duration.Inf) >= 1 + val flexiprepPageSummaries = FlexiprepReport.flexiprepPageSummaries(summary, sampleId, libId) Future { ReportPage( ("Alignment" -> BammetricsReport.bamMetricsPage(summary, Some(sampleId), Some(libId))) :: (if (flexiprepExecuted) - List("QC" -> FlexiprepReport.flexiprepPage(summary, sampleId, libId)) - else Nil) ::: + List("QC" -> FlexiprepReport.flexiprepPage(flexiprepPageSummaries)) + else Nil) ::: (if (centrifugeExecuted) - List("Centrifuge analysis" -> Future.successful(ReportPage( - List("Non-unique" -> Future.successful( - ReportPage(List(), - List("All mappings" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", - Map("summaryStatsTag" -> "centrifuge_report"))), - Map()))), - List("Unique mappings" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", - Map("summaryStatsTag" -> "centrifuge_unique_report"))), - Map("summaryModuleTag" -> "gearscentrifuge", "centrifugeTag" -> Some("centrifuge")) - ))) - else Nil) ::: (if (krakenExecuted) - List( - "Dustbin analysis" -> Future.successful( - ReportPage(List(), - List("Krona Plot" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp")), - Map()))) - else Nil), + List("Centrifuge analysis" -> Future.successful(ReportPage( + List("Non-unique" -> Future.successful( + ReportPage(List(), + List("All mappings" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", + Map("summaryStatsTag" -> "centrifuge_report"))), + Map()))), + List("Unique mappings" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp", + Map("summaryStatsTag" -> "centrifuge_unique_report"))), + Map("summaryModuleTag" -> "gearscentrifuge", "centrifugeTag" -> Some("centrifuge")) + ))) + else + Nil) ::: (if (krakenExecuted) + List( + "Dustbin analysis" -> Future.successful( + ReportPage(List(), + List("Krona Plot" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/gears/krakenKrona.ssp")), + Map()))) + else Nil), "Alignment" -> ReportSection( "/nl/lumc/sasc/biopet/pipelines/bammetrics/alignmentSummary.ssp") :: (if (flexiprepExecuted) - List( - "QC reads" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepReadSummary.ssp"), - "QC bases" -> ReportSection( - "/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepBaseSummary.ssp") - ) - else Nil), + List( + "QC reads" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepReadSummary.ssp"), + "QC bases" -> ReportSection( + "/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepBaseSummary.ssp") + ) + else Nil), args ) } } } -} \ No newline at end of file +}