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 75834b45ff8073f377c2530b3ff4c23a8ee19f8c..0031e2c15640e9f20d9e15a309379b712d73e84f 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 bfce62da08c1c3e2e0fe910d90d0f5285899edd1..3eb4fc516991e786d247ecd9cbee5ed4c3277a52 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 c454c0a919f60400c48b219eebedb86eea3f19e0..b3b25e9a764480f90badc5965fe36f50f22da1fc 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 9ce006570b8cf586be73b8306936b4a7b4c0fd8e..54c67437d6a1dd00c18955a1640482bcff272d92 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 9855e724819cdb4d9ed0c93e062f851c1cc2104f..a0a428d60db140abe196b4089069ee8c8f79c643 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