diff --git a/scala/qscript/examples/ExampleCustomWalker.scala b/scala/qscript/examples/ExampleCustomWalker.scala new file mode 100644 index 000000000..20158aba6 --- /dev/null +++ b/scala/qscript/examples/ExampleCustomWalker.scala @@ -0,0 +1,49 @@ +import org.broadinstitute.sting.queue.QScript +import org.broadinstitute.sting.queue.extensions.gatk._ + +/** + * A pipeline for Queue that runs a custom walker outside of the GATK jar. + * NOTE: This code is an unsupported example for soliciting feedback on how to improve Queue. + * Future syntax will simplify running the GATK so please expect the syntax below to change significantly. + */ +class ExampleCustomWalker extends QScript { + // The full packaged jar should be used. + // You can build this jar via 'ant package' and then find it under + // 'Sting/dist/packages/GenomeAnalysisTK-*/GenomeAnalysisTK.jar' + @Input(doc="The path to the packaged GenomeAnalysisTK.jar file.", shortName="gatk") + var gatkJar: File = null + + @Input(doc="The reference file for the bam files.", shortName="R") + var referenceFile: File = null + + // NOTE: Do not initialize List, Set, or Option to null + // as you won't be able to update the collection. + // By default set: + // List[T] = Nil + // Set[T] = Set.empty[T] + // Option[T] = None + @Input(doc="One or more bam files.", shortName="I") + var bamFiles: List[File] = Nil + + /** + * In script, you create and then add() functions to the pipeline. + */ + def script = { + val myClasses = "myClassDir" + + val customWalker = new CommandLineGATK { + // Set the name of your walker, for example this will be passed as -T MyCustomWalker + this.analysis_type = "MyCustomWalker" + // NOTE: At this time, you still need to specify the GATK jar or the pipeline won't validate. + this.jarFile = gatkJar + override def javaExecutable = "org.broadinstitute.sting.gatk.CommandLineGATK" + override def javaOpts = "%s -cp %s:%s".format(super.javaOpts, gatkJar, myClasses) + } + + customWalker.reference_sequence = referenceFile + customWalker.input_file = bamFiles + + // Add the newly created function to the pipeline. + add(customWalker) + } +} diff --git a/scala/src/org/broadinstitute/sting/queue/extensions/gatk/NamedFileWrapper.scala b/scala/src/org/broadinstitute/sting/queue/extensions/gatk/NamedFileWrapper.scala index 9041170ff..6add6e700 100644 --- a/scala/src/org/broadinstitute/sting/queue/extensions/gatk/NamedFileWrapper.scala +++ b/scala/src/org/broadinstitute/sting/queue/extensions/gatk/NamedFileWrapper.scala @@ -1,7 +1,6 @@ package org.broadinstitute.sting.queue.extensions.gatk import java.io.File -import org.broadinstitute.sting.queue.function.FileProvider class NamedFileWrapper(private val file: File) { def toNamedFile = new NamedFile(file) diff --git a/scala/src/org/broadinstitute/sting/queue/function/JarCommandLineFunction.scala b/scala/src/org/broadinstitute/sting/queue/function/JarCommandLineFunction.scala index 29d5d3ca7..3bd9da270 100644 --- a/scala/src/org/broadinstitute/sting/queue/function/JarCommandLineFunction.scala +++ b/scala/src/org/broadinstitute/sting/queue/function/JarCommandLineFunction.scala @@ -6,10 +6,9 @@ import java.io.File /** * Defines a command line function that runs from a jar file. */ -trait JarCommandLineFunction extends CommandLineFunction { +trait JarCommandLineFunction extends JavaCommandLineFunction { @Argument(doc="jar") var jarFile: File = _ - def commandLine = "java%s -Djava.io.tmpdir=%s -jar %s" - .format(optional(" -Xmx", memoryLimit, "g"), jobTempDir, jarFile) + def javaExecutable = "-jar " + jarFile } diff --git a/scala/src/org/broadinstitute/sting/queue/function/JavaCommandLineFunction.scala b/scala/src/org/broadinstitute/sting/queue/function/JavaCommandLineFunction.scala new file mode 100644 index 000000000..740679414 --- /dev/null +++ b/scala/src/org/broadinstitute/sting/queue/function/JavaCommandLineFunction.scala @@ -0,0 +1,17 @@ +package org.broadinstitute.sting.queue.function + +/** + * Defines a command line function that runs java code. + */ +trait JavaCommandLineFunction extends CommandLineFunction { + /** + * Returns the java executable to run. + */ + def javaExecutable: String + + def javaOpts = "%s -Djava.io.tmpdir=%s" + .format(optional(" -Xmx", memoryLimit, "g"), jobTempDir) + + def commandLine = "java%s %s" + .format(javaOpts, javaExecutable) +}