Commit 10bbbbda authored by Peter van 't Hof's avatar Peter van 't Hof

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

parents 052f9e11 7eb9af74
......@@ -17,15 +17,16 @@ package nl.lumc.sasc.biopet.pipelines.bammetrics
import java.io.File
import nl.lumc.sasc.biopet.core.annotations.{ RibosomalRefFlat, AnnotationRefFlat }
import nl.lumc.sasc.biopet.core.annotations.{ AnnotationRefFlat, RibosomalRefFlat }
import nl.lumc.sasc.biopet.utils.config.Configurable
import nl.lumc.sasc.biopet.core.summary.SummaryQScript
import nl.lumc.sasc.biopet.core.{ Reference, BiopetFifoPipe, PipelineCommand, SampleLibraryTag }
import nl.lumc.sasc.biopet.core.{ BiopetFifoPipe, PipelineCommand, Reference, SampleLibraryTag }
import nl.lumc.sasc.biopet.extensions.bedtools.{ BedtoolsCoverage, BedtoolsIntersect }
import nl.lumc.sasc.biopet.extensions.picard._
import nl.lumc.sasc.biopet.extensions.samtools.SamtoolsFlagstat
import nl.lumc.sasc.biopet.pipelines.bammetrics.scripts.CoverageStats
import nl.lumc.sasc.biopet.extensions.tools.BiopetFlagstat
import nl.lumc.sasc.biopet.utils.intervals.BedCheck
import org.broadinstitute.gatk.queue.QScript
class BamMetrics(val root: Configurable) extends QScript
......@@ -72,6 +73,8 @@ class BamMetrics(val root: Configurable) extends QScript
/** executed before script */
def init(): Unit = {
inputFiles :+= new InputFile(inputBam)
ampliconBedFile.foreach(BedCheck.checkBedFileToReference(_, referenceFasta(), biopetError = true))
roiBedFiles.foreach(BedCheck.checkBedFileToReference(_, referenceFasta(), biopetError = true))
}
/** Script to add jobs */
......
......@@ -61,9 +61,9 @@ class BamMetricsTest extends TestNGSuite with Matchers {
def testBamMetrics(rois: Int, amplicon: Boolean, rna: Boolean, wgs: Boolean) = {
val map = ConfigUtils.mergeMaps(Map("output_dir" -> BamMetricsTest.outputDir, "rna_metrics" -> rna, "wgs_metrics" -> wgs),
Map(BamMetricsTest.executables.toSeq: _*)) ++
(if (amplicon) Map("amplicon_bed" -> "amplicon.bed") else Map()) ++
(if (amplicon) Map("amplicon_bed" -> BamMetricsTest.ampliconBed.getAbsolutePath) else Map()) ++
(if (rna) Map("annotation_refflat" -> "transcripts.refFlat") else Map()) ++
Map("regions_of_interest" -> (1 to rois).map("roi_" + _ + ".bed").toList)
Map("regions_of_interest" -> (1 to rois).map(BamMetricsTest.roi(_).getAbsolutePath).toList)
val bammetrics: BamMetrics = initPipeline(map)
bammetrics.inputBam = BamMetricsTest.bam
......@@ -94,6 +94,14 @@ object BamMetricsTest {
val bam = new File(outputDir, "input" + File.separator + "bla.bam")
Files.touch(bam)
val ampliconBed = new File(outputDir, "input" + File.separator + "amplicon_bed.bed")
Files.touch(ampliconBed)
def roi(i: Int): File = {
val roi = new File(outputDir, "input" + File.separator + s"roi${i}.bed")
Files.touch(roi)
roi
}
private def copyFile(name: String): Unit = {
val is = getClass.getResourceAsStream("/" + name)
......
......@@ -73,6 +73,8 @@ class BiopetFifoPipe(val root: Configurable,
_pipesJobs :::= commands
_pipesJobs = _pipesJobs.distinct
analysisName = commands.map(_.analysisName).mkString("_")
}
override def beforeCmd(): Unit = {
......
......@@ -132,7 +132,7 @@ trait ReportBuilder extends ToolCommand {
logger.info("Start")
val argsParser = new OptParser
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
require(cmdArgs.outputDir.exists(), "Output dir does not exist")
require(cmdArgs.outputDir.isDirectory, "Output dir is not a directory")
......
......@@ -80,7 +80,7 @@ object AnnotateVcfWithBed extends ToolCommand {
logger.info("Start")
val argsParser = new OptParser
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
val fieldType = cmdArgs.fieldType match {
case "Integer" => VCFHeaderLineType.Integer
......
......@@ -53,10 +53,7 @@ object BaseCounter extends ToolCommand {
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val cmdArgs: Args = argsParser.parse(args, Args()) match {
case Some(x) => x
case _ => throw new IllegalArgumentException
}
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
//Sets picard logging level
htsjdk.samtools.util.Log.setGlobalLogLevel(htsjdk.samtools.util.Log.LogLevel.valueOf(logger.getLevel.toString))
......
......@@ -113,7 +113,7 @@ object BastyGenerateFasta extends ToolCommand {
*/
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
cmdArgs = argsParser.parse(args, Args()) getOrElse sys.exit(1)
cmdArgs = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
if (cmdArgs.outputVariants != null) {
writeVariantsOnly()
......
......@@ -47,7 +47,7 @@ object BedToInterval extends ToolCommand {
*/
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
val writer = new PrintWriter(commandArgs.outputFile)
......
......@@ -39,7 +39,7 @@ object BedtoolsCoverageToCounts extends ToolCommand {
*/
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
if (!commandArgs.input.exists) throw new IllegalStateException("Input file not found, file: " + commandArgs.input)
......
......@@ -50,7 +50,7 @@ object BiopetFlagstat extends ToolCommand {
*/
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
val inputSam = SamReaderFactory.makeDefault.open(commandArgs.inputFile)
val iterSam = if (commandArgs.region.isEmpty) inputSam.iterator else {
......
......@@ -71,7 +71,7 @@ object CheckAllelesVcfInBam extends ToolCommand {
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
if (commandArgs.bamFiles.size != commandArgs.samples.size)
logger.warn("Number of samples is different from number of bam files: additional samples or bam files will not be used")
......
......@@ -242,7 +242,7 @@ object ExtractAlignedFastq extends ToolCommand {
def parseArgs(args: Array[String]): Args =
new OptParser()
.parse(args, Args())
.getOrElse(sys.exit(1))
.getOrElse(throw new IllegalArgumentException)
def main(args: Array[String]): Unit = {
......
......@@ -45,7 +45,7 @@ object FastqSplitter extends ToolCommand {
*/
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
val groupSize = 100
val output = for (file <- commandArgs.outputFile) yield new AsyncFastqWriter(new BasicFastqWriter(file), groupSize)
......
......@@ -151,7 +151,7 @@ object FastqSync extends ToolCommand {
*/
def parseArgs(args: Array[String]): Args = new OptParser()
.parse(args, Args())
.getOrElse(sys.exit(1))
.getOrElse(throw new IllegalArgumentException)
def main(args: Array[String]): Unit = {
......
......@@ -46,7 +46,7 @@ object FindRepeatsPacBio extends ToolCommand {
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
val bamReader = SamReaderFactory.makeDefault
.validationStringency(ValidationStringency.SILENT)
.open(commandArgs.inputBam)
......
......@@ -57,7 +57,7 @@ object GvcfToBed extends ToolCommand {
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val cmdArgs = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val cmdArgs = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
logger.debug("Opening reader")
val reader = new VCFFileReader(cmdArgs.inputVcf, false)
......
......@@ -90,7 +90,7 @@ object KrakenReportToJson extends ToolCommand {
*/
def parseArgs(args: Array[String]): Args = new OptParser()
.parse(args, Args())
.getOrElse(sys.exit(1))
.getOrElse(throw new IllegalArgumentException)
/**
* Takes a line from the kraken report, converts into Map with taxonID and
......
......@@ -50,7 +50,7 @@ object MergeAlleles extends ToolCommand {
*/
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
val readers = commandArgs.inputFiles.map(new VCFFileReader(_, true))
val referenceFile = new FastaSequenceFile(commandArgs.reference, true)
......
......@@ -41,7 +41,7 @@ object MergeOtuMaps extends ToolCommand {
*/
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
var map: Map[Long, String] = Map()
......
......@@ -188,7 +188,7 @@ object MergeTables extends ToolCommand {
/** Parses the command line argument */
def parseArgs(args: Array[String]): Args = new OptParser()
.parse(args, Args())
.getOrElse(sys.exit(1))
.getOrElse(throw new IllegalArgumentException)
/** Transforms the input file seq into a seq of [[InputTable]] objects */
def prepInput(inFiles: Seq[File], ext: String, columnNames: Option[Seq[String]]): Seq[InputTable] = {
......
......@@ -62,7 +62,7 @@ object MpileupToVcf extends ToolCommand {
*/
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
if (commandArgs.input != null && !commandArgs.input.exists) throw new IllegalStateException("Input file does not exist")
val writer = new PrintWriter(commandArgs.output)
......
......@@ -52,7 +52,7 @@ object PrefixFastq extends ToolCommand {
logger.info("Start")
val argsParser = new OptParser
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
val writer = new AsyncFastqWriter(new BasicFastqWriter(cmdArgs.output), 3000)
val reader = new FastqReader(cmdArgs.input)
......
......@@ -49,7 +49,7 @@ object RegionAfCount extends ToolCommand {
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
logger.info("Start")
logger.info("Reading bed file")
......
......@@ -41,7 +41,7 @@ object SageCountFastq extends ToolCommand {
*/
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
if (!commandArgs.input.exists) throw new IllegalStateException("Input file not found, file: " + commandArgs.input)
......
......@@ -74,7 +74,7 @@ object SageCreateLibrary extends ToolCommand {
*/
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
if (!commandArgs.input.exists) throw new IllegalStateException("Input file not found, file: " + commandArgs.input)
......
......@@ -52,7 +52,7 @@ object SageCreateTagCounts extends ToolCommand {
*/
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
if (!commandArgs.input.exists) throw new IllegalStateException("Input file not found, file: " + commandArgs.input)
......
......@@ -46,7 +46,7 @@ object SamplesTsvToJson extends ToolCommand {
/** Executes SamplesTsvToJson */
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
val jsonString = stringFromInputs(cmdArgs.inputFiles, cmdArgs.tagFiles)
cmdArgs.outputFile match {
......
......@@ -76,7 +76,7 @@ object SeqStat extends ToolCommand {
*/
def parseArgs(args: Array[String]): Args = new OptParser()
.parse(args, Args())
.getOrElse(sys.exit(1))
.getOrElse(throw new IllegalArgumentException)
/**
*
......
......@@ -46,7 +46,7 @@ object SquishBed extends ToolCommand {
*/
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
if (!cmdArgs.input.exists) throw new IllegalStateException("Input file not found, file: " + cmdArgs.input)
......
......@@ -61,7 +61,7 @@ object SummaryToTsv extends ToolCommand {
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
val summary = new Summary(cmdArgs.summary)
......
......@@ -51,7 +51,7 @@ object ValidateFastq extends ToolCommand {
//parse all possible options into OptParser
val argsParser = new OptParser
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val cmdArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
//read in fastq file 1 and if present fastq file 2
val readFq1 = new FastqReader(cmdArgs.input)
......
......@@ -137,7 +137,7 @@ object VcfFilter extends ToolCommand {
def main(args: Array[String]): Unit = {
logger.info("Start")
val argsParser = new OptParser
val cmdArgs = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val cmdArgs = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
val reader = new VCFFileReader(cmdArgs.inputVcf, false)
val header = reader.getFileHeader
......
......@@ -206,7 +206,7 @@ object VcfStats extends ToolCommand {
def main(args: Array[String]): Unit = {
logger.info("Started")
val argsParser = new OptParser
cmdArgs = argsParser.parse(args, Args()) getOrElse sys.exit(1)
cmdArgs = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
val reader = new VCFFileReader(cmdArgs.inputFile, true)
val header = reader.getFileHeader
......
......@@ -72,7 +72,7 @@ object VcfToTsv extends ToolCommand {
def main(args: Array[String]): Unit = {
val argsParser = new OptParser
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse sys.exit(1)
val commandArgs: Args = argsParser.parse(args, Args()) getOrElse(throw new IllegalArgumentException)
// Throw exception if separator and listSeparator are identical
if (commandArgs.separator == commandArgs.listSeparator) throw new IllegalArgumentException(
......
......@@ -39,7 +39,7 @@ object VepNormalizer extends ToolCommand {
def main(args: Array[String]): Unit = {
val commandArgs: Args = new OptParser()
.parse(args, Args())
.getOrElse(sys.exit(1))
.getOrElse(throw new IllegalArgumentException)
val input = commandArgs.inputVCF
val output = commandArgs.outputVCF
......
......@@ -399,7 +399,7 @@ object WipeReads extends ToolCommand {
/** Parses the command line argument */
def parseArgs(args: Array[String]): Args = new OptParser()
.parse(args, Args())
.getOrElse(sys.exit(1))
.getOrElse(throw new IllegalArgumentException)
def main(args: Array[String]): Unit = {
......
package nl.lumc.sasc.biopet.utils.intervals
import java.io.File
import scala.collection.mutable.Set
import nl.lumc.sasc.biopet.utils.Logging
/**
* Created by pjvanthof on 14/05/16.
*/
object BedCheck {
private val cache: Set[(File, File)] = Set()
def checkBedFileToReference(bedFile: File, reference: File, biopetError: Boolean = false, ignoreCache: Boolean = false): Unit = {
if (ignoreCache || !cache.contains((bedFile, reference))) {
cache.add((bedFile, reference))
val bedrecords = BedRecordList.fromFile(bedFile)
if (biopetError) {
try {
bedrecords.validateContigs(reference)
} catch {
case e: IllegalArgumentException => Logging.addError(e.getMessage + s", Bedfile: $bedFile")
}
} else bedrecords.validateContigs(reference)
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment