From 564081d7d5582cc919bf146a5d6bd7a9eacf7273 Mon Sep 17 00:00:00 2001
From: Wai Yi Leung <w.y.leung@lumc.nl>
Date: Mon, 18 Jan 2016 17:15:48 +0100
Subject: [PATCH] Update Cutadapt wrapper

---
 .../sasc/biopet/extensions/Cutadapt.scala     | 103 +++++++++++++++++-
 1 file changed, 99 insertions(+), 4 deletions(-)

diff --git a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cutadapt.scala b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cutadapt.scala
index 6e06894f9..3f57f9408 100644
--- a/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cutadapt.scala
+++ b/public/biopet-extensions/src/main/scala/nl/lumc/sasc/biopet/extensions/Cutadapt.scala
@@ -26,9 +26,10 @@ import scala.collection.mutable
 import scala.io.Source
 
 /**
- * Extension for cutadept
- * Based on version 1.5
- */
+  * Extension for cutadapt
+  * Started with version 1.5
+  * Updated to version 1.9 (18-01-2016 by wyleung)
+  * */
 class Cutadapt(val root: Configurable) extends BiopetCommandLineFunction with Summarizable with Version {
   @Input(doc = "Input fastq file")
   var fastq_input: File = _
@@ -51,19 +52,113 @@ class Cutadapt(val root: Configurable) extends BiopetCommandLineFunction with Su
   var opt_anywhere: Set[String] = config("anywhere", default = Nil)
   var opt_front: Set[String] = config("front", default = Nil)
 
+  var errorRate: Option[Double] = config("error_rate")
+  var noIndels: Boolean = config("no_indels", default = false)
+  var times: Option[Int] = config("times")
+  var overlap: Option[Int] = config("overlap")
+  var matchReadWildcards: Boolean = config("match_read_wildcards", default = false)
+  var noMatchAdapterWildcards: Boolean = config("no_match_adapter_wildcards", default = false) // specific for 1.9
+
+  /** Options for filtering of processed reads */
   var opt_discard: Boolean = config("discard", default = false)
+  var trimmed_only: Boolean = config("trimmed_only", default = false)
   var opt_minimum_length: Int = config("minimum_length", 1)
   var opt_maximum_length: Option[Int] = config("maximum_length")
+  var noTrim: Boolean = config("no_trim", default = false)
+  var maxN: Option[Int] = config("max_n") // specific for 1.9
+  var maskAdapter: Boolean = config("mask_adapter", default = false)
+
+  /** Options that influence what gets output to where */
+  var quiet: Boolean = config("quiet", default = false)
+//  var output: File // see up @Output
+  var infoFile: Option[File] = config("info_file")
+  var restFile: Option[File] = config("rest_file")
+  var wildcardFile: Option[File] = config("wildcard_file")
+  var tooShortOutput: Option[File] = config("too_short_output")
+  var tooLongOutput: Option[File] = config("too_long_output")
+  var untrimmedOutput: Option[File] = config("untrimmed_output")
+
+  /** Additional read modifications */
+  var cut: Option[Int] = config("cut")
+  var qualityCutoff: Option[String] = config("quality_cutoff")
+  var qualityBase: Option[Int] = config("quality_base")
+  var trimN: Boolean = config("trim_n", default = false)
+  var prefix: Option[String] = config("prefix")
+  var suffix: Option[String] = config("suffix")
+  var stripSuffix: Set[String] = config("strip_suffix")
+  var lengthTag: Option[String] = config("length_tag")
+
+  /** Colorspace options */
+  var colorspace: Boolean = config("colorspace", default=false)
+  var doubleEncode: Boolean = config("double_encode", default=false)
+  var trimPrimer: Boolean = config("trim_primer", default=false)
+  var stripF3: Boolean = config("strip_f3", default=false)
+  var maq: Boolean = config("maq", default=false)
+  var bwa: Boolean = config("bwa", default=false)
+  var noZeroCap: Boolean = config("no_zero_cap", default= false)
+  var zeroCap: Boolean = config("zero_cap", default=false)
+
+  /** Paired end options */
+  var peAdapter: Set[String] = config("pe_adapter", default = Nil)
+  var peAdapterFront: Set[String] = config("pe_adapter_front", default = Nil)
+  var peAdapterBoth: Set[String] = config("pe_adapter_both", default = Nil)
+  var peCut: Boolean = config("pe_cut", default=false)
+  var pairedOutput: Option[File] = config("paired_output")
+  var interleaved: Boolean = config("interleaved", default=false)
+  var untrimmedPairedOutput: Option[File] = config("untrimmed_paired_output")
+
 
   /** return commandline to execute */
   def cmdLine = required(executable) +
-    // options
+    // Options that influence how the adapters are found
     repeat("-a", opt_adapter) +
     repeat("-b", opt_anywhere) +
     repeat("-g", opt_front) +
+    optional("--error-rate", errorRate) +
+    conditional(noIndels, "--no-indels") +
+    optional("--times", times) +
+    optional("--overlap", overlap) +
+    conditional(matchReadWildcards, "--match-read-wildcards") +
+    conditional(noMatchAdapterWildcards, "--no-match-adapter-wildcards") +
+    // Options for filtering of processed reads
     conditional(opt_discard, "--discard") +
+    conditional(trimmed_only, "--trimmed-only") +
     optional("-m", opt_minimum_length) +
     optional("-M", opt_maximum_length) +
+    conditional(noTrim, "--no-trim") +
+    optional("--max-n", maxN) +
+    conditional(maskAdapter, "--mask-adapter") +
+    conditional(quiet, "--quiet") +
+    optional("--info-file", infoFile) +
+    optional("--rest-file", restFile) +
+    optional("--wildcard-file", wildcardFile) +
+    optional("--too-short-output", tooShortOutput) +
+    optional("--too-long-output", tooLongOutput) +
+    optional("--untrimmed-output", untrimmedOutput) +
+    // Additional read modifications
+    optional("--cut", cut) +
+    optional("--quality-cutoff", qualityCutoff) +
+    conditional(trimN, "--trim-n") +
+    optional("--prefix", prefix) +
+    optional("--suffix", suffix) +
+    optional("--strip-suffix", stripSuffix) +
+    optional("--length-tag", lengthTag) +
+    // Colorspace options
+    conditional(colorspace, "--colorspace") +
+    conditional(doubleEncode, "--double-encode") +
+    conditional(trimPrimer, "--trim-primer") +
+    conditional(stripF3, "--strip-f3") +
+    conditional(maq, "--maq") +
+    conditional(bwa, "--bwa") +
+    conditional(noZeroCap, "--no-zero-cap") +
+    conditional(zeroCap, "--zero-cap") +
+    // Paired-end options
+    repeat("-A", peAdapter) +
+    repeat("-G", peAdapterFront) +
+    repeat("-B", peAdapterBoth) +
+    conditional(interleaved, "--interleaved") +
+    optional("--paired-output", pairedOutput) +
+    optional("--untrimmed-paired-output", untrimmedPairedOutput) +
     // input / output
     required(fastq_input) +
     (if (outputAsStsout) "" else required("--output", fastq_output) +
-- 
GitLab