From c52103d284d387092d9e3cb0ef1b551642991b9c Mon Sep 17 00:00:00 2001 From: Ryan Williams Date: Tue, 27 Dec 2016 20:48:45 +0000 Subject: [PATCH] unify versions, Locus upgrades --- build.sbt | 1 - .../loci/iterator/SkippableLociIterator.scala | 2 +- .../genomics/loci/map/ContigSerializer.scala | 11 +++-- .../hammerlab/genomics/loci/set/Contig.scala | 6 +-- .../genomics/loci/set/ContigSerializer.scala | 4 +- .../hammerlab/genomics/loci/set/LociSet.scala | 4 +- .../genomics/loci/map/LociMapSuite.scala | 48 +++++++++---------- 7 files changed, 38 insertions(+), 38 deletions(-) diff --git a/build.sbt b/build.sbt index 54fd521..f8610dd 100644 --- a/build.sbt +++ b/build.sbt @@ -3,7 +3,6 @@ organization := "org.hammerlab.genomics" name := "loci" version := "1.5.0-SNAPSHOT" -scala211Only addSparkDeps deps ++= Seq( diff --git a/src/main/scala/org/hammerlab/genomics/loci/iterator/SkippableLociIterator.scala b/src/main/scala/org/hammerlab/genomics/loci/iterator/SkippableLociIterator.scala index 194e3b1..185acdc 100644 --- a/src/main/scala/org/hammerlab/genomics/loci/iterator/SkippableLociIterator.scala +++ b/src/main/scala/org/hammerlab/genomics/loci/iterator/SkippableLociIterator.scala @@ -10,7 +10,7 @@ abstract class SkippableLociIterator[T] extends SimpleBufferedIterator[T] { var locus: Locus = 0 override def postNext(): Unit = { - locus += 1 + locus = locus.next } def skipTo(newLocus: Locus): this.type = { diff --git a/src/main/scala/org/hammerlab/genomics/loci/map/ContigSerializer.scala b/src/main/scala/org/hammerlab/genomics/loci/map/ContigSerializer.scala index 5632d6b..ef178d0 100644 --- a/src/main/scala/org/hammerlab/genomics/loci/map/ContigSerializer.scala +++ b/src/main/scala/org/hammerlab/genomics/loci/map/ContigSerializer.scala @@ -1,7 +1,8 @@ package org.hammerlab.genomics.loci.map -import com.esotericsoftware.kryo.io.{Input, Output} -import com.esotericsoftware.kryo.{Kryo, Serializer => KryoSerializer} +import com.esotericsoftware.kryo.io.{ Input, Output } +import com.esotericsoftware.kryo.{ Kryo, Serializer ⇒ KryoSerializer } +import org.hammerlab.genomics.reference.Locus /** * We serialize a Contig as its name, the number of ranges, and the ranges themselves (two longs and a value each). @@ -12,8 +13,8 @@ class ContigSerializer[T] extends KryoSerializer[Contig[T]] { output.writeLong(obj.asMap.size) obj.asMap.foreach { case (range, value) => - output.writeLong(range.start) - output.writeLong(range.end) + output.writeLong(range.start.locus) + output.writeLong(range.end.locus) kryo.writeClassAndObject(output, value) } } @@ -26,7 +27,7 @@ class ContigSerializer[T] extends KryoSerializer[Contig[T]] { val start = input.readLong() val end = input.readLong() val value: T = kryo.readClassAndObject(input).asInstanceOf[T] - builder.put(contig, start, end, value) + builder.put(contig, Locus(start), Locus(end), value) } builder.result.onContig(contig) } diff --git a/src/main/scala/org/hammerlab/genomics/loci/set/Contig.scala b/src/main/scala/org/hammerlab/genomics/loci/set/Contig.scala index 8c3d186..f3be543 100644 --- a/src/main/scala/org/hammerlab/genomics/loci/set/Contig.scala +++ b/src/main/scala/org/hammerlab/genomics/loci/set/Contig.scala @@ -37,8 +37,8 @@ case class Contig(var name: ContigName, private var rangeSet: RangeSet[Locus]) e for { Interval(start, end) <- ranges } { - out.writeLong(start) - out.writeLong(end) + out.writeLong(start.locus) + out.writeLong(end.locus) } } @@ -67,7 +67,7 @@ case class Contig(var name: ContigName, private var rangeSet: RangeSet[Locus]) e def count: NumLoci = ranges.map(_.length: Long).sum /** Returns whether a given genomic region overlaps with any loci on this contig. */ - def intersects(start: Long, end: Long): Boolean = !rangeSet.subRangeSet(lociRange(start, end)).isEmpty + def intersects(start: Locus, end: Locus): Boolean = !rangeSet.subRangeSet(lociRange(start, end)).isEmpty /** * Make two new Contigs: one with the first @numToTake loci from this Contig, and the second with the rest. diff --git a/src/main/scala/org/hammerlab/genomics/loci/set/ContigSerializer.scala b/src/main/scala/org/hammerlab/genomics/loci/set/ContigSerializer.scala index 416740d..4fa6dbb 100644 --- a/src/main/scala/org/hammerlab/genomics/loci/set/ContigSerializer.scala +++ b/src/main/scala/org/hammerlab/genomics/loci/set/ContigSerializer.scala @@ -13,8 +13,8 @@ class ContigSerializer extends KryoSerializer[Contig] { for { Interval(start, end) <- obj.ranges } { - output.writeLong(start) - output.writeLong(end) + output.writeLong(start.locus) + output.writeLong(end.locus) } } diff --git a/src/main/scala/org/hammerlab/genomics/loci/set/LociSet.scala b/src/main/scala/org/hammerlab/genomics/loci/set/LociSet.scala index 062b45a..39c3a49 100644 --- a/src/main/scala/org/hammerlab/genomics/loci/set/LociSet.scala +++ b/src/main/scala/org/hammerlab/genomics/loci/set/LociSet.scala @@ -99,8 +99,8 @@ case class LociSet(private val map: SortedMap[ContigName, Contig]) extends Trunc .map(interval => new HTSJDKInterval( contig.name, - interval.start.toInt + 1, - interval.end.toInt + interval.start.locus.toInt + 1, + interval.end.locus.toInt ) ) ) diff --git a/src/test/scala/org/hammerlab/genomics/loci/map/LociMapSuite.scala b/src/test/scala/org/hammerlab/genomics/loci/map/LociMapSuite.scala index 2098a69..6259092 100644 --- a/src/test/scala/org/hammerlab/genomics/loci/map/LociMapSuite.scala +++ b/src/test/scala/org/hammerlab/genomics/loci/map/LociMapSuite.scala @@ -2,9 +2,12 @@ package org.hammerlab.genomics.loci.map import org.hammerlab.genomics.loci.set.test.TestLociSet import org.hammerlab.genomics.reference.Interval +import org.hammerlab.genomics.reference.test.LocusUtil import org.hammerlab.test.Suite -class LociMapSuite extends Suite { +class LociMapSuite + extends Suite + with LocusUtil { test("properties of empty LociMap") { val emptyMap = LociMap[String]() @@ -16,8 +19,8 @@ class LociMapSuite extends Suite { test("basic map operations") { val lociMap = LociMap( - ("chr1", 100L, 200L, "A"), - ("chr20", 200L, 201L, "B") + ("chr1", 100, 200, "A"), + ("chr20", 200, 201, "B") ) lociMap.count === 101 @@ -39,9 +42,9 @@ class LociMapSuite extends Suite { test("asInverseMap with repeated values") { val lociMap = LociMap( - ("chr1", 100L, 200L, "A"), - ("chr2", 200L, 300L, "A"), - ("chr3", 400L, 500L, "B") + ("chr1", 100, 200, "A"), + ("chr2", 200, 300, "A"), + ("chr3", 400, 500, "B") ) // asInverseMap stuffs all Loci with the same value into a LociSet. @@ -58,19 +61,18 @@ class LociMapSuite extends Suite { test("range coalescing") { val lociMap = LociMap( - ("chr1", 100L, 200L, "A"), - ("chr1", 400L, 500L, "B"), - ("chr1", 150L, 160L, "C"), - ("chr1", 180L, 240L, "A") + ("chr1", 100, 200, "A"), + ("chr1", 400, 500, "B"), + ("chr1", 150, 160, "C"), + ("chr1", 180, 240, "A") ) - lociMap.inverse === ( + lociMap.inverse === Map( "A" -> TestLociSet("chr1:100-150,chr1:160-240"), "B" -> TestLociSet("chr1:400-500"), "C" -> TestLociSet("chr1:150-160") ) - ) lociMap.count === 240 lociMap.toString === "chr1:100-150=A,chr1:150-160=C,chr1:160-240=A,chr1:400-500=B" @@ -78,10 +80,10 @@ class LociMapSuite extends Suite { test("spanning equal values merges") { val map = LociMap( - ("chr1", 100L, 200L, "A"), - ("chr1", 400L, 500L, "B"), - ("chr1", 300L, 400L, "A"), - ("chr1", 199L, 301L, "A") + ("chr1", 100, 200, "A"), + ("chr1", 400, 500, "B"), + ("chr1", 300, 400, "A"), + ("chr1", 199, 301, "A") ) map.inverse === @@ -101,25 +103,23 @@ class LociMapSuite extends Suite { test("bridging equal values merges") { val map = LociMap( - ("chr1", 100L, 200L, "A"), - ("chr1", 400L, 500L, "B"), - ("chr1", 300L, 400L, "A"), - ("chr1", 200L, 300L, "A") + ("chr1", 100, 200, "A"), + ("chr1", 400, 500, "B"), + ("chr1", 300, 400, "A"), + ("chr1", 200, 300, "A") ) - map.inverse === ( + map.inverse === Map( "A" -> TestLociSet("chr1:100-400"), "B" -> TestLociSet("chr1:400-500") ) - ) - map.onContig("chr1").asMap === ( + map.onContig("chr1").asMap === Map( Interval(100, 400) -> "A", Interval(400, 500) -> "B" ) - ) map.count === 400 }