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(); }
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); } } }
public static OverlapAnnotation Create(uint who, MatchEnum what, [CanBeNull] IInterval <uint> wow, [NotNull] BorderDistance where, FailedReason why) => new OverlapAnnotation(who, what, wow, where, why);