From 66bf4e3ff6e0f3a6c41c9a0f33c6001417bb468f Mon Sep 17 00:00:00 2001
From: bow <bow@bow.web.id>
Date: Fri, 6 Mar 2015 19:29:26 +0100
Subject: [PATCH] Fix missing adapter name in flexiprep summary

---
 .../biopet/pipelines/flexiprep/Cutadapt.scala | 35 ++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/Cutadapt.scala b/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/Cutadapt.scala
index dafbf8069..cac6bba92 100644
--- a/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/Cutadapt.scala
+++ b/public/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/Cutadapt.scala
@@ -15,8 +15,11 @@
  */
 package nl.lumc.sasc.biopet.pipelines.flexiprep
 
-import nl.lumc.sasc.biopet.extensions.Ln
 import java.io.File
+import scala.collection.mutable
+import scala.io.Source
+
+import nl.lumc.sasc.biopet.extensions.Ln
 import nl.lumc.sasc.biopet.core.config.Configurable
 
 class Cutadapt(root: Configurable) extends nl.lumc.sasc.biopet.extensions.Cutadapt(root) {
@@ -31,6 +34,36 @@ class Cutadapt(root: Configurable) extends nl.lumc.sasc.biopet.extensions.Cutada
     else if (default_clip_mode == "both") opt_anywhere ++= foundAdapters
   }
 
+  override def summaryStats: Map[String, Any] = {
+    val trimR = """.*Trimmed reads: *(\d*) .*""".r
+    val tooShortR = """.*Too short reads: *(\d*) .*""".r
+    val tooLongR = """.*Too long reads: *(\d*) .*""".r
+    val adapterR = """Adapter '([C|T|A|G]*)'.*trimmed (\d*) times.""".r
+
+    val stats: mutable.Map[String, Int] = mutable.Map("trimmed" -> 0, "tooshort" -> 0, "toolong" -> 0)
+    val adapter_stats: mutable.Map[String, (String, Int)] = mutable.Map()
+
+    if (stats_output.exists) for (line <- Source.fromFile(stats_output).getLines) {
+      line match {
+        case trimR(m)     => stats += ("trimmed" -> m.toInt)
+        case tooShortR(m) => stats += ("tooshort" -> m.toInt)
+        case tooLongR(m)  => stats += ("toolong" -> m.toInt)
+        case adapterR(adapter, count) =>
+          val adapterName = fastqc.foundAdapters.find(_.seq == adapter) match {
+            case None    => "unknown"
+            case Some(a) => a.name
+          }
+          adapter_stats += (adapter -> (adapterName, count.toInt))
+        case _ =>
+      }
+    }
+
+    Map("num_reads_affected" -> stats("trimmed"),
+      "num_reads_discarded_too_short" -> stats("tooshort"),
+      "num_reads_discarded_too_long" -> stats("toolong"),
+      "adapters" -> adapter_stats.toMap
+    )
+  }
   override def cmdLine = {
     if (opt_adapter.nonEmpty || opt_anywhere.nonEmpty || opt_front.nonEmpty) {
       analysisName = getClass.getSimpleName
-- 
GitLab