BiopetQScript.scala 3.21 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
 * 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.
 */
16
17
18
package nl.lumc.sasc.biopet.core

import java.io.File
Peter van 't Hof's avatar
Peter van 't Hof committed
19
import java.io.PrintWriter
20
import nl.lumc.sasc.biopet.core.config.{ ConfigValueIndex, Config, Configurable }
Peter van 't Hof's avatar
Peter van 't Hof committed
21
import org.broadinstitute.gatk.utils.commandline.Argument
Peter van 't Hof's avatar
Peter van 't Hof committed
22
23
import org.broadinstitute.gatk.queue.QSettings
import org.broadinstitute.gatk.queue.function.QFunction
24
import org.broadinstitute.gatk.queue.function.scattergather.ScatterGatherableFunction
25
import org.broadinstitute.gatk.queue.util.{ Logging => GatkLogging }
26

Peter van 't Hof's avatar
Peter van 't Hof committed
27
28
29
/**
 * Base for biopet pipeline
 */
30
trait BiopetQScript extends Configurable with GatkLogging {
31

32
  @Argument(doc = "JSON config file(s)", fullName = "config_file", shortName = "config", required = false)
33
  val configfiles: List[File] = Nil
bow's avatar
bow committed
34

35
36
37
38
39
40
41
42
  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")
    else {
      val t = temp.get.value.toString
      if (!t.endsWith("/")) t + "/" else t
    }
  }
bow's avatar
bow committed
43

44
  @Argument(doc = "Disable all scatters", shortName = "DSC", required = false)
45
  var disableScatter: Boolean = false
46

bow's avatar
bow committed
47
48
  var outputFiles: Map[String, File] = Map()

Peter van 't Hof's avatar
Peter van 't Hof committed
49
  /** Get implemented from org.broadinstitute.gatk.queue.QScript */
Peter van 't Hof's avatar
Peter van 't Hof committed
50
  var qSettings: QSettings
bow's avatar
bow committed
51

Peter van 't Hof's avatar
Peter van 't Hof committed
52
53
54
55
  /** Get implemented from org.broadinstitute.gatk.queue.QScript */
  var functions: Seq[QFunction]

  /** Init for pipeline */
56
  def init
bow's avatar
bow committed
57

Peter van 't Hof's avatar
Peter van 't Hof committed
58
59
  /** Pipeline itself */
  def biopetScript
Peter van 't Hof's avatar
Peter van 't Hof committed
60

Peter van 't Hof's avatar
Peter van 't Hof committed
61
62
63
  /**
   * Script from queue itself, final to force some checks for each pipeline and write report
   */
64
  final def script() {
65
    outputDir = config("output_dir", required = true)
Peter van 't Hof's avatar
Peter van 't Hof committed
66
    if (!outputDir.endsWith("/")) outputDir += "/"
67
68
    init
    biopetScript
69

70
    if (disableScatter) for (function <- functions) function match {
71
72
73
      case f: ScatterGatherableFunction => f.scatterCount = 1
      case _                            =>
    }
74
    for (function <- functions) function match {
Peter van 't Hof's avatar
Peter van 't Hof committed
75
76
      case f: BiopetCommandLineFunctionTrait => f.afterGraph
      case _                                 =>
77
    }
Peter van 't Hof's avatar
Peter van 't Hof committed
78

79
    Config.global.writeReport(qSettings.runName, outputDir + ".log/" + qSettings.runName)
80
  }
bow's avatar
bow committed
81

Peter van 't Hof's avatar
Peter van 't Hof committed
82
83
84
85
86
87
88
89
  /** Get implemented from org.broadinstitute.gatk.queue.QScript */
  def add(functions: QFunction*)

  /**
   * Function to set isIntermediate and add in 1 line
   * @param function
   * @param isIntermediate
   */
bow's avatar
bow committed
90
  def add(function: QFunction, isIntermediate: Boolean = false) {
91
92
93
    function.isIntermediate = isIntermediate
    add(function)
  }
94
}