diff --git a/public/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BaseCounter.scala b/public/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BaseCounter.scala index 2c0b472d56714929cd001c65f8df3209a0e2ad40..4af0af4e1d35b1869a6b0ca6f2d9e25b885457de 100644 --- a/public/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BaseCounter.scala +++ b/public/biopet-tools/src/main/scala/nl/lumc/sasc/biopet/tools/BaseCounter.scala @@ -330,7 +330,7 @@ object BaseCounter extends ToolCommand { val blockStart = block.getReferenceStart val blockEnd = blockStart + block.getLength - 1 if (start <= blockEnd && end >= blockStart) { - (if (end < blockEnd) end else blockEnd) - (if (start > blockStart) start else blockStart) + (if (end < blockEnd) end else blockEnd) - (if (start > blockStart) start else blockStart) + 1 } else 0 }.sum } diff --git a/public/biopet-tools/src/test/scala/nl/lumc/sasc/biopet/tools/BaseCounterTest.scala b/public/biopet-tools/src/test/scala/nl/lumc/sasc/biopet/tools/BaseCounterTest.scala new file mode 100644 index 0000000000000000000000000000000000000000..3d33a541dfd0efea4a12ab0421432666356208b1 --- /dev/null +++ b/public/biopet-tools/src/test/scala/nl/lumc/sasc/biopet/tools/BaseCounterTest.scala @@ -0,0 +1,93 @@ +package nl.lumc.sasc.biopet.tools + +import htsjdk.samtools.util.OverlapDetector +import htsjdk.samtools.{SAMReadGroupRecord, SAMSequenceRecord, SAMLineParser, SAMFileHeader} +import org.scalatest.Matchers +import org.scalatest.testng.TestNGSuite +import org.testng.annotations.Test +import picard.annotation.Gene + +/** + * Created by pjvan_thof on 1/29/16. + */ +class BaseCounterTest extends TestNGSuite with Matchers { + + import BaseCounter._ + + @Test + def testCountsClass(): Unit = { + val counts = new Counts + counts.antiSenseBases shouldBe 0 + counts.antiSenseReads shouldBe 0 + counts.senseBases shouldBe 0 + counts.senseReads shouldBe 0 + counts.totalBases shouldBe 0 + counts.totalReads shouldBe 0 + + counts.antiSenseBases = 1 + counts.senseBases = 2 + counts.totalBases shouldBe 3 + + counts.antiSenseReads = 1 + counts.senseReads = 2 + counts.totalReads shouldBe 3 + } + + @Test + def testBamRecordBasesOverlapBlocks(): Unit = { + val read = BaseCounterTest.lineParser.parseLine("r02\t0\tchrQ\t50\t60\t4M2D4M\t*\t0\t0\tTACGTACGTA\tEEFFGGHHII\tRG:Z:001") + bamRecordBasesOverlap(read, 40, 70) shouldBe 8 + bamRecordBasesOverlap(read, 50, 59) shouldBe 8 + bamRecordBasesOverlap(read, 50, 55) shouldBe 4 + bamRecordBasesOverlap(read, 55, 60) shouldBe 4 + bamRecordBasesOverlap(read, 10, 20) shouldBe 0 + bamRecordBasesOverlap(read, 40, 49) shouldBe 0 + bamRecordBasesOverlap(read, 40, 50) shouldBe 1 + bamRecordBasesOverlap(read, 40, 51) shouldBe 2 + bamRecordBasesOverlap(read, 58, 70) shouldBe 2 + bamRecordBasesOverlap(read, 59, 70) shouldBe 1 + bamRecordBasesOverlap(read, 60, 70) shouldBe 0 + } + + @Test + def testBamRecordBasesOverlap(): Unit = { + val read = BaseCounterTest.lineParser.parseLine("r02\t0\tchrQ\t50\t60\t10M\t*\t0\t0\tTACGTACGTA\tEEFFGGHHII\tRG:Z:001") + bamRecordBasesOverlap(read, 40, 70) shouldBe 10 + bamRecordBasesOverlap(read, 50, 59) shouldBe 10 + bamRecordBasesOverlap(read, 50, 55) shouldBe 6 + bamRecordBasesOverlap(read, 55, 60) shouldBe 5 + bamRecordBasesOverlap(read, 10, 20) shouldBe 0 + bamRecordBasesOverlap(read, 40, 49) shouldBe 0 + bamRecordBasesOverlap(read, 40, 50) shouldBe 1 + bamRecordBasesOverlap(read, 40, 51) shouldBe 2 + bamRecordBasesOverlap(read, 58, 70) shouldBe 2 + bamRecordBasesOverlap(read, 59, 70) shouldBe 1 + bamRecordBasesOverlap(read, 60, 70) shouldBe 0 + + val counts = new Counts + bamRecordBasesOverlap(read, 40, 70, counts, true) + counts.senseBases shouldBe 10 + counts.antiSenseBases shouldBe 0 + counts.senseReads shouldBe 1 + counts.antiSenseReads shouldBe 0 + + bamRecordBasesOverlap(read, 50, 54, counts, false) + counts.senseBases shouldBe 10 + counts.antiSenseBases shouldBe 5 + counts.senseReads shouldBe 1 + counts.antiSenseReads shouldBe 1 + } +} + +object BaseCounterTest { + val lineParser = { + val header = new SAMFileHeader + header.addSequence(new SAMSequenceRecord("chrQ", 10000)) + header.addSequence(new SAMSequenceRecord("chrR", 10000)) + header.addReadGroup(new SAMReadGroupRecord("001")) + + new SAMLineParser(header) + } + + val genes = List() +} \ No newline at end of file