Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Mirrors
biopet.biopet
Commits
1d306afd
Commit
1d306afd
authored
Jun 24, 2015
by
Peter van 't Hof
Browse files
Added scala docs to report code
parent
6142593f
Changes
7
Hide whitespace changes
Inline
Side-by-side
public/bammetrics/src/main/scala/nl/lumc/sasc/biopet/pipelines/bammetrics/BammetricsReport.scala
View file @
1d306afd
...
...
@@ -6,17 +6,24 @@ import nl.lumc.sasc.biopet.core.report.{ ReportBuilder, ReportPage, ReportSectio
import
nl.lumc.sasc.biopet.core.summary.
{
SummaryValue
,
Summary
}
import
nl.lumc.sasc.biopet.extensions.rscript.
{
XYPlot
,
StackedBarPlot
}
//TODO: Add basic report to BamMetrics as single pipeline
/**
* Created by pjvan_thof on 3/30/15.
*/
object
BammetricsReport
extends
ReportBuilder
{
// FIXME: Not yet finished
/** Name of report */
val
reportName
=
"Bam Metrics"
/** Root page for single BamMetrcis report */
def
indexPage
=
ReportPage
(
List
(),
List
(),
Map
())
def
bamMetricsPage
(
summary
:
Summary
,
sampleId
:
Option
[
String
],
libId
:
Option
[
String
])
=
{
/** Generates a page with alignment stats */
def
bamMetricsPage
(
summary
:
Summary
,
sampleId
:
Option
[
String
],
libId
:
Option
[
String
],
metricsTag
:
String
=
"bammetrics"
)
=
{
val
targets
=
(
summary
.
getLibraryValue
(
sampleId
,
libId
,
"bammetrics"
,
"settings"
,
"amplicon_name"
),
summary
.
getLibraryValue
(
sampleId
,
libId
,
"bammetrics"
,
"settings"
,
"roi_name"
)
...
...
@@ -35,10 +42,18 @@ object BammetricsReport extends ReportBuilder {
"Summary"
->
ReportSection
(
"/nl/lumc/sasc/biopet/pipelines/bammetrics/alignmentSummary.ssp"
),
"Insert Size"
->
ReportSection
(
"/nl/lumc/sasc/biopet/pipelines/bammetrics/insertSize.ssp"
,
Map
(
"showPlot"
->
true
))
),
Map
()
Map
(
"metricsTag"
->
metricsTag
)
)
}
/**
* Generate a stackbar plot for alignment stats
* @param outputDir OutputDir for the tsv and png file
* @param prefix Prefix of the tsv and png file
* @param summary Summary class
* @param libraryLevel Default false, when set true plot will be based on library stats instead of sample stats
* @param sampleId Default it selects all sampples, when sample is giving it limits to selected sample
*/
def
alignmentSummaryPlot
(
outputDir
:
File
,
prefix
:
String
,
summary
:
Summary
,
...
...
@@ -94,6 +109,14 @@ object BammetricsReport extends ReportBuilder {
plot
.
runLocal
()
}
/**
* Generate a line plot for insertsize
* @param outputDir OutputDir for the tsv and png file
* @param prefix Prefix of the tsv and png file
* @param summary Summary class
* @param libraryLevel Default false, when set true plot will be based on library stats instead of sample stats
* @param sampleId Default it selects all sampples, when sample is giving it limits to selected sample
*/
def
insertSizePlot
(
outputDir
:
File
,
prefix
:
String
,
summary
:
Summary
,
...
...
@@ -174,6 +197,14 @@ object BammetricsReport extends ReportBuilder {
plot
.
runLocal
()
}
/**
* Generate a line plot for wgs coverage
* @param outputDir OutputDir for the tsv and png file
* @param prefix Prefix of the tsv and png file
* @param summary Summary class
* @param libraryLevel Default false, when set true plot will be based on library stats instead of sample stats
* @param sampleId Default it selects all sampples, when sample is giving it limits to selected sample
*/
def
wgsHistogramPlot
(
outputDir
:
File
,
prefix
:
String
,
summary
:
Summary
,
...
...
public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/report/MultisampleReportBuilder.scala
View file @
1d306afd
...
...
@@ -4,22 +4,28 @@ package nl.lumc.sasc.biopet.core.report
* Created by pjvan_thof on 3/30/15.
*/
trait
MultisampleReportBuilder
extends
ReportBuilder
{
/** Method to generate a single sample page */
def
samplePage
(
sampleId
:
String
,
args
:
Map
[
String
,
Any
])
:
ReportPage
/** Default list of samples, can be override */
def
samplesSections
:
List
[(
String
,
ReportSection
)]
=
{
List
(
(
"Samples"
,
ReportSection
(
"/nl/lumc/sasc/biopet/core/report/samplesList.ssp"
))
)
}
/** Method to generate a single library page */
def
libraryPage
(
sampleId
:
String
,
libraryId
:
String
,
args
:
Map
[
String
,
Any
])
:
ReportPage
/** Default list of libraries, can be override */
def
libririesSections
:
List
[(
String
,
ReportSection
)]
=
{
List
(
(
"Libraries"
,
ReportSection
(
"/nl/lumc/sasc/biopet/core/report/librariesList.ssp"
))
)
}
/** Generate the samples page including a single sample page for each sample in the summary */
def
generateSamplesPage
(
args
:
Map
[
String
,
Any
])
:
ReportPage
=
{
val
samplePages
=
summary
.
samples
.
map
(
sampleId
=>
(
sampleId
->
samplePage
(
sampleId
,
args
++
Map
(
"sampleId"
->
Some
(
sampleId
)))))
...
...
@@ -27,6 +33,7 @@ trait MultisampleReportBuilder extends ReportBuilder {
ReportPage
(
samplePages
,
samplesSections
,
args
)
}
/** Generate the libraries page for a single sample with a subpage for eacht library */
def
generateLibraryPage
(
args
:
Map
[
String
,
Any
])
:
ReportPage
=
{
val
sampleId
=
args
(
"sampleId"
)
match
{
case
Some
(
x
)
=>
x
.
toString
...
...
public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/report/ReportBuilder.scala
View file @
1d306afd
...
...
@@ -2,7 +2,7 @@ package nl.lumc.sasc.biopet.core.report
import
java.io._
import
nl.lumc.sasc.biopet.core.
{
ToolCommandFuntion
,
BiopetJavaCommandLineFunction
,
ToolCommand
}
import
nl.lumc.sasc.biopet.core.
{
ToolCommandFuntion
,
ToolCommand
}
import
nl.lumc.sasc.biopet.core.summary.Summary
import
org.broadinstitute.gatk.utils.commandline.Input
import
org.fusesource.scalate.
{
TemplateSource
,
TemplateEngine
}
...
...
@@ -13,13 +13,16 @@ import nl.lumc.sasc.biopet.utils.IoUtils
*/
trait
ReportBuilderExtension
extends
ToolCommandFuntion
{
/** Report builder object */
val
builder
:
ReportBuilder
@Input
(
required
=
true
)
var
summaryFile
:
File
=
_
/** OutputDir for the report */
var
outputDir
:
File
=
_
/** Arguments that are passed on the commandline */
var
args
:
Map
[
String
,
String
]
=
Map
()
override
def
beforeGraph
:
Unit
=
{
...
...
@@ -28,6 +31,7 @@ trait ReportBuilderExtension extends ToolCommandFuntion {
javaMainClass
=
builder
.
getClass
.
getName
.
takeWhile
(
_
!=
'$'
)
}
/** Command to generate the report */
override
def
commandLine
:
String
=
{
super
.
commandLine
+
required
(
"--summary"
,
summaryFile
)
+
...
...
@@ -52,15 +56,19 @@ trait ReportBuilder extends ToolCommand {
}
}
/** summary object internaly */
private
var
setSummary
:
Summary
=
_
/** Retrival of summary, read only */
final
def
summary
=
setSummary
/** default args that are passed to all page withing the report */
def
pageArgs
:
Map
[
String
,
Any
]
=
Map
()
private
var
done
=
0
private
var
total
=
0
/** Main function to for building the report */
def
main
(
args
:
Array
[
String
])
:
Unit
=
{
logger
.
info
(
"Start"
)
...
...
@@ -95,7 +103,7 @@ trait ReportBuilder extends ToolCommand {
logger
.
info
(
"Parsing summary"
)
setSummary
=
new
Summary
(
cmdArgs
.
summary
)
total
=
countPages
(
indexPage
)
total
=
ReportBuilder
.
countPages
(
indexPage
)
logger
.
info
(
total
+
" pages to be generated"
)
logger
.
info
(
"Generate pages"
)
...
...
@@ -106,14 +114,21 @@ trait ReportBuilder extends ToolCommand {
logger
.
info
(
jobs
+
" Done"
)
}
/** This must be implemented, this will be the root page of the report */
def
indexPage
:
ReportPage
/** This must be implemented, this will because the title of the report */
def
reportName
:
String
def
countPages
(
page
:
ReportPage
)
:
Int
=
{
page
.
subPages
.
map
(
x
=>
countPages
(
x
.
_2
)).
fold
(
1
)(
_
+
_
)
}
/**
* This method will render the page and the subpages recursivly
* @param summary The summary object
* @param page Page to render
* @param outputDir Root output dir of the report
* @param path Path from root to current page
* @param args Args to add to this sub page, are args from current page are passed automaticly
* @return Number of pages including all subpages that are rendered
*/
def
generatePage
(
summary
:
Summary
,
page
:
ReportPage
,
outputDir
:
File
,
...
...
@@ -151,10 +166,17 @@ trait ReportBuilder extends ToolCommand {
object
ReportBuilder
{
/** Single template render engine, this will have a cache for all compile templates */
protected
val
engine
=
new
TemplateEngine
()
/** Cache of temp file for templates from the classpath / jar */
private
var
templateCache
:
Map
[
String
,
File
]
=
Map
()
/** This will give the total number of pages including all nested pages */
def
countPages
(
page
:
ReportPage
)
:
Int
=
{
page
.
subPages
.
map
(
x
=>
countPages
(
x
.
_2
)).
fold
(
1
)(
_
+
_
)
}
/**
* This method will render a template that is located in the classpath / jar
* @param location location in the classpath / jar
...
...
public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/report/ReportPage.scala
View file @
1d306afd
...
...
@@ -2,6 +2,10 @@ package nl.lumc.sasc.biopet.core.report
/**
* Created by pjvan_thof on 3/27/15.
*
* @param subPages Subpages for this page
* @param sections Sections for this page
* @param args Arguments for this page, this arguments get passed to all section and subpages
*/
case
class
ReportPage
(
subPages
:
List
[(
String
,
ReportPage
)],
sections
:
List
[(
String
,
ReportSection
)],
...
...
public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/report/ReportSection.scala
View file @
1d306afd
...
...
@@ -2,15 +2,18 @@ package nl.lumc.sasc.biopet.core.report
/**
* Created by pjvan_thof on 4/8/15.
*
* @param location Location inside the classpath / jar
* @param args arguments only for current section, this is not passed to other sub pages
*/
case
class
ReportSection
(
location
:
String
,
args
:
Map
[
String
,
Any
]
=
Map
()
,
intro
:
Option
[
String
]
=
None
)
{
def
render
(
args
:
Map
[
String
,
Any
])
:
String
=
{
(
intro
match
{
case
Some
(
template
)
=>
ReportBuilder
.
renderTemplate
(
location
,
args
++
this
.
args
)
case
_
=>
""
})
+
ReportBuilder
.
renderTemplate
(
location
,
args
++
this
.
args
)
args
:
Map
[
String
,
Any
]
=
Map
()
)
{
/**
* This method will render this section
* @param args Possible to give more arguments
* @return Rendered result for this section
*/
def
render
(
args
:
Map
[
String
,
Any
]
=
Map
())
:
String
=
{
ReportBuilder
.
renderTemplate
(
location
,
args
++
this
.
args
)
}
}
public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepReport.scala
View file @
1d306afd
...
...
@@ -6,21 +6,27 @@ import nl.lumc.sasc.biopet.core.report.{ ReportSection, ReportPage, ReportBuilde
import
nl.lumc.sasc.biopet.core.summary.
{
SummaryValue
,
Summary
}
import
nl.lumc.sasc.biopet.extensions.rscript.StackedBarPlot
//TODO: add basic report to flexiprep as single pipeline
/**
* Created by pjvan_thof on 3/30/15.
*/
object
FlexiprepReport
extends
ReportBuilder
{
val
reportName
=
"Flexiprep"
def
indexPage
=
ReportPage
(
List
(
"QC"
->
flexiprepPage
),
List
(
"Report"
->
ReportSection
(
"/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepFront.ssp"
)
),
Map
()
)
/** Index page for a flexiprep report */
def
indexPage
=
{
val
flexiprepPage
=
this
.
flexiprepPage
ReportPage
(
List
(
"QC"
->
flexiprepPage
),
List
(
"Report"
->
ReportSection
(
"/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepFront.ssp"
)
)
:::
flexiprepPage
.
sections
,
Map
()
)
}
def
flexiprepPage
=
ReportPage
(
/** Generate a QC report page for 1 single library, sampleId and libId must be defined in the arguments */
def
flexiprepPage
:
ReportPage
=
ReportPage
(
List
(),
List
(
"Read Summary"
->
ReportSection
(
"/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepReadSummary.ssp"
),
...
...
@@ -41,8 +47,14 @@ object FlexiprepReport extends ReportBuilder {
name
->
ReportSection
(
"/nl/lumc/sasc/biopet/pipelines/flexiprep/flexiprepFastaqcPlot.ssp"
,
Map
(
"plot"
->
tag
))
}
// FIXME: Not yet finished
/**
* Generated a stacked bar plot for reads QC
* @param outputDir OutputDir for plot
* @param prefix prefix for tsv and png file
* @param read Must give "R1" or "R2"
* @param summary Summary class
* @param sampleId Default selects all samples, when given plot is limits on given sample
*/
def
readSummaryPlot
(
outputDir
:
File
,
prefix
:
String
,
read
:
String
,
...
...
@@ -92,6 +104,14 @@ object FlexiprepReport extends ReportBuilder {
plot
.
runLocal
()
}
/**
* Generated a stacked bar plot for bases QC
* @param outputDir OutputDir for plot
* @param prefix prefix for tsv and png file
* @param read Must give "R1" or "R2"
* @param summary Summary class
* @param sampleId Default selects all samples, when given plot is limits on given sample
*/
def
baseSummaryPlot
(
outputDir
:
File
,
prefix
:
String
,
read
:
String
,
...
...
public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaReport.scala
View file @
1d306afd
...
...
@@ -18,10 +18,10 @@ class ShivaReport(val root: Configurable) extends ReportBuilderExtension {
override
val
defaultCoreMemory
=
3.0
}
/** Object for report generation for Shiva pipeline */
object
ShivaReport
extends
MultisampleReportBuilder
{
// FIXME: Not yet finished
/** Root page for the shiva report */
def
indexPage
=
{
val
regions
=
regionsPage
ReportPage
(
...
...
@@ -52,7 +52,9 @@ object ShivaReport extends MultisampleReportBuilder {
)
}
def
regionsPage
=
{
//TODO: Add variants per target
/** Generate a page with all target coverage stats */
def
regionsPage
:
Option
[(
String
,
ReportPage
)]
=
{
val
roi
=
summary
.
getValue
(
"shiva"
,
"settings"
,
"regions_of_interest"
)
val
amplicon
=
summary
.
getValue
(
"shiva"
,
"settings"
,
"amplicon_bed"
)
...
...
@@ -88,7 +90,8 @@ object ShivaReport extends MultisampleReportBuilder {
else
None
}
def
filesPage
=
ReportPage
(
List
(),
List
(
/** Files page, can be used general or at sample level */
def
filesPage
:
ReportPage
=
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
)),
...
...
@@ -97,7 +100,8 @@ object ShivaReport extends MultisampleReportBuilder {
"VCF files"
->
ReportSection
(
"/nl/lumc/sasc/biopet/pipelines/shiva/outputVcfFiles.ssp"
,
Map
(
"sampleId"
->
None
))
),
Map
())
def
samplePage
(
sampleId
:
String
,
args
:
Map
[
String
,
Any
])
=
{
/** Single sample page */
def
samplePage
(
sampleId
:
String
,
args
:
Map
[
String
,
Any
])
:
ReportPage
=
{
ReportPage
(
List
(
"Libraries"
->
generateLibraryPage
(
args
),
"Alignment"
->
BammetricsReport
.
bamMetricsPage
(
summary
,
Some
(
sampleId
),
None
),
...
...
@@ -112,7 +116,8 @@ object ShivaReport extends MultisampleReportBuilder {
),
args
)
}
def
libraryPage
(
sampleId
:
String
,
libId
:
String
,
args
:
Map
[
String
,
Any
])
=
{
/** Library page */
def
libraryPage
(
sampleId
:
String
,
libId
:
String
,
args
:
Map
[
String
,
Any
])
:
ReportPage
=
{
ReportPage
(
List
(
"Alignment"
->
BammetricsReport
.
bamMetricsPage
(
summary
,
Some
(
sampleId
),
Some
(
libId
)),
"QC"
->
FlexiprepReport
.
flexiprepPage
...
...
@@ -123,8 +128,17 @@ object ShivaReport extends MultisampleReportBuilder {
),
args
)
}
/** Name of the report */
def
reportName
=
"Shiva Report"
/**
* Generate a stackbar plot for found variants
* @param outputDir OutputDir for the tsv and png file
* @param prefix Prefix of the tsv and png file
* @param summary Summary class
* @param libraryLevel Default false, when set true plot will be based on library stats instead of sample stats
* @param sampleId Default it selects all sampples, when sample is giving it limits to selected sample
*/
def
variantSummaryPlot
(
outputDir
:
File
,
prefix
:
String
,
summary
:
Summary
,
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment