Commit 385d474a authored by Peter van 't Hof's avatar Peter van 't Hof

Merge remote-tracking branch 'remotes/origin/develop' into feature-report

Conflicts:
	protected/biopet-gatk-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/gatk/broad/GatkGeneral.scala
	public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/extensions/gatk/Gatk.scala
	public/shiva/src/main/scala/nl/lumc/sasc/biopet/pipelines/shiva/ShivaTrait.scala
parents 1bed81c6 24837f5b
......@@ -5,10 +5,10 @@
*/
package nl.lumc.sasc.biopet.extensions.gatk.broad
import nl.lumc.sasc.biopet.core.BiopetJavaCommandLineFunction
import nl.lumc.sasc.biopet.core.{ Reference, BiopetJavaCommandLineFunction }
import org.broadinstitute.gatk.queue.extensions.gatk.CommandLineGATK
trait GatkGeneral extends CommandLineGATK with BiopetJavaCommandLineFunction {
trait GatkGeneral extends CommandLineGATK with BiopetJavaCommandLineFunction with Reference {
memoryLimit = Option(3)
override def subPath = "gatk" :: super.subPath
......@@ -19,7 +19,6 @@ trait GatkGeneral extends CommandLineGATK with BiopetJavaCommandLineFunction {
if (config.contains("intervals")) intervals = config("intervals").asFileList
if (config.contains("exclude_intervals")) excludeIntervals = config("exclude_intervals").asFileList
reference_sequence = config("reference")
if (config.contains("gatk_key")) gatk_key = config("gatk_key")
if (config.contains("pedigree")) pedigree = config("pedigree")
......@@ -28,4 +27,9 @@ trait GatkGeneral extends CommandLineGATK with BiopetJavaCommandLineFunction {
override def versionCommand = executable + " -jar " + jarFile + " -version"
override def getVersion = super.getVersion.collect { case version => "Gatk " + version }
override def beforeGraph: Unit = {
super.beforeGraph
if (reference_sequence == null) reference_sequence = referenceFasta()
}
}
@HD VN:1.4 SO:unsorted
@SQ SN:chr1 LN:9 UR:file:/home/pjvan_thof/pipelines/biopet/public/mapping/src/test/resources/ref.fa M5:fe15dbbd0900310caf32827f6da57550
......@@ -5,6 +5,8 @@
*/
package nl.lumc.sasc.biopet.pipelines.gatk
import java.io.{ FileOutputStream, File }
import com.google.common.io.Files
import nl.lumc.sasc.biopet.core.config.Config
import nl.lumc.sasc.biopet.extensions.bwa.BwaMem
......@@ -90,10 +92,22 @@ class ShivaTest extends TestNGSuite with Matchers {
object ShivaTest {
val outputDir = Files.createTempDir()
private def copyFile(name: String): Unit = {
val is = getClass.getResourceAsStream("/" + name)
val os = new FileOutputStream(new File(outputDir, name))
org.apache.commons.io.IOUtils.copy(is, os)
os.close()
}
copyFile("ref.fa")
copyFile("ref.dict")
copyFile("ref.fa.fai")
val config = Map(
"name_prefix" -> "test",
"output_dir" -> outputDir,
"reference" -> "test",
"reference" -> (outputDir + File.separator + "ref.fa"),
"reference_fasta" -> (outputDir + File.separator + "ref.fa"),
"gatk_jar" -> "test",
"samtools" -> Map("exe" -> "test"),
"bcftools" -> Map("exe" -> "test"),
......
......@@ -5,7 +5,7 @@
*/
package nl.lumc.sasc.biopet.pipelines.gatk
import java.io.File
import java.io.{ FileOutputStream, File }
import com.google.common.io.Files
import nl.lumc.sasc.biopet.core.config.Config
......@@ -106,10 +106,22 @@ class ShivaVariantcallingTest extends TestNGSuite with Matchers {
object ShivaVariantcallingTest {
val outputDir = Files.createTempDir()
private def copyFile(name: String): Unit = {
val is = getClass.getResourceAsStream("/" + name)
val os = new FileOutputStream(new File(outputDir, name))
org.apache.commons.io.IOUtils.copy(is, os)
os.close()
}
copyFile("ref.fa")
copyFile("ref.dict")
copyFile("ref.fa.fai")
val config = Map(
"name_prefix" -> "test",
"output_dir" -> outputDir,
"reference" -> "test",
"reference" -> (outputDir + File.separator + "ref.fa"),
"reference_fasta" -> (outputDir + File.separator + "ref.fa"),
"gatk_jar" -> "test",
"samtools" -> Map("exe" -> "test"),
"bcftools" -> Map("exe" -> "test"),
......
@HD VN:1.4 SO:unsorted
@SQ SN:chr1 LN:9 UR:file:/home/pjvan_thof/pipelines/biopet/public/mapping/src/test/resources/ref.fa M5:fe15dbbd0900310caf32827f6da57550
package nl.lumc.sasc.biopet.pipelines.bammetrics
import java.io.File
import java.io.{ FileOutputStream, File }
import com.google.common.io.Files
import nl.lumc.sasc.biopet.core.config.Config
......@@ -81,9 +81,20 @@ class BamMetricsTest extends TestNGSuite with Matchers {
object BamMetricsTest {
val outputDir = Files.createTempDir()
private def copyFile(name: String): Unit = {
val is = getClass.getResourceAsStream("/" + name)
val os = new FileOutputStream(new File(outputDir, name))
org.apache.commons.io.IOUtils.copy(is, os)
os.close()
}
copyFile("ref.fa")
copyFile("ref.dict")
copyFile("ref.fa.fai")
val executables = Map(
"refFlat" -> "bla.refFlat",
"reference" -> "reference.fa",
"reference_fasta" -> (outputDir + File.separator + "ref.fa"),
"samtools" -> Map("exe" -> "test"),
"bedtools" -> Map("exe" -> "test")
)
......
......@@ -15,21 +15,18 @@
# license, please contact us to obtain a separate license.
#
__copyright__ = """
Copyright (C) 2013 - Tim te Beek
Copyright (C) 2013 - Wai Yi Leung
Copyright (C) 2013 AllBio (see AUTHORS file)
"""
__desc__ = """Convert breakdancer output to pseudo .vcf file format."""
__desc__ = """Convert breakdancer output to VCF v4.2 .file format."""
__created__ = "Mar 18, 2013"
__author__ = "tbeek"
__author__ = "tbeek,wyleung"
import argparse
import csv
import os.path
import sys
import datetime
......@@ -43,16 +40,10 @@ def main(tsvfile, vcffile):
with open(tsvfile) as reader:
# Parse file
dictreader = _parse_tsvfile(reader)
print dictreader.fieldnames
# Write out file
_format_vcffile(dictreader, vcffile)
# Quick output
with open(vcffile) as reader:
print reader.read(1000)
def _parse_tsvfile(readable):
'''
Read readable using csv.Sniffer and csv.DictReader
......@@ -111,7 +102,38 @@ VCF_HEADER = """##fileformat=VCFv4.1
##INFO=<ID=NS,Number=1,Type=Integer,Description="Number of Samples With Data">
##INFO=<ID=DP,Number=1,Type=Integer,Description="Total Depth">
##INFO=<ID=AF,Number=A,Type=Float,Description="Allele Frequency">
##INFO=<ID=SVLEN,Number=1,Type=Integer,Description="Length of variation">
##INFO=<ID=IMPRECISE,Number=0,Type=Flag,Description="Imprecise structural variation">
##INFO=<ID=NOVEL,Number=0,Type=Flag,Description="Indicates a novel structural variation">
##INFO=<ID=SVEND,Number=1,Type=Integer,Description="End position of the variant described in this record">
##INFO=<ID=END,Number=1,Type=Integer,Description="End position of the variant described in this record">
##INFO=<ID=SVTYPE,Number=1,Type=String,Description="Type of structural variant">
##INFO=<ID=SVLEN,Number=.,Type=Integer,Description="Difference in length between REF and ALT alleles">
##INFO=<ID=CIPOS,Number=2,Type=Integer,Description="Confidence interval around POS for imprecise variants">
##INFO=<ID=CIEND,Number=2,Type=Integer,Description="Confidence interval around END for imprecise variants">
##INFO=<ID=HOMLEN,Number=.,Type=Integer,Description="Length of base pair identical micro-homology at event breakpoints">
##INFO=<ID=HOMSEQ,Number=.,Type=String,Description="Sequence of base pair identical micro-homology at event breakpoints">
##INFO=<ID=BKPTID,Number=.,Type=String,Description="ID of the assembled alternate allele in the assembly file">
##INFO=<ID=MEINFO,Number=4,Type=String,Description="Mobile element info of the form NAME,START,END,POLARITY">
##INFO=<ID=METRANS,Number=4,Type=String,Description="Mobile element transduction info of the form CHR,START,END,POLARITY">
##INFO=<ID=DGVID,Number=1,Type=String,Description="ID of this element in Database of Genomic Variation">
##INFO=<ID=DBVARID,Number=1,Type=String,Description="ID of this element in DBVAR">
##INFO=<ID=DBRIPID,Number=1,Type=String,Description="ID of this element in DBRIP">
##INFO=<ID=MATEID,Number=.,Type=String,Description="ID of mate breakends">
##INFO=<ID=PARID,Number=1,Type=String,Description="ID of partner breakend">
##INFO=<ID=EVENT,Number=1,Type=String,Description="ID of event associated to breakend">
##INFO=<ID=CILEN,Number=2,Type=Integer,Description="Confidence interval around the inserted material between breakends">
##INFO=<ID=DP,Number=1,Type=Integer,Description="Read Depth of segment containing breakend">
##INFO=<ID=DPADJ,Number=.,Type=Integer,Description="Read Depth of adjacency">
##INFO=<ID=CN,Number=1,Type=Integer,Description="Copy number of segment containing breakend">
##INFO=<ID=CNADJ,Number=.,Type=Integer,Description="Copy number of adjacency">
##INFO=<ID=CICN,Number=2,Type=Integer,Description="Confidence interval around copy number for the segment">
##INFO=<ID=CICNADJ,Number=.,Type=Integer,Description="Confidence interval around copy number for the adjacency">
##FORMAT=<ID=CN,Number=1,Type=Integer,Description="Copy number genotype for imprecise events">
##FORMAT=<ID=CNQ,Number=1,Type=Float,Description="Copy number genotype quality for imprecise events">
##FORMAT=<ID=CNL,Number=.,Type=Float,Description="Copy number genotype likelihood for imprecise events">
##FORMAT=<ID=NQ,Number=1,Type=Integer,Description="Phred style probability score that the variant is novel">
##FORMAT=<ID=HAP,Number=1,Type=Integer,Description="Unique haplotype identifier">
##FORMAT=<ID=AHAP,Number=1,Type=Integer,Description="Unique identifier of ancestral haplotype">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Read Depth">""".format( filedate=TS_NOW.strftime( "%Y%m%d" ) )
......@@ -140,6 +162,7 @@ def _format_vcffile(dictreader, vcffile):
if line['Type'] not in ['CTX']:
INFO += ';SVLEN={}'.format(int(line['Size']))
INFO += ";SVEND={}".format(SVEND)
INFO += ";END={}".format(SVEND)
# write alternate ALT field for Intrachromosomal translocations
if line['Type'] in ['CTX']:
......
package nl.lumc.sasc.biopet.core
import java.io.File
import htsjdk.samtools.reference.IndexedFastaSequenceFile
import nl.lumc.sasc.biopet.core.config.Configurable
import scala.collection.JavaConversions._
/**
* Created by pjvan_thof on 4/6/15.
*/
trait Reference extends Configurable {
def referenceSpecies: String = {
root match {
case r: Reference if r.referenceSpecies != "unknown_species" => r.referenceSpecies
case _ => config("species", default = "unknown_species", path = super.configPath)
}
}
def referenceName: String = {
root match {
case r: Reference if r.referenceName != "unknown_ref" => r.referenceName
case _ => {
val default: String = config("default", default = "unknown_ref", path = List("references", referenceSpecies))
config("reference_name", default = default, path = super.configPath)
}
}
}
override def subPath = {
referenceConfigPath ::: super.subPath
}
/** Returns the reference config path */
def referenceConfigPath = {
List("references", referenceSpecies, referenceName)
}
protected def faiRequired = false
protected def dictRequired = false
/** Returns the fasta file */
def referenceFasta(): File = {
val file: File = config("reference_fasta")
checkFasta(file)
val dict = new File(file.getAbsolutePath.stripSuffix(".fa").stripSuffix(".fasta") + ".dict")
val fai = new File(file.getAbsolutePath + ".fai")
this match {
case c: BiopetCommandLineFunctionTrait => c.deps :::= dict :: fai :: Nil
case _ =>
}
file
}
/** Create summary part for reference */
def referenceSummary: Map[String, Any] = {
val file = new IndexedFastaSequenceFile(referenceFasta())
Map("contigs" ->
(for (seq <- file.getSequenceDictionary.getSequences) yield seq.getSequenceName -> {
val md5 = Option(seq.getAttribute("M5"))
Map("md5" -> md5, "length" -> seq.getSequenceLength)
}).toMap,
"species" -> referenceSpecies,
"name" -> referenceName
)
}
//TODO: this become obsolete when index get autogenerated
/** Check fasta file if file exist and index file are there */
def checkFasta(file: File): Unit = {
if (!Reference.checked.contains(file)) {
require(file.exists(), "Reference not found: " + file)
if (dictRequired) {
val dict = new File(file.getAbsolutePath.stripSuffix(".fa").stripSuffix(".fasta") + ".dict")
require(dict.exists(), "Reference is missing a dict file")
}
if (faiRequired) {
val fai = new File(file.getAbsolutePath + ".fai")
require(fai.exists(), "Reference is missing a fai file")
require(IndexedFastaSequenceFile.canCreateIndexedFastaReader(file), "Index of reference cannot be loaded, reference: " + file)
}
Reference.checked += file
}
}
}
object Reference {
/** Used as cache to avoid double checking */
private var checked: Set[File] = Set()
}
......@@ -22,11 +22,11 @@ trait Configurable extends ImplicitConversions {
val root: Configurable
def globalConfig: Config = if (root != null) root.globalConfig else Config.global
/** subfix to the path */
/** suffix to the path */
def subPath: List[String] = Nil
/** Get default path to search config values for current object */
def configPath: List[String] = if (root != null) root.configFullPath ::: subPath else subPath
def configPath: List[String] = if (root != null) root.configFullPath else Nil
/** Gets name of module for config */
protected[core] def configName = getClass.getSimpleName.toLowerCase
......@@ -92,7 +92,7 @@ trait Configurable extends ImplicitConversions {
val s = if (sample != null || defaultSample.isEmpty) sample else defaultSample.get
val l = if (library != null || defaultLibrary.isEmpty) library else defaultLibrary.get
val m = if (submodule != null) submodule else configName
val p = if (path == null) getConfigPath(s, l, submodule) else path
val p = (if (path == null) getConfigPath(s, l, submodule) ::: subPath else path)
val d = {
val value = Config.getValueFromMap(defaults.toMap, ConfigValueIndex(m, p, key, freeVar))
if (value.isDefined) value.get.value else default
......@@ -119,7 +119,7 @@ trait Configurable extends ImplicitConversions {
val s = if (sample != null || defaultSample.isEmpty) sample else defaultSample.get
val l = if (library != null || defaultLibrary.isEmpty) library else defaultLibrary.get
val m = if (submodule != null) submodule else configName
val p = if (path == null) getConfigPath(s, l, submodule) else path
val p = (if (path == null) getConfigPath(s, l, submodule) ::: subPath else path)
globalConfig.contains(m, p, key, freeVar) || !(Config.getValueFromMap(defaults.toMap, ConfigValueIndex(m, p, key, freeVar)) == None)
}
......
......@@ -17,7 +17,7 @@ package nl.lumc.sasc.biopet.extensions
import java.io.File
import nl.lumc.sasc.biopet.core.BiopetCommandLineFunction
import nl.lumc.sasc.biopet.core.{ Reference, BiopetCommandLineFunction }
import nl.lumc.sasc.biopet.core.config.Configurable
import org.broadinstitute.gatk.utils.commandline.{ Input, Output }
......@@ -26,7 +26,7 @@ import org.broadinstitute.gatk.utils.commandline.{ Input, Output }
*
* Based on version 1.1.1
*/
class Bowtie(val root: Configurable) extends BiopetCommandLineFunction {
class Bowtie(val root: Configurable) extends BiopetCommandLineFunction with Reference {
@Input(doc = "Fastq file R1", shortName = "R1")
var R1: File = null
......@@ -34,7 +34,7 @@ class Bowtie(val root: Configurable) extends BiopetCommandLineFunction {
var R2: Option[File] = None
@Input(doc = "The reference file for the bam files.", shortName = "R", required = true)
var reference: File = config("reference")
var reference: File = null
@Output(doc = "Output file SAM", shortName = "output", required = true)
var output: File = null
......@@ -59,6 +59,11 @@ class Bowtie(val root: Configurable) extends BiopetCommandLineFunction {
var maqerr: Option[Int] = config("maqerr")
var maxins: Option[Int] = config("maxins")
override def beforeGraph {
super.beforeGraph
if (reference == null) reference = referenceFasta()
}
/** return commandline to execute */
def cmdLine = {
required(executable) +
......
......@@ -19,14 +19,14 @@ import java.io.File
import org.broadinstitute.gatk.utils.commandline.{ Input, Output, Argument }
import nl.lumc.sasc.biopet.core.BiopetCommandLineFunction
import nl.lumc.sasc.biopet.core.{ Reference, BiopetCommandLineFunction }
import nl.lumc.sasc.biopet.core.config.Configurable
/**
* Wrapper for the gsnap command line tool
* Written based on gsnap version 2014-05-15
*/
class Gsnap(val root: Configurable) extends BiopetCommandLineFunction {
class Gsnap(val root: Configurable) extends BiopetCommandLineFunction with Reference {
/** default executable */
executable = config("exe", default = "gsnap", freeVar = false)
......
......@@ -17,12 +17,12 @@ package nl.lumc.sasc.biopet.extensions
import java.io.File
import nl.lumc.sasc.biopet.core.BiopetCommandLineFunction
import nl.lumc.sasc.biopet.core.{ Reference, BiopetCommandLineFunction }
import nl.lumc.sasc.biopet.core.config.Configurable
import org.broadinstitute.gatk.utils.commandline.{ Input, Output }
/** Extension for stampy */
class Stampy(val root: Configurable) extends BiopetCommandLineFunction {
class Stampy(val root: Configurable) extends BiopetCommandLineFunction with Reference {
@Input(doc = "FastQ file R1", shortName = "R1")
var R1: File = _
......@@ -30,7 +30,7 @@ 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")
var reference: File = null
@Input(doc = "The genome prefix.")
var genome: File = config("genome")
......@@ -73,6 +73,7 @@ class Stampy(val root: Configurable) extends BiopetCommandLineFunction {
override def beforeGraph: Unit = {
super.beforeGraph
require(readgroup != null)
if (reference == null) reference = referenceFasta()
}
/** Returns command to execute */
......
......@@ -17,16 +17,16 @@ package nl.lumc.sasc.biopet.extensions
import java.io.File
import nl.lumc.sasc.biopet.core.BiopetCommandLineFunction
import nl.lumc.sasc.biopet.core.{ Reference, BiopetCommandLineFunction }
import nl.lumc.sasc.biopet.core.config.Configurable
import org.broadinstitute.gatk.utils.commandline.{ Argument, Input, Output }
/**
* Extension for STAR
*/
class Star(val root: Configurable) extends BiopetCommandLineFunction {
class Star(val root: Configurable) extends BiopetCommandLineFunction with Reference {
@Input(doc = "The reference file for the bam files.", required = false)
var reference: File = new File(config("reference"))
var reference: File = null
@Input(doc = "Fastq file R1", required = false)
var R1: File = _
......@@ -57,7 +57,7 @@ class Star(val root: Configurable) extends BiopetCommandLineFunction {
@Argument(doc = "Output Directory")
var outputDir: File = _
var genomeDir: File = config("genomeDir", new File(reference.getAbsoluteFile.getParent, "star"))
var genomeDir: File = null
var runmode: String = _
var sjdbOverhang: Int = _
var outFileNamePrefix: String = _
......@@ -68,6 +68,9 @@ class Star(val root: Configurable) extends BiopetCommandLineFunction {
/** Sets output files for the graph */
override def beforeGraph() {
super.beforeGraph
if (reference == null) reference = referenceFasta()
genomeDir = config("genomeDir", new File(reference.getAbsoluteFile.getParent, "star"))
if (outFileNamePrefix != null && !outFileNamePrefix.endsWith(".")) outFileNamePrefix += "."
val prefix = if (outFileNamePrefix != null) outputDir + outFileNamePrefix else outputDir
if (runmode == null) {
......
......@@ -17,7 +17,7 @@ package nl.lumc.sasc.biopet.extensions
import java.io.File
import nl.lumc.sasc.biopet.core.BiopetCommandLineFunction
import nl.lumc.sasc.biopet.core.{ Reference, BiopetCommandLineFunction }
import nl.lumc.sasc.biopet.core.config.Configurable
import org.broadinstitute.gatk.utils.commandline.{ Output, Input }
......@@ -25,7 +25,7 @@ import org.broadinstitute.gatk.utils.commandline.{ Output, Input }
* Extension for VariantEffectPredictor
* Created by ahbbollen on 15-1-15.
*/
class VariantEffectPredictor(val root: Configurable) extends BiopetCommandLineFunction {
class VariantEffectPredictor(val root: Configurable) extends BiopetCommandLineFunction with Reference {
executable = config("exe", submodule = "perl", default = "perl")
var vep_script: String = config("vep_script")
......
/**
* Biopet is built on top of GATK Queue for building bioinformatic
* pipelines. It is mainly intended to support LUMC SHARK cluster which is running
* SGE. But other types of HPC that are supported by GATK Queue (such as PBS)
* should also be able to execute Biopet tools and pipelines.
*
* Copyright 2014 Sequencing Analysis Support Core - Leiden University Medical Center
*
* Contact us at: sasc@lumc.nl
*
* A dual licensing mode is applied. The source code within this project that are
* not part of GATK Queue is freely available for non-commercial use under an AGPL
* license; For commercial users or users who do not want to follow the AGPL
* license, please contact us to obtain a separate license.
*/
package nl.lumc.sasc.biopet.extensions.breakdancer
import java.io.File
import nl.lumc.sasc.biopet.core.config.Configurable
import nl.lumc.sasc.biopet.core.{ BiopetQScript, PipelineCommand }
import org.broadinstitute.gatk.queue.QScript
/// Breakdancer is actually a mini pipeline executing binaries from the breakdancer package
class Breakdancer(val root: Configurable) extends QScript with BiopetQScript {
def this() = this(null)
@Input(doc = "Input file (bam)")
var input: File = _
@Input(doc = "Reference Fasta file")
var reference: File = _
@Argument(doc = "Work directory")
var workdir: String = _
var deps: List[File] = Nil
@Output(doc = "Breakdancer config")
lazy val configfile: File = {
new File(workdir + "/" + input.getName.substring(0, input.getName.lastIndexOf(".bam")) + ".breakdancer.cfg")
}
@Output(doc = "Breakdancer raw output")
lazy val outputraw: File = {
new File(workdir + "/" + input.getName.substring(0, input.getName.lastIndexOf(".bam")) + ".breakdancer.tsv")
}
@Output(doc = "Breakdancer VCF output")
lazy val outputvcf: File = {
new File(workdir + "/" + input.getName.substring(0, input.getName.lastIndexOf(".bam")) + ".breakdancer.vcf")
}
override def init() {
}
def biopetScript() {
// read config and set all parameters for the pipeline
logger.info("Starting Breakdancer configuration")
val bdcfg = BreakdancerConfig(this, input, this.configfile)
bdcfg.deps = this.deps
outputFiles += ("cfg" -> bdcfg.output)
add(bdcfg)
val breakdancer = BreakdancerCaller(this, bdcfg.output, this.outputraw)
add(breakdancer)
outputFiles += ("tsv" -> breakdancer.output)
val bdvcf = BreakdancerVCF(this, breakdancer.output, this.outputvcf)
add(bdvcf)
outputFiles += ("vcf" -> bdvcf.output)
}
}
object Breakdancer extends PipelineCommand {
def apply(root: Configurable, input: File, reference: File, runDir: String): Breakdancer = {
val breakdancer = new Breakdancer(root)
breakdancer.input = input
breakdancer.reference = reference
breakdancer.workdir = runDir
breakdancer.init
breakdancer.biopetScript
return breakdancer
}
}
\ No newline at end of file
/**
* Biopet is built on top of GATK Queue for building bioinformatic
* pipelines. It is mainly intended to support LUMC SHARK cluster which is running
* SGE. But other types of HPC that are supported by GATK Queue (such as PBS)
* should also be able to execute Biopet tools and pipelines.
*
* Copyright 2014 Sequencing Analysis Support Core - Leiden University Medical Center
*
* Contact us at: sasc@lumc.nl
*
* A dual licensing mode is applied. The source code within this project that are
* not part of GATK Queue is freely available for non-commercial use under an AGPL
* license; For commercial users or users who do not want to follow the AGPL
* license, please contact us to obtain a separate license.
*/
package nl.lumc.sasc.biopet.extensions.svcallers
package nl.lumc.sasc.biopet.extensions.breakdancer
import nl.lumc.sasc.biopet.core.BiopetCommandLineFunction