diff --git a/biopet-aggregate/copy-src.sh b/biopet-aggregate/copy-src.sh new file mode 100755 index 0000000000000000000000000000000000000000..fdfefa48461afe7f1f8e1b4aad226ab818caee25 --- /dev/null +++ b/biopet-aggregate/copy-src.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +DIR=`readlink -f \`dirname $0\`` + +cp -r $DIR/../*/*/src/* $DIR/src + diff --git a/biopet-aggregate/pom.xml b/biopet-aggregate/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..4b89651970b5b9c05bf599a6b14d44b161793663 --- /dev/null +++ b/biopet-aggregate/pom.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <parent> + <artifactId>BiopetRoot</artifactId> + <groupId>nl.lumc.sasc</groupId> + <version>0.5.0-SNAPSHOT</version> + </parent> + <modelVersion>4.0.0</modelVersion> + + <artifactId>BiopetAggregate</artifactId> + + <dependencies> + <dependency> + <groupId>org.testng</groupId> + <artifactId>testng</artifactId> + <version>6.8</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.mockito</groupId> + <artifactId>mockito-all</artifactId> + <version>1.9.5</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.scalatest</groupId> + <artifactId>scalatest_2.10</artifactId> + <version>2.2.1</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>nl.lumc.sasc</groupId> + <artifactId>BiopetProtectedPackage</artifactId> + <version>0.5.0-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + <version>18.0</version> + </dependency> + + </dependencies> + +</project> \ No newline at end of file diff --git a/biopet-aggregate/rm-src.sh b/biopet-aggregate/rm-src.sh new file mode 100755 index 0000000000000000000000000000000000000000..f0a2e2b9307150913a9705bd237f226dc157157e --- /dev/null +++ b/biopet-aggregate/rm-src.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +DIR=`readlink -f \`dirname $0\`` + +rm -r $DIR/src/main $DIR/src/test + diff --git a/biopet-aggregate/src/.gitignore b/biopet-aggregate/src/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..59e4d6049a3756e3d0c5414611e042fcc5c1bce6 --- /dev/null +++ b/biopet-aggregate/src/.gitignore @@ -0,0 +1,2 @@ +main +test diff --git a/pom.xml b/pom.xml index 143a9095a763bbdcc323dc6e4299e534e5f0bc33..964da3f4aaf87824c6b9fade63d5bc607fe0e0aa 100644 --- a/pom.xml +++ b/pom.xml @@ -17,5 +17,6 @@ <module>public</module> <module>protected</module> <module>external-example</module> + <!--<module>biopet-aggregate</module>--> </modules> </project> diff --git a/protected/biopet-gatk-pipelines/src/main/scala/nl/lumc/sasc/biopet/pipelines/gatk/GatkVariantcalling.scala b/protected/biopet-gatk-pipelines/src/main/scala/nl/lumc/sasc/biopet/pipelines/gatk/GatkVariantcalling.scala index 6b99ca1706a0280a88b881e74e11a644e5ef1ab2..750cbee21adea6c059d939aad518ca9aed0eb06e 100644 --- a/protected/biopet-gatk-pipelines/src/main/scala/nl/lumc/sasc/biopet/pipelines/gatk/GatkVariantcalling.scala +++ b/protected/biopet-gatk-pipelines/src/main/scala/nl/lumc/sasc/biopet/pipelines/gatk/GatkVariantcalling.scala @@ -153,11 +153,11 @@ class GatkVariantcalling(val root: Configurable) extends QScript with BiopetQScr scriptOutput.rawVcfFile = m2v.output val vcfFilter = new VcfFilter(this) { - override def defaults = ConfigUtils.mergeMaps(Map("min_sample_depth" -> 8, + override def defaults = Map("min_sample_depth" -> 8, "min_alternate_depth" -> 2, "min_samples_pass" -> 1, "filter_ref_calls" -> true - ), super.defaults) + ) } vcfFilter.inputVcf = m2v.output vcfFilter.outputVcf = swapExt(outputDir, m2v.output, ".vcf", ".filter.vcf.gz") diff --git a/protected/biopet-gatk-pipelines/src/test/scala/nl/lumc/sasc/biopet/pipelines/gatk/ShivaTest.scala b/protected/biopet-gatk-pipelines/src/test/scala/nl/lumc/sasc/biopet/pipelines/gatk/ShivaTest.scala index 66f0bfcc564503567782bcc1e35b0cc0899e6212..f1b326b7017b129eaf6edf0d44014af4f9507b7b 100644 --- a/protected/biopet-gatk-pipelines/src/test/scala/nl/lumc/sasc/biopet/pipelines/gatk/ShivaTest.scala +++ b/protected/biopet-gatk-pipelines/src/test/scala/nl/lumc/sasc/biopet/pipelines/gatk/ShivaTest.scala @@ -39,31 +39,27 @@ class ShivaTest extends TestNGSuite with Matchers { val bool = Array(true, false) for ( - s1 <- bool; s2 <- bool; s3 <- bool; multi <- bool; single <- bool; - library <- bool; dbsnp <- bool; covariates <- bool; realign <- bool; baseRecalibration <- bool - ) yield Array("", s1, s2, s3, multi, single, library, dbsnp, covariates, realign, baseRecalibration) + s1 <- bool; s2 <- bool; multi <- bool; + dbsnp <- bool; realign <- bool; baseRecalibration <- bool + ) yield Array("", s1, s2, multi, dbsnp, realign, baseRecalibration) } @Test(dataProvider = "shivaOptions") - def testShiva(f: String, sample1: Boolean, sample2: Boolean, sample3: Boolean, - multi: Boolean, single: Boolean, library: Boolean, dbsnp: Boolean, - covariates: Boolean, realign: Boolean, baseRecalibration: Boolean): Unit = { + def testShiva(f: String, sample1: Boolean, sample2: Boolean, + multi: Boolean, dbsnp: Boolean, + realign: Boolean, baseRecalibration: Boolean): Unit = { val map = { var m: Map[String, Any] = ShivaTest.config if (sample1) m = ConfigUtils.mergeMaps(ShivaTest.sample1, m) if (sample2) m = ConfigUtils.mergeMaps(ShivaTest.sample2, m) - if (sample3) m = ConfigUtils.mergeMaps(ShivaTest.sample3, m) if (dbsnp) m = ConfigUtils.mergeMaps(Map("dbsnp" -> "test"), m) ConfigUtils.mergeMaps(Map("multisample_variantcalling" -> multi, - "single_sample_variantcalling" -> single, - "library_variantcalling" -> library, - "use_analyze_covariates" -> covariates, "use_indel_realigner" -> realign, "use_base_recalibration" -> baseRecalibration), m) } - if (!sample1 && !sample2 && !sample3) { // When no samples + if (!sample1 && !sample2) { // When no samples intercept[IllegalArgumentException] { initPipeline(map).script() } @@ -71,20 +67,18 @@ class ShivaTest extends TestNGSuite with Matchers { val pipeline = initPipeline(map) pipeline.script() - val numberLibs = (if (sample1) 1 else 0) + (if (sample2) 1 else 0) + (if (sample3) 2 else 0) - val numberSamples = (if (sample1) 1 else 0) + (if (sample2) 1 else 0) + (if (sample3) 1 else 0) + val numberLibs = (if (sample1) 1 else 0) + (if (sample2) 2 else 0) + val numberSamples = (if (sample1) 1 else 0) + (if (sample2) 1 else 0) - pipeline.functions.count(_.isInstanceOf[MarkDuplicates]) shouldBe (numberLibs + (if (sample3) 1 else 0)) + pipeline.functions.count(_.isInstanceOf[MarkDuplicates]) shouldBe (numberLibs + (if (sample2) 1 else 0)) // Gatk preprocess - pipeline.functions.count(_.isInstanceOf[IndelRealigner]) shouldBe (numberLibs + (if (sample3) 1 else 0)) * (if (realign) 1 else 0) - pipeline.functions.count(_.isInstanceOf[RealignerTargetCreator]) shouldBe (numberLibs + (if (sample3) 1 else 0)) * (if (realign) 1 else 0) - pipeline.functions.count(_.isInstanceOf[BaseRecalibrator]) shouldBe (if (dbsnp && baseRecalibration) numberLibs else 0) * (if (covariates) 2 else 1) - pipeline.functions.count(_.isInstanceOf[AnalyzeCovariates]) shouldBe (if (dbsnp && covariates && baseRecalibration) numberLibs else 0) + pipeline.functions.count(_.isInstanceOf[IndelRealigner]) shouldBe (numberLibs * (if (realign) 1 else 0) + (if (sample2 && realign) 1 else 0)) + pipeline.functions.count(_.isInstanceOf[RealignerTargetCreator]) shouldBe (numberLibs * (if (realign) 1 else 0) + (if (sample2 && realign) 1 else 0)) + pipeline.functions.count(_.isInstanceOf[BaseRecalibrator]) shouldBe (if (dbsnp && baseRecalibration) numberLibs else 0) pipeline.functions.count(_.isInstanceOf[PrintReads]) shouldBe (if (dbsnp && baseRecalibration) numberLibs else 0) - pipeline.functions.count(_.isInstanceOf[VcfStats]) shouldBe (if (multi) 2 else 0) + - (if (single) numberSamples * 2 else 0) + (if (library) numberLibs * 2 else 0) + pipeline.functions.count(_.isInstanceOf[VcfStats]) shouldBe (if (multi) 2 else 0) } } } @@ -115,7 +109,6 @@ object ShivaTest { "dir" -> "test", "vep_script" -> "test", "output_dir" -> outputDir, - "reference" -> (outputDir + File.separator + "ref.fa"), "reference_fasta" -> (outputDir + File.separator + "ref.fa"), "gatk_jar" -> "test", "samtools" -> Map("exe" -> "test"), @@ -147,23 +140,14 @@ object ShivaTest { ))) val sample2 = Map( - "samples" -> Map("sample2" -> Map("libraries" -> Map( + "samples" -> Map("sample3" -> Map("libraries" -> Map( "lib1" -> Map( "R1" -> inputTouch("2_1_R1.fq"), "R2" -> inputTouch("2_1_R2.fq") - ) - ) - ))) - - val sample3 = Map( - "samples" -> Map("sample3" -> Map("libraries" -> Map( - "lib1" -> Map( - "R1" -> inputTouch("3_1_R1.fq"), - "R2" -> inputTouch("3_1_R2.fq") ), "lib2" -> Map( - "R1" -> inputTouch("3_2_R1.fq"), - "R2" -> inputTouch("3_2_R2.fq") + "R1" -> inputTouch("2_2_R1.fq"), + "R2" -> inputTouch("2_2_R2.fq") ) ) ))) diff --git a/protected/biopet-gatk-pipelines/src/test/scala/nl/lumc/sasc/biopet/pipelines/gatk/ShivaVariantcallingTest.scala b/protected/biopet-gatk-pipelines/src/test/scala/nl/lumc/sasc/biopet/pipelines/gatk/ShivaVariantcallingTest.scala index 8e8a1eddf9e5d6b5aab36c4c6fea7d35ea2da82e..1740b33ac108a4c20205973a2410aabbeb4dbd83 100644 --- a/protected/biopet-gatk-pipelines/src/test/scala/nl/lumc/sasc/biopet/pipelines/gatk/ShivaVariantcallingTest.scala +++ b/protected/biopet-gatk-pipelines/src/test/scala/nl/lumc/sasc/biopet/pipelines/gatk/ShivaVariantcallingTest.scala @@ -131,7 +131,6 @@ object ShivaVariantcallingTest { "cache" -> true, "dir" -> "test", "vep_script" -> "test", - "reference" -> (outputDir + File.separator + "ref.fa"), "reference_fasta" -> (outputDir + File.separator + "ref.fa"), "gatk_jar" -> "test", "samtools" -> Map("exe" -> "test"), diff --git a/public/basty/src/main/scala/nl/lumc/sasc/biopet/pipelines/basty/BastyTrait.scala b/public/basty/src/main/scala/nl/lumc/sasc/biopet/pipelines/basty/BastyTrait.scala index ab6692982d698ef8d4ea41593f07b55b01671db8..d9085369f0316b6a0474fe02cd15ef07c683713a 100644 --- a/public/basty/src/main/scala/nl/lumc/sasc/biopet/pipelines/basty/BastyTrait.scala +++ b/public/basty/src/main/scala/nl/lumc/sasc/biopet/pipelines/basty/BastyTrait.scala @@ -35,10 +35,10 @@ trait BastyTrait extends MultiSampleQScript { def variantcallers = List("freebayes") - override def defaults = ConfigUtils.mergeMaps(Map( + override def defaults = Map( "ploidy" -> 1, "variantcallers" -> variantcallers - ), super.defaults) + ) lazy val shiva: ShivaTrait = new Shiva(qscript) diff --git a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/CommandLineResources.scala b/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/CommandLineResources.scala index 300cd4cdb0d240f19c709ac53e35b180e8675504..0fdc946e31808db3b41eb7e81bd5377c3ec563f3 100644 --- a/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/CommandLineResources.scala +++ b/public/biopet-core/src/main/scala/nl/lumc/sasc/biopet/core/CommandLineResources.scala @@ -85,9 +85,11 @@ trait CommandLineResources extends CommandLineFunction with Configurable { this.freeze() } + var threadsCorrection = 0 + protected def combineResources(commands: List[CommandLineResources]): Unit = { commands.foreach(_.setResources()) - nCoresRequest = Some(commands.map(_.threads).sum) + nCoresRequest = Some(commands.map(_.threads).sum + threadsCorrection) _coreMemory = commands.map(cmd => cmd.coreMemeory * (cmd.threads.toDouble / threads.toDouble)).sum memoryLimit = Some(_coreMemory * threads) diff --git a/public/biopet-extentsions/pom.xml b/public/biopet-extensions/pom.xml similarity index 100% rename from public/biopet-extentsions/pom.xml rename to public/biopet-extensions/pom.xml diff --git a/public/biopet-extentsions/src/main/resources/nl/lumc/sasc/biopet/extensions/breakdancer/breakdancer2vcf.py b/public/biopet-extensions/src/main/resources/nl/lumc/sasc/biopet/extensions/breakdancer/breakdancer2vcf.py similarity index 100% rename from public/biopet-extentsions/src/main/resources/nl/lumc/sasc/biopet/extensions/breakdancer/breakdancer2vcf.py rename to public/biopet-extensions/src/main/resources/nl/lumc/sasc/biopet/extensions/breakdancer/breakdancer2vcf.py diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Bgzip.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Bgzip.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Bgzip.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Bgzip.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Bowtie.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Bowtie.scala similarity index 98% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Bowtie.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Bowtie.scala index 5a574b729fb7fa4c7b27c674845f069fd01cb4ca..fc2f95e4e33f54dca689568bb48cb8489ed3e65d 100644 --- a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Bowtie.scala +++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Bowtie.scala @@ -47,7 +47,7 @@ class Bowtie(val root: Configurable) extends BiopetCommandLineFunction with Refe override def defaultCoreMemory = 4.0 override def defaultThreads = 8 - var sam: Boolean = config("sam", default = true) + var sam: Boolean = config("sam", default = false) var sam_RG: Option[String] = config("sam-RG") var seedlen: Option[Int] = config("seedlen") var seedmms: Option[Int] = config("seedmms") diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cat.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cat.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cat.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cat.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cufflinks.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cufflinks.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cufflinks.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cufflinks.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cuffquant.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cuffquant.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cuffquant.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cuffquant.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cutadapt.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cutadapt.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cutadapt.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cutadapt.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Fastqc.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Fastqc.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Fastqc.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Fastqc.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Freebayes.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Freebayes.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Freebayes.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Freebayes.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Gsnap.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Gsnap.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Gsnap.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Gsnap.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Gzip.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Gzip.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Gzip.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Gzip.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/HtseqCount.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/HtseqCount.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/HtseqCount.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/HtseqCount.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Ln.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Ln.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Ln.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Ln.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Pbzip2.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Pbzip2.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Pbzip2.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Pbzip2.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Raxml.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Raxml.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Raxml.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Raxml.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/RunGubbins.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/RunGubbins.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/RunGubbins.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/RunGubbins.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Sha1sum.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Sha1sum.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Sha1sum.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Sha1sum.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Sickle.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Sickle.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Sickle.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Sickle.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Stampy.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Stampy.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Stampy.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Stampy.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Star.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Star.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Star.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Star.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Tabix.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Tabix.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Tabix.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Tabix.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Tophat.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Tophat.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Tophat.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Tophat.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/VariantEffectPredictor.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/VariantEffectPredictor.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/VariantEffectPredictor.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/VariantEffectPredictor.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/WigToBigWig.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/WigToBigWig.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/WigToBigWig.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/WigToBigWig.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Zcat.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Zcat.scala similarity index 97% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Zcat.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Zcat.scala index 5c7ebd0ca6382584bc45b455527e50bdede1a673..be5eb6700c6c1610c33c0e1f0fa132089db81bfc 100644 --- a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/Zcat.scala +++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Zcat.scala @@ -36,7 +36,7 @@ class Zcat(val root: Configurable) extends BiopetCommandLineFunction { /** Returns command to execute */ def cmdLine = required(executable) + - (if (inputAsStdin) "" else required(input)) + + (if (inputAsStdin) "" else repeat(input)) + (if (outputAsStsout) "" else " > " + required(output)) } diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bcftools/Bcftools.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bcftools/Bcftools.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bcftools/Bcftools.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bcftools/Bcftools.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bcftools/BcftoolsCall.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bcftools/BcftoolsCall.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bcftools/BcftoolsCall.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bcftools/BcftoolsCall.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/Bedtools.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/Bedtools.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/Bedtools.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/Bedtools.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsCoverage.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsCoverage.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsCoverage.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsCoverage.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsGroupby.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsGroupby.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsGroupby.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsGroupby.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsIntersect.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsIntersect.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsIntersect.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bedtools/BedtoolsIntersect.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/Breakdancer.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/Breakdancer.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/Breakdancer.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/Breakdancer.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/BreakdancerCaller.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/BreakdancerCaller.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/BreakdancerCaller.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/BreakdancerCaller.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/BreakdancerConfig.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/BreakdancerConfig.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/BreakdancerConfig.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/BreakdancerConfig.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/BreakdancerVCF.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/BreakdancerVCF.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/BreakdancerVCF.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/breakdancer/BreakdancerVCF.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/Bwa.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/Bwa.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/Bwa.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/Bwa.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaAln.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaAln.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaAln.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaAln.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaMem.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaMem.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaMem.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaMem.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSampe.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSampe.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSampe.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSampe.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSamse.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSamse.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSamse.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSamse.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/clever/CleverCaller.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/clever/CleverCaller.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/clever/CleverCaller.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/clever/CleverCaller.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/Conifer.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/Conifer.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/Conifer.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/Conifer.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferAnalyze.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferAnalyze.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferAnalyze.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferAnalyze.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferCall.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferCall.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferCall.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferCall.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferExport.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferExport.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferExport.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferExport.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferRPKM.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferRPKM.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferRPKM.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/conifer/ConiferRPKM.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/delly/Delly.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/delly/Delly.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/delly/Delly.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/delly/Delly.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/delly/DellyCaller.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/delly/DellyCaller.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/delly/DellyCaller.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/delly/DellyCaller.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/gatk/CombineVariants.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/gatk/CombineVariants.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/gatk/CombineVariants.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/gatk/CombineVariants.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/gatk/Gatk.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/gatk/Gatk.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/gatk/Gatk.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/gatk/Gatk.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/igvtools/IGVTools.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/igvtools/IGVTools.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/igvtools/IGVTools.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/igvtools/IGVTools.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/igvtools/IGVToolsCount.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/igvtools/IGVToolsCount.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/igvtools/IGVToolsCount.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/igvtools/IGVToolsCount.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/kraken/Kraken.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/kraken/Kraken.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/kraken/Kraken.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/kraken/Kraken.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/kraken/KrakenReport.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/kraken/KrakenReport.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/kraken/KrakenReport.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/kraken/KrakenReport.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/macs2/Macs2.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/macs2/Macs2.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/macs2/Macs2.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/macs2/Macs2.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/macs2/Macs2CallPeak.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/macs2/Macs2CallPeak.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/macs2/Macs2CallPeak.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/macs2/Macs2CallPeak.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/AddOrReplaceReadGroups.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/AddOrReplaceReadGroups.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/AddOrReplaceReadGroups.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/AddOrReplaceReadGroups.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/BedToIntervalList.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/BedToIntervalList.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/BedToIntervalList.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/BedToIntervalList.scala 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-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CalculateHsMetrics.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CalculateHsMetrics.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CalculateHsMetrics.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CalculateHsMetrics.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectAlignmentSummaryMetrics.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectAlignmentSummaryMetrics.scala similarity index 93% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectAlignmentSummaryMetrics.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectAlignmentSummaryMetrics.scala index ff19efe11676d2ca66adc172790080f9a9823783..b2fb2097efefb107ab4f00c3cadde5e9285a2568 100644 --- a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectAlignmentSummaryMetrics.scala +++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectAlignmentSummaryMetrics.scala @@ -17,12 +17,13 @@ package nl.lumc.sasc.biopet.extensions.picard import java.io.File +import nl.lumc.sasc.biopet.core.Reference import nl.lumc.sasc.biopet.utils.config.Configurable import nl.lumc.sasc.biopet.core.summary.Summarizable import org.broadinstitute.gatk.utils.commandline.{ Argument, Input, Output } /** Extension for picard CollectAlignmentSummaryMetrics */ -class CollectAlignmentSummaryMetrics(val root: Configurable) extends Picard with Summarizable { +class CollectAlignmentSummaryMetrics(val root: Configurable) extends Picard with Summarizable with Reference { javaMainClass = new picard.analysis.CollectAlignmentSummaryMetrics().getClass.getName @Input(doc = "The input SAM or BAM files to analyze. Must be coordinate sorted.", required = true) @@ -41,7 +42,7 @@ class CollectAlignmentSummaryMetrics(val root: Configurable) extends Picard with var output: File = _ @Argument(doc = "Reference file", required = false) - var reference: File = config("reference") + var reference: File = _ @Argument(doc = "ASSUME_SORTED", required = false) var assumeSorted: Boolean = config("assumeSorted", default = true) @@ -52,6 +53,11 @@ class CollectAlignmentSummaryMetrics(val root: Configurable) extends Picard with @Argument(doc = "STOP_AFTER", required = false) var stopAfter: Option[Long] = config("stopAfter") + override def beforeGraph(): Unit = { + super.beforeGraph() + if (reference == null) reference = referenceFasta() + } + /** Returns command to execute */ override def cmdLine = super.cmdLine + required("INPUT=", input, spaceSeparated = false) + diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectGcBiasMetrics.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectGcBiasMetrics.scala similarity index 98% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectGcBiasMetrics.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectGcBiasMetrics.scala index ada8007283b76122005cc5d4e6a0a39c161ea1aa..0479bbb754d62a13e4e7d99bf6ac949b8cd69aec 100644 --- a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectGcBiasMetrics.scala +++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectGcBiasMetrics.scala @@ -53,6 +53,8 @@ class CollectGcBiasMetrics(val root: Configurable) extends Picard with Summariza @Argument(doc = "IS_BISULFITE_SEQUENCED", required = false) var isBisulfiteSequinced: Option[Boolean] = config("isbisulfitesequinced") + override def defaultCoreMemory = 8.0 + override def beforeGraph() { super.beforeGraph() if (outputChart == null) outputChart = new File(output + ".pdf") diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectInsertSizeMetrics.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectInsertSizeMetrics.scala similarity index 95% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectInsertSizeMetrics.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectInsertSizeMetrics.scala index 3c4693b5ead3929b9b1bf7eac95b69c3bed0c83c..88d2eab6091ef4dafa02b46395ac1c78188ee3c2 100644 --- a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectInsertSizeMetrics.scala +++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectInsertSizeMetrics.scala @@ -17,6 +17,7 @@ package nl.lumc.sasc.biopet.extensions.picard import java.io.File +import nl.lumc.sasc.biopet.core.Reference import nl.lumc.sasc.biopet.utils.config.Configurable import nl.lumc.sasc.biopet.core.summary.Summarizable import org.broadinstitute.gatk.utils.commandline.{ Argument, Input, Output } @@ -24,7 +25,7 @@ import org.broadinstitute.gatk.utils.commandline.{ Argument, Input, Output } import scala.collection.immutable.Nil /** Extension for picard CollectInsertSizeMetrics */ -class CollectInsertSizeMetrics(val root: Configurable) extends Picard with Summarizable { +class CollectInsertSizeMetrics(val root: Configurable) extends Picard with Summarizable with Reference { javaMainClass = new picard.analysis.CollectInsertSizeMetrics().getClass.getName @Input(doc = "The input SAM or BAM files to analyze. Must be coordinate sorted.", required = true) @@ -37,7 +38,7 @@ class CollectInsertSizeMetrics(val root: Configurable) extends Picard with Summa protected var outputHistogram: File = null @Argument(doc = "Reference file", required = false) - var reference: File = config("reference") + var reference: File = _ @Argument(doc = "DEVIATIONS", required = false) var deviations: Option[Double] = config("deviations") @@ -59,6 +60,7 @@ class CollectInsertSizeMetrics(val root: Configurable) extends Picard with Summa override def beforeGraph() { outputHistogram = new File(output + ".pdf") + if (reference == null) reference = referenceFasta() } /** Returns command to execute */ diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectMultipleMetrics.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectMultipleMetrics.scala similarity index 99% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectMultipleMetrics.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectMultipleMetrics.scala index 5ddaa72341c6a35b6cc9070c6d50cc48e80b7551..fed464a7391ad3f618e3755c2b8addc3cfb608b1 100644 --- a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectMultipleMetrics.scala +++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectMultipleMetrics.scala @@ -33,7 +33,7 @@ class CollectMultipleMetrics(val root: Configurable) extends Picard with Summari javaMainClass = new picard.analysis.CollectMultipleMetrics().getClass.getName - override def defaultCoreMemory = 6.0 + override def defaultCoreMemory = 8.0 @Input(doc = "The input SAM or BAM files to analyze", required = true) var input: File = null diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectRnaSeqMetrics.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectRnaSeqMetrics.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectRnaSeqMetrics.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectRnaSeqMetrics.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectTargetedPcrMetrics.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectTargetedPcrMetrics.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectTargetedPcrMetrics.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectTargetedPcrMetrics.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectWgsMetrics.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectWgsMetrics.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectWgsMetrics.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectWgsMetrics.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/GatherBamFiles.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/GatherBamFiles.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/GatherBamFiles.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/GatherBamFiles.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/MarkDuplicates.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/MarkDuplicates.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/MarkDuplicates.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/MarkDuplicates.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/MergeSamFiles.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/MergeSamFiles.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/MergeSamFiles.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/MergeSamFiles.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/Picard.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/Picard.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/Picard.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/Picard.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/ReorderSam.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/ReorderSam.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/ReorderSam.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/ReorderSam.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/SamToFastq.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/SamToFastq.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/SamToFastq.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/SamToFastq.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/SortSam.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/SortSam.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/SortSam.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/SortSam.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/Sambamba.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/Sambamba.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/Sambamba.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/Sambamba.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaFlagstat.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaFlagstat.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaFlagstat.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaFlagstat.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaIndex.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaIndex.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaIndex.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaIndex.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaMarkdup.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaMarkdup.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaMarkdup.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaMarkdup.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaMerge.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaMerge.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaMerge.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaMerge.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaView.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaView.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaView.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/sambamba/SambambaView.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/Samtools.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/Samtools.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/Samtools.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/Samtools.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsFlagstat.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsFlagstat.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsFlagstat.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsFlagstat.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsMpileup.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsMpileup.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsMpileup.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsMpileup.scala diff --git a/public/biopet-extentsions/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 similarity index 91% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsSort.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsSort.scala index 4d1c7450e5ac3fbf7c670305c49b6b188d11c6bc..5df2a3a7b47f5771dcdbd033ef2c273ba70ed89f 100644 --- a/public/biopet-extentsions/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 @@ -2,9 +2,8 @@ package nl.lumc.sasc.biopet.extensions.samtools import java.io.File -import com.google.common.io.Files import nl.lumc.sasc.biopet.utils.config.Configurable -import org.broadinstitute.gatk.utils.commandline.{ Output, Input } +import org.broadinstitute.gatk.utils.commandline.{ Input, Output } /** * Created by pjvanthof on 22/09/15. diff --git a/public/biopet-extentsions/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 similarity index 96% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsView.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/samtools/SamtoolsView.scala index fca6e84ccd15bfd6af4c72723269e13afda7f13c..09e8bff4212602d0689ea4f43eeee947b29c870e 100644 --- a/public/biopet-extentsions/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/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/seqtk/Seqtk.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/seqtk/Seqtk.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/seqtk/Seqtk.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/seqtk/Seqtk.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/seqtk/SeqtkSeq.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/seqtk/SeqtkSeq.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/seqtk/SeqtkSeq.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/seqtk/SeqtkSeq.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/varscan/Mpileup2cns.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/varscan/Mpileup2cns.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/varscan/Mpileup2cns.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/varscan/Mpileup2cns.scala diff --git a/public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/varscan/Varscan.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/varscan/Varscan.scala similarity index 100% rename from public/biopet-extentsions/src/main/scala/nl/lumc/sasc/biopet/extensions/varscan/Varscan.scala rename to public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/varscan/Varscan.scala diff --git a/public/biopet-extentsions/src/test/resources/log4j.properties b/public/biopet-extensions/src/test/resources/log4j.properties similarity index 100% rename from public/biopet-extentsions/src/test/resources/log4j.properties rename to public/biopet-extensions/src/test/resources/log4j.properties diff --git a/public/biopet-extentsions/src/test/resources/nl/lumc/sasc/biopet/extensions/picard/picard.alignmentMetrics b/public/biopet-extensions/src/test/resources/nl/lumc/sasc/biopet/extensions/picard/picard.alignmentMetrics similarity index 100% rename from public/biopet-extentsions/src/test/resources/nl/lumc/sasc/biopet/extensions/picard/picard.alignmentMetrics rename to public/biopet-extensions/src/test/resources/nl/lumc/sasc/biopet/extensions/picard/picard.alignmentMetrics diff --git a/public/biopet-extentsions/src/test/resources/nl/lumc/sasc/biopet/extensions/picard/picard.dedup.metrics b/public/biopet-extensions/src/test/resources/nl/lumc/sasc/biopet/extensions/picard/picard.dedup.metrics similarity index 100% rename from public/biopet-extentsions/src/test/resources/nl/lumc/sasc/biopet/extensions/picard/picard.dedup.metrics rename to public/biopet-extensions/src/test/resources/nl/lumc/sasc/biopet/extensions/picard/picard.dedup.metrics diff --git a/public/biopet-extentsions/src/test/resources/nl/lumc/sasc/biopet/extensions/picard/picard.insertsizemetrics b/public/biopet-extensions/src/test/resources/nl/lumc/sasc/biopet/extensions/picard/picard.insertsizemetrics similarity index 100% rename from public/biopet-extentsions/src/test/resources/nl/lumc/sasc/biopet/extensions/picard/picard.insertsizemetrics rename to public/biopet-extensions/src/test/resources/nl/lumc/sasc/biopet/extensions/picard/picard.insertsizemetrics diff --git a/public/biopet-extentsions/src/test/scala/nl/lumc/sasc/biopet/extensions/GsnapTest.scala b/public/biopet-extensions/src/test/scala/nl/lumc/sasc/biopet/extensions/GsnapTest.scala similarity index 77% rename from public/biopet-extentsions/src/test/scala/nl/lumc/sasc/biopet/extensions/GsnapTest.scala rename to public/biopet-extensions/src/test/scala/nl/lumc/sasc/biopet/extensions/GsnapTest.scala index 7a5a541899981f9a3a6bf25396ea23d64afd60d3..8dceeb52502cf5b150bc3fa4e41ccdb9cb6aebae 100644 --- a/public/biopet-extentsions/src/test/scala/nl/lumc/sasc/biopet/extensions/GsnapTest.scala +++ b/public/biopet-extensions/src/test/scala/nl/lumc/sasc/biopet/extensions/GsnapTest.scala @@ -25,17 +25,10 @@ import scala.sys.process.{ Process, ProcessLogger } class GsnapTest extends TestNGSuite with Matchers { - private def setConfig(key: String, value: String): Map[String, Any] = { - val oldMap: Map[String, Any] = Config.global.map - Config.global.map += (key -> value) - oldMap - } - - private def restoreConfig(oldMap: Map[String, Any]): Unit = Config.global.map = oldMap - @BeforeClass def checkExecutable() = { - val oldMap = setConfig("db", "mock") - val wrapper = new Gsnap(null) + val wrapper = new Gsnap(null) { + override def globalConfig = new Config(Map("db" -> "mock")) + } val proc = Process(wrapper.versionCommand) val exitCode = try { @@ -47,13 +40,12 @@ class GsnapTest extends TestNGSuite with Matchers { } if (exitCode != 0) throw new SkipException("Skipping GSNAP test because the executable can not be found") - restoreConfig(oldMap) } @Test(description = "GSNAP version number capture from executable") def testVersion() = { - val oldMap = setConfig("db", "mock") - new Gsnap(null).getVersion should not be "N/A" - restoreConfig(oldMap) + new Gsnap(null) { + override def globalConfig = new Config(Map("db" -> "mock")) + }.getVersion should not be "N/A" } } diff --git a/public/biopet-extentsions/src/test/scala/nl/lumc/sasc/biopet/extensions/HtseqCountTest.scala b/public/biopet-extensions/src/test/scala/nl/lumc/sasc/biopet/extensions/HtseqCountTest.scala similarity index 100% rename from public/biopet-extentsions/src/test/scala/nl/lumc/sasc/biopet/extensions/HtseqCountTest.scala rename to public/biopet-extensions/src/test/scala/nl/lumc/sasc/biopet/extensions/HtseqCountTest.scala diff --git a/public/biopet-extentsions/src/test/scala/nl/lumc/sasc/biopet/extensions/LnTest.scala b/public/biopet-extensions/src/test/scala/nl/lumc/sasc/biopet/extensions/LnTest.scala similarity index 100% rename from public/biopet-extentsions/src/test/scala/nl/lumc/sasc/biopet/extensions/LnTest.scala rename to public/biopet-extensions/src/test/scala/nl/lumc/sasc/biopet/extensions/LnTest.scala diff --git a/public/biopet-extentsions/src/test/scala/nl/lumc/sasc/biopet/extensions/picard/CollectAlignmentSummaryMetricsTest.scala b/public/biopet-extensions/src/test/scala/nl/lumc/sasc/biopet/extensions/picard/CollectAlignmentSummaryMetricsTest.scala similarity index 100% rename from public/biopet-extentsions/src/test/scala/nl/lumc/sasc/biopet/extensions/picard/CollectAlignmentSummaryMetricsTest.scala rename to public/biopet-extensions/src/test/scala/nl/lumc/sasc/biopet/extensions/picard/CollectAlignmentSummaryMetricsTest.scala diff --git a/public/biopet-extentsions/src/test/scala/nl/lumc/sasc/biopet/extensions/picard/CollectInsertSizeMetricsTest.scala b/public/biopet-extensions/src/test/scala/nl/lumc/sasc/biopet/extensions/picard/CollectInsertSizeMetricsTest.scala similarity index 100% rename from public/biopet-extentsions/src/test/scala/nl/lumc/sasc/biopet/extensions/picard/CollectInsertSizeMetricsTest.scala rename to public/biopet-extensions/src/test/scala/nl/lumc/sasc/biopet/extensions/picard/CollectInsertSizeMetricsTest.scala diff --git a/public/biopet-extentsions/src/test/scala/nl/lumc/sasc/biopet/extensions/picard/MarkDuplicatesTest.scala b/public/biopet-extensions/src/test/scala/nl/lumc/sasc/biopet/extensions/picard/MarkDuplicatesTest.scala similarity index 100% rename from public/biopet-extentsions/src/test/scala/nl/lumc/sasc/biopet/extensions/picard/MarkDuplicatesTest.scala rename to public/biopet-extensions/src/test/scala/nl/lumc/sasc/biopet/extensions/picard/MarkDuplicatesTest.scala diff --git a/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/config/Config.scala b/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/config/Config.scala index 1d536084f976312300c091744a99a01a4ae4c3e3..4c69bf57c8be5332aeb3f1cc3d1f78b2ae204007 100644 --- a/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/config/Config.scala +++ b/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/config/Config.scala @@ -21,11 +21,11 @@ import nl.lumc.sasc.biopet.utils.ConfigUtils._ /** * This class can store nested config values - * @param map Map with value for new config + * @param _map Map with value for new config * @constructor Load config with existing map */ -class Config(var map: Map[String, Any], - protected[config] var defaults: Map[String, Any] = Map()) extends Logging { +class Config(protected var _map: Map[String, Any], + protected var _defaults: Map[String, Any] = Map()) extends Logging { logger.debug("Init phase of config") /** Default constructor */ @@ -34,6 +34,9 @@ class Config(var map: Map[String, Any], loadDefaultConfig() } + def map = _map + def defaults = _defaults + /** * Loading a environmental variable as location of config files to merge into the config * @param valueName Name of value @@ -65,13 +68,13 @@ class Config(var map: Map[String, Any], def loadConfigFile(configFile: File, default: Boolean = false) { val configMap = fileToConfigMap(configFile) if (default) { - if (defaults.isEmpty) defaults = configMap - else defaults = mergeMaps(configMap, defaults) - logger.debug("New defaults: " + defaults) + if (_defaults.isEmpty) _defaults = configMap + else _defaults = mergeMaps(configMap, _defaults) + logger.debug("New defaults: " + _defaults) } else { - if (map.isEmpty) map = configMap - else map = mergeMaps(configMap, map) - logger.debug("New config: " + map) + if (_map.isEmpty) _map = configMap + else _map = mergeMaps(configMap, _map) + logger.debug("New config: " + _map) } } @@ -84,11 +87,12 @@ class Config(var map: Map[String, Any], */ def addValue(key: String, value: Any, path: List[String] = Nil, default: Boolean = false): Unit = { val valueMap = path.foldRight(Map(key -> value))((a, b) => Map(a -> b)) - if (default) defaults = mergeMaps(valueMap, defaults) - else map = mergeMaps(valueMap, map) + if (default) _defaults = mergeMaps(valueMap, _defaults) + else _map = mergeMaps(valueMap, _map) } protected[config] var notFoundCache: List[ConfigValueIndex] = List() + protected[config] var fixedCache: Map[ConfigValueIndex, ConfigValue] = Map() protected[config] var foundCache: Map[ConfigValueIndex, ConfigValue] = Map() protected[config] var defaultCache: Map[ConfigValueIndex, ConfigValue] = Map() protected[config] def clearCache(): Unit = { @@ -103,24 +107,39 @@ class Config(var map: Map[String, Any], * @param s key * @return True if exist */ - def contains(s: String): Boolean = map.contains(s) + def contains(s: String): Boolean = _map.contains(s) + + /** + * Checks if value exist in config + * @param requestedIndex Index to value + * @return True if exist + */ + def contains(requestedIndex: ConfigValueIndex): Boolean = contains(requestedIndex, Map()) /** * Checks if value exist in config * @param requestedIndex Index to value + * @param fixedValues Fixed values * @return True if exist */ - def contains(requestedIndex: ConfigValueIndex): Boolean = + def contains(requestedIndex: ConfigValueIndex, fixedValues: Map[String, Any]): Boolean = if (notFoundCache.contains(requestedIndex)) false + else if (fixedCache.contains(requestedIndex)) true else if (foundCache.contains(requestedIndex)) true else { - val value = Config.getValueFromMap(map, requestedIndex) - if (value.isDefined && value.get.value != None) { - foundCache += (requestedIndex -> value.get) + val fixedValue = Config.getValueFromMap(fixedValues, requestedIndex) + if (fixedValue.isDefined) { + fixedCache += (requestedIndex -> fixedValue.get) true } else { - notFoundCache +:= requestedIndex - false + val value = Config.getValueFromMap(_map, requestedIndex) + if (value.isDefined && value.get.value != None) { + foundCache += (requestedIndex -> value.get) + true + } else { + notFoundCache +:= requestedIndex + false + } } } @@ -132,9 +151,12 @@ class Config(var map: Map[String, Any], * @param freeVar Default true, if set false value must exist in module * @return True if exist */ - def contains(module: String, path: List[String], key: String, freeVar: Boolean = true): Boolean = { + def contains(module: String, path: List[String], + key: String, + freeVar: Boolean = true, + fixedValues: Map[String, Any] = Map()): Boolean = { val requestedIndex = ConfigValueIndex(module, path, key, freeVar) - contains(requestedIndex) + contains(requestedIndex, fixedValues) } /** @@ -146,10 +168,23 @@ class Config(var map: Map[String, Any], * @param freeVar Default true, if set false value must exist in module * @return Config value */ - protected[config] def apply(module: String, path: List[String], key: String, default: Any = null, freeVar: Boolean = true): ConfigValue = { + protected[config] def apply(module: String, + path: List[String], + key: String, + default: Any = null, + freeVar: Boolean = true, + fixedValues: Map[String, Any] = Map()): ConfigValue = { val requestedIndex = ConfigValueIndex(module, path, key, freeVar) - if (contains(requestedIndex)) foundCache(requestedIndex) - else if (default != null) { + if (contains(requestedIndex, fixedValues)) { + val fixedValue = fixedCache.get(requestedIndex) + if (fixedValue.isDefined) { + val userValue = Config.getValueFromMap(_map, requestedIndex) + if (userValue.isDefined) + logger.warn(s"Ignoring user-supplied value ${requestedIndex.key} at path ${requestedIndex.path} because it is a fixed value.") + } + + fixedValue.getOrElse(foundCache(requestedIndex)) + } else if (default != null) { defaultCache += (requestedIndex -> ConfigValue(requestedIndex, null, default, freeVar)) defaultCache(requestedIndex) } else ConfigValue(requestedIndex, null, null, freeVar) @@ -179,9 +214,11 @@ class Config(var map: Map[String, Any], // Positions where values are found val found = convertIndexValuesToMap(foundCache.filter(!_._2.default).toList.map(x => (x._2.foundIndex, x._2.value))) + val fixed = convertIndexValuesToMap(fixedCache.filter(!_._2.default).toList.map(x => (x._2.foundIndex, x._2.value))) // Positions where to start searching val effectiveFound = convertIndexValuesToMap(foundCache.filter(!_._2.default).toList.map(x => (x._2.requestIndex, x._2.value)), Some(false)) + val effectiveFixed = convertIndexValuesToMap(fixedCache.filter(!_._2.default).toList.map(x => (x._2.requestIndex, x._2.value)), Some(false)) val effectiveDefaultFound = convertIndexValuesToMap(defaultCache.filter(_._2.default).toList.map(x => (x._2.requestIndex, x._2.value)), Some(false)) val notFound = convertIndexValuesToMap(notFoundCache.map((_, None)), Some(false)) @@ -189,16 +226,19 @@ class Config(var map: Map[String, Any], val fullEffective = ConfigUtils.mergeMaps(effectiveFound, effectiveDefaultFound) val fullEffectiveWithNotFound = ConfigUtils.mergeMaps(fullEffective, notFound) - writeMapToJsonFile(this.map, "input") + writeMapToJsonFile(_map, "input") + writeMapToJsonFile(_defaults, "defaults") writeMapToJsonFile(found, "found") + writeMapToJsonFile(fixed, "fixed") writeMapToJsonFile(effectiveFound, "effective.found") + writeMapToJsonFile(effectiveFixed, "effective.fixed") writeMapToJsonFile(effectiveDefaultFound, "effective.defaults") writeMapToJsonFile(notFound, "not.found") writeMapToJsonFile(fullEffective, "effective.full") writeMapToJsonFile(fullEffectiveWithNotFound, "effective.full.notfound") } - override def toString: String = map.toString() + override def toString: String = _map.toString() } object Config extends Logging { @@ -210,7 +250,7 @@ object Config extends Logging { * @param config2 Low prio map * @return Merged config */ - def mergeConfigs(config1: Config, config2: Config): Config = new Config(mergeMaps(config1.map, config2.map)) + def mergeConfigs(config1: Config, config2: Config): Config = new Config(mergeMaps(config1._map, config2._map)) /** * Search for value in index position in a map diff --git a/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/config/Configurable.scala b/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/config/Configurable.scala index 476c4c4435290a9229bc926695cb9153d996d75a..68fe36e303e6a49e96a7628a741fc120392a5d19 100644 --- a/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/config/Configurable.scala +++ b/public/biopet-utils/src/main/scala/nl/lumc/sasc/biopet/utils/config/Configurable.scala @@ -15,6 +15,7 @@ */ package nl.lumc.sasc.biopet.utils.config +import nl.lumc.sasc.biopet.utils.ConfigUtils import nl.lumc.sasc.biopet.utils.ConfigUtils.ImplicitConversions trait Configurable extends ImplicitConversions { @@ -35,9 +36,28 @@ trait Configurable extends ImplicitConversions { def configFullPath: List[String] = configPath ::: configName :: Nil /** Map to store defaults for config */ - def defaults: Map[String, Any] = { - if (root != null) root.defaults - else globalConfig.defaults + def defaults: Map[String, Any] = Map() + + /** This method merge defaults from the root to it's own */ + protected[config] def internalDefaults: Map[String, Any] = { + (root != null, defaults.isEmpty) match { + case (true, true) => root.internalDefaults + case (true, false) => ConfigUtils.mergeMaps(defaults, root.internalDefaults) + case (false, true) => globalConfig.defaults + case (false, false) => ConfigUtils.mergeMaps(defaults, globalConfig.defaults) + } + } + + /** All values found in this map will be skipped from the user config */ + def fixedValues: Map[String, Any] = Map() + + /** This method merge fixedValues from the root to it's own */ + protected def internalFixedValues: Map[String, Any] = { + (root != null, fixedValues.isEmpty) match { + case (true, true) => root.internalFixedValues + case (true, false) => ConfigUtils.mergeMaps(fixedValues, root.internalFixedValues) + case _ => fixedValues + } } val config = new ConfigFunctions @@ -90,11 +110,11 @@ trait Configurable extends ImplicitConversions { val m = if (submodule != null) submodule else configName val p = if (path == null) getConfigPath(s, l, submodule) ::: subPath else path val d = { - val value = Config.getValueFromMap(defaults, ConfigValueIndex(m, p, key, freeVar)) + val value = Config.getValueFromMap(internalDefaults, ConfigValueIndex(m, p, key, freeVar)) if (value.isDefined) value.get.value else default } - if (d == null) globalConfig(m, p, key, freeVar = freeVar) - else globalConfig(m, p, key, d, freeVar) + if (d == null) globalConfig(m, p, key, freeVar = freeVar, fixedValues = internalFixedValues) + else globalConfig(m, p, key, d, freeVar, fixedValues = internalFixedValues) } /** @@ -117,7 +137,7 @@ trait Configurable extends ImplicitConversions { val m = if (submodule != null) submodule else configName val p = if (path == null) getConfigPath(s, l, submodule) ::: subPath else path - globalConfig.contains(m, p, key, freeVar) || Config.getValueFromMap(defaults, ConfigValueIndex(m, p, key, freeVar)).isDefined + globalConfig.contains(m, p, key, freeVar, internalFixedValues) || Config.getValueFromMap(internalDefaults, ConfigValueIndex(m, p, key, freeVar)).isDefined } } } diff --git a/public/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/config/ConfigurableTest.scala b/public/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/config/ConfigurableTest.scala index 8853a1183870f304c3529c43c569365c33437a27..37e851cf1572848a648bcb45ff5b7a51edeb0a68 100644 --- a/public/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/config/ConfigurableTest.scala +++ b/public/biopet-utils/src/test/scala/nl/lumc/sasc/biopet/utils/config/ConfigurableTest.scala @@ -25,10 +25,36 @@ import org.testng.annotations.Test * Created by pjvan_thof on 1/8/15. */ class ConfigurableTest extends TestNGSuite with Matchers { + + abstract class Cfg extends Configurable { + def get(key: String, + default: String = null, + submodule: String = null, + freeVar: Boolean = true, + sample: String = null, + library: String = null) = { + config(key, default, submodule, freeVar = freeVar, sample = sample, library = library) + } + } + + class ClassA(val root: Configurable) extends Cfg + + class ClassB(val root: Configurable) extends Cfg { + lazy val classA = new ClassA(this) + // Why this needs to be lazy? + } + + class ClassC(val root: Configurable) extends Cfg { + def this() = this(null) + lazy val classB = new ClassB(this) + // Why this needs to be lazy? + } + @Test def testConfigurable(): Unit = { val classC = new ClassC { override def configName = "classc" override val globalConfig = new Config(ConfigurableTest.map) + override val fixedValues = Map("fixed" -> "fixed") } classC.configPath shouldBe Nil @@ -51,46 +77,33 @@ class ConfigurableTest extends TestNGSuite with Matchers { classC.get("bla", sample = "sample1", library = "library1").asString shouldBe "bla" classC.get("test", sample = "sample1", library = "library1").asString shouldBe "test" classC.get("test", sample = "sample1").asString shouldBe "test" - } -} -abstract class Cfg extends Configurable { - def get(key: String, - default: String = null, - submodule: String = null, - freeVar: Boolean = true, - sample: String = null, - library: String = null) = { - config(key, default, submodule, freeVar = freeVar, sample = sample, library = library) + // Fixed values + classC.get("fixed").asString shouldBe "fixed" + classC.classB.get("fixed").asString shouldBe "fixed" + classC.classB.classA.get("fixed").asString shouldBe "fixed" } } -class ClassA(val root: Configurable) extends Cfg - -class ClassB(val root: Configurable) extends Cfg { - lazy val classA = new ClassA(this) - // Why this needs to be lazy? -} - -class ClassC(val root: Configurable) extends Cfg { - def this() = this(null) - lazy val classB = new ClassB(this) - // Why this needs to be lazy? -} - object ConfigurableTest { val map = Map( + "fixed" -> "nonfixed", "classa" -> Map( - "k1" -> "a1" + "k1" -> "a1", + "fixed" -> "nonfixed" ), "classb" -> Map( - "k1" -> "b1" + "k1" -> "b1", + "fixed" -> "nonfixed" ), "classc" -> Map( - "k1" -> "c1" + "k1" -> "c1", + "fixed" -> "nonfixed" ), "samples" -> Map( "sample1" -> Map( + "fixed" -> "nonfixed", "test" -> "test", "libraries" -> Map( "library1" -> Map( + "fixed" -> "nonfixed", "bla" -> "bla" ) ) 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 f8b4dc6db0ff771d046ffe320a24a7c0d294b832..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 @@ -38,12 +39,20 @@ class Carp(val root: Configurable) extends QScript with MultiSampleQScript with qscript => def this() = this(null) - override def defaults = ConfigUtils.mergeMaps(Map( + 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 ) - ), super.defaults) + ) def summaryFile = new File(outputDir, "Carp.summary.json") @@ -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) diff --git a/public/carp/src/test/scala/nl/lumc/sasc/biopet/pipelines/carp/CarpTest.scala b/public/carp/src/test/scala/nl/lumc/sasc/biopet/pipelines/carp/CarpTest.scala index 1f5efdc2fb950dfca40e7a870bba7da984db0c41..da5d79939fd3729fb8838ab26bbe1a2d2d2bfb00 100644 --- a/public/carp/src/test/scala/nl/lumc/sasc/biopet/pipelines/carp/CarpTest.scala +++ b/public/carp/src/test/scala/nl/lumc/sasc/biopet/pipelines/carp/CarpTest.scala @@ -116,7 +116,6 @@ object CarpTest { copyFile("ref.fa.fai") val executables = Map( - "reference" -> (outputDir + File.separator + "ref.fa"), "reference_fasta" -> (outputDir + File.separator + "ref.fa"), "fastqc" -> Map("exe" -> "test"), "seqtk" -> Map("exe" -> "test"), diff --git a/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/Fastqc.scala b/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/Fastqc.scala index 6c444bed885b3b4219728bf38423156b3d545064..8de84c5081db4b9801222c6853e2b185a54741e6 100644 --- a/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/Fastqc.scala +++ b/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/Fastqc.scala @@ -201,7 +201,8 @@ class Fastqc(root: Configurable) extends nl.lumc.sasc.biopet.extensions.Fastqc(r def summaryStats: Map[String, Any] = Map( "per_base_sequence_quality" -> perBaseSequenceQuality, - "per_base_sequence_content" -> perBaseSequenceContent) + "per_base_sequence_content" -> perBaseSequenceContent, + "adapters" -> foundAdapters.map(x => x.name -> x.seq).toMap) } object Fastqc { diff --git a/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/Flexiprep.scala b/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/Flexiprep.scala index aeab29b7d697093726674b263f916faf77bccd7d..e53c55cc53bd4cddab07de2d1fe7a1f5bc25feb9 100644 --- a/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/Flexiprep.scala +++ b/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/Flexiprep.scala @@ -153,29 +153,31 @@ class Flexiprep(val root: Configurable) extends QScript with SummaryQScript with else None /** Adds all chunkable jobs of flexiprep */ - def runTrimClip(R1_in: File, outDir: File, chunk: String): (File, Option[File], List[File]) = + def runTrimClip(R1_in: File, outDir: File, chunk: String): (File, Option[File]) = runTrimClip(R1_in, None, outDir, chunk) /** Adds all chunkable jobs of flexiprep */ - def runTrimClip(R1_in: File, outDir: File): (File, Option[File], List[File]) = + def runTrimClip(R1_in: File, outDir: File): (File, Option[File]) = runTrimClip(R1_in, None, outDir, "") /** Adds all chunkable jobs of flexiprep */ - def runTrimClip(R1_in: File, R2_in: Option[File], outDir: File): (File, Option[File], List[File]) = + def runTrimClip(R1_in: File, R2_in: Option[File], outDir: File): (File, Option[File]) = runTrimClip(R1_in, R2_in, outDir, "") /** Adds all chunkable jobs of flexiprep */ - def runTrimClip(R1_in: File, R2_in: Option[File], outDir: File, chunkarg: String): (File, Option[File], List[File]) = { + def runTrimClip(R1_in: File, + R2_in: Option[File], + outDir: File, + chunkarg: String): (File, Option[File]) = { val chunk = if (chunkarg.isEmpty || chunkarg.endsWith("_")) chunkarg else chunkarg + "_" var R1 = R1_in var R2 = R2_in - def deps: List[File] = Nil val qcCmdR1 = new QcCommand(this, fastqc_R1) qcCmdR1.input = R1_in qcCmdR1.read = "R1" - qcCmdR1.output = if (paired) new File(fastqR1Qc.getAbsolutePath.stripSuffix(".gz")) + qcCmdR1.output = if (paired) new File(outDir, fastqR1Qc.getName.stripSuffix(".gz")) else fastqR1Qc qcCmdR1.deps :+= fastqc_R1.output qcCmdR1.isIntermediate = paired || !keepQcFastqFiles @@ -184,7 +186,7 @@ class Flexiprep(val root: Configurable) extends QScript with SummaryQScript with if (paired) { val qcCmdR2 = new QcCommand(this, fastqc_R2) qcCmdR2.input = R2_in.get - qcCmdR2.output = new File(fastqR2Qc.get.getAbsolutePath.stripSuffix(".gz")) + qcCmdR2.output = new File(outDir, fastqR2Qc.get.getName.stripSuffix(".gz")) qcCmdR2.read = "R2" addSummarizable(qcCmdR2, "qc_command_R2") @@ -195,8 +197,8 @@ class Flexiprep(val root: Configurable) extends QScript with SummaryQScript with fqSync.refFastq = R1_in fqSync.inputFastq1 = qcCmdR1.output fqSync.inputFastq2 = qcCmdR2.output - fqSync.outputFastq1 = fastqR1Qc - fqSync.outputFastq2 = fastqR2Qc.get + fqSync.outputFastq1 = new File(outDir, fastqR1Qc.getName) + fqSync.outputFastq2 = new File(outDir, fastqR2Qc.get.getName) fqSync.outputStats = new File(outDir, s"${sampleId.getOrElse("x")}-${libId.getOrElse("x")}.sync.stats") val pipe = new BiopetFifoPipe(this, fqSync :: Nil) { @@ -242,7 +244,7 @@ class Flexiprep(val root: Configurable) extends QScript with SummaryQScript with outputFiles += (chunk + "output_R1" -> R1) if (paired) outputFiles += (chunk + "output_R2" -> R2.get) - (R1, R2, deps) + (R1, R2) } /** Adds last non chunkable jobs */ @@ -250,24 +252,28 @@ class Flexiprep(val root: Configurable) extends QScript with SummaryQScript with if (fastq_R1.length != fastq_R2.length && paired) throw new IllegalStateException("R1 and R2 file number is not the same") - if (!skipTrim || !skipClip) { - if (fastq_R1.length > 1) { - add(Zcat(this, fastq_R1, fastqR1Qc) | new Gzip(this) > fastqR1Qc) - if (paired) add(Zcat(this, fastq_R2, fastqR2Qc.get) | new Gzip(this) > fastqR2Qc.get) + if (fastq_R1.length > 1) { + val zcat = new Zcat(this) + zcat.input = fastq_R1 + add(zcat | new Gzip(this) > fastqR1Qc) + if (paired) { + val zcat = new Zcat(this) + zcat.input = fastq_R2 + add(zcat | new Gzip(this) > fastqR2Qc.get) } + } - outputFiles += ("output_R1_gzip" -> fastqR1Qc) - if (paired) outputFiles += ("output_R2_gzip" -> fastqR2Qc.get) + outputFiles += ("output_R1_gzip" -> fastqR1Qc) + if (paired) outputFiles += ("output_R2_gzip" -> fastqR2Qc.get) - fastqc_R1_after = Fastqc(this, fastqR1Qc, new File(outputDir, R1_name + ".qc.fastqc/")) - add(fastqc_R1_after) - addSummarizable(fastqc_R1_after, "fastqc_R1_qc") + fastqc_R1_after = Fastqc(this, fastqR1Qc, new File(outputDir, R1_name + ".qc.fastqc/")) + add(fastqc_R1_after) + addSummarizable(fastqc_R1_after, "fastqc_R1_qc") - if (paired) { - fastqc_R2_after = Fastqc(this, fastqR2Qc.get, new File(outputDir, R2_name + ".qc.fastqc/")) - add(fastqc_R2_after) - addSummarizable(fastqc_R2_after, "fastqc_R2_qc") - } + if (paired) { + fastqc_R2_after = Fastqc(this, fastqR2Qc.get, new File(outputDir, R2_name + ".qc.fastqc/")) + add(fastqc_R2_after) + addSummarizable(fastqc_R2_after, "fastqc_R2_qc") } addSummaryJobs() diff --git a/public/flexiprep/src/test/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepTest.scala b/public/flexiprep/src/test/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepTest.scala index f7f9dc2ab2d916e22c0a6858663f1a43773f7f22..cce952717b29e94556d3535cab4c5830d33a1cfe 100644 --- a/public/flexiprep/src/test/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepTest.scala +++ b/public/flexiprep/src/test/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepTest.scala @@ -73,11 +73,7 @@ class FlexiprepTest extends TestNGSuite with Matchers { flexiprep.libId = Some("1") flexiprep.script() - flexiprep.functions.count(_.isInstanceOf[Fastqc]) shouldBe ( - if (paired && (skipClip && skipTrim)) 2 - else if (!paired && (skipClip && skipTrim)) 1 - else if (paired && !(skipClip && skipTrim)) 4 - else if (!paired && !(skipClip && skipTrim)) 2) + flexiprep.functions.count(_.isInstanceOf[Fastqc]) shouldBe (if (paired) 4 else 2) flexiprep.functions.count(_.isInstanceOf[SeqStat]) shouldBe (if (paired) 4 else 2) } diff --git a/public/gentrap/src/main/scala/nl/lumc/sasc/biopet/pipelines/gentrap/Gentrap.scala b/public/gentrap/src/main/scala/nl/lumc/sasc/biopet/pipelines/gentrap/Gentrap.scala index d033594c6e42663427108baf12038b7eed6fb3f6..724470df1091228bbdaf928b49ae7024f2bb70bd 100644 --- a/public/gentrap/src/main/scala/nl/lumc/sasc/biopet/pipelines/gentrap/Gentrap.scala +++ b/public/gentrap/src/main/scala/nl/lumc/sasc/biopet/pipelines/gentrap/Gentrap.scala @@ -100,24 +100,23 @@ class Gentrap(val root: Configurable) extends QScript }) /** Default pipeline config */ - override def defaults = ConfigUtils.mergeMaps( - Map( - "gsnap" -> Map( - "novelsplicing" -> 1, - "batch" -> 4, - "format" -> "sam" - ), - "cutadapt" -> Map("minimum_length" -> 20), - // avoid conflicts when merging since the MarkDuplicate tags often cause merges to fail - "picard" -> Map( - "programrecordid" -> "null" - ), - // disable markduplicates since it may not play well with all aligners (this can still be overriden via config) - "mapping" -> Map( - "skip_markduplicates" -> true, - "skip_metrics" -> true - ) - ), super.defaults) + override def defaults = Map( + "gsnap" -> Map( + "novelsplicing" -> 1, + "batch" -> 4, + "format" -> "sam" + ), + "cutadapt" -> Map("minimum_length" -> 20), + // avoid conflicts when merging since the MarkDuplicate tags often cause merges to fail + "picard" -> Map( + "programrecordid" -> "null" + ), + // disable markduplicates since it may not play well with all aligners (this can still be overriden via config) + "mapping" -> Map( + "skip_markduplicates" -> true, + "skip_metrics" -> true + ) + ) /** Adds output merge jobs for the given expression mode */ // TODO: can we combine the enum with the file extension (to reduce duplication and potential errors) diff --git a/public/gentrap/src/test/scala/nl/lumc/sasc/biopet/pipelines/gentrap/GentrapTest.scala b/public/gentrap/src/test/scala/nl/lumc/sasc/biopet/pipelines/gentrap/GentrapTest.scala index 2b2ddaf259e8fa5ad382ef1aca1337826ecf0ad8..34a43484056b82d9948a11c16f7c2276be7bd6e8 100644 --- a/public/gentrap/src/test/scala/nl/lumc/sasc/biopet/pipelines/gentrap/GentrapTest.scala +++ b/public/gentrap/src/test/scala/nl/lumc/sasc/biopet/pipelines/gentrap/GentrapTest.scala @@ -28,7 +28,7 @@ import org.scalatest.Matchers import org.scalatest.testng.TestNGSuite import org.testng.annotations.{ AfterClass, DataProvider, Test } -class GentrapTest extends TestNGSuite with Matchers { +abstract class GentrapTestAbstract(val expressionMeasure: String) extends TestNGSuite with Matchers { def initPipeline(map: Map[String, Any]): Gentrap = { new Gentrap() { @@ -70,7 +70,7 @@ class GentrapTest extends TestNGSuite with Matchers { .toMap ) - private lazy val validExpressionMeasures = Set( + val validExpressionMeasures = Set( "fragments_per_gene", "fragments_per_exon", "bases_per_gene", "bases_per_exon", "cufflinks_strict", "cufflinks_guided", "cufflinks_blind") @@ -96,7 +96,7 @@ class GentrapTest extends TestNGSuite with Matchers { for { sampleConfig <- sampleConfigs.toArray - expressionMeasure <- expressionMeasures + //expressionMeasure <- expressionMeasures strandProtocol <- strandProtocols } yield Array(sampleConfig, List(expressionMeasure), strandProtocol) } @@ -118,8 +118,6 @@ class GentrapTest extends TestNGSuite with Matchers { val functions = gentrap.functions.groupBy(_.getClass) val numSamples = sampleConfig("samples").size - functions(classOf[Gsnap]).size should be >= 1 - if (expMeasures.contains("fragments_per_gene")) { gentrap.functions .collect { case x: HtseqCount => x.output.toString.endsWith(".fragments_per_gene") }.size shouldBe numSamples @@ -177,6 +175,14 @@ class GentrapTest extends TestNGSuite with Matchers { } } +class GentrapFragmentsPerGeneTest extends GentrapTestAbstract("fragments_per_gene") +class GentrapFragmentsPerExonTest extends GentrapTestAbstract("fragments_per_exon") +class GentrapBasesPerGeneTest extends GentrapTestAbstract("bases_per_gene") +class GentrapBasesPerExonTest extends GentrapTestAbstract("bases_per_exon") +class GentrapCufflinksStrictTest extends GentrapTestAbstract("cufflinks_strict") +class GentrapCufflinksGuidedTest extends GentrapTestAbstract("cufflinks_guided") +class GentrapCufflinksBlindTest extends GentrapTestAbstract("cufflinks_blind") + object GentrapTest { val outputDir = Files.createTempDir() new File(outputDir, "input").mkdirs() @@ -198,7 +204,6 @@ object GentrapTest { copyFile("ref.fa.fai") val executables = Map( - "reference" -> (outputDir + File.separator + "ref.fa"), "reference_fasta" -> (outputDir + File.separator + "ref.fa"), "refFlat" -> "test", "annotation_gtf" -> "test", diff --git a/public/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/Mapping.scala b/public/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/Mapping.scala index d0a78797c8b14ddbfbad3b1b6de7947280032cfc..eb52e5ab931c516333c4582f3373787d9922408e 100644 --- a/public/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/Mapping.scala +++ b/public/mapping/src/main/scala/nl/lumc/sasc/biopet/pipelines/mapping/Mapping.scala @@ -98,13 +98,12 @@ class Mapping(val root: Configurable) extends QScript with SummaryQScript with S /** location of summary file */ def summaryFile = new File(outputDir, sampleId.getOrElse("x") + "-" + libId.getOrElse("x") + ".summary.json") - override def defaults = ConfigUtils.mergeMaps( - Map( - "gsnap" -> Map( - "batch" -> 4, - "format" -> "sam" - ) - ), super.defaults) + override def defaults = Map("gsnap" -> Map("batch" -> 4)) + + override def fixedValues = Map( + "gsnap" -> Map("format" -> "sam"), + "bowtie" -> Map("sam" -> true) + ) /** File to add to the summary */ def summaryFiles: Map[String, File] = Map("output_bamfile" -> finalBamFile, "input_R1" -> input_R1, @@ -118,7 +117,7 @@ class Mapping(val root: Configurable) extends QScript with SummaryQScript with S "skip_markduplicates" -> skipMarkduplicates, "aligner" -> aligner, "chunking" -> chunking, - "numberChunks" -> numberChunks.getOrElse(1) + "numberChunks" -> (if (chunking) numberChunks.getOrElse(1) else None) ) ++ (if (root == null) Map("reference" -> referenceSummary) else Map()) override def reportClass = { @@ -143,8 +142,8 @@ class Mapping(val root: Configurable) extends QScript with SummaryQScript with S paired = input_R2.isDefined - if (readgroupId == null) readgroupId = sampleId.get + "-" + libId.get - else if (readgroupId == null) readgroupId = config("readgroup_id") + if (readgroupId == null) + readgroupId = config("readgroup_id", default = sampleId.get + "-" + libId.get) if (outputName == null) outputName = readgroupId @@ -206,13 +205,11 @@ class Mapping(val root: Configurable) extends QScript with SummaryQScript with S for ((chunkDir, fastqfile) <- chunks) { var R1 = fastqfile._1 var R2 = fastqfile._2 - var deps: List[File] = Nil if (!skipFlexiprep) { val flexiout = flexiprep.runTrimClip(R1, R2, new File(chunkDir, "flexiprep"), chunkDir) logger.debug(chunkDir + " - " + flexiout) R1 = flexiout._1 if (paired) R2 = flexiout._2 - deps = flexiout._3 fastq_R1_output :+= R1 R2.foreach(R2 => fastq_R2_output :+= R2) } @@ -220,15 +217,15 @@ class Mapping(val root: Configurable) extends QScript with SummaryQScript with S val outputBam = new File(chunkDir, outputName + ".bam") bamFiles :+= outputBam aligner match { - case "bwa-mem" => addBwaMem(R1, R2, outputBam, deps) - case "bwa-aln" => addBwaAln(R1, R2, outputBam, deps) - case "bowtie" => addBowtie(R1, R2, outputBam, deps) - case "gsnap" => addGsnap(R1, R2, outputBam, deps) + case "bwa-mem" => addBwaMem(R1, R2, outputBam) + case "bwa-aln" => addBwaAln(R1, R2, outputBam) + case "bowtie" => addBowtie(R1, R2, outputBam) + case "gsnap" => addGsnap(R1, R2, outputBam) // TODO: make TopHat here accept multiple input files - case "tophat" => addTophat(R1, R2, outputBam, deps) - case "stampy" => addStampy(R1, R2, outputBam, deps) - case "star" => addStar(R1, R2, outputBam, deps) - case "star-2pass" => addStar2pass(R1, R2, outputBam, deps) + case "tophat" => addTophat(R1, R2, outputBam) + case "stampy" => addStampy(R1, R2, outputBam) + case "star" => addStar(R1, R2, outputBam) + case "star-2pass" => addStar2pass(R1, R2, outputBam) case _ => throw new IllegalStateException("Option aligner: '" + aligner + "' is not valid") } if (chunking && numberChunks.getOrElse(1) > 1 && config("chunk_metrics", default = false)) @@ -278,10 +275,9 @@ class Mapping(val root: Configurable) extends QScript with SummaryQScript with S } /** Add bwa aln jobs */ - def addBwaAln(R1: File, R2: Option[File], output: File, deps: List[File]): File = { + def addBwaAln(R1: File, R2: Option[File], output: File): File = { val bwaAlnR1 = new BwaAln(this) bwaAlnR1.fastq = R1 - bwaAlnR1.deps = deps bwaAlnR1.output = swapExt(output.getParent, output, ".bam", ".R1.sai") bwaAlnR1.isIntermediate = true add(bwaAlnR1) @@ -289,7 +285,6 @@ class Mapping(val root: Configurable) extends QScript with SummaryQScript with S val samFile: File = if (paired) { val bwaAlnR2 = new BwaAln(this) bwaAlnR2.fastq = R2.get - bwaAlnR2.deps = deps bwaAlnR2.output = swapExt(output.getParent, output, ".bam", ".R2.sai") bwaAlnR2.isIntermediate = true add(bwaAlnR2) @@ -324,41 +319,47 @@ class Mapping(val root: Configurable) extends QScript with SummaryQScript with S } /** Adds bwa mem jobs */ - def addBwaMem(R1: File, R2: Option[File], output: File, deps: List[File]): File = { + def addBwaMem(R1: File, R2: Option[File], output: File): File = { val bwaCommand = new BwaMem(this) bwaCommand.R1 = R1 if (paired) bwaCommand.R2 = R2.get - bwaCommand.deps = deps bwaCommand.R = Some(getReadGroupBwa) val sortSam = new SortSam(this) sortSam.output = output - add(bwaCommand | sortSam, chunking || !skipMarkduplicates) + val pipe = bwaCommand | sortSam + pipe.isIntermediate = chunking || !skipMarkduplicates + pipe.threadsCorrection = -1 + add(pipe) output } - def addGsnap(R1: File, R2: Option[File], output: File, deps: List[File]): File = { + def addGsnap(R1: File, R2: Option[File], output: File): File = { + val zcatR1 = extractIfNeeded(R1, output.getParentFile) + val zcatR2 = if (paired) Some(extractIfNeeded(R2.get, output.getParentFile)) else None val gsnapCommand = new Gsnap(this) - gsnapCommand.input = if (paired) List(R1, R2.get) else List(R1) - gsnapCommand.deps = deps - gsnapCommand.output = swapExt(output.getParent, output, ".bam", ".sam") - gsnapCommand.isIntermediate = true - add(gsnapCommand) + gsnapCommand.input = if (paired) List(zcatR1._2, zcatR2.get._2) else List(zcatR1._2) + gsnapCommand.output = swapExt(output.getParentFile, output, ".bam", ".sam") val reorderSam = new ReorderSam(this) reorderSam.input = gsnapCommand.output - reorderSam.output = swapExt(output.getParent, output, ".sorted.bam", ".reordered.bam") - add(reorderSam) - - addAddOrReplaceReadGroups(reorderSam.output, output) + reorderSam.output = swapExt(output.getParentFile, output, ".sorted.bam", ".reordered.bam") + + val ar = addAddOrReplaceReadGroups(reorderSam.output, output) + val pipe = new BiopetFifoPipe(this, (zcatR1._1 :: (if (paired) zcatR2.get._1 else None) :: + Some(gsnapCommand) :: Some(ar._1) :: Some(reorderSam) :: Nil).flatten) + pipe.threadsCorrection = -1 + zcatR1._1.foreach(x => pipe.threadsCorrection -= 1) + zcatR2.foreach(_._1.foreach(x => pipe.threadsCorrection -= 1)) + add(pipe) + ar._2 } - def addTophat(R1: File, R2: Option[File], output: File, deps: List[File]): File = { + def addTophat(R1: File, R2: Option[File], output: File): File = { // TODO: merge mapped and unmapped BAM ~ also dealing with validation errors in the unmapped BAM val tophat = new Tophat(this) tophat.R1 = tophat.R1 :+ R1 if (paired) tophat.R2 = tophat.R2 :+ R2.get tophat.output_dir = new File(outputDir, "tophat_out") - tophat.deps = deps // always output BAM tophat.no_convert_bam = false // and always keep input ordering @@ -392,10 +393,12 @@ class Mapping(val root: Configurable) extends QScript with SummaryQScript with S reorderSam.output = swapExt(output.getParent, output, ".merge.bam", ".reordered.bam") add(reorderSam) - addAddOrReplaceReadGroups(reorderSam.output, output) + val ar = addAddOrReplaceReadGroups(reorderSam.output, output) + add(ar._1) + ar._2 } /** Adds stampy jobs */ - def addStampy(R1: File, R2: Option[File], output: File, deps: List[File]): File = { + def addStampy(R1: File, R2: Option[File], output: File): File = { var RG: String = "ID:" + readgroupId + "," RG += "SM:" + sampleId.get + "," @@ -410,10 +413,9 @@ class Mapping(val root: Configurable) extends QScript with SummaryQScript with S val stampyCmd = new Stampy(this) stampyCmd.R1 = R1 if (paired) stampyCmd.R2 = R2.get - stampyCmd.deps = deps stampyCmd.readgroup = RG stampyCmd.sanger = true - stampyCmd.output = this.swapExt(output.getParent, output, ".bam", ".sam") + stampyCmd.output = this.swapExt(output.getParentFile, output, ".bam", ".sam") stampyCmd.isIntermediate = true add(stampyCmd) val sortSam = SortSam(this, stampyCmd.output, output) @@ -423,33 +425,54 @@ class Mapping(val root: Configurable) extends QScript with SummaryQScript with S } /** Adds bowtie jobs */ - def addBowtie(R1: File, R2: Option[File], output: File, deps: List[File]): File = { + def addBowtie(R1: File, R2: Option[File], output: File): File = { + val zcatR1 = extractIfNeeded(R1, output.getParentFile) + val zcatR2 = if (paired) Some(extractIfNeeded(R2.get, output.getParentFile)) else None + zcatR1._1.foreach(add(_)) + zcatR2.foreach(_._1.foreach(add(_))) val bowtie = new Bowtie(this) - bowtie.R1 = R1 - if (paired) bowtie.R2 = R2 - bowtie.deps = deps - bowtie.output = this.swapExt(output.getParent, output, ".bam", ".sam") + bowtie.R1 = zcatR1._2 + if (paired) bowtie.R2 = Some(zcatR2.get._2) + bowtie.output = this.swapExt(output.getParentFile, output, ".bam", ".sam") bowtie.isIntermediate = true - add(bowtie) - addAddOrReplaceReadGroups(bowtie.output, output) + val ar = addAddOrReplaceReadGroups(bowtie.output, output) + val pipe = new BiopetFifoPipe(this, (Some(bowtie) :: Some(ar._1) :: Nil).flatten) + pipe.threadsCorrection = -1 + add(pipe) + ar._2 } /** Adds Star jobs */ - def addStar(R1: File, R2: Option[File], output: File, deps: List[File]): File = { - val starCommand = Star(this, R1, R2, outputDir, isIntermediate = true, deps = deps) - add(starCommand) - addAddOrReplaceReadGroups(starCommand.outputSam, output) + def addStar(R1: File, R2: Option[File], output: File): File = { + val zcatR1 = extractIfNeeded(R1, output.getParentFile) + val zcatR2 = if (paired) Some(extractIfNeeded(R2.get, output.getParentFile)) else None + val starCommand = Star(this, zcatR1._2, zcatR2.map(_._2), outputDir, isIntermediate = true) + val ar = addAddOrReplaceReadGroups(starCommand.outputSam, output) + val pipe = new BiopetFifoPipe(this, (zcatR1._1 :: (if (paired) zcatR2.get._1 else None) :: + Some(starCommand) :: Some(ar._1) :: Nil).flatten) + pipe.threadsCorrection = -1 + zcatR1._1.foreach(x => pipe.threadsCorrection -= 1) + zcatR2.foreach(_._1.foreach(x => pipe.threadsCorrection -= 1)) + add(pipe) + ar._2 } /** Adds Start 2 pass jobs */ - def addStar2pass(R1: File, R2: Option[File], output: File, deps: List[File]): File = { - val starCommand = Star._2pass(this, R1, R2, outputDir, isIntermediate = true, deps = deps) + def addStar2pass(R1: File, R2: Option[File], output: File): File = { + val zcatR1 = extractIfNeeded(R1, output.getParentFile) + val zcatR2 = if (paired) Some(extractIfNeeded(R2.get, output.getParentFile)) else None + zcatR1._1.foreach(add(_)) + zcatR2.foreach(_._1.foreach(add(_))) + + val starCommand = Star._2pass(this, zcatR1._2, zcatR2.map(_._2), outputDir, isIntermediate = true) addAll(starCommand._2) - addAddOrReplaceReadGroups(starCommand._1, output) + val ar = addAddOrReplaceReadGroups(starCommand._1, output) + add(ar._1) + ar._2 } /** Adds AddOrReplaceReadGroups */ - def addAddOrReplaceReadGroups(input: File, output: File): File = { + def addAddOrReplaceReadGroups(input: File, output: File): (AddOrReplaceReadGroups, File) = { val addOrReplaceReadGroups = AddOrReplaceReadGroups(this, input, output) addOrReplaceReadGroups.createIndex = true @@ -461,9 +484,8 @@ class Mapping(val root: Configurable) extends QScript with SummaryQScript with S if (readgroupSequencingCenter.isDefined) addOrReplaceReadGroups.RGCN = readgroupSequencingCenter.get if (readgroupDescription.isDefined) addOrReplaceReadGroups.RGDS = readgroupDescription.get if (!skipMarkduplicates) addOrReplaceReadGroups.isIntermediate = true - add(addOrReplaceReadGroups) - addOrReplaceReadGroups.output + (addOrReplaceReadGroups, addOrReplaceReadGroups.output) } /** Returns readgroup for bwa */ @@ -488,22 +510,18 @@ class Mapping(val root: Configurable) extends QScript with SummaryQScript with S * @param runDir directory to extract when needed * @return returns extracted file */ - def extractIfNeeded(file: File, runDir: File): File = { - if (file == null) file - else if (file.getName.endsWith(".gz") || file.getName.endsWith(".gzip")) { + def extractIfNeeded(file: File, runDir: File): (Option[BiopetCommandLineFunction], File) = { + require(file != null) + if (file.getName.endsWith(".gz") || file.getName.endsWith(".gzip")) { var newFile: File = swapExt(runDir, file, ".gz", "") if (file.getName.endsWith(".gzip")) newFile = swapExt(runDir, file, ".gzip", "") val zcatCommand = Zcat(this, file, newFile) - zcatCommand.isIntermediate = true - add(zcatCommand) - newFile + (Some(zcatCommand), newFile) } else if (file.getName.endsWith(".bz2")) { val newFile = swapExt(runDir, file, ".bz2", "") val pbzip2 = Pbzip2(this, file, newFile) - pbzip2.isIntermediate = true - add(pbzip2) - newFile - } else file + (Some(pbzip2), newFile) + } else (None, file) } } diff --git a/public/mapping/src/test/scala/nl/lumc/sasc/biopet/pipelines/mapping/MappingTest.scala b/public/mapping/src/test/scala/nl/lumc/sasc/biopet/pipelines/mapping/MappingTest.scala index 710ff17cb665d8bf41c4b1bb41eb7dceb9c81060..377c771cee17b62922381cd09d9c4ebd0aa15aec 100644 --- a/public/mapping/src/test/scala/nl/lumc/sasc/biopet/pipelines/mapping/MappingTest.scala +++ b/public/mapping/src/test/scala/nl/lumc/sasc/biopet/pipelines/mapping/MappingTest.scala @@ -18,13 +18,9 @@ package nl.lumc.sasc.biopet.pipelines.mapping import java.io.{ File, FileOutputStream } import com.google.common.io.Files -import nl.lumc.sasc.biopet.utils.config.Config -import nl.lumc.sasc.biopet.extensions._ -import nl.lumc.sasc.biopet.extensions.bwa.{ BwaAln, BwaMem, BwaSampe, BwaSamse } -import nl.lumc.sasc.biopet.extensions.picard.{ AddOrReplaceReadGroups, MarkDuplicates, MergeSamFiles, SortSam } import nl.lumc.sasc.biopet.pipelines.flexiprep.Fastqc -import nl.lumc.sasc.biopet.extensions.tools.{ FastqSync, SeqStat } import nl.lumc.sasc.biopet.utils.ConfigUtils +import nl.lumc.sasc.biopet.utils.config.Config import org.apache.commons.io.FileUtils import org.broadinstitute.gatk.queue.QSettings import org.scalatest.Matchers @@ -36,7 +32,7 @@ import org.testng.annotations.{ AfterClass, DataProvider, Test } * * Created by pjvan_thof on 2/12/15. */ -class MappingTest extends TestNGSuite with Matchers { +abstract class AbstractTestMapping(val aligner: String) extends TestNGSuite with Matchers { def initPipeline(map: Map[String, Any]): Mapping = { new Mapping { override def configName = "mapping" @@ -48,15 +44,13 @@ class MappingTest extends TestNGSuite with Matchers { @DataProvider(name = "mappingOptions") def mappingOptions = { - val aligners = Array("bwa-mem", "bwa-aln", "star", "star-2pass", "bowtie", "stampy", "gsnap", "tophat") val paired = Array(true, false) - val chunks = Array(1, 5, 10, 100) + val chunks = Array(1, 5) val skipMarkDuplicates = Array(true, false) val skipFlexipreps = Array(true, false) val zipped = Array(true, false) for ( - aligner <- aligners; pair <- paired; chunk <- chunks; skipMarkDuplicate <- skipMarkDuplicates; @@ -91,28 +85,6 @@ class MappingTest extends TestNGSuite with Matchers { //Flexiprep mapping.functions.count(_.isInstanceOf[Fastqc]) shouldBe (if (skipFlexiprep) 0 else if (paired) 4 else 2) - - //aligners - mapping.functions.count(_.isInstanceOf[BwaAln]) shouldBe ((if (aligner == "bwa-aln") if (paired) 2 else 1 else 0) * chunks) - mapping.functions.count(_.isInstanceOf[BwaSampe]) shouldBe ((if (aligner == "bwa-aln") if (paired) 1 else 0 else 0) * chunks) - mapping.functions.count(_.isInstanceOf[BwaSamse]) shouldBe ((if (aligner == "bwa-aln") if (paired) 0 else 1 else 0) * chunks) - mapping.functions.count(_.isInstanceOf[Star]) shouldBe ((if (aligner == "star") 1 else if (aligner == "star-2pass") 3 else 0) * chunks) - mapping.functions.count(_.isInstanceOf[Bowtie]) shouldBe ((if (aligner == "bowtie") 1 else 0) * chunks) - mapping.functions.count(_.isInstanceOf[Stampy]) shouldBe ((if (aligner == "stampy") 1 else 0) * chunks) - - // Sort sam or replace readgroup - val sort = aligner match { - case "bwa-mem" | "bwa-aln" | "stampy" => "sortsam" - case "star" | "star-2pass" | "bowtie" | "gsnap" | "tophat" => "replacereadgroups" - case _ => throw new IllegalArgumentException("aligner: " + aligner + " does not exist") - } - - if (aligner != "tophat") { // FIXME - //mapping.functions.count(_.isInstanceOf[SortSam]) shouldBe ((if (sort == "sortsam") 1 else 0) * chunks) - mapping.functions.count(_.isInstanceOf[AddOrReplaceReadGroups]) shouldBe ((if (sort == "replacereadgroups") 1 else 0) * chunks) - mapping.functions.count(_.isInstanceOf[MergeSamFiles]) shouldBe (if (skipMarkDuplicate && chunks > 1) 1 else 0) - mapping.functions.count(_.isInstanceOf[MarkDuplicates]) shouldBe (if (skipMarkDuplicate) 0 else 1) - } } // remove temporary run directory all tests in the class have been run @@ -121,7 +93,17 @@ class MappingTest extends TestNGSuite with Matchers { } } +class MappingBwaMemTest extends AbstractTestMapping("bwa-mem") +class MappingBwaAlnTest extends AbstractTestMapping("bwa-aln") +class MappingStarTest extends AbstractTestMapping("star") +class MappingStar2PassTest extends AbstractTestMapping("star-2pass") +class MappingBowtieTest extends AbstractTestMapping("bowtie") +class MappingStampyTest extends AbstractTestMapping("stampy") +class MappingGsnapTest extends AbstractTestMapping("gsnap") +class MappingTophatTest extends AbstractTestMapping("tophat") + object MappingTest { + val outputDir = Files.createTempDir() new File(outputDir, "input").mkdirs() diff --git a/public/pom.xml b/public/pom.xml index cf2ea52f0c710db8abf2ce1c1202a7dd12d80dd0..0f2785691ad8dab0d8111a6204894b8801e4eeac 100644 --- a/public/pom.xml +++ b/public/pom.xml @@ -44,13 +44,14 @@ <module>biopet-utils</module> <module>biopet-tools</module> <module>biopet-tools-extensions</module> - <module>biopet-extentsions</module> + <module>biopet-extensions</module> <module>biopet-tools-package</module> </modules> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <scoverage.plugin.version>1.0.4</scoverage.plugin.version> + <scoverage.plugin.version>1.1.1</scoverage.plugin.version> + <scalaVersion>2.10.4</scalaVersion> </properties> <build> @@ -79,6 +80,7 @@ <version>2.18.1</version> <configuration> <forkCount>1C</forkCount> + <argLine>-Xmx300m</argLine> <workingDirectory>${project.build.directory}</workingDirectory> </configuration> </plugin> @@ -243,10 +245,12 @@ <artifactId>scoverage-maven-plugin</artifactId> <version>${scoverage.plugin.version}</version> <configuration> - <scalaVersion>2.10.2</scalaVersion> + <scalaVersion>${scalaVersion}</scalaVersion> + <aggregate>true</aggregate> + <highlighting>true</highlighting> <!-- other parameters --> </configuration> - </plugin> + </plugin> </plugins> </build> <reporting> @@ -255,6 +259,17 @@ <groupId>org.scoverage</groupId> <artifactId>scoverage-maven-plugin</artifactId> <version>${scoverage.plugin.version}</version> + <configuration> + <aggregate>true</aggregate> <!-- for aggregated report --> + <highlighting>true</highlighting> + </configuration> + <reportSets> + <reportSet> + <reports> + <report>report</report> <!-- select only one report from: report, integration-report and report-only reporters --> + </reports> + </reportSet> + </reportSets> </plugin> </plugins> </reporting> diff --git a/public/sage/src/main/scala/nl/lumc/sasc/biopet/pipelines/sage/Sage.scala b/public/sage/src/main/scala/nl/lumc/sasc/biopet/pipelines/sage/Sage.scala index 2ee8c3b1930aff553234f6f3860d7c13e0818783..c8b81c0c4d31d6424db74390390c758096478838 100644 --- a/public/sage/src/main/scala/nl/lumc/sasc/biopet/pipelines/sage/Sage.scala +++ b/public/sage/src/main/scala/nl/lumc/sasc/biopet/pipelines/sage/Sage.scala @@ -36,21 +36,22 @@ class Sage(val root: Configurable) extends QScript with MultiSampleQScript { var transcriptome: Option[File] = config("transcriptome") var tagsLibrary: Option[File] = config("tags_library") - override def defaults = ConfigUtils.mergeMaps(Map("bowtie" -> Map( - "m" -> 1, - "k" -> 1, - "best" -> true, - "strata" -> true, - "seedmms" -> 1 - ), "mapping" -> Map( - "aligner" -> "bowtie", - "skip_flexiprep" -> true, - "skip_markduplicates" -> true - ), "flexiprep" -> Map( - "skip_clip" -> true, - "skip_trim" -> true - ), "strandSensitive" -> true - ), super.defaults) + override def defaults = Map( + "bowtie" -> Map( + "m" -> 1, + "k" -> 1, + "best" -> true, + "strata" -> true, + "seedmms" -> 1 + ), "mapping" -> Map( + "aligner" -> "bowtie", + "skip_flexiprep" -> true, + "skip_markduplicates" -> true + ), "flexiprep" -> Map( + "skip_clip" -> true, + "skip_trim" -> true + ), "strandSensitive" -> true + ) def summaryFile: File = new File(outputDir, "Sage.summary.json") diff --git a/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTrait.scala b/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTrait.scala index f9cbddd1d75560c3c5e5c538a1ac0080dacd620a..26302af07fb2abac8007faaf9dbc55e16fca23e1 100644 --- a/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTrait.scala +++ b/public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTrait.scala @@ -199,11 +199,11 @@ trait ShivaVariantcallingTrait extends SummaryQScript with SampleLibraryTag with val vcfFilter = new VcfFilter(qscript) { override def configName = "vcffilter" - override def defaults = ConfigUtils.mergeMaps(Map("min_sample_depth" -> 8, + override def defaults = Map("min_sample_depth" -> 8, "min_alternate_depth" -> 2, "min_samples_pass" -> 1, "filter_ref_calls" -> true - ), super.defaults) + ) } vcfFilter.inputVcf = m2v.output vcfFilter.outputVcf = new File(outputDir, bamFile.getName.stripSuffix(".bam") + ".raw.filter.vcf.gz") diff --git a/public/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaTest.scala b/public/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaTest.scala index 53286ecde3d44e4e6ad91fe142a5740b4909ceca..31777668d11df48a3ad99a663d60aad6e7666966 100644 --- a/public/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaTest.scala +++ b/public/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaTest.scala @@ -109,7 +109,6 @@ object ShivaTest { "cache" -> true, "dir" -> "test", "vep_script" -> "test", - "reference" -> (outputDir + File.separator + "ref.fa"), "reference_fasta" -> (outputDir + File.separator + "ref.fa"), "gatk_jar" -> "test", "samtools" -> Map("exe" -> "test"), diff --git a/public/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTest.scala b/public/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTest.scala index caeea0326d46e4b7673dae4a3d07f27c3cbd5f4e..dae0b974329950501369990e3a53bae077f8f071 100644 --- a/public/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTest.scala +++ b/public/shiva/src/test/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaVariantcallingTest.scala @@ -112,7 +112,6 @@ object ShivaVariantcallingTest { "cache" -> true, "dir" -> "test", "vep_script" -> "test", - "reference" -> (outputDir + File.separator + "ref.fa"), "reference_fasta" -> (outputDir + File.separator + "ref.fa"), "gatk_jar" -> "test", "samtools" -> Map("exe" -> "test"), diff --git a/public/toucan/src/main/scala/nl/lumc/sasc/biopet/pipelines/toucan/Toucan.scala b/public/toucan/src/main/scala/nl/lumc/sasc/biopet/pipelines/toucan/Toucan.scala index 7c3cc327858be60bb3d299e550c0f4244b656560..6ee0776713a5391296719ac6edc83819777fcf31 100644 --- a/public/toucan/src/main/scala/nl/lumc/sasc/biopet/pipelines/toucan/Toucan.scala +++ b/public/toucan/src/main/scala/nl/lumc/sasc/biopet/pipelines/toucan/Toucan.scala @@ -38,9 +38,9 @@ class Toucan(val root: Configurable) extends QScript with BiopetQScript with Sum inputFiles :+= new InputFile(inputVCF) } - override def defaults = ConfigUtils.mergeMaps(Map( + override def defaults = Map( "varianteffectpredictor" -> Map("everything" -> true) - ), super.defaults) + ) //defaults ++= Map("varianteffectpredictor" -> Map("everything" -> true)) diff --git a/public/yamsvp/src/main/scala/nl/lumc/sasc/biopet/extensions/pindel/Pindel.scala b/public/yamsvp/src_old/main/scala/nl/lumc/sasc/biopet/extensions/pindel/Pindel.scala similarity index 100% rename from public/yamsvp/src/main/scala/nl/lumc/sasc/biopet/extensions/pindel/Pindel.scala rename to public/yamsvp/src_old/main/scala/nl/lumc/sasc/biopet/extensions/pindel/Pindel.scala diff --git a/public/yamsvp/src/main/scala/nl/lumc/sasc/biopet/extensions/pindel/PindelCaller.scala b/public/yamsvp/src_old/main/scala/nl/lumc/sasc/biopet/extensions/pindel/PindelCaller.scala similarity index 100% rename from public/yamsvp/src/main/scala/nl/lumc/sasc/biopet/extensions/pindel/PindelCaller.scala rename to public/yamsvp/src_old/main/scala/nl/lumc/sasc/biopet/extensions/pindel/PindelCaller.scala diff --git a/public/yamsvp/src/main/scala/nl/lumc/sasc/biopet/extensions/pindel/PindelConfig.scala b/public/yamsvp/src_old/main/scala/nl/lumc/sasc/biopet/extensions/pindel/PindelConfig.scala similarity index 100% rename from public/yamsvp/src/main/scala/nl/lumc/sasc/biopet/extensions/pindel/PindelConfig.scala rename to public/yamsvp/src_old/main/scala/nl/lumc/sasc/biopet/extensions/pindel/PindelConfig.scala diff --git a/public/yamsvp/src/main/scala/nl/lumc/sasc/biopet/pipelines/yamsvp/Yamsvp.scala b/public/yamsvp/src_old/main/scala/nl/lumc/sasc/biopet/pipelines/yamsvp/Yamsvp.scala similarity index 100% rename from public/yamsvp/src/main/scala/nl/lumc/sasc/biopet/pipelines/yamsvp/Yamsvp.scala rename to public/yamsvp/src_old/main/scala/nl/lumc/sasc/biopet/pipelines/yamsvp/Yamsvp.scala diff --git a/public/yamsvp/src/test/resources/log4j.properties b/public/yamsvp/src_old/test/resources/log4j.properties similarity index 100% rename from public/yamsvp/src/test/resources/log4j.properties rename to public/yamsvp/src_old/test/resources/log4j.properties