Пример #1
0
        internal static void DoOverlapping <T>(
            [NotNull] IReadOnlyDictionary <WittyerType, GenomeIntervalTree <T> > truthTrees,
            [NotNull] T queryVariant, IsAlleleMatch <T> alleleMatchFunc, bool isCrossType, bool isSimpleCounting)
            where T : class, IMutableWittyerSimpleVariant
        {
            if (!truthTrees.TryGetValue(queryVariant.VariantType, out var tree))
            {
                return; // no match at all, nothing to update
            }
            var failedReasons = new HashSet <FailedReason>();

            foreach (var overlap in tree.Search(queryVariant))
            {
                failedReasons.Clear();
                var(matchEnum, failedReason) = GenerateWhatAndWhy(queryVariant, failedReasons, overlap, alleleMatchFunc, isCrossType);

                var wow = overlap.VariantType.HasOverlappingWindows &&
                          (isSimpleCounting ||
                           matchEnum == MatchEnum.AlleleAndGenotypeMatch || matchEnum == MatchEnum.LocalAndGenotypeMatch)
                    ? overlap.TryGetOverlap(queryVariant).GetOrDefault()
                    : null;
                var borderDistance = BorderDistance.CreateFromVariant(overlap, queryVariant);
                var who            = GetNextWhoTag();

                var overlapInfo =
                    OverlapAnnotation.Create(who, matchEnum, wow, borderDistance, failedReason);

                overlap.AddToOverlapInfo(overlapInfo);
                queryVariant.AddToOverlapInfo(overlapInfo);

                uint GetNextWhoTag()
                {
                    var ret = overlap.OriginalVariant.Position;

                    while (WhoTags.Contains(ret))
                    {
                        ret++;
                    }
                    WhoTags.Add(ret);
                    return(ret);
                }
            }
        }
Пример #2
0
 /// <inheritdoc />
 public void AddToOverlapInfo(OverlapAnnotation newAnnotation) => _overlapInfo.Add(newAnnotation);