Example #1
0
            internal static IWittyerBnd Create([NotNull] IVcfVariant variant,
                                               IVcfVariant secondVariant, [CanBeNull] string sampleName,
                                               double percentageDistance, uint basepairDistance, IReadOnlyList <uint> bins)
            {
                var(first, second) = MiscUtils.FindBndEntriesOrder(variant, secondVariant);

                var posInterval = first.CalculateBndBorderInterval(second,
                                                                   first.ParseCi(WittyerConstants.Cipos), percentageDistance, basepairDistance);

                var endInterval = second.CalculateBndBorderInterval(first,
                                                                    second.ParseCi(WittyerConstants.Cipos), percentageDistance,
                                                                    basepairDistance);

                var svType = variant.ParseWittyerVariantType(sampleName);
                var winner = GetWinner();

                var overlapInfo = new List <OverlapAnnotation>();

                var sample = WittyerSample.CreateOverall(variant, sampleName, false);

                return(Create(first, posInterval, winner, endInterval, overlapInfo, sample, second, svType));

                Winner GetWinner()
                {
                    if (svType == WittyerVariantType.TranslocationBreakend)
                    {
                        return(Winner.Create(svType));
                    }
                    if (svType != WittyerVariantType.Insertion)
                    {
                        return(Winner.Create(svType, BedInterval.Create(first.Position, second.Position + 1), bins));
                    }

                    uint?end = null;

                    // insertion, try sequences first
                    if (variant.IsSimpleSequence(out var length))
                    {
                        end = length;
                    }

                    // try svlength, but if not, assume unknown length.
                    else if (variant.TryGetSvLength(out length) == null)
                    {
                        end = length;
                    }

                    return(Winner.Create(svType, end == null ? null : BedInterval.Create(variant.Position, variant.Position + end.Value), bins));
                }
            }