Commit ca2905e5 authored by Peter van 't Hof's avatar Peter van 't Hof
Browse files

- Added wrapper for Star

- Added a mapping module (not yet used in Gatk)
- Added VariantRecalibrator to Gatk
parent b26d817a
......@@ -4,7 +4,7 @@ import scala.util.parsing.json._
import java.io.File
import org.broadinstitute.sting.queue.util.Logging
class Config(var map: Map[String,Any]) extends Logging {
class Config(private var map: Map[String,Any]) extends Logging {
def this() = {
this(Map())
logger.info("Init phase of config")
......@@ -25,14 +25,20 @@ class Config(var map: Map[String,Any]) extends Logging {
def loadConfigFile(configFile:File) {
var returnMap: Map[String,Any] = Map()
var configJson = JSON.parseFull(scala.io.Source.fromFile(configFile).mkString)
this.logger.debug("Jsonfile: " + configJson)
returnMap = Config.valueToMap(configJson.get)
map = Config.mergMaps(returnMap, map)
this.logger.debug("Jsonfile: " + configFile)
this.logger.debug("Contain: " + configJson)
configJson.get match {
case m:Map[_,_] => {
returnMap = Config.valueToMap(configJson.get)
map = Config.mergeMaps(returnMap, map)
}
case null => logger.warn("Config " + configFile + " wrong format")
}
this.logger.debug("config: " + map)
}
def getMap() : Map[String,Any] = map
def get(s:String) : Any = map(s)
def get(s:String, default:Any) : Any = if (contains(s)) get(s) else default
......@@ -104,6 +110,11 @@ class Config(var map: Map[String,Any]) extends Logging {
def getAsMap(s:String, default:Map[String,Any]) : Map[String,Any] = if (contains(s)) getAsMap(s) else default
def getAsConfig(s:String, default:Map[String,Any]) : Config = if (contains(s)) new Config(getAsMap(s)) else new Config(default)
def getAsConfig(s:String, default:Config) : Config = if (contains(s)) Config.mergeConfigs(getAsConfig(s), default) else default
def getAsConfig(s:String, default:Config, subDefault:String) : Config = {
if (contains(s)) Config.mergeConfigs(getAsConfig(s), default.getAsConfig(subDefault))
else default
}
def getAsConfig(s:String) : Config = if (contains(s)) new Config(getAsMap(s)) else new Config(Map())
override def toString() : String = map.toString
......@@ -126,7 +137,7 @@ object Config {
return ouputMap
}
def mergMaps(map1:Map[String,Any],map2:Map[String,Any]) : Map[String,Any] = {
def mergeMaps(map1:Map[String,Any],map2:Map[String,Any]) : Map[String,Any] = {
var newMap: Map[String,Any] = Map()
for (key <- map1.keySet.++(map2.keySet)) {
if (map1.contains(key) && !map2.contains(key)) newMap += (key -> map1(key))
......@@ -135,7 +146,7 @@ object Config {
map1(key) match {
case m1:Map[_,_] => {
map2(key) match {
case m2:Map[_,_] => newMap += (key -> mergMaps(Config.valueToMap(m1),Config.valueToMap(m2)))
case m2:Map[_,_] => newMap += (key -> mergeMaps(Config.valueToMap(m1),Config.valueToMap(m2)))
case _ => newMap += (key -> map1(key))
}
}
......@@ -145,4 +156,6 @@ object Config {
}
return newMap
}
def mergeConfigs(config1:Config,config2:Config) : Config = new Config(mergeMaps(config1.getMap, config2.getMap))
}
\ No newline at end of file
......@@ -4,23 +4,39 @@ import nl.lumc.sasc.biopet.core._
import org.broadinstitute.sting.queue.function.CommandLineFunction
import org.broadinstitute.sting.commandline._
import java.io.File
import scala.sys.process._
class Bwa(private var globalConfig: Config) extends CommandLineFunction {
class Bwa(val globalConfig: Config) extends CommandLineFunction {
def this() = this(new Config(Map()))
this.analysisName = "bwa"
var config: Config = globalConfig.getAsConfig("bwa")
var config: Config = _
@Argument(doc="Bwa executeble", shortName="Bwa_Exe")
var bwa_exe: String = config.getAsString("exe", "/usr/local/bin/bwa")
@Input(doc="The reference file for the bam files.", shortName="R") var referenceFile: File = _
@Argument(doc="Bwa executeble", shortName="bwa_exe", required=false) var bwa_exe: String = _
@Input(doc="The reference file for the bam files.", shortName="R", required=false) var referenceFile: File = _
@Input(doc="Fastq file R1", shortName="R1") var R1: File = _
@Input(doc="Fastq file R2", shortName="R2", required=false) var R2: File = _
@Output(doc="Output file SAM", shortName="output") var output: File = _
@Argument(doc="Readgroup header", shortName="RG", required=false) var RG: String = _
@Argument(doc="M", shortName="M", required=false) var M: Boolean = config.getAsBoolean("M", true)
@Argument(doc="M", shortName="M", required=false) var M: Boolean = false
def init() {
config = Config.mergeConfigs(globalConfig.getAsConfig("bwa"), globalConfig)
bwa_exe = config.getAsString("exe", "/usr/local/bin/bwa")
M = config.getAsBoolean("M", true)
jobResourceRequests :+= "h_vmem=" + config.getAsString("vmem", "6G")
var threads: Int = config.getAsInt("threads", 8)
var maxThreads: Int = config.getAsInt("maxthreads", 24)
if (threads > maxThreads) threads = maxThreads
nCoresRequest = Option(threads)
referenceFile = new File(config.getAsString("referenceFile"))
this.addJobReportBinding("version", getVersion)
}
def commandLine = {
init()
required(bwa_exe) +
required("mem") +
optional("-t", nCoresRequest) +
......@@ -31,4 +47,19 @@ class Bwa(private var globalConfig: Config) extends CommandLineFunction {
optional(R2) +
" > " + required(output)
}
}
\ No newline at end of file
private var version: String = ""
def getVersion : String = {
val REG = """Version: (.*)""".r
if (version == null) for (line <- bwa_exe.!!.split("\n")) {
line match {
case REG(m) => {
version = m
return version
}
case _ =>
}
}
return version
}
}
package nl.lumc.sasc.biopet.wrappers
import nl.lumc.sasc.biopet.core._
import org.broadinstitute.sting.queue.function.CommandLineFunction
import org.broadinstitute.sting.commandline._
import java.io.File
import scala.sys.process._
class Star(private var globalConfig: Config) extends CommandLineFunction {
def this() = this(new Config(Map()))
this.analysisName = "STAR"
var config: Config = _
@Argument(doc="STAR executeble", shortName="star_exe", required=false) var star_exe: String = _
@Input(doc="The reference file for the bam files.", shortName="R") var referenceFile: File = _
@Input(doc="Fastq file R1", shortName="R1") var R1: File = _
@Input(doc="Fastq file R2", shortName="R2", required=false) var R2: File = _
@Argument(doc="Output Directory", shortName="outputDir") var outputDir: String = _
@Argument(doc="GenomeDir", required=false) var genomeDir: String = _
@Argument(doc="STAR runmode", shortName="runmode", required=false) var runmode: String = _
@Output
var outputSam: File = _
def init() {
config = Config.mergeConfigs(globalConfig.getAsConfig("star"), globalConfig)
star_exe = config.getAsString("exe", "/usr/local/bin/STAR")
if (genomeDir == null) genomeDir = config.getAsString("genomeDir", referenceFile.getParent + "/star")
this.addJobReportBinding("version", "NA")
jobResourceRequests :+= "h_vmem=" + config.getAsString("vmem", "6G")
var threads: Int = config.getAsInt("threads", 8)
var maxThreads: Int = config.getAsInt("maxthreads", 24)
if (threads > maxThreads) threads = maxThreads
nCoresRequest = Option(threads)
referenceFile = new File(config.getAsString("referenceFile"))
outputSam = new File(outputDir + "/star_output.sam")
}
def commandLine : String= {
init()
var cmd: String = required("cd",outputDir) + "&&" + required(star_exe)
if (runmode != null && runmode == "genomeGenerate") { // Create index
cmd += required("--runmode", runmode) +
required("--genomeDir", genomeDir) +
required("--genomeFastaFiles", referenceFile)
} else { // Aligner
cmd += required("--genomeDir", genomeDir) +
required("--readFilesIn", R1) + optional(R2)
}
cmd += optional("-runThreadN", nCoresRequest)
return cmd
}
}
\ No newline at end of file
......@@ -9,7 +9,7 @@ import org.broadinstitute.sting.queue.function._
import scala.util.parsing.json._
import org.broadinstitute.sting.commandline._
class Flexiprep(private var config: Config) extends QScript {
class Flexiprep(private var globalConfig: Config) extends QScript {
def this() = this(new Config())
@Argument(doc="Config Json file",shortName="config", required=false) var configfiles: List[File] = Nil
......@@ -19,15 +19,24 @@ class Flexiprep(private var config: Config) extends QScript {
@Argument(doc="Skip Trim fastq files", shortName="skiptrim", required=false) var skipTrim: Boolean = false
@Argument(doc="Skip Clip fastq files", shortName="skipclip", required=false) var skipClip: Boolean = false
var config: Config = _
var outputFiles:Map[String,File] = Map()
var paired: Boolean = (input_R2 != null)
def script() {
for (file <- configfiles) config.loadConfigFile(file)
def init() {
for (file <- configfiles) globalConfig.loadConfigFile(file)
config = Config.mergeConfigs(globalConfig.getAsConfig("flexiprep"), globalConfig)
logger.debug(config)
skipTrim = config.getAsBoolean("skiptrim", false)
skipClip = config.getAsBoolean("skipclip", false)
if (input_R1 == null) throw new IllegalStateException("Missing R1 on flexiprep module")
if (outputDir == null) throw new IllegalStateException("Missing Output directory on flexiprep module")
else if (!outputDir.endsWith("/")) outputDir += "/"
paired = (input_R2 != null)
}
def script() {
init()
runInitialFastqc()
......@@ -59,7 +68,6 @@ class Flexiprep(private var config: Config) extends QScript {
outputFiles += ("qualtype_R2" -> getQualtype(fastqc_R2))
outputFiles += ("contams_R2" -> getContams(fastqc_R2))
}
}
def getQualtype(fastqc:Fastqc): File = {
......@@ -81,7 +89,9 @@ class Flexiprep(private var config: Config) extends QScript {
return out
}
def runTrimClip(R1_in:File, outDir:String) : Map[String,File] = { return runTrimClip(R1_in, new File(""), outDir) }
def runTrimClip(R1_in:File, outDir:String) : Map[String,File] = {
return runTrimClip(R1_in, new File(""), outDir)
}
def runTrimClip(R1_in:File, R2_in:File, outDir:String) : Map[String,File] = {
var results: Map[String,File] = Map()
......
......@@ -13,6 +13,7 @@ import org.broadinstitute.sting.utils.variant._
class Gatk(private var globalConfig: Config) extends QScript {
@Argument(doc="Config Json file",shortName="config") var configfiles: List[File] = Nil
@Argument(doc="Only Sample",shortName="sample", required=false) var onlySample: String = _
@Argument(doc="Output directory", shortName="outputDir", required=true) var outputDir: String = _
def this() = this(new Config())
var config: Config = _
var scatterCount: Int = _
......@@ -28,18 +29,20 @@ class Gatk(private var globalConfig: Config) extends QScript {
def init() {
for (file <- configfiles) globalConfig.loadConfigFile(file)
config = globalConfig.getAsConfig("gatk")
config = Config.mergeConfigs(globalConfig.getAsConfig("gatk"), globalConfig)
referenceFile = config.getAsString("referenceFile")
dbsnp = config.getAsString("dbsnp")
gvcfFiles = config.getAsListOfStrings("gvcfFiles", Nil)
scatterCount = config.getAsInt("scatterCount", 1)
if (outputDir == null) throw new IllegalStateException("Missing Output directory on flexiprep module")
else if (!outputDir.endsWith("/")) outputDir += "/"
}
def script() {
this.init()
if (globalConfig.contains("Samples")) for ((key,value) <- globalConfig.getAsMap("Samples")) {
if (config.contains("Samples")) for ((key,value) <- config.getAsMap("Samples")) {
if (onlySample == null || onlySample == key) {
var sample:Config = globalConfig.getAsConfig("Samples").getAsConfig(key)
var sample:Config = config.getAsConfig("Samples").getAsConfig(key)
if (sample.getAsString("ID") == key) {
var files:Map[String,List[File]] = sampleJobs(sample)
if (files.contains("gvcf")) for (file <- files("gvcf")) gvcfFiles :+= file
......@@ -49,11 +52,65 @@ class Gatk(private var globalConfig: Config) extends QScript {
if (onlySample == null) {
//SampleWide jobs
val genotypeGVCFs = new GenotypeGVCFs() with gatkArguments
genotypeGVCFs.variant = gvcfFiles
genotypeGVCFs.scatterCount = scatterCount
genotypeGVCFs.out = new File("final.vcf")
if (genotypeGVCFs.variant.size > 0) add(genotypeGVCFs) else logger.warn("No gVCFs to genotype")
if (gvcfFiles.size > 0) {
val genotypeGVCFs = new GenotypeGVCFs() with gatkArguments
genotypeGVCFs.variant = gvcfFiles
genotypeGVCFs.scatterCount = scatterCount
genotypeGVCFs.out = new File(outputDir,"final.vcf")
add(genotypeGVCFs)
//Snp recal
val snpVariantRecalibrator = new VariantRecalibrator() with gatkArguments
snpVariantRecalibrator.input +:= genotypeGVCFs.out
snpVariantRecalibrator.nt = 8
snpVariantRecalibrator.recal_file = swapExt(genotypeGVCFs.out,".vcf",".snp.recal")
snpVariantRecalibrator.tranches_file = swapExt(genotypeGVCFs.out,".vcf",".snp.tranches")
snpVariantRecalibrator.resource :+= new TaggedFile(config.getAsString("hapmap"), "known=false,training=true,truth=true,prior=15.0")
snpVariantRecalibrator.resource :+= new TaggedFile(config.getAsString("omni"), "known=false,training=true,truth=true,prior=12.0")
snpVariantRecalibrator.resource :+= new TaggedFile(config.getAsString("1000G"), "known=false,training=true,truth=false,prior=10.0")
snpVariantRecalibrator.resource :+= new TaggedFile(config.getAsString("dbsnp"), "known=true,training=false,truth=false,prior=2.0")
snpVariantRecalibrator.an = Seq("QD","MQ","MQRankSum","ReadPosRankSum","FS","DP","InbreedingCoeff")
snpVariantRecalibrator.mode = org.broadinstitute.sting.gatk.walkers.variantrecalibration.VariantRecalibratorArgumentCollection.Mode.SNP
add(snpVariantRecalibrator)
val snpApplyRecalibration = new ApplyRecalibration() with gatkArguments
snpApplyRecalibration.input +:= genotypeGVCFs.out
snpApplyRecalibration.recal_file = snpVariantRecalibrator.recal_file
snpApplyRecalibration.tranches_file = snpVariantRecalibrator.tranches_file
snpApplyRecalibration.out = swapExt(genotypeGVCFs.out,".vcf",".snp.recal.vcf")
snpApplyRecalibration.ts_filter_level = 99.5
snpApplyRecalibration.mode = org.broadinstitute.sting.gatk.walkers.variantrecalibration.VariantRecalibratorArgumentCollection.Mode.SNP
add(snpApplyRecalibration)
//indel recal
val indelVariantRecalibrator = new VariantRecalibrator() with gatkArguments
indelVariantRecalibrator.input +:= genotypeGVCFs.out
indelVariantRecalibrator.nt = 8
indelVariantRecalibrator.recal_file = swapExt(genotypeGVCFs.out,".vcf",".indel.recal")
indelVariantRecalibrator.tranches_file = swapExt(genotypeGVCFs.out,".vcf",".indel.tranches")
indelVariantRecalibrator.resource :+= new TaggedFile(config.getAsString("mills"), "known=false,training=true,truth=true,prior=12.0")
indelVariantRecalibrator.resource :+= new TaggedFile(config.getAsString("dbsnp"), "known=true,training=false,truth=false,prior=2.0")
indelVariantRecalibrator.an = Seq("QD","DP","FS","ReadPosRankSum","MQRankSum","InbreedingCoeff")
indelVariantRecalibrator.mode = org.broadinstitute.sting.gatk.walkers.variantrecalibration.VariantRecalibratorArgumentCollection.Mode.INDEL
add(indelVariantRecalibrator)
val indelApplyRecalibration = new ApplyRecalibration() with gatkArguments
indelApplyRecalibration.input +:= genotypeGVCFs.out
indelApplyRecalibration.recal_file = indelVariantRecalibrator.recal_file
indelApplyRecalibration.tranches_file = indelVariantRecalibrator.tranches_file
indelApplyRecalibration.out = swapExt(genotypeGVCFs.out,".vcf",".indel.recal.vcf")
indelApplyRecalibration.ts_filter_level = 99.0
indelApplyRecalibration.mode = org.broadinstitute.sting.gatk.walkers.variantrecalibration.VariantRecalibratorArgumentCollection.Mode.INDEL
add(indelApplyRecalibration)
// merge snp and indels
val catVariants = new CatVariants()
catVariants.variant = Seq(snpApplyRecalibration.out,indelApplyRecalibration.out)
catVariants.outputFile = swapExt(genotypeGVCFs.out,".vcf",".recal.vcf")
add(catVariants)
} else logger.warn("No gVCFs to genotype")
}
}
......@@ -79,7 +136,7 @@ class Gatk(private var globalConfig: Config) extends QScript {
val haplotypeCaller = new HaplotypeCaller with gatkArguments
if (scatterCount > 1) haplotypeCaller.scatterCount = scatterCount * 15
haplotypeCaller.input_file = outputFiles("FinalBams")
haplotypeCaller.out = new File(sampleID + "/" + sampleID + ".gvcf.vcf")
haplotypeCaller.out = new File(outputDir,sampleID + "/" + sampleID + ".gvcf.vcf")
if (dbsnp != null) haplotypeCaller.dbsnp = dbsnp
haplotypeCaller.nct = 3
haplotypeCaller.memoryLimit = haplotypeCaller.nct * 2
......@@ -115,16 +172,16 @@ class Gatk(private var globalConfig: Config) extends QScript {
}
if (runConfig.contains("ID")) runID = runConfig.get("ID").toString
else throw new IllegalStateException("Missing ID on run for sample: " + sampleID)
var runDir: String = sampleID + "/run_" + runID + "/"
var runDir: String = outputDir + sampleID + "/run_" + runID + "/"
val flexiprep = new Flexiprep(config)
flexiprep.input_R1 = fastq_R1
if (paired) flexiprep.input_R2 = fastq_R2
flexiprep.outputDir = runDir + "flexiprep/"
flexiprep.script
addAll(flexiprep.functions)
addAll(flexiprep.functions) // Add function of flexiprep to curent function pool
val bwaCommand = new Bwa(config)
val bwaCommand = new Bwa(config.getAsConfig("bwa"))
bwaCommand.R1 = flexiprep.outputFiles("output_R1")
if (paired) bwaCommand.R2 = flexiprep.outputFiles("output_R2")
bwaCommand.referenceFile = referenceFile
......@@ -140,57 +197,77 @@ class Gatk(private var globalConfig: Config) extends QScript {
bwaCommand.output = new File(runDir + sampleID + "-run_" + runID + ".sam")
add(bwaCommand)
val sortSam = new SortSam
sortSam.input :+= bwaCommand.output
sortSam.createIndex = true
sortSam.output = swapExt(runDir,bwaCommand.output,".sam",".bam")
sortSam.memoryLimit = 2
sortSam.nCoresRequest = 2
sortSam.jobResourceRequests :+= "h_vmem=4G"
add(sortSam)
val markDuplicates = new MarkDuplicates
markDuplicates.input :+= sortSam.output
markDuplicates.output = swapExt(runDir,sortSam.output,".bam",".dedup.bam")
markDuplicates.REMOVE_DUPLICATES = false
markDuplicates.metrics = swapExt(runDir,markDuplicates.output,".bam",".metrics")
markDuplicates.outputIndex = swapExt(runDir,markDuplicates.output,".bam",".bai")
markDuplicates.memoryLimit = 2
markDuplicates.jobResourceRequests :+= "h_vmem=4G"
add(markDuplicates)
var bamFile:File = addSortSam(List(bwaCommand.output), swapExt(runDir,bwaCommand.output,".sam",".bam"), runDir)
bamFile = addMarkDuplicates(List(bamFile), swapExt(runDir,bamFile,".bam",".dedup.bam"), runDir)
bamFile = addIndelRealign(bamFile,runDir) // Indel realigner
bamFile = addBaseRecalibrator(bamFile,runDir) // Base recalibrator
val realignerTargetCreator = new RealignerTargetCreator with gatkArguments
realignerTargetCreator.I :+= markDuplicates.output
realignerTargetCreator.o = swapExt(runDir,markDuplicates.output,".bam",".realign.intervals")
//realignerTargetCreator.nt = 1
realignerTargetCreator.jobResourceRequests :+= "h_vmem=5G"
if (scatterCount > 1) realignerTargetCreator.scatterCount = scatterCount
add(realignerTargetCreator)
val indelRealigner = new IndelRealigner with gatkArguments
indelRealigner.I :+= markDuplicates.output
indelRealigner.targetIntervals = realignerTargetCreator.o
indelRealigner.o = swapExt(runDir,markDuplicates.output,".bam",".realign.bam")
if (scatterCount > 1) indelRealigner.scatterCount = scatterCount
add(indelRealigner)
val baseRecalibrator = new BaseRecalibrator with gatkArguments
baseRecalibrator.I :+= indelRealigner.o
baseRecalibrator.o = swapExt(runDir,indelRealigner.o,".bam",".baserecal")
baseRecalibrator.knownSites :+= dbsnp
if (scatterCount > 1) baseRecalibrator.scatterCount = scatterCount
baseRecalibrator.nct = 2
add(baseRecalibrator)
val printReads = new PrintReads with gatkArguments
printReads.I :+= indelRealigner.o
printReads.o = swapExt(runDir,indelRealigner.o,".bam",".baserecal.bam")
printReads.BQSR = baseRecalibrator.o
if (scatterCount > 1) printReads.scatterCount = scatterCount
add(printReads)
outputFiles += ("FinalBam" -> printReads.o)
outputFiles += ("FinalBam" -> bamFile)
} else this.logger.error("Sample: " + sampleID + ": No R1 found for runs: " + runConfig)
return outputFiles
}
}
def addSortSam(inputSam:List[File], outputFile:File, dir:String) : File = {
val sortSam = new SortSam
sortSam.input = inputSam
sortSam.createIndex = true
sortSam.output = outputFile
sortSam.memoryLimit = 2
sortSam.nCoresRequest = 2
sortSam.jobResourceRequests :+= "h_vmem=4G"
add(sortSam)
return sortSam.output
}
def addMarkDuplicates(inputBams:List[File], outputFile:File, dir:String) : File = {
val markDuplicates = new MarkDuplicates
markDuplicates.input = inputBams
markDuplicates.output = outputFile
markDuplicates.REMOVE_DUPLICATES = false
markDuplicates.metrics = swapExt(dir,outputFile,".bam",".metrics")
markDuplicates.outputIndex = swapExt(dir,markDuplicates.output,".bam",".bai")
markDuplicates.memoryLimit = 2
markDuplicates.jobResourceRequests :+= "h_vmem=4G"
add(markDuplicates)
return markDuplicates.output
}
def addIndelRealign(inputBam:File, dir:String): File = {
val realignerTargetCreator = new RealignerTargetCreator with gatkArguments
realignerTargetCreator.I :+= inputBam
realignerTargetCreator.o = swapExt(dir,inputBam,".bam",".realign.intervals")
//realignerTargetCreator.nt = 1
realignerTargetCreator.jobResourceRequests :+= "h_vmem=5G"
if (scatterCount > 1) realignerTargetCreator.scatterCount = scatterCount
add(realignerTargetCreator)
val indelRealigner = new IndelRealigner with gatkArguments
indelRealigner.I :+= inputBam
indelRealigner.targetIntervals = realignerTargetCreator.o
indelRealigner.o = swapExt(dir,inputBam,".bam",".realign.bam")
if (scatterCount > 1) indelRealigner.scatterCount = scatterCount
add(indelRealigner)
return indelRealigner.o
}
def addBaseRecalibrator(inputBam:File, dir:String): File = {
val baseRecalibrator = new BaseRecalibrator with gatkArguments
baseRecalibrator.I :+= inputBam
baseRecalibrator.o = swapExt(dir,inputBam,".bam",".baserecal")
baseRecalibrator.knownSites :+= dbsnp
if (scatterCount > 1) baseRecalibrator.scatterCount = scatterCount
baseRecalibrator.nct = 2
add(baseRecalibrator)
val printReads = new PrintReads with gatkArguments
printReads.I :+= inputBam
printReads.o = swapExt(dir,inputBam,".bam",".baserecal.bam")
printReads.BQSR = baseRecalibrator.o
if (scatterCount > 1) printReads.scatterCount = scatterCount
return printReads.o
}
}
/target/
\ No newline at end of file
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>nl.lumc.sasc</groupId>
<artifactId>Mapping</artifactId>
<version>0.1.0</version>
<packaging>jar</packaging>
<name>Mapping</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>nl.lumc.sasc</groupId>
<artifactId>Biopet</artifactId>
<version>0.1.0</version>
<relativePath>../</relativePath>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<sting.unpack.phase>prepare-package</sting.unpack.phase>
<sting.shade.phase>package</sting.shade.phase>
<app.main.class>org.broadinstitute.sting.queue.QCommandLine</app.main.class>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-compiler</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.scalatest</groupId>
<artifactId>scalatest_2.9.2</artifactId>
<version>2.0.M4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>nl.lumc.sasc</groupId>
<artifactId>Biopet-Framework</artifactId>
<version>0.1.0</version>