diff --git a/protected/biopet-gatk-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/gatk/GatkGeneral.scala b/protected/biopet-gatk-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/gatk/GatkGeneral.scala index 147398ac798c077da0722b2078f7ea21c666b7d1..3d1b5585028f69c01934f0ddfc0d54c6a9c25169 100644 --- a/protected/biopet-gatk-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/gatk/GatkGeneral.scala +++ b/protected/biopet-gatk-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/gatk/GatkGeneral.scala @@ -13,13 +13,13 @@ trait GatkGeneral extends CommandLineGATK with BiopetJavaCommandLineFunction { override def subPath = "gatk" :: super.subPath - jarFile = config("gatk_jar", required = true) + jarFile = config("gatk_jar") override val defaultVmem = "7G" if (config.contains("intervals")) intervals = config("intervals").asFileList if (config.contains("exclude_intervals")) excludeIntervals = config("exclude_intervals").asFileList - reference_sequence = config("reference", required = true) + reference_sequence = config("reference") if (config.contains("gatk_key")) gatk_key = config("gatk_key") if (config.contains("pedigree")) pedigree = config("pedigree").asFileList } 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 c76139133f23cf434884ad69ccc9dafc69b2cac9..be4566211351a3d077877d1a99cf8be6ba0f58cd 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 @@ -35,7 +35,7 @@ class GatkPipeline(val root: Configurable) extends QScript with MultiSampleQScri var jointGenotyping: Boolean = config("joint_genotyping", default = false) var singleSampleCalling = config("single_sample_calling", default = true) - var reference: File = config("reference", required = true) + var reference: File = config("reference") var useAllelesOption: Boolean = config("use_alleles_option", default = false) val externalGvcfs = config("external_gvcfs_files", default = Nil).asFileList 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 8bac4aaf68c33a245da877d460bc26abb9ebe564..47715e26adb11f0ed73520d2769ca55120a58d93 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 @@ -30,7 +30,7 @@ class GatkVariantcalling(val root: Configurable) extends QScript with BiopetQScr var rawVcfInput: File = _ @Argument(doc = "Reference", shortName = "R", required = false) - var reference: File = config("reference", required = true) + var reference: File = config("reference") @Argument(doc = "OutputName", required = false) var outputName: String = _ diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/BiopetCommandLineFunctionTrait.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/BiopetCommandLineFunctionTrait.scala index 4a5b25f7a5b816fe32ad39897a334a6e13fe1eda..83aa87155236e9b2752407fb4bd39ce21dc36824 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/BiopetCommandLineFunctionTrait.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/BiopetCommandLineFunctionTrait.scala @@ -66,7 +66,7 @@ trait BiopetCommandLineFunctionTrait extends CommandLineFunction with Configurab super.freezeFieldValues() } - protected def checkExecutable { + protected[core] def checkExecutable { if (!BiopetCommandLineFunctionTrait.executableMd5Cache.contains(executable)) { try if (executable != null) { if (!BiopetCommandLineFunctionTrait.executableCache.contains(executable)) { @@ -79,8 +79,7 @@ trait BiopetCommandLineFunctionTrait extends CommandLineFunction with Configurab val file = new File(executable) executable = file.getCanonicalPath } else { - logger.error("executable: '" + executable + "' not found, please check config") - throw new QException("executable: '" + executable + "' not found, please check config") + BiopetQScript.addError("executable: '" + executable + "' not found, please check config") } BiopetCommandLineFunctionTrait.executableCache += oldExecutable -> executable BiopetCommandLineFunctionTrait.executableCache += executable -> executable @@ -101,9 +100,8 @@ trait BiopetCommandLineFunctionTrait extends CommandLineFunction with Configurab case ioe: java.io.IOException => logger.warn("Could not use 'which', check on executable skipped: " + ioe) } } - val md5 = BiopetCommandLineFunctionTrait.executableMd5Cache(executable) - if (md5 == null) addJobReportBinding("md5sum_exe", md5) - else addJobReportBinding("md5sum_exe", "None") + val md5 = BiopetCommandLineFunctionTrait.executableMd5Cache.get(executable) + addJobReportBinding("md5sum_exe", md5.getOrElse("None")) } final protected def preCmdInternal { @@ -120,6 +118,8 @@ trait BiopetCommandLineFunctionTrait extends CommandLineFunction with Configurab protected val versionExitcode = List(0) // Can select multiple private def getVersionInternal: String = { if (versionCommand == null || versionRegex == null) return "N/A" + val exe = new File(versionCommand.trim.split(" ")(0)) + if (!exe.exists()) return "N/A" val stdout = new StringBuffer() val stderr = new StringBuffer() def outputLog = "Version command: \n" + versionCommand + diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/BiopetQScript.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/BiopetQScript.scala index 1a3f565880dc3a2bd5450efd86cfa188e647eef4..062d725bafb7050258aaf07e0a0a0444e02aafdc 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/BiopetQScript.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/BiopetQScript.scala @@ -24,14 +24,16 @@ import org.broadinstitute.gatk.queue.function.QFunction import org.broadinstitute.gatk.queue.function.scattergather.ScatterGatherableFunction import org.broadinstitute.gatk.queue.util.{ Logging => GatkLogging } +import scala.collection.mutable.ListBuffer + trait BiopetQScript extends Configurable with GatkLogging { @Argument(doc = "JSON config file(s)", fullName = "config_file", shortName = "config", required = false) val configfiles: List[File] = Nil var outputDir: String = { - val temp = Config.getValueFromMap(Config.global.map, ConfigValueIndex(this.configName, configPath, "output_dir")) - if (temp.isEmpty) throw new IllegalArgumentException("No output_dir defined in config") + val temp = Config.getValueFromMap(globalConfig.map, ConfigValueIndex(this.configName, configPath, "output_dir")) + if (temp.isEmpty) "" else { val t = temp.get.value.toString if (!t.endsWith("/")) t + "/" else t @@ -51,8 +53,9 @@ trait BiopetQScript extends Configurable with GatkLogging { var functions: Seq[QFunction] final def script() { - outputDir = config("output_dir", required = true) - if (!outputDir.endsWith("/")) outputDir += "/" + outputDir = config("output_dir") + if (outputDir.isEmpty) outputDir = new File(".").getAbsolutePath() + else if (!outputDir.endsWith("/")) outputDir += "/" init biopetScript @@ -61,11 +64,17 @@ trait BiopetQScript extends Configurable with GatkLogging { case _ => } for (function <- functions) function match { - case f: BiopetCommandLineFunctionTrait => f.afterGraph - case _ => + case f: BiopetCommandLineFunctionTrait => { + f.checkExecutable + f.afterGraph + } + case _ => } - Config.global.writeReport(qSettings.runName, outputDir + ".log/" + qSettings.runName) + if (new File(outputDir).canWrite) globalConfig.writeReport(qSettings.runName, outputDir + ".log/" + qSettings.runName) + else BiopetQScript.addError("Output dir: '" + outputDir + "' is not writeable") + + BiopetQScript.checkErrors } def add(functions: QFunction*) // Gets implemeted at org.broadinstitute.sting.queue.QScript @@ -73,5 +82,29 @@ trait BiopetQScript extends Configurable with GatkLogging { function.isIntermediate = isIntermediate add(function) } - } + +object BiopetQScript extends Logging { + private val errors: ListBuffer[Exception] = ListBuffer() + + def addError(error: String, debug: String = null): Unit = { + val msg = error + (if (debug != null && logger.isDebugEnabled) "; " + debug else "") + errors.append(new Exception(msg)) + } + + protected def checkErrors: Unit = { + if (!errors.isEmpty) { + logger.error("*************************") + logger.error("Biopet found some errors:") + if (logger.isDebugEnabled) { + for (e <- errors) { + logger.error(e.getMessage) + logger.debug(e.getStackTrace.mkString("Stack trace:\n", "\n", "\n")) + } + } else { + errors.map(_.getMessage).sorted.distinct.foreach(logger.error(_)) + } + throw new IllegalStateException("Biopet found errors") + } + } +} \ No newline at end of file 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 eb76502c8593a9e970ea2c95b9152569dfffb389..4184f29afacc7f6afcf6dc9d0eb45f9eddfc1993 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 @@ -28,7 +28,7 @@ trait MultiSampleQScript extends BiopetQScript { @Argument(doc = "Only Sample", shortName = "sample", required = false) private val onlySamples: List[String] = Nil - require(Config.global.map.contains("samples"), "No Samples found in config") + require(globalConfig.map.contains("samples"), "No Samples found in config") /** * Sample class with basic functions build in @@ -80,7 +80,7 @@ trait MultiSampleQScript extends BiopetQScript { /** returns a set with library names */ protected def libIds: Set[String] = { - ConfigUtils.getMapFromPath(Config.global.map, List("samples", sampleId, "libraries")).getOrElse(Map()).keySet + ConfigUtils.getMapFromPath(globalConfig.map, List("samples", sampleId, "libraries")).getOrElse(Map()).keySet } /** Adds sample jobs */ @@ -125,7 +125,7 @@ trait MultiSampleQScript extends BiopetQScript { val samples: Map[String, Sample] = sampleIds.map(id => id -> makeSample(id)).toMap /** Returns a list of all sampleIDs */ - protected def sampleIds: Set[String] = ConfigUtils.any2map(Config.global.map("samples")).keySet + protected def sampleIds: Set[String] = ConfigUtils.any2map(globalConfig.map("samples")).keySet /** Runs addAndTrackJobs method for each sample */ final def addSamplesJobs() { diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala index 4ea65cb5a7fc7ceb1226853d47687a0865c818d0..e25e8ef508188adbd5f767b20ca1f688c4eed922 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/config/Config.scala @@ -133,11 +133,11 @@ class Config(var map: Map[String, Any]) extends Logging { */ protected[config] def apply(module: String, path: List[String], key: String, default: Any = null, freeVar: Boolean = true): ConfigValue = { val requestedIndex = ConfigValueIndex(module, path, key, freeVar) - if (contains(requestedIndex)) return foundCache(requestedIndex) + if (contains(requestedIndex)) foundCache(requestedIndex) else if (default != null) { defaultCache += (requestedIndex -> ConfigValue(requestedIndex, null, default, freeVar)) - return defaultCache(requestedIndex) - } else throw new IllegalStateException("Value in config could not be found but it seems required, index: " + requestedIndex) + defaultCache(requestedIndex) + } else ConfigValue(requestedIndex, null, null, freeVar) } def writeReport(id: String, directory: String): Unit = { @@ -174,7 +174,7 @@ class Config(var map: Map[String, Any]) extends Logging { val fullEffective = ConfigUtils.mergeMaps(effectiveFound, effectiveDefaultFound) val fullEffectiveWithNotFound = ConfigUtils.mergeMaps(fullEffective, notFound) - writeMapToJsonFile(Config.global.map, "input") + writeMapToJsonFile(this.map, "input") writeMapToJsonFile(found, "found") writeMapToJsonFile(effectiveFound, "effective.found") writeMapToJsonFile(effectiveDefaultFound, "effective.defaults") 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 54e6dfd170a8cb2e68f5c63dd8ca2675513cee7d..51997ccb8a12fb5c3a234e5e7d95c001dd704b4f 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,6 +21,7 @@ import nl.lumc.sasc.biopet.utils.ConfigUtils.ImplicitConversions trait Configurable extends ImplicitConversions { /** Should be object of parant object */ val root: Configurable + val globalConfig: Config = if (root != null) root.globalConfig else Config.global /** subfix to the path */ def subPath: List[String] = Nil @@ -79,7 +80,6 @@ trait Configurable extends ImplicitConversions { * @param key Name of value * @param default Default value if not found * @param submodule Adds to the path - * @param required Default false, if true and value is not found this function will raise an exception * @param freeVar Default true, if set false value must exist in module * @param sample Default null, when set path is prefixed with "samples" -> "sampleID" * @param library Default null, when set path is prefixed with "libraries" -> "libraryID" @@ -88,7 +88,6 @@ trait Configurable extends ImplicitConversions { def apply(key: String, default: Any = null, submodule: String = null, - required: Boolean = false, freeVar: Boolean = true, sample: String = null, library: String = null): ConfigValue = { @@ -100,14 +99,8 @@ trait Configurable extends ImplicitConversions { val value = Config.getValueFromMap(defaults.toMap, ConfigValueIndex(m, p, key, freeVar)) if (value.isDefined) value.get.value else default } - if (!contains(key, submodule, freeVar, sample = s, library = l) && d == null) { - if (required) { - Logging.logger.error("Value in config could not be found but it is required, key: " + key + " module: " + m + " path: " + p) - throw new IllegalStateException("Value in config could not be found but it is required, key: " + key + " module: " + m + " path: " + p) - } else return null - } - if (d == null) return Config.global(m, p, key, freeVar = freeVar) - else return Config.global(m, p, key, d, freeVar) + if (d == null) globalConfig(m, p, key, freeVar = freeVar) + else globalConfig(m, p, key, d, freeVar) } /** @@ -129,7 +122,7 @@ trait Configurable extends ImplicitConversions { val m = if (submodule != null) submodule else configName val p = path(s, l, submodule) - Config.global.contains(m, p, key, freeVar) || !(Config.getValueFromMap(defaults.toMap, ConfigValueIndex(m, p, key, freeVar)) == None) + globalConfig.contains(m, p, key, freeVar) || !(Config.getValueFromMap(defaults.toMap, ConfigValueIndex(m, p, key, freeVar)) == None) } } } diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/workaround/BiopetQCommandLine.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/workaround/BiopetQCommandLine.scala index e7467ced6086d1f6cc88d46dc110dc77bafc3809..a2ca78b4c52e0a0faa5a4a67ebd7998096a68cf9 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/workaround/BiopetQCommandLine.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/workaround/BiopetQCommandLine.scala @@ -81,19 +81,15 @@ object BiopetQCommandLine extends GatkLogging { Runtime.getRuntime.addShutdownHook(shutdownHook) + CommandLineProgram.start(qCommandLine, argv) try { - CommandLineProgram.start(qCommandLine, argv) - try { - Runtime.getRuntime.removeShutdownHook(shutdownHook) - qCommandLine.shutdown() - } catch { - case e: Exception => /* ignore, example 'java.lang.IllegalStateException: Shutdown in progress' */ - } - if (CommandLineProgram.result != 0) - System.exit(CommandLineProgram.result) + Runtime.getRuntime.removeShutdownHook(shutdownHook) + qCommandLine.shutdown() } catch { - case e: Exception => CommandLineProgram.exitSystemWithError(e) + case e: Exception => /* ignore, example 'java.lang.IllegalStateException: Shutdown in progress' */ } + if (CommandLineProgram.result != 0) + System.exit(CommandLineProgram.result) } } @@ -114,21 +110,28 @@ class BiopetQCommandLine extends CommandLineProgram with Logging { private var qScriptClasses: File = _ private var shuttingDown = false + /** + * we modified this in Biopet to skip compiling and show full stacktrace again + */ private lazy val qScriptPluginManager = { qScriptClasses = IOUtils.tempDir("Q-Classes-", "", settings.qSettings.tempDirectory) - //qScriptManager.loadScripts(scripts, qScriptClasses) - //var temp: Seq[URL] = Seq() for (t <- scripts) { val is = getClass.getResourceAsStream(t.getAbsolutePath) val os = new FileOutputStream(qScriptClasses.getAbsolutePath + "/" + t.getName) org.apache.commons.io.IOUtils.copy(is, os) os.close() - //temp :+= this.getClass.getResource(t.toString) - //logger.info(this.getClass.getResource(t.toString)) val s = if (t.getName.endsWith("/")) t.getName.substring(0, t.getName.length - 1) else t.getName pipelineName = s.substring(0, s.lastIndexOf(".")) + "." + System.currentTimeMillis } - new PluginManager[QScript](qPluginType, List(qScriptClasses.toURI.toURL)) + + // override createByType to pass the correct exceptions + new PluginManager[QScript](qPluginType, List(qScriptClasses.toURI.toURL)) { + override def createByType(plugintype: Class[_ <: QScript]) = { + val noArgsConstructor = plugintype.getDeclaredConstructor() + noArgsConstructor.setAccessible(true) + noArgsConstructor.newInstance() + } + } } private lazy val qCommandPlugin = { @@ -186,12 +189,7 @@ class BiopetQCommandLine extends CommandLineProgram with Logging { //if (settings.run) script.pullInputs() script.qSettings = settings.qSettings - try { - script.script() - } catch { - case e: Exception => - throw new UserException.CannotExecuteQScript(script.getClass.getSimpleName + ".script() threw the following exception: " + e, e) - } + script.script() if (remoteFileConverter != null) { if (remoteFileConverter.convertToRemoteEnabled) diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/Bowtie.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/Bowtie.scala index e192a845be6db96d2a754d2d2ff6a5e393d136ca..9ac74448e880d7be01063a3f12bdd613141b34a4 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/Bowtie.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/Bowtie.scala @@ -29,7 +29,7 @@ class Bowtie(val root: Configurable) extends BiopetCommandLineFunction { var R2: File = _ @Input(doc = "The reference file for the bam files.", shortName = "R") - var reference: File = config("reference", required = true) + var reference: File = config("reference") @Output(doc = "Output file SAM", shortName = "output") var output: File = _ diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/Fastqc.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/Fastqc.scala index fed5e514be34618f41d2e8348eba6d15e67fab29..7bda8792544eea2d863ab06192b51b55ae900077 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/Fastqc.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/Fastqc.scala @@ -51,7 +51,7 @@ class Fastqc(val root: Configurable) extends BiopetCommandLineFunction { override def afterGraph { this.checkExecutable - val fastqcDir = executable.substring(0, executable.lastIndexOf("/")) + val fastqcDir = new File(executable).getParent contaminants = contaminants match { // user-defined contaminants file take precedence diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/Stampy.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/Stampy.scala index a7bfeab78447e62eee1634c73ca09c880679327e..1db8f6d67c8d892e6188aa750efb40b814fbbf1e 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/Stampy.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/Stampy.scala @@ -29,13 +29,13 @@ class Stampy(val root: Configurable) extends BiopetCommandLineFunction { var R2: File = _ @Input(doc = "The reference file for the bam files.", shortName = "ref") - var reference: File = config("reference", required = true) + var reference: File = config("reference") @Input(doc = "The genome prefix.") - var genome: File = config("genome", required = true) + var genome: File = config("genome") @Input(doc = "The hash prefix") - var hash: File = config("hash", required = true) + var hash: File = config("hash") @Output(doc = "Output file SAM", shortName = "output") var output: File = _ diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/TopHat.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/TopHat.scala index e0b8bd68bda46a6b3dc6915a54482b093cfd43d6..98ee6de521d499710e186bb2c196d9d471c6aa5d 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/TopHat.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/TopHat.scala @@ -29,7 +29,7 @@ class TopHat(val root: Configurable) extends BiopetCommandLineFunction { var R2: File = _ @Input(doc = "Bowtie index", shortName = "bti") - var bowtie_index: File = config("bowtie_index", required = true) + var bowtie_index: File = config("bowtie_index") @Argument(doc = "Output Directory") var outputDir: String = _ diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaAln.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaAln.scala index bfd0a5846e6531b47f285453a2d848b1b7f1bafe..3298702fcfd5cd98e1eaf0bae8f6b059d353d2c9 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaAln.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaAln.scala @@ -13,7 +13,7 @@ class BwaAln(val root: Configurable) extends Bwa { var fastq: File = _ @Input(doc = "The reference file for the bam files.", required = true) - var reference: File = config("reference", required = true) + var reference: File = config("reference") @Output(doc = "Output file SAM", required = false) var output: File = _ diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaMem.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaMem.scala index fc790b183b5bae2922a1b5f89ec66fcf4f5b85b2..74cdad0cea290e5a8cdcc2b360fa3fa32444791c 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaMem.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaMem.scala @@ -29,7 +29,7 @@ class BwaMem(val root: Configurable) extends Bwa { var R2: File = _ @Input(doc = "The reference file for the bam files.", shortName = "R") - var reference: File = config("reference", required = true) + var reference: File = config("reference") @Output(doc = "Output file SAM", shortName = "output") var output: File = _ diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSampe.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSampe.scala index b857eea014ac52acb9608debb94db9cd75cef929..255811561e732b229b1417c95d866fad4694c0c9 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSampe.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSampe.scala @@ -26,7 +26,7 @@ class BwaSampe(val root: Configurable) extends Bwa { var saiR2: File = _ @Input(doc = "The reference file for the bam files.", required = true) - var reference: File = config("reference", required = true) + var reference: File = config("reference") @Output(doc = "Output file SAM", required = false) var output: File = _ diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSamse.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSamse.scala index 51f9a0f30eaf73a897fefaa2b6cf69d4e3386b62..8bbf918474e21d2e2837ce01d5bc4490e13bd087 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSamse.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/bwa/BwaSamse.scala @@ -16,7 +16,7 @@ class BwaSamse(val root: Configurable) extends Bwa { var sai: File = _ @Input(doc = "The reference file for the bam files.", required = true) - var reference: File = config("reference", required = true) + var reference: File = config("reference") @Output(doc = "Output file SAM", required = false) var output: File = _ diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectGcBiasMetrics.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectGcBiasMetrics.scala index 7ffcb50d8fec02138c07e4fc95d7608e8bfba72e..9cab9bfc90298f243f6cfdc8e051e7d451a4cf90 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectGcBiasMetrics.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/picard/CollectGcBiasMetrics.scala @@ -35,7 +35,7 @@ class CollectGcBiasMetrics(val root: Configurable) extends Picard { var outputSummary: File = _ @Argument(doc = "Reference file", required = false) - var reference: File = config("reference", required = true) + var reference: File = config("reference") @Argument(doc = "Window size", required = false) var windowSize: Option[Int] = config("windowsize") 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 9f1cddb7913cf7846daa72c7b9e695988b3a14c6..2c9165036824f135f9552b69fa3b4085be25fc93 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 @@ -16,6 +16,7 @@ package nl.lumc.sasc.biopet.utils import java.io.File +import nl.lumc.sasc.biopet.core.BiopetQScript import nl.lumc.sasc.biopet.core.Logging import nl.lumc.sasc.biopet.core.config.ConfigValue import argonaut._, Argonaut._ @@ -330,14 +331,27 @@ object ConfigUtils extends Logging { trait ImplicitConversions { import scala.language.implicitConversions + private def requiredValue(value: ConfigValue): Boolean = { + val exist = valueExists(value) + if (!exist) + BiopetQScript.addError("Value does not exist but is required, key: " + value.requestIndex.key + + " module: " + value.requestIndex.module, + (if (value.requestIndex.path != Nil) " path: " + value.requestIndex.path.mkString("->") else null)) + exist + } + + private def valueExists(value: ConfigValue): Boolean = { + value != null && value.value != null && value.value != None + } + /** * Convert ConfigValue to File * @param value Input ConfigValue * @return */ implicit def configValue2file(value: ConfigValue): File = { - if (value != null && value.value != null && value.value != None) new File(any2string(value.value)) - else throw new IllegalStateException("Value does not exist") + if (requiredValue(value)) new File(any2string(value.value)) + else new File("") } /** @@ -346,7 +360,7 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2optionFile(value: ConfigValue): Option[File] = { - if (value != null && value.value != null && value.value != None) Some(new File(any2string(value.value))) + if (valueExists(value)) Some(new File(any2string(value.value))) else None } @@ -356,8 +370,8 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2string(value: ConfigValue): String = { - if (value != null && value.value != null && value.value != None) any2string(value.value) - else throw new IllegalStateException("Value does not exist") + if (requiredValue(value)) any2string(value.value) + else "" } /** @@ -366,7 +380,7 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2optionString(value: ConfigValue): Option[String] = { - if (value != null && value.value != null && value.value != None) Some(any2string(value.value)) + if (valueExists(value)) Some(any2string(value.value)) else None } @@ -376,8 +390,8 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2long(value: ConfigValue): Long = { - if (value != null && value.value != null && value.value != None) any2long(value.value) - else throw new IllegalStateException("Value does not exist") + if (requiredValue(value)) any2long(value.value) + else 0L } /** @@ -386,7 +400,7 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2optionLong(value: ConfigValue): Option[Long] = { - if (value != null && value.value != null && value.value != None) Option(any2long(value.value)) + if (valueExists(value)) Option(any2long(value.value)) else None } @@ -396,8 +410,8 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2int(value: ConfigValue): Int = { - if (value != null && value.value != null && value.value != None) any2int(value.value) - else throw new IllegalStateException("Value does not exist") + if (requiredValue(value)) any2int(value.value) + else 0 } /** @@ -406,7 +420,7 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2optionInt(value: ConfigValue): Option[Int] = { - if (value != null && value.value != null && value.value != None) Option(any2int(value.value)) + if (valueExists(value)) Option(any2int(value.value)) else None } @@ -416,8 +430,8 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2double(value: ConfigValue): Double = { - if (value != null && value.value != null && value.value != None) any2double(value.value) - else throw new IllegalStateException("Value does not exist") + if (requiredValue(value)) any2double(value.value) + else 0.0 } /** @@ -426,7 +440,7 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2optionDouble(value: ConfigValue): Option[Double] = { - if (value != null && value.value != null && value.value != None) Option(any2double(value.value)) + if (valueExists(value)) Option(any2double(value.value)) else None } @@ -436,8 +450,8 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2float(value: ConfigValue): Float = { - if (value != null && value.value != null && value.value != None) any2float(value.value) - else throw new IllegalStateException("Value does not exist") + if (requiredValue(value)) any2float(value.value) + else 0f } /** @@ -446,7 +460,7 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2optionFloat(value: ConfigValue): Option[Float] = { - if (value != null && value.value != null && value.value != None) Option(any2float(value.value)) + if (valueExists(value)) Option(any2float(value.value)) else None } @@ -456,8 +470,8 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2boolean(value: ConfigValue): Boolean = { - if (value != null && value.value != null && value.value != None) any2boolean(value.value) - else throw new IllegalStateException("Value does not exist") + if (requiredValue(value)) any2boolean(value.value) + else false } /** @@ -466,7 +480,7 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2optionBoolean(value: ConfigValue): Option[Boolean] = { - if (value != null && value.value != null && value.value != None) Option(any2boolean(value.value)) + if (valueExists(value)) Option(any2boolean(value.value)) else None } @@ -476,8 +490,8 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2list(value: ConfigValue): List[Any] = { - if (value != null && value.value != null && value.value != None) any2list(value.value) - else throw new IllegalStateException("Value does not exist") + if (requiredValue(value)) any2list(value.value) + else Nil } /** @@ -486,8 +500,8 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2stringList(value: ConfigValue): List[String] = { - if (value != null && value.value != null && value.value != None) any2stringList(value.value) - else throw new IllegalStateException("Value does not exist") + if (requiredValue(value)) any2stringList(value.value) + else Nil } /** @@ -496,8 +510,8 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2stringSet(value: ConfigValue): Set[String] = { - if (value != null && value.value != null && value.value != None) any2stringList(value.value).toSet - else throw new IllegalStateException("Value does not exist") + if (requiredValue(value)) any2stringList(value.value).toSet + else Set() } /** @@ -506,8 +520,8 @@ object ConfigUtils extends Logging { * @return */ implicit def configValue2map(value: ConfigValue): Map[String, Any] = { - if (value != null && value.value != null && value.value != None) any2map(value.value) - else throw new IllegalStateException("Value does not exist") + if (requiredValue(value)) any2map(value.value) + else Map() } } } diff --git a/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/core/config/ConfigTest.scala b/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/core/config/ConfigTest.scala index 92d0b9f63f60ad1a6c9489ba1d71fd3f25ab6828..b7353b2ad1d4a91cd05340edbd7a61a51e64e266 100644 --- a/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/core/config/ConfigTest.scala +++ b/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/core/config/ConfigTest.scala @@ -30,9 +30,6 @@ class ConfigTest extends TestNGSuite with Matchers with ConfigUtils.ImplicitConv @Test def testApply: Unit = { ConfigTest.config("m1", Nil, "k1").asString shouldBe "v2" ConfigTest.config("m1", Nil, "notexist", default = "default").asString shouldBe "default" - intercept[IllegalStateException] { - ConfigTest.config("m1", Nil, "notexist") - } } @Test def testMergeConfigs: Unit = { diff --git a/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/core/config/ConfigurableTest.scala b/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/core/config/ConfigurableTest.scala index 1b493f2e14df822b75534fed3722f88917882fe1..19940fde2ecb2c923cdbed79b9fcb85bd1ab4e39 100644 --- a/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/core/config/ConfigurableTest.scala +++ b/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/core/config/ConfigurableTest.scala @@ -11,10 +11,10 @@ import org.testng.annotations.Test */ class ConfigurableTest extends TestNGSuite with Matchers { @Test def testConfigurable: Unit = { - Config.global.map = Map() - Config.global.loadConfigFile(ConfigurableTest.file) - - val classC = new ClassC + val classC = new ClassC { + override def configName = "classc" + override val globalConfig = new Config(ConfigurableTest.map) + } classC.configPath shouldBe Nil classC.configFullPath shouldBe List("classc") @@ -27,10 +27,6 @@ class ConfigurableTest extends TestNGSuite with Matchers { classC.classB.get("k1").asString shouldBe "c1" classC.classB.classA.get("k1").asString shouldBe "c1" - classC.get("notexist") shouldBe null - intercept[IllegalStateException] { - classC.get("notexist", required = true) - } classC.get("notexist", default = "default").asString shouldBe "default" classC.get("k1", freeVar = false).asString shouldBe "c1" @@ -47,23 +43,24 @@ abstract class Cfg extends Configurable { def get(key: String, default: String = null, submodule: String = null, - required: Boolean = false, freeVar: Boolean = true, sample: String = null, library: String = null) = { - config(key, default, submodule, required, freeVar = freeVar, sample = sample, library = library) + config(key, default, submodule, freeVar = freeVar, sample = sample, library = library) } } class ClassA(val root: Configurable) extends Cfg class ClassB(val root: Configurable) extends Cfg { - val classA = new ClassA(this) + lazy val classA = new ClassA(this) + // Why this needs to be lazy? } class ClassC(val root: Configurable) extends Cfg { def this() = this(null) - val classB = new ClassB(this) + lazy val classB = new ClassB(this) + // Why this needs to be lazy? } object ConfigurableTest { @@ -85,6 +82,4 @@ object ConfigurableTest { ) ) ) - - val file = ConfigUtilsTest.writeTemp(ConfigUtils.mapToJson(map).spaces2) } diff --git a/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/utils/ConfigUtilsTest.scala b/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/utils/ConfigUtilsTest.scala index 26f989c5369c4e138ded82620d1d03f0c076ce7c..ddcf887d819eb0edc09bfc5b6a42954115e62192 100644 --- a/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/utils/ConfigUtilsTest.scala +++ b/public/biopet-framework/src/test/scala/nl/lumc/sasc/biopet/utils/ConfigUtilsTest.scala @@ -4,6 +4,7 @@ import java.io.{ PrintWriter, File } import argonaut.Argonaut._ import argonaut.Json +import nl.lumc.sasc.biopet.core.BiopetQScript import nl.lumc.sasc.biopet.core.config.{ ConfigValueIndex, ConfigValue } import org.scalatest.Matchers import org.scalatest.mock.MockitoSugar @@ -170,79 +171,23 @@ class ConfigUtilsTest extends TestNGSuite with Matchers { val index = ConfigValueIndex("test", Nil, "test") new ImplicitConversions { configValue2list(ConfigValue(index, index, List(""))) shouldBe List("") - intercept[IllegalStateException] { - configValue2list(ConfigValue(index, index, null)) - } - configValue2stringList(ConfigValue(index, index, List(""))) shouldBe List("") - intercept[IllegalStateException] { - configValue2stringList(ConfigValue(index, index, null)) - } - configValue2stringSet(ConfigValue(index, index, List(""))) shouldBe Set("") - intercept[IllegalStateException] { - configValue2stringSet(ConfigValue(index, index, null)) - } var int: Int = ConfigValue(index, index, 1) - intercept[IllegalStateException] { - int = ConfigValue(index, index, null) - } - var long: Long = ConfigValue(index, index, 1) - intercept[IllegalStateException] { - long = ConfigValue(index, index, null) - } - var double: Double = ConfigValue(index, index, 1) - intercept[IllegalStateException] { - double = ConfigValue(index, index, null) - } - var float: Float = ConfigValue(index, index, 1) - intercept[IllegalStateException] { - float = ConfigValue(index, index, null) - } - var boolean: Boolean = ConfigValue(index, index, true) - intercept[IllegalStateException] { - boolean = ConfigValue(index, index, null) - } - var intOption: Option[Int] = ConfigValue(index, index, 1) - intercept[IllegalStateException] { - int = ConfigValue(index, index, null) - } - var longOption: Option[Long] = ConfigValue(index, index, 1) - intercept[IllegalStateException] { - long = ConfigValue(index, index, null) - } - var doubleOption: Option[Double] = ConfigValue(index, index, 1) - intercept[IllegalStateException] { - double = ConfigValue(index, index, null) - } - var floatOption: Option[Float] = ConfigValue(index, index, 1) - intercept[IllegalStateException] { - float = ConfigValue(index, index, null) - } - var booleanOption: Option[Boolean] = ConfigValue(index, index, true) - intercept[IllegalStateException] { - boolean = ConfigValue(index, index, null) - } - var string: String = ConfigValue(index, index, "test") - intercept[IllegalStateException] { - string = ConfigValue(index, index, null) - } - var file: File = ConfigValue(index, index, "test") - intercept[IllegalStateException] { - file = ConfigValue(index, index, null) - } + + //TODO: test BiopetQScript error message } } } 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 50ee00b2c5625226a00e0985bbe761ded375237c..21cb069d658623ab5a7b8986e454db6000f927fa 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 @@ -52,10 +52,7 @@ class Fastqc(root: Configurable) extends nl.lumc.sasc.biopet.extensions.Fastqc(r * @throws FileNotFoundException if the FastQC data file can not be found. * @throws IllegalStateException if the module lines have no content or mapping is empty. */ - @throws(classOf[FileNotFoundException]) - @throws(classOf[IllegalStateException]) def qcModules: Map[String, FastQCModule] = { - val fqModules = Source.fromFile(dataFile) // drop all the characters before the first module delimiter (i.e. '>>') .dropWhile(_ != '>') @@ -93,14 +90,16 @@ class Fastqc(root: Configurable) extends nl.lumc.sasc.biopet.extensions.Fastqc(r * @throws NoSuchElementException when the "Basic Statistics" key does not exist in the mapping or * when a line starting with "Encoding" does not exist. */ - @throws(classOf[NoSuchElementException]) - def encoding: String = - qcModules("Basic Statistics") - .lines - .dropWhile(!_.startsWith("Encoding")) - .head - .stripPrefix("Encoding\t") - .stripSuffix("\t") + def encoding: String = { + if (dataFile.exists) // On a dry run this file does not yet exist + qcModules("Basic Statistics") //FIXME: not save + .lines + .dropWhile(!_.startsWith("Encoding")) + .head + .stripPrefix("Encoding\t") + .stripSuffix("\t") + else "" + } /** Case class representing a known adapter sequence */ protected case class AdapterSequence(name: String, seq: String) @@ -111,32 +110,33 @@ class Fastqc(root: Configurable) extends nl.lumc.sasc.biopet.extensions.Fastqc(r * @return a [[Set]] of [[AdapterSequence]] objects. */ def foundAdapters: Set[AdapterSequence] = { + if (dataFile.exists) { // On a dry run this file does not yet exist + /** Returns a list of adapter and/or contaminant sequences known to FastQC */ + def getFastqcSeqs(file: Option[File]): Set[AdapterSequence] = file match { + case None => Set.empty[AdapterSequence] + case Some(f) => + (for { + line <- Source.fromFile(f).getLines() + if !line.startsWith("#") + values = line.split("\t+") + if values.size >= 2 + } yield AdapterSequence(values(0), values(1))).toSet + } + + val found = qcModules.get("Overrepresented sequences") match { + case None => Seq.empty[String] + case Some(qcModule) => + for ( + line <- qcModule.lines if !(line.startsWith("#") || line.startsWith(">")); + values = line.split("\t") if values.size >= 4 + ) yield values(3) + } - /** Returns a list of adapter and/or contaminant sequences known to FastQC */ - def getFastqcSeqs(file: Option[File]): Set[AdapterSequence] = file match { - case None => Set.empty[AdapterSequence] - case Some(f) => - (for { - line <- Source.fromFile(f).getLines() - if !line.startsWith("#") - values = line.split("\t+") - if values.size >= 2 - } yield AdapterSequence(values(0), values(1))).toSet - } - - val found = qcModules.get("Overrepresented sequences") match { - case None => Seq.empty[String] - case Some(qcModule) => - for ( - line <- qcModule.lines if !(line.startsWith("#") || line.startsWith(">")); - values = line.split("\t") if values.size >= 4 - ) yield values(3) - } - - // select full sequences from known adapters and contaminants - // based on overrepresented sequences results - (getFastqcSeqs(adapters) ++ getFastqcSeqs(contaminants)) - .filter(x => found.exists(_.startsWith(x.name))) + // select full sequences from known adapters and contaminants + // based on overrepresented sequences results + (getFastqcSeqs(adapters) ++ getFastqcSeqs(contaminants)) + .filter(x => found.exists(_.startsWith(x.name))) + } else Set() } /** Summary of the FastQC run, stored in a [[Json]] object */ diff --git a/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/SeqtkSeq.scala b/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/SeqtkSeq.scala index 0fdeee289de9672d917264e3e9dc2d556f6bc48b..05236e13cacae24e5b5dffb408e1aa01b1c297e4 100644 --- a/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/SeqtkSeq.scala +++ b/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/SeqtkSeq.scala @@ -27,11 +27,12 @@ class SeqtkSeq(root: Configurable) extends nl.lumc.sasc.biopet.extensions.seqtk. if (fastqc != null && Q == None) { val encoding = fastqc.encoding Q = encoding match { - case null => None + case null => None case s if (s.contains("Sanger / Illumina 1.9")) => None - case s if (s.contains("Illumina <1.3")) => Option(64) - case s if (s.contains("Illumina 1.3")) => Option(64) - case s if (s.contains("Illumina 1.5")) => Option(64) + case s if (s.contains("Illumina <1.3")) => Option(64) + case s if (s.contains("Illumina 1.3")) => Option(64) + case s if (s.contains("Illumina 1.5")) => Option(64) + case _ => None } if (Q != None) V = true } 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 ed55ca382d13346b3cbb7bb4862941ef4da591f5..77dba4b1469eba2d75bedafc9f53be7c23acb557 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 @@ -60,7 +60,7 @@ class Sage(val root: Configurable) extends QScript with MultiSampleQScript { class Sample(sampleId: String) extends AbstractSample(sampleId) { def makeLibrary(id: String) = new Library(id) class Library(libId: String) extends AbstractLibrary(libId) { - val inputFastq: File = config("R1", required = true) + val inputFastq: File = config("R1") val prefixFastq: File = createFile(".prefix.fastq") val flexiprep = new Flexiprep(qscript) diff --git a/public/yamsvp/src/main/scala/nl/lumc/sasc/biopet/pipelines/yamsvp/Yamsvp.scala b/public/yamsvp/src/main/scala/nl/lumc/sasc/biopet/pipelines/yamsvp/Yamsvp.scala index 206c92a69453105fb2034d6cd72cce00f5ab75cd..6e7257c7d94967eac350fc212e7c7b37ebf5dc58 100644 --- a/public/yamsvp/src/main/scala/nl/lumc/sasc/biopet/pipelines/yamsvp/Yamsvp.scala +++ b/public/yamsvp/src/main/scala/nl/lumc/sasc/biopet/pipelines/yamsvp/Yamsvp.scala @@ -35,7 +35,7 @@ import org.broadinstitute.gatk.queue.engine.JobRunInfo class Yamsvp(val root: Configurable) extends QScript with BiopetQScript { //with MultiSampleQScript { def this() = this(null) - var reference: File = config("reference", required = true) + var reference: File = config("reference") var finalBamFiles: List[File] = Nil /* class LibraryOutput extends AbstractLibraryOutput {