From e6527f3b9bba508b294891e2e5a759033ee59355 Mon Sep 17 00:00:00 2001
From: Peter van 't Hof <p.j.van_t_hof@lumc.nl>
Date: Wed, 6 Aug 2014 14:13:05 +0200
Subject: [PATCH] Finalize summary structure

---
 .../flexiprep/FlexiprepSummary.scala          | 84 +++++++++++--------
 1 file changed, 48 insertions(+), 36 deletions(-)

diff --git a/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepSummary.scala b/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepSummary.scala
index 915c17fcc..fc831fcd0 100644
--- a/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepSummary.scala
+++ b/flexiprep/src/main/scala/nl/lumc/sasc/biopet/pipelines/flexiprep/FlexiprepSummary.scala
@@ -1,5 +1,6 @@
 package nl.lumc.sasc.biopet.pipelines.flexiprep
 
+import java.io.PrintWriter
 import nl.lumc.sasc.biopet.core.config.Configurable
 import nl.lumc.sasc.biopet.extensions.Sha1sum
 import nl.lumc.sasc.biopet.pipelines.flexiprep.scripts.{ FastqSync, Seqstat }
@@ -46,6 +47,8 @@ class FlexiprepSummary(val root: Configurable) extends InProcessFunction with Co
   var fastqcR2after: Fastqc = _
 
   var flexiprep: Flexiprep = root.asInstanceOf[Flexiprep]
+  
+  var resourses:Map[String, Json] = Map()
 
   def addFastqc(fastqc: Fastqc, R2: Boolean = false, after: Boolean = false): Fastqc = {
     if (!R2 && !after) this.fastqcR1 = fastqc
@@ -99,29 +102,39 @@ class FlexiprepSummary(val root: Configurable) extends InProcessFunction with Co
   // format: OFF
   override def run {
     logger.debug("Start")
+    sha1Summary()
     val summary = 
-      ("flexiprep" := (
-        ("clipping" := !flexiprep.skipClip) ->:
-        ("trimming" := !flexiprep.skipTrim) ->:
-        ("paired" := flexiprep.paired) ->:
-        jEmptyObject)) ->:
-      ("seqstat" := seqstatSummary) ->:
-      ("sha1" := sha1Summary) ->:
-      ("fastqc" := fastqcSummary) ->:
-      ("clipping" :=? clipstatSummary) ->?:
-      ("trimming" :=? trimstatSummary) ->?:
-      jEmptyObject
+      ("samples" := ( flexiprep.sampleName :=
+        ("runs" := ( flexiprep.libraryName := (
+          ("flexiprep" := (
+            ("clipping" := !flexiprep.skipClip) ->:
+            ("trimming" := !flexiprep.skipTrim) ->:
+            ("paired" := flexiprep.paired) ->:
+            jEmptyObject)) ->:
+          ("stats" := (
+            ("fastq" := seqstatSummary) ->:
+            ("clipping" :=? clipstatSummary) ->?:
+            ("trimming" :=? trimstatSummary) ->?:
+            jEmptyObject)) ->:
+          ("resourses" := (("raw_R1" := getResourses(fastqcR1, sha1R1)) ->:
+            ("raw_R2" :?= getResourses(fastqcR2, sha1R2)) ->?:
+            ("proc_R1" :?= getResourses(fastqcR1after, sha1R1after)) ->?:
+            ("proc_R2" :?= getResourses(fastqcR2after, sha1R2after)) ->?:
+            jEmptyObject)) ->:
+          jEmptyObject ))->: jEmptyObject)->: jEmptyObject)->: jEmptyObject) ->: jEmptyObject
     // format: ON
-    logger.debug(summary.spaces2) // TODO: need output writter
+    val summeryText = summary.spaces2
+    logger.debug("\n" + summeryText)
+    val writer = new PrintWriter(out)
+    writer.write(summeryText)
+    writer.close()
     logger.debug("Stop")
   }
 
   def seqstatSummary(): Option[Json] = {
-    val R1: Json = if (chunks.size == 1) chunks.head._2.seqstatR1.getSummary
-    else {
-      val s = for ((key, value) <- chunks) yield value.seqstatR1.getSummary
-      Seqstat.mergeSummarys(s.toList)
-    }
+    val R1_chunks = for ((key, value) <- chunks) yield value.seqstatR1.getSummary
+    val R1: Json = Seqstat.mergeSummarys(R1_chunks.toList)
+    
     val R2: Option[Json] = if (!flexiprep.paired) None
     else if (chunks.size == 1) Option(chunks.head._2.seqstatR2.getSummary)
     else {
@@ -147,12 +160,16 @@ class FlexiprepSummary(val root: Configurable) extends InProcessFunction with Co
       jEmptyObject)
   }
 
-  def sha1Summary: Json = {
-    return ("R1_raw" := sha1Summary(sha1R1)) ->:
-      ("R2_raw" :=? sha1Summary(sha1R2)) ->?:
-      ("R1_proc" :=? sha1Summary(sha1R1after)) ->?:
-      ("R2_proc" :=? sha1Summary(sha1R2after)) ->?:
-      jEmptyObject
+  def sha1Summary() {
+    val R1_raw = sha1Summary(sha1R1)
+    val R2_raw = sha1Summary(sha1R2)
+    val R1_proc = sha1Summary(sha1R1after)
+    val R2_proc = sha1Summary(sha1R2after)
+    
+    if (!R1_raw.isEmpty) resourses += ("fastq_R1_raw" -> R1_raw.get)
+    if (!R2_raw.isEmpty) resourses += ("fastq_R2_raw" -> R2_raw.get)
+    if (!R1_proc.isEmpty) resourses += ("fastq_R1_proc" -> R1_proc.get)
+    if (!R2_proc.isEmpty) resourses += ("fastq_R2_proc" -> R2_proc.get)
   }
 
   def sha1Summary(sha1sum: Sha1sum): Option[Json] = {
@@ -160,14 +177,12 @@ class FlexiprepSummary(val root: Configurable) extends InProcessFunction with Co
     else return Option(sha1sum.getSummary)
   }
 
-  def fastqcSummary: Json = {
-    return ("R1_raw" := fastqcSummary(fastqcR1)) ->:
-      ("R2_raw" :=? fastqcSummary(fastqcR2)) ->?:
-      ("R1_proc" :=? fastqcSummary(fastqcR1after)) ->?:
-      ("R2_proc" :=? fastqcSummary(fastqcR2after)) ->?:
-      jEmptyObject
+  def getResourses(fastqc:Fastqc, sha1sum:Sha1sum): Option[Json] = {
+    if (fastqc == null || sha1sum == null) return None
+    val fastqcSum = fastqcSummary(fastqc).get
+    return Option(("fastq" := sha1Summary(sha1sum)) ->: fastqcSum)
   }
-
+  
   def fastqcSummary(fastqc: Fastqc): Option[Json] = {
     if (fastqc == null) return None
     else return Option(fastqc.getSummary)
@@ -188,17 +203,14 @@ class FlexiprepSummary(val root: Configurable) extends InProcessFunction with Co
     }
     return Option(("R1" := R1) ->:
       ("R2" :=? R2) ->?:
-      ("fastqSync" :=? syncstatSummary) ->?:
+      ("fastq_sync" :=? syncstatSummary) ->?:
       jEmptyObject)
   }
 
   def syncstatSummary(): Option[Json] = {
     if (flexiprep.skipClip || !flexiprep.paired) return None
-    if (chunks.size == 1) return Option(chunks.head._2.sickle.getSummary)
-    else {
-      val s = for ((key, value) <- chunks) yield value.fastqSync.getSummary
-      return Option(FastqSync.mergeSummarys(s.toList))
-    }
+    val s = for ((key, value) <- chunks) yield value.fastqSync.getSummary
+    return Option(FastqSync.mergeSummarys(s.toList))
   }
 
   def trimstatSummary(): Option[Json] = {
-- 
GitLab