Example #1
0
        internal static bool IsSimpleSequence([NotNull] this IVcfVariant variant, out uint absoluteDiff,
                                              out bool sharedFirstBase, out bool sharedLastBase, bool isTrimmed)
        {
            absoluteDiff    = default;
            sharedFirstBase = false;
            sharedLastBase  = false;
            if (variant.Alts.Count == 0)
            {
                return(false);
            }
            if (variant.IsAltSimpleSequence(0))
            {
                absoluteDiff    = (uint)Math.Max(variant.Ref.Length, variant.Alts[0].Length);
                sharedFirstBase = variant.Ref[0].Letter == variant.Alts[0][0];
                sharedLastBase  = variant.Ref.Last().Letter == variant.Alts[0].Last();
                if (isTrimmed && sharedFirstBase && sharedLastBase && (variant.Ref.Length == 1 || variant.Alts[0].Length == 1))
                {
                    sharedLastBase = false; // corner case like chr1 1 A AA would be true for both.
                }
                if (isTrimmed && sharedFirstBase && sharedLastBase)
                {
                    throw new InvalidDataException(
                              "Somehow we got a variant that after trimming, shares first and last base: " + variant);
                }

                if (sharedFirstBase || sharedLastBase)
                {
                    absoluteDiff--;
                }
                return(true);
            }

            // always assume the first base is shared in symbolic alleles.
            sharedFirstBase = true;
            // and last base never shared.
            sharedLastBase = false;
            absoluteDiff   = default;
            return(false);
        }
 internal static IInterval <uint> GetInsertionInterval([NotNull] IVcfVariant first)
 => first.IsAltSimpleSequence(0)
         ? first.ToBedInterval(false, out _, out _)
         : first.TryGetSvLength(out var svLen) != null