From 378dc2a320a173f390b54232ac5e8ef675aa5597 Mon Sep 17 00:00:00 2001 From: Peter van 't Hof <p.j.van_t_hof@lumc.nl> Date: Wed, 6 Jul 2016 18:24:37 +0200 Subject: [PATCH] Added better type casting --- .../sasc/biopet/tools/bamstats/BamStats.scala | 12 +++++++++--- .../sasc/biopet/tools/bamstats/Histogram.scala | 18 +++++++++++------- .../sasc/biopet/tools/bamstats/Stats.scala | 14 +++++++------- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/BamStats.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/BamStats.scala index eb21f9f4b..770845f78 100644 --- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/BamStats.scala +++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/BamStats.scala @@ -1,16 +1,18 @@ package nl.lumc.sasc.biopet.tools.bamstats import java.io.File +import java.util.concurrent.TimeoutException import htsjdk.samtools.reference.FastaSequenceFile -import htsjdk.samtools.{ SAMSequenceDictionary, SamReaderFactory } +import htsjdk.samtools.{SAMSequenceDictionary, SamReaderFactory} import nl.lumc.sasc.biopet.utils.BamUtils.SamDictCheck import nl.lumc.sasc.biopet.utils.ToolCommand import nl.lumc.sasc.biopet.utils.intervals.{ BedRecord, BedRecordList } import scala.collection.JavaConversions._ import scala.concurrent.ExecutionContext.Implicits.global -import scala.concurrent.Future +import scala.concurrent.duration._ +import scala.concurrent.{ Await, Future } /** * This tool will collect stats from a bamfile @@ -135,7 +137,11 @@ object BamStats extends ToolCommand { done.foreach(stats += _.value.get.get) running = running.filterNot(done.contains(_)) if (running.nonEmpty && done.nonEmpty) msg.foreach(m => logger.info(s"Jobs for '$m', ${running.size}/${futures.size} jobs")) - if (running.nonEmpty) Thread.sleep(1000) + if (running.nonEmpty) try { + Await.ready(running.head, 1 second) + } catch { + case e: TimeoutException => + } } msg.foreach(m => logger.info(s"All jobs for '$m' are done")) stats diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/Histogram.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/Histogram.scala index 6a97e2303..fa68fa455 100644 --- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/Histogram.scala +++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/Histogram.scala @@ -7,25 +7,29 @@ import scala.collection.mutable /** * Created by pjvanthof on 05/07/16. */ -case class Histogram() { - protected[Histogram] val histrogram: mutable.Map[Int, Long] = mutable.Map() +class Counts[T](implicit ord: Ordering[T]) { + protected[Counts] val counts: mutable.Map[T, Long] = mutable.Map() /** This will add an other histogram to `this` */ - def +=(other: Histogram): Histogram = { - other.histrogram.foreach(x => this.histrogram += x._1 -> (this.histrogram.getOrElse(x._1, 0L) + x._2)) + def +=(other: Counts[T]): Counts[T] = { + other.counts.foreach(x => this.counts += x._1 -> (this.counts.getOrElse(x._1, 0L) + x._2)) this } /** With this a value can be added to the histogram */ - def add(value: Int): Unit = { - histrogram += value -> (histrogram.getOrElse(value, 0L) + 1) + def add(value: T): Unit = { + counts += value -> (counts.getOrElse(value, 0L) + 1) } /** Write histogram to a tsv/count file */ def writeToTsv(file: File): Unit = { val writer = new PrintWriter(file) writer.println("value\tcount") - histrogram.keys.toList.sorted.foreach(x => writer.println(s"$x\t${histrogram(x)}")) + counts.keys.toList.sorted.foreach(x => writer.println(s"$x\t${counts(x)}")) writer.close() } } + +class Histogram[T](implicit ord: Numeric[T]) extends Counts[T] { + +} diff --git a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/Stats.scala b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/Stats.scala index 91db3220f..14bb97525 100644 --- a/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/Stats.scala +++ b/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/bamstats/Stats.scala @@ -8,13 +8,13 @@ case class Stats() { var totalReads = 0L var unmapped = 0L var secondary = 0L - val mappingQualityHistogram = Histogram() - val insertSizeHistogram = Histogram() - val clippingHistogram = Histogram() - val leftClippingHistogram = Histogram() - val rightClippingHistogram = Histogram() - val _5_ClippingHistogram = Histogram() - val _3_ClippingHistogram = Histogram() + val mappingQualityHistogram = new Histogram[Int] + val insertSizeHistogram = new Histogram[Int] + val clippingHistogram = new Histogram[Int] + val leftClippingHistogram = new Histogram[Int] + val rightClippingHistogram = new Histogram[Int] + val _5_ClippingHistogram = new Histogram[Int] + val _3_ClippingHistogram = new Histogram[Int] /** This will add an other [[Stats]] inside `this` */ def +=(other: Stats): Stats = { -- GitLab