/// <inheritdoc /> public void Finalize(WitDecision falseDecision, EvaluationMode mode, GenomeIntervalTree <IContigAndInterval> includedRegions) { bool?isIncluded = null; if (includedRegions != null) { isIncluded = includedRegions.TryGetValue(OriginalVariant.Contig, out var tree) && tree.Search(CiPosInterval).Any() && // or there's overlap in bed regions (ReferenceEquals(OriginalVariant, EndOriginalVariant) || Equals(OriginalVariant.Contig, EndOriginalVariant.Contig) || includedRegions.TryGetValue(EndOriginalVariant.Contig, out tree) && tree.Search(CiEndInterval).Any()); // or end overlaps. } WittyerVariantInternal.Finalize(this, _overlapInfo, falseDecision, mode, isIncluded); }
/// <inheritdoc /> public void Finalize(WitDecision falseDecision, EvaluationMode mode, GenomeIntervalTree <IContigAndInterval> includedRegions) { bool?isIncluded = null; if (includedRegions != null) { isIncluded = false; if (includedRegions.TryGetValue(Contig, out var tree)) { var startPosition = CiPosInterval.Stop - 1; var endPosition = CiEndInterval.Start; if (startPosition >= endPosition) { // means cipos or ciend goes past each other // so any overlap with Start to Stop should mean included. isIncluded = tree.Search(this).Any(); } else { // ReSharper disable once LoopCanBeConvertedToQuery // prevent closure allocation foreach (var overlap in tree.Search(startPosition)) { if (!overlap.Contains(endPosition)) { continue; } isIncluded = true; break; } } } } Finalize(this, _overlapInfo, falseDecision, mode, isIncluded); }