import org.broadinstitute.sting.gatk.DownsampleType
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 DoC 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

  @Input(doc="An optional file with a list of intervals to proccess.", shortName="L", required=false)
  var intervalsString: List[String] = List("2:87000001-90000000")

  // This trait allows us set the variables below in one place,
  // and then reuse this trait on each CommandLineGATK function below.
  trait DepthOfCoverageArguments extends CommandLineGATK {
    this.jarFile = DoC.this.gatkJar
    this.reference_sequence = DoC.this.referenceFile
    this.intervalsString = DoC.this.intervalsString
    this.memoryLimit = 8
  }


  def script = {
    // Create the four function that we can run.
    val doc = new DepthOfCoverage with DepthOfCoverageArguments
    doc.downsampling_type = DownsampleType.NONE
    doc.omitLocusTable = true
    doc.omitIntervals = true
    doc.omitSampleSummary = true        

    // If you are running this on a compute farm, make sure that the Sting/shell
    // folder is in your path to use mergeText.sh and splitIntervals.sh.
    //doc.scatterCount = 3
    doc.input_file = DoC.this.bamFiles
    doc.out = new File("doc-all.out")

    add(doc)
  }

}
