/// <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);
        }
Beispiel #2
0
        /// <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);
        }