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/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-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Bowtie.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Bowtie.scala index 5a574b729fb7fa4c7b27c674845f069fd01cb4ca..fc2f95e4e33f54dca689568bb48cb8489ed3e65d 100644 --- a/public/biopet-extensions/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-extensions/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 index ada8007283b76122005cc5d4e6a0a39c161ea1aa..0479bbb754d62a13e4e7d99bf6ac949b8cd69aec 100644 --- a/public/biopet-extensions/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-extensions/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 index 5ddaa72341c6a35b6cc9070c6d50cc48e80b7551..fed464a7391ad3f618e3755c2b8addc3cfb608b1 100644 --- a/public/biopet-extensions/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-extensions/src/test/scala/nl/lumc/sasc/biopet/extensions/GsnapTest.scala b/public/biopet-extensions/src/test/scala/nl/lumc/sasc/biopet/extensions/GsnapTest.scala index 7a5a541899981f9a3a6bf25396ea23d64afd60d3..8dceeb52502cf5b150bc3fa4e41ccdb9cb6aebae 100644 --- a/public/biopet-extensions/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-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..1613109b2fc34fae7336b21d8382116b28a297e1 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 def internalDefaults: Map[String, Any] = { + (root != null, defaults.isEmpty) match { + case (true, true) => root.defaults + case (true, false) => ConfigUtils.mergeMaps(defaults, root.defaults) + 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 ecf5bb0d8ff66d7ce9d595f8786919c9db11601a..2be78c7226036ef90021d8bfc144a225c0460ab5 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 @@ -39,16 +39,14 @@ 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" -> false, "aligner" -> "bwa-mem" ), "samtoolsview" -> Map("q" -> 10) - ), super.defaults) - - - + ) + def summaryFile = new File(outputDir, "Carp.summary.json") //TODO: Add summary 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..baf8d34dc40f017a0907775e5b2a3c32b70c8915 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 @@ -250,24 +250,22 @@ 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) { + add(Zcat(this, fastq_R1, fastqR1Qc) | new Gzip(this) > fastqR1Qc) + if (paired) add(Zcat(this, fastq_R2, fastqR2Qc.get) | 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/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 0d93e48ecd82b7c8d4fdae8b336c6aae06c785c4..aeff9d559027f53cb1ab2715b0119f2f32451421 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 @@ -97,13 +97,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, 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/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))