Skip to content
Snippets Groups Projects
Commit 76da8883 authored by Sander van der Zeeuw's avatar Sander van der Zeeuw
Browse files

added proper piping to bcftools and mpileup. [GENTRAP VARSCAN SHOULD BE TESTED]

parent 695ef882
No related branches found
No related tags found
No related merge requests found
...@@ -22,28 +22,66 @@ import org.broadinstitute.gatk.utils.commandline.{ Input, Output } ...@@ -22,28 +22,66 @@ import org.broadinstitute.gatk.utils.commandline.{ Input, Output }
/** This extension is based on bcftools 1.1-134 */ /** This extension is based on bcftools 1.1-134 */
class BcftoolsCall(val root: Configurable) extends Bcftools { class BcftoolsCall(val root: Configurable) extends Bcftools {
@Input(doc = "Input File") @Input(doc = "Input File", required = false)
var input: File = _ var input: File = _
@Output(doc = "output File") @Output(doc = "output File", required = false)
var output: File = _ var output: File = _
var O: String = null var O: Option[String] = None
var v: Boolean = config("v", default = true) var v: Boolean = config("v", default = false)
var c: Boolean = config("c", default = false) var c: Boolean = config("c", default = false)
var m: Boolean = config("m", default = false) var m: Boolean = config("m", default = false)
var r: Option[String] = config("r")
@Input(required = false)
var R: Option[String] = config("R")
var s: Option[String] = config("s")
@Input(required = false)
var S: Option[File] = config("S")
var t: Option[String] = config("t")
@Input(required = false)
var T: Option[String] = config("T")
var A: Boolean = config("A", default = false)
var f: List[String] = config("f", default = Nil)
var g: Option[Int] = config("g")
var i: Boolean = config("i", default = false)
var M: Boolean = config("M", default = false)
var V: Option[String] = config("V")
var C: Option[String] = config("C")
var n: Option[Float] = config("n")
var p: Option[Float] = config("p")
var P: Option[Float] = config("P")
var X: Boolean = config("X", default = false)
var Y: Boolean = config("Y", default = false)
override def beforeGraph(): Unit = { override def beforeGraph(): Unit = {
require(c != m) require(c != m)
} }
def cmdBase = required(executable) + def cmdLine = required(executable) +
required("call") + required("call") +
optional("-O", O) + optional("-O", O) +
conditional(v, "-v") + conditional(v, "-v") +
conditional(c, "-c") + conditional(c, "-c") +
conditional(m, "-m") conditional(m, "-m") +
def cmdPipeInput = cmdBase + "-" optional("-r", r) +
def cmdPipe = cmdBase + input optional("-R", R) +
def cmdLine = cmdPipe + " > " + required(output) optional("-s", s) +
optional("-S", S) +
optional("-t", t) +
optional("-T", T) +
conditional(A, "-A") +
repeat("-f", f) +
optional("-g", g) +
conditional(i, "-i") +
conditional(M, "-M") +
optional("-V", V) +
optional("-C", C) +
optional("-n", n) +
optional("-p", p) +
optional("-P", P) +
conditional(X, "-X") +
conditional(Y, "-Y") +
(if (outputAsStsout) "" else required("-o", output)) +
(if (inputAsStdin) "-" else required(input))
} }
...@@ -47,7 +47,7 @@ class SamtoolsMpileup(val root: Configurable) extends Samtools with Reference { ...@@ -47,7 +47,7 @@ class SamtoolsMpileup(val root: Configurable) extends Samtools with Reference {
reference = referenceFasta() reference = referenceFasta()
} }
def cmdBase = required(executable) + def cmdLine = required(executable) +
required("mpileup") + required("mpileup") +
optional("-f", reference) + optional("-f", reference) +
optional("-l", intervalBed) + optional("-l", intervalBed) +
...@@ -56,12 +56,9 @@ class SamtoolsMpileup(val root: Configurable) extends Samtools with Reference { ...@@ -56,12 +56,9 @@ class SamtoolsMpileup(val root: Configurable) extends Samtools with Reference {
optional("-d", depth) + optional("-d", depth) +
conditional(outputMappingQuality, "-s") + conditional(outputMappingQuality, "-s") +
conditional(disableBaq, "-B") + conditional(disableBaq, "-B") +
conditional(u, "-u") conditional(u, "-u") +
def cmdPipeInput = cmdBase + "-" (if (outputAsStsout) "" else required("-o", output)) +
def cmdPipe = cmdBase + repeat(input) (if (inputAsStdin) "-" else repeat(input))
/** Returns command to execute */
def cmdLine = cmdPipe + " > " + required(output)
} }
object SamtoolsMpileup { object SamtoolsMpileup {
......
...@@ -47,12 +47,9 @@ class MpileupToVcf(val root: Configurable) extends ToolCommandFuntion with Refer ...@@ -47,12 +47,9 @@ class MpileupToVcf(val root: Configurable) extends ToolCommandFuntion with Refer
override def defaultCoreMemory = 3.0 override def defaultCoreMemory = 3.0
override def defaults = ConfigUtils.mergeMaps(Map("samtoolsmpileup" -> Map("disable_baq" -> true, "min_map_quality" -> 1)),
super.defaults)
override def beforeGraph() { override def beforeGraph() {
super.beforeGraph() super.beforeGraph()
reference = referenceFasta().getAbsolutePath if (reference == null) reference = referenceFasta().getAbsolutePath
val samtoolsMpileup = new SamtoolsMpileup(this) val samtoolsMpileup = new SamtoolsMpileup(this)
} }
...@@ -66,20 +63,12 @@ class MpileupToVcf(val root: Configurable) extends ToolCommandFuntion with Refer ...@@ -66,20 +63,12 @@ class MpileupToVcf(val root: Configurable) extends ToolCommandFuntion with Refer
} }
} }
override def cmdLine = { override def cmdLine = super.cmdLine +
(if (inputMpileup == null) { required("-o", output) +
val samtoolsMpileup = new SamtoolsMpileup(this) optional("--minDP", minDP) +
samtoolsMpileup.reference = referenceFasta() optional("--minAP", minAP) +
samtoolsMpileup.input = List(inputBam) optional("--homoFraction", homoFraction) +
samtoolsMpileup.cmdPipe + " | " optional("--ploidy", ploidy) +
} else "") + required("--sample", sample) +
super.cmdLine + (if (inputAsStdin) "" else required("-I", inputMpileup))
required("-o", output) +
optional("--minDP", minDP) +
optional("--minAP", minAP) +
optional("--homoFraction", homoFraction) +
optional("--ploidy", ploidy) +
required("--sample", sample) +
(if (inputBam == null) required("-I", inputMpileup) else "")
}
} }
...@@ -48,6 +48,7 @@ class CustomVarScan(val root: Configurable) extends BiopetCommandLineFunction wi ...@@ -48,6 +48,7 @@ class CustomVarScan(val root: Configurable) extends BiopetCommandLineFunction wi
disableBaq = true disableBaq = true
depth = Option(1000000) depth = Option(1000000)
outputMappingQuality = true outputMappingQuality = true
} }
private def fixMpileup = new PythonCommandLineFunction { private def fixMpileup = new PythonCommandLineFunction {
...@@ -96,7 +97,6 @@ class CustomVarScan(val root: Configurable) extends BiopetCommandLineFunction wi ...@@ -96,7 +97,6 @@ class CustomVarScan(val root: Configurable) extends BiopetCommandLineFunction wi
def cmdLine: String = { def cmdLine: String = {
// FIXME: manual trigger of commandLine for version retrieval // FIXME: manual trigger of commandLine for version retrieval
mpileup.commandLine mpileup.commandLine
mpileup.cmdPipe + " | " + fixMpileup.commandLine + " | " + removeEmptyPile().commandLine + " | " + (mpileup | fixMpileup | removeEmptyPile() | varscan).commandLine + " && " + compress.commandLine + " && " + index.commandLine
varscan.commandLine + " && " + compress.commandLine + " && " + index.commandLine
} }
} }
...@@ -48,6 +48,8 @@ trait ShivaVariantcallingTrait extends SummaryQScript with SampleLibraryTag with ...@@ -48,6 +48,8 @@ trait ShivaVariantcallingTrait extends SummaryQScript with SampleLibraryTag with
} }
} }
override def defaults = Map("bcftoolscall" -> Map("f" -> List("GQ")))
/** Executed before script */ /** Executed before script */
def init(): Unit = { def init(): Unit = {
} }
...@@ -165,20 +167,11 @@ trait ShivaVariantcallingTrait extends SummaryQScript with SampleLibraryTag with ...@@ -165,20 +167,11 @@ trait ShivaVariantcallingTrait extends SummaryQScript with SampleLibraryTag with
mp.reference = referenceFasta() mp.reference = referenceFasta()
val bt = new BcftoolsCall(qscript) val bt = new BcftoolsCall(qscript)
bt.O = "z" bt.O = Some("z")
bt.v = true bt.v = true
bt.c = true bt.c = true
//TODO: add proper class with piping support, see also issue #114 add(mp | bt > outputFile)
add(new CommandLineFunction {
@Input
var input = inputBams
@Output
var output = outputFile
def commandLine: String = mp.cmdPipe + " | " + bt.cmdPipeInput + " > " + outputFile + " && tabix -p vcf " + outputFile
})
} }
} }
...@@ -195,27 +188,16 @@ trait ShivaVariantcallingTrait extends SummaryQScript with SampleLibraryTag with ...@@ -195,27 +188,16 @@ trait ShivaVariantcallingTrait extends SummaryQScript with SampleLibraryTag with
val mp = new SamtoolsMpileup(qscript) val mp = new SamtoolsMpileup(qscript)
mp.input :+= inputBam mp.input :+= inputBam
mp.u = true mp.u = true
//TODO: proper piping should be implemented
mp.reference = referenceFasta() mp.reference = referenceFasta()
val bt = new BcftoolsCall(qscript) val bt = new BcftoolsCall(qscript)
bt.O = "z" bt.O = Some("z")
bt.v = true bt.v = true
bt.c = true bt.c = true
bt.output = new File(outputDir, inputBam.getName + ".vcf.gz")
val sampleVcf = new File(outputDir, inputBam.getName + ".vcf.gz") add(mp | bt)
bt.output
//TODO: add proper class with piping support, see also issue #114
add(new CommandLineFunction {
@Input
var input = inputBam
@Output
var output = sampleVcf
def commandLine: String = mp.cmdPipe + " | " + bt.cmdPipeInput + " > " + output + " && tabix -p vcf " + output
})
sampleVcf
} }
val cv = new CombineVariants(qscript) val cv = new CombineVariants(qscript)
...@@ -238,10 +220,16 @@ trait ShivaVariantcallingTrait extends SummaryQScript with SampleLibraryTag with ...@@ -238,10 +220,16 @@ trait ShivaVariantcallingTrait extends SummaryQScript with SampleLibraryTag with
def addJobs() { def addJobs() {
val rawFiles = inputBams.map(bamFile => { val rawFiles = inputBams.map(bamFile => {
val mp = new SamtoolsMpileup(qscript) {
override def configName = "samtoolsmpileup"
override def defaults = Map("samtoolsmpileup" -> Map("disable_baq" -> true, "min_map_quality" -> 1))
}
mp.input :+= bamFile
val m2v = new MpileupToVcf(qscript) val m2v = new MpileupToVcf(qscript)
m2v.inputBam = bamFile m2v.inputBam = bamFile
m2v.output = new File(outputDir, bamFile.getName.stripSuffix(".bam") + ".raw.vcf") m2v.output = new File(outputDir, bamFile.getName.stripSuffix(".bam") + ".raw.vcf")
add(m2v) add(mp | m2v)
val vcfFilter = new VcfFilter(qscript) { val vcfFilter = new VcfFilter(qscript) {
override def configName = "vcffilter" override def configName = "vcffilter"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment