示例#1
0
 private OverlapAnnotation(uint who, MatchEnum what, [CanBeNull] IInterval <uint> wow, BorderDistance where,
                           FailedReason why)
 {
     Who   = who;
     What  = what;
     Wow   = wow;
     Where = where;
     Why   = why;
 }
        public static void WorksWithCi()
        {
            var query    = CreateWittyerVariant(QueryWithCiPos);
            var truth    = CreateWittyerVariant(TruthWithCiEnd);
            var expected = BorderDistance.CreateFromVariant(query, truth);

            MultiAssert.Equal(87U, expected.PosBorderLeft);
            MultiAssert.Equal(287U, expected.PosBorderRight);
            MultiAssert.Equal(686U, expected.EndBorderLeft);
            MultiAssert.Equal(986U, expected.EndBorderRight);
            MultiAssert.AssertAll();
        }
        public static void WorksWithBreakend()
        {
            var query = CreateWittyerBnd(QueryBnd1, QueryBnd2);
            var truth = CreateWittyerBnd(TruthBnd1, TruthBnd2);

            var expected = BorderDistance.CreateFromVariant(query, truth);

            MultiAssert.Equal(85U, expected.PosBorderLeft);
            MultiAssert.Equal(117U, expected.PosBorderRight);
            MultiAssert.Equal(72U, expected.EndBorderLeft);
            MultiAssert.Equal(28U, expected.EndBorderRight);
            MultiAssert.AssertAll();
        }
示例#4
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);
                }
            }
        }
示例#5
0
 public static OverlapAnnotation Create(uint who, MatchEnum what, [CanBeNull] IInterval <uint> wow,
                                        [NotNull] BorderDistance where, FailedReason why)
 => new OverlapAnnotation(who, what, wow, where, why);