From ee197cc65fb0b5c32eb3845a2c7d1623845f4ba8 Mon Sep 17 00:00:00 2001
From: Peter van 't Hof <p.j.van_t_hof@lumc.nl>
Date: Mon, 16 Feb 2015 11:32:39 +0100
Subject: [PATCH] Added checksum cache

---
 .../biopet/core/summary/SummaryQScript.scala  | 30 ++++++++++++-------
 1 file changed, 20 insertions(+), 10 deletions(-)

diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/summary/SummaryQScript.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/summary/SummaryQScript.scala
index acf2727f5..f457fc278 100644
--- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/summary/SummaryQScript.scala
+++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/core/summary/SummaryQScript.scala
@@ -11,16 +11,23 @@ import nl.lumc.sasc.biopet.extensions.Md5sum
 trait SummaryQScript extends BiopetQScript {
 
   /** Key is sample/library, None is sample or library is not applicable */
-  private[summary] var summarizables: Map[(Option[String], Option[String]), List[Summarizable]] = Map()
+  private[summary] var summarizables: Map[(String, Option[String], Option[String]), List[Summarizable]] = Map()
   private[summary] var summaryQScripts: List[SummaryQScript] = Nil
 
   def summaryFile: File
 
-  def addSummarizable(summarizable: Summarizable,
-                      sampleId: Option[String] = None,
-                      libraryId: Option[String] = None): Unit = {
-    require(libraryId.isDefined == sampleId.isDefined) // Library always require a sample
-    summarizables += (sampleId, libraryId) -> (summarizable :: summarizables.getOrElse((sampleId, libraryId), Nil))
+  def addSummarizable(summarizable: Summarizable, name: String): Unit = {
+    //TODO: Automatic sample capture
+    addSummarizable(summarizable, name, None, None)
+  }
+
+  def addSummarizable(summarizable: Summarizable, name: String, sampleId: Option[String]): Unit = {
+    addSummarizable(summarizable, name, sampleId, None)
+  }
+
+  def addSummarizable(summarizable: Summarizable, name: String, sampleId: Option[String], libraryId: Option[String]): Unit = {
+    if (libraryId.isDefined) require(sampleId.isDefined) // Library always require a sample
+    summarizables += (name, sampleId, libraryId) -> (summarizable :: summarizables.getOrElse((name, sampleId, libraryId), Nil))
   }
 
   def addSummaryQScript(summaryQScript: SummaryQScript): Unit = {
@@ -31,13 +38,11 @@ trait SummaryQScript extends BiopetQScript {
     val writeSummary = new WriteSummary(this)
 
     //Automatic checksums
-    val keepChecksums: Boolean = config("keep_checksums_files", default = false)
-
     for ((_, summarizableList) <- summarizables; summarizable <- summarizableList; (_, file) <- summarizable.summaryFiles) {
-      if (writeSummary.md5sum) {
+      if (writeSummary.md5sum && !SummaryQScript.md5sumCache.contains(file)) {
         val md5sum = Md5sum(this, file)
-        md5sum.isIntermediate = !keepChecksums
         writeSummary.deps :+= md5sum.output
+        SummaryQScript.md5sumCache += file -> md5sum.output
         add(md5sum)
       }
       //TODO: add more checksums types
@@ -46,3 +51,8 @@ trait SummaryQScript extends BiopetQScript {
     add(writeSummary)
   }
 }
+
+object SummaryQScript {
+  import scala.collection.mutable.Map
+  protected[summary] val md5sumCache: Map[File, File] = Map()
+}
\ No newline at end of file
-- 
GitLab