Skip to content

Commit

Permalink
unify versions, Locus upgrades
Browse files Browse the repository at this point in the history
  • Loading branch information
ryan-williams committed Dec 27, 2016
1 parent cb88444 commit c52103d
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 38 deletions.
1 change: 0 additions & 1 deletion build.sbt
Expand Up @@ -3,7 +3,6 @@ organization := "org.hammerlab.genomics"
name := "loci"
version := "1.5.0-SNAPSHOT"

scala211Only
addSparkDeps

deps ++= Seq(
Expand Down
Expand Up @@ -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 = {
Expand Down
@@ -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).
Expand All @@ -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)
}
}
Expand All @@ -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)
}
Expand Down
6 changes: 3 additions & 3 deletions src/main/scala/org/hammerlab/genomics/loci/set/Contig.scala
Expand Up @@ -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)
}
}

Expand Down Expand Up @@ -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.
Expand Down
Expand Up @@ -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)
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/main/scala/org/hammerlab/genomics/loci/set/LociSet.scala
Expand Up @@ -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
)
)
)
Expand Down
48 changes: 24 additions & 24 deletions src/test/scala/org/hammerlab/genomics/loci/map/LociMapSuite.scala
Expand Up @@ -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]()
Expand All @@ -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
Expand All @@ -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.
Expand All @@ -58,30 +61,29 @@ 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"
}

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 ===
Expand All @@ -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
}
Expand Down

0 comments on commit c52103d

Please sign in to comment.