diff --git a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/BuildBamIndex.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/BuildBamIndex.scala new file mode 100644 index 0000000000000000000000000000000000000000..392169043c9fa8e10852b4ff61694892c7531b3c --- /dev/null +++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/BuildBamIndex.scala @@ -0,0 +1,24 @@ +package nl.lumc.sasc.biopet.extensions.picard + +import java.io.File + +import nl.lumc.sasc.biopet.utils.config.Configurable +import org.broadinstitute.gatk.utils.commandline.{ Output, Input } + +/** + * Created by sajvanderzeeuw on 6-10-15. + */ +class BuildBamIndex(val root: Configurable) extends Picard { + + javaMainClass = new picard.sam.BuildBamIndex().getClass.getName + + @Input(doc = "The input SAM or BAM files to analyze.", required = true) + var input: File = _ + + @Output(doc = "The output file to bam file to", required = true) + var output: File = _ + + override def cmdLine = super.cmdLine + + required("INPUT=", input, spaceSeparated = false) + + required("OUTPUT=", output, spaceSeparated = false) +} diff --git a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsSort.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsSort.scala index c8f9cf52007e9a74e344e3f78d74ec4ab1d2ac27..5df2a3a7b47f5771dcdbd033ef2c273ba70ed89f 100644 --- a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsSort.scala +++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsSort.scala @@ -3,7 +3,7 @@ package nl.lumc.sasc.biopet.extensions.samtools import java.io.File import nl.lumc.sasc.biopet.utils.config.Configurable -import org.broadinstitute.gatk.utils.commandline.{Input, Output} +import org.broadinstitute.gatk.utils.commandline.{ Input, Output } /** * Created by pjvanthof on 22/09/15. diff --git a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsView.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsView.scala index fca6e84ccd15bfd6af4c72723269e13afda7f13c..09e8bff4212602d0689ea4f43eeee947b29c870e 100644 --- a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsView.scala +++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsView.scala @@ -28,7 +28,7 @@ class SamtoolsView(val root: Configurable) extends Samtools { @Output(doc = "output File") var output: File = null - var quality: Option[Int] = config("quality") + var q: Option[Int] = config("q") var b: Boolean = config("b", default = false) var h: Boolean = config("h", default = false) var f: List[String] = config("f", default = List.empty[String]) @@ -36,7 +36,7 @@ class SamtoolsView(val root: Configurable) extends Samtools { def cmdBase = required(executable) + required("view") + - optional("-q", quality) + + optional("-q", q) + repeat("-f", f) + repeat("-F", F) + conditional(b, "-b") + diff --git a/public/carp/src/main/scala/nl/lumc/sasc/biopet/pipelines/carp/Carp.scala b/public/carp/src/main/scala/nl/lumc/sasc/biopet/pipelines/carp/Carp.scala index 71b51067a73baaf49c7d1a095d13d1fa584e7e96..de37b352ecf8a9091ee67d1b455e85087156f642 100644 --- a/public/carp/src/main/scala/nl/lumc/sasc/biopet/pipelines/carp/Carp.scala +++ b/public/carp/src/main/scala/nl/lumc/sasc/biopet/pipelines/carp/Carp.scala @@ -18,11 +18,12 @@ package nl.lumc.sasc.biopet.pipelines.carp import java.io.File import nl.lumc.sasc.biopet.core._ +import nl.lumc.sasc.biopet.extensions.samtools.SamtoolsView import nl.lumc.sasc.biopet.utils.config._ import nl.lumc.sasc.biopet.core.summary.SummaryQScript import nl.lumc.sasc.biopet.extensions.Ln import nl.lumc.sasc.biopet.extensions.macs2.Macs2CallPeak -import nl.lumc.sasc.biopet.extensions.picard.MergeSamFiles +import nl.lumc.sasc.biopet.extensions.picard.{ BuildBamIndex, MergeSamFiles } import nl.lumc.sasc.biopet.pipelines.bammetrics.BamMetrics import nl.lumc.sasc.biopet.pipelines.bamtobigwig.Bam2Wig import nl.lumc.sasc.biopet.pipelines.mapping.Mapping @@ -40,8 +41,16 @@ class Carp(val root: Configurable) extends QScript with MultiSampleQScript with override def defaults = Map( "mapping" -> Map( - "skip_markduplicates" -> true, + "skip_markduplicates" -> false, "aligner" -> "bwa-mem" + ), + "samtoolsview" -> Map("q" -> 10) + ) + + override def fixedValues = Map( + "samtoolsview" -> Map( + "h" -> true, + "b" -> true ) ) @@ -93,6 +102,7 @@ class Carp(val root: Configurable) extends QScript with MultiSampleQScript with } val bamFile = createFile(".bam") + val bamFileFilter = createFile(".filter.bam") val controls: List[String] = config("control", default = Nil) def addJobs(): Unit = { @@ -114,10 +124,29 @@ class Carp(val root: Configurable) extends QScript with MultiSampleQScript with val bamMetrics = BamMetrics(qscript, bamFile, new File(sampleDir, "metrics"), sampleId = Some(sampleId)) addAll(bamMetrics.functions) addSummaryQScript(bamMetrics) + + val bamMetricsFilter = BamMetrics(qscript, bamFileFilter, new File(sampleDir, "metrics-filter"), sampleId = Some(sampleId)) + addAll(bamMetricsFilter.functions) + bamMetricsFilter.summaryName = "bammetrics-filter" + addSummaryQScript(bamMetricsFilter) + addAll(Bam2Wig(qscript, bamFile).functions) + addAll(Bam2Wig(qscript, bamFileFilter).functions) + + val samtoolsView = new SamtoolsView(qscript) + samtoolsView.input = bamFile + samtoolsView.output = bamFileFilter + samtoolsView.b = true + samtoolsView.h = true + add(samtoolsView) + + val buildBamIndex = new BuildBamIndex(qscript) + buildBamIndex.input = bamFileFilter + buildBamIndex.output = swapExt(bamFileFilter.getParent, bamFileFilter, ".bam", ".bai") + add(buildBamIndex) val macs2 = new Macs2CallPeak(qscript) - macs2.treatment = bamFile + macs2.treatment = bamFileFilter macs2.name = Some(sampleId) macs2.outputdir = sampleDir + File.separator + "macs2" + File.separator + sampleId + File.separator add(macs2) @@ -155,8 +184,8 @@ class Carp(val root: Configurable) extends QScript with MultiSampleQScript with if (!samples.contains(controlId)) throw new IllegalStateException("For sample: " + sampleId + " this control: " + controlId + " does not exist") val macs2 = new Macs2CallPeak(this) - macs2.treatment = sample.bamFile - macs2.control = samples(controlId).bamFile + macs2.treatment = sample.bamFileFilter + macs2.control = samples(controlId).bamFileFilter macs2.name = Some(sampleId + "_VS_" + controlId) macs2.outputdir = sample.sampleDir + File.separator + "macs2" + File.separator + macs2.name.get + File.separator add(macs2)