diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/RegionAfCount.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/RegionAfCount.scala index 8ba1caabd0328e0dc9dce8afe2599b2c69cdc15e..81e9283e0dc0c753f664bf07cf257b9038751b13 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/RegionAfCount.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/RegionAfCount.scala @@ -68,7 +68,7 @@ object RegionAfCount extends ToolCommand { logger.info(s"Combine ${bedRecords.allRecords.size} bed records") - val combinedBedRecords = BedRecordList.combineOverlap(bedRecords) + val combinedBedRecords = bedRecords.combineOverlap logger.info(s"${combinedBedRecords.allRecords.size} left") diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/SquishBed.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/SquishBed.scala index 7a424f510df541b523993ab51a2102cacc90d40e..16e518429f827b60db36e3d4db5fab72efeeec2a 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/SquishBed.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/tools/SquishBed.scala @@ -39,14 +39,14 @@ object SquishBed extends ToolCommand { val records = BedRecordList.fromFile(cmdArgs.input) val length = records.length - val refLength = BedRecordList.combineOverlap(records).length + val refLength = records.combineOverlap.length logger.info(s"Total bases: $length") logger.info(s"Total bases on reference: $refLength") logger.info("Start squishing") val squishBed = records.squishBed(cmdArgs.strandSensitive).sort logger.info("Done squishing") val squishLength = squishBed.length - val squishRefLength = BedRecordList.combineOverlap(squishBed).length + val squishRefLength = squishBed.combineOverlap.length logger.info(s"Total bases left: $squishLength") logger.info(s"Total bases left on reference: $squishRefLength") logger.info(s"Total bases removed from ref: ${refLength - squishRefLength}") diff --git a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/utils/intervals/BedRecordList.scala b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/utils/intervals/BedRecordList.scala index 029356e5f5ed5fb4b0b95f73a9e39cd8d805330e..351ab6b08b99d3ebeb98a0c1f836fa1475915f3d 100644 --- a/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/utils/intervals/BedRecordList.scala +++ b/public/biopet-framework/src/main/scala/nl/lumc/sasc/biopet/utils/intervals/BedRecordList.scala @@ -50,6 +50,24 @@ class BedRecordList(val chrRecords: Map[String, List[BedRecord]], header: List[S }).flatten } + def combineOverlap: BedRecordList = { + new BedRecordList(for ((chr, records) <- sort.chrRecords) yield chr -> { + def combineOverlap(records: List[BedRecord], + newRecords: ListBuffer[BedRecord] = ListBuffer()): List[BedRecord] = { + if (records.nonEmpty) { + val chr = records.head.chr + val start = records.head.start + val overlapRecords = records.takeWhile(_.start <= records.head.end) + val end = overlapRecords.map(_.end).max + + newRecords += BedRecord(chr, start, end, _originals = overlapRecords) + combineOverlap(records.drop(overlapRecords.length), newRecords) + } else newRecords.toList + } + combineOverlap(records) + }) + } + def writeToFile(file: File): Unit = { val writer = new PrintWriter(file) allRecords.foreach(writer.println) @@ -91,22 +109,4 @@ object BedRecordList { throw e } } - - def combineOverlap(list: BedRecordList): BedRecordList = { - new BedRecordList(for ((chr, records) <- list.sort.chrRecords) yield chr -> { - def combineOverlap(records: List[BedRecord], - newRecords: ListBuffer[BedRecord] = ListBuffer()): List[BedRecord] = { - if (records.nonEmpty) { - val chr = records.head.chr - val start = records.head.start - val overlapRecords = records.takeWhile(_.start <= records.head.end) - val end = overlapRecords.map(_.end).max - - newRecords += BedRecord(chr, start, end, _originals = overlapRecords) - combineOverlap(records.drop(overlapRecords.length), newRecords) - } else newRecords.toList - } - combineOverlap(records) - }) - } } \ No newline at end of file