diff --git a/src/main/scala/org/biodatageeks/sequila/pileup/model/ContigAggregate.scala b/src/main/scala/org/biodatageeks/sequila/pileup/model/ContigAggregate.scala index db9c2ba0..7d8cf202 100644 --- a/src/main/scala/org/biodatageeks/sequila/pileup/model/ContigAggregate.scala +++ b/src/main/scala/org/biodatageeks/sequila/pileup/model/ContigAggregate.scala @@ -31,7 +31,7 @@ case class ContigAggregate( qualityCache: QualityCache ) { - private val altsKeyCache = mutable.TreeSet.empty[Int] + val altsKeyCache = mutable.TreeSet.empty[Int] def hasAltOnPosition(pos:Int):Boolean = alts.contains(pos) def getRange: broadcast.Range = broadcast.Range(contig, startPosition, maxPosition) diff --git a/src/main/scala/org/biodatageeks/sequila/pileup/model/Read.scala b/src/main/scala/org/biodatageeks/sequila/pileup/model/Read.scala index 535f787e..44fd70b5 100644 --- a/src/main/scala/org/biodatageeks/sequila/pileup/model/Read.scala +++ b/src/main/scala/org/biodatageeks/sequila/pileup/model/Read.scala @@ -6,6 +6,7 @@ import org.biodatageeks.sequila.pileup.MDTagParser import org.biodatageeks.sequila.pileup.conf.{Conf, QualityConstants} import org.biodatageeks.sequila.pileup.timers.PileupTimers.{AnalyzeReadsCalculateAltsParseMDTimer, AnalyzeReadsCalculateAltsTimer, AnalyzeReadsCalculateEventsTimer} import org.biodatageeks.sequila.pileup.timers.PileupTimers._ +import org.biodatageeks.sequila.pileup.model.Quals._ import scala.collection.mutable @@ -35,7 +36,7 @@ case class ExtendedReads(r:SAMRecord) { val cigarConf = CigarDerivedConf.create(start, cigar) val readQualSummary = ReadQualSummary(start, r.getEnd, r.getBaseQualities, cigarConf) ReadQualSummaryFillExisitingQualTimer.time { fillBaseQualitiesForExistingAlts(agg, foundAlts, readQualSummary) } - agg.addToCache(readQualSummary) + agg.qualityCache.addOrReplace(readQualSummary) } } } @@ -117,8 +118,8 @@ case class ExtendedReads(r:SAMRecord) { position += 1 val indexInSeq = calculatePositionInReadSeq(position - read.getStart -delCounter) - val altBase = getAltBaseFromSequence(indexInSeq) - val altBaseQual = getAltBaseQualFromSequence(indexInSeq) + val altBase = this.r.getReadString.charAt(indexInSeq-1) + val altBaseQual = this.r.getBaseQualities()(indexInSeq-1) val altPosition = position - clipLen - 1 val newAlt = !aggregate.hasAltOnPosition(altPosition) aggregate.updateAlts(altPosition, altBase) @@ -142,14 +143,15 @@ case class ExtendedReads(r:SAMRecord) { //~100s def fillBaseQualitiesForExistingAlts(agg: ContigAggregate, blackList:scala.collection.Set[Int], readQualSummary: ReadQualSummary): Unit = { - val altsPositions = agg.getAltPositionsForRange(r.getStart, r.getEnd) //~1s + //val altsPositions = agg.getAltPositionsForRange(r.getStart, r.getEnd) //~1s + val altsPositions = agg.altsKeyCache.range(r.getStart,r.getEnd+1) val positionsToFill = altsPositions diff blackList //~1s for (pos <- positionsToFill.iterator) { //~10s empty loop if(!readQualSummary.cigarDerivedConf.hasDel || !readQualSummary.hasDeletionOnPosition(pos) ) { val relativePos = if(!readQualSummary.cigarDerivedConf.hasIndel && !readQualSummary.cigarDerivedConf.hasClip ) pos - readQualSummary.start else readQualSummary.relativePosition(pos) val qual = readQualSummary.qualsArray(relativePos) - agg.updateQuals(pos, QualityConstants.REF_SYMBOL, qual, false) + agg.quals.updateQuals(pos, QualityConstants.REF_SYMBOL,qual, false, true) } } }