From 091f86da75fb56f3e2bb42f9fc019eb8c0386615 Mon Sep 17 00:00:00 2001 From: Peter van 't Hof <p.j.van_t_hof@lumc.nl> Date: Fri, 9 Jan 2015 15:40:44 +0100 Subject: [PATCH] Extended sample handing in multisample qscript --- .../biopet/pipelines/gatk/GatkPipeline.scala | 4 +- .../sasc/biopet/core/MultiSampleQScript.scala | 51 ++++++++++++++++++- .../lumc/sasc/biopet/core/ToolCommand.scala | 8 +-- .../biopet/core/config/Configurable.scala | 6 +-- .../lumc/sasc/biopet/utils/ConfigUtils.scala | 1 + 5 files changed, 60 insertions(+), 10 deletions(-) diff --git a/protected/biopet-gatk-pipelines/src/main/scala/nl/lumc/sasc/biopet/pipelines/gatk/GatkPipeline.scala b/protected/biopet-gatk-pipelines/src/main/scala/nl/lumc/sasc/biopet/pipelines/gatk/GatkPipeline.scala index 75834b45f..0031e2c15 100644 --- a/protected/biopet-gatk-pipelines/src/main/scala/nl/lumc/sasc/biopet/pipelines/gatk/GatkPipeline.scala +++ b/protected/biopet-gatk-pipelines/src/main/scala/nl/lumc/sasc/biopet/pipelines/gatk/GatkPipeline.scala @@ -62,7 +62,7 @@ class GatkPipeline(val root: Configurable) extends QScript with MultiSampleQScri } val multisampleVariantcalling = new GatkVariantcalling(this) { - override protected lazy val configName = "gatkvariantcalling" + override def configName = "gatkvariantcalling" override def configPath: List[String] = "multisample" :: super.configPath } @@ -97,7 +97,7 @@ class GatkPipeline(val root: Configurable) extends QScript with MultiSampleQScri val allRawVcfFiles = for ((sampleID, sampleOutput) <- samplesOutput) yield sampleOutput.variantcalling.rawFilterVcfFile val gatkVariantcalling = new GatkVariantcalling(this) { - override protected lazy val configName = "gatkvariantcalling" + override def configName = "gatkvariantcalling" override def configPath: List[String] = "multisample" :: super.configPath } diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/MultiSampleQScript.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/MultiSampleQScript.scala index bfce62da0..3eb4fc516 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/MultiSampleQScript.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/MultiSampleQScript.scala @@ -15,7 +15,7 @@ */ package nl.lumc.sasc.biopet.core -import nl.lumc.sasc.biopet.core.config.{ Config, Configurable } +import nl.lumc.sasc.biopet.core.config.{ ConfigValue, Config, Configurable } import nl.lumc.sasc.biopet.utils.ConfigUtils._ trait MultiSampleQScript extends BiopetQScript { @@ -39,7 +39,9 @@ trait MultiSampleQScript extends BiopetQScript { var sample = any2map(value) if (!sample.contains("ID")) sample += ("ID" -> key) if (sample("ID") == key) { + setCurrentSample(key) samplesOutput += key -> runSingleSampleJobs(sample) + unsetCurrentSample() } else logger.warn("Key is not the same as ID on value for sample") } else logger.warn("No Samples found in config") @@ -63,11 +65,58 @@ trait MultiSampleQScript extends BiopetQScript { var library = any2map(value) if (!library.contains("ID")) library += ("ID" -> key) if (library("ID") == key) { + setCurrentLibrary(key) output += key -> runSingleLibraryJobs(library, sampleConfig) + unsetCurrentLibrary() } else logger.warn("Key is not the same as ID on value for run of sample: " + sampleID) } } else logger.warn("No runs found in config for sample: " + sampleID) return output } def runSingleLibraryJobs(runConfig: Map[String, Any], sampleConfig: Map[String, Any]): LibraryOutput + + private var currentSample: String = null + private var currentLibrary: String = null + + def setCurrentSample(sample: String) { + currentSample = sample + } + + def unsetCurrentSample() { + currentSample = null + } + + def setCurrentLibrary(library: String) { + currentLibrary = library + } + + def unsetCurrentLibrary() { + currentLibrary = null + } + + override protected[core] def configFullPath: List[String] = { + (if (currentSample != null) "samples" :: currentSample :: Nil else Nil) ::: + (if (currentLibrary != null) "libraries" :: currentLibrary :: Nil else Nil) ::: + super.configFullPath + } + + protected class ConfigFunctions extends super.ConfigFunctions { + override def apply(key: String, + default: Any = null, + submodule: String = null, + required: Boolean = false, + freeVar: Boolean = true, + sample: String = currentSample, + library: String = currentLibrary): ConfigValue = { + super.apply(key, default, submodule, required, freeVar, sample, library) + } + + override def contains(key: String, + submodule: String = null, + freeVar: Boolean = true, + sample: String = currentSample, + library: String = currentLibrary) = { + super.contains(key, submodule, freeVar, sample, library) + } + } } diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/ToolCommand.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/ToolCommand.scala index c454c0a91..b3b25e9a7 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/ToolCommand.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/ToolCommand.scala @@ -16,10 +16,10 @@ package nl.lumc.sasc.biopet.core trait ToolCommand extends MainCommand with Logging { - abstract class AbstractArgs { + protected abstract class AbstractArgs { } - abstract class AbstractOptParser extends scopt.OptionParser[Args](commandName) { + protected abstract class AbstractOptParser extends scopt.OptionParser[Args](commandName) { opt[String]('l', "log_level") foreach { x => x.toLowerCase match { case "debug" => logger.setLevel(org.apache.log4j.Level.DEBUG) @@ -44,6 +44,6 @@ trait ToolCommand extends MainCommand with Logging { } text ("Print version") } - type Args <: AbstractArgs - type OptParser <: AbstractOptParser + protected type Args <: AbstractArgs + protected type OptParser <: AbstractOptParser } \ No newline at end of file diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Configurable.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Configurable.scala index 9ce006570..54c67437d 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Configurable.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Configurable.scala @@ -21,9 +21,9 @@ import nl.lumc.sasc.biopet.utils.ConfigUtils.ImplicitConversions trait Configurable extends ImplicitConversions { val root: Configurable - lazy val configPath: List[String] = if (root != null) root.configFullPath else List() - protected[config] lazy val configName = getClass.getSimpleName.toLowerCase - protected[config] lazy val configFullPath: List[String] = configPath ::: configName :: Nil + def configPath: List[String] = if (root != null) root.configFullPath else List() + protected[core] def configName = getClass.getSimpleName.toLowerCase + protected[core] def configFullPath: List[String] = configPath ::: configName :: Nil var defaults: scala.collection.mutable.Map[String, Any] = if (root != null) scala.collection.mutable.Map(root.defaults.toArray: _*) else scala.collection.mutable.Map() diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/utils/ConfigUtils.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/utils/ConfigUtils.scala index 9855e7248..a0a428d60 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/utils/ConfigUtils.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/utils/ConfigUtils.scala @@ -200,6 +200,7 @@ object ConfigUtils extends Logging { any match { case i: Int => i case i: Double => i.toInt + case i: Long => i.toInt case i: String => { logger.warn("Value '" + any + "' is a string insteadof int in json file, trying auto convert") i.toInt -- GitLab