internal static WittyerVariantType ParseWittyerVariantType([NotNull] this IVcfVariant variant,
                                                                   [CanBeNull] string sampleName)
        {
            if (variant.IsRefCall(sampleName))
            {
                return(WittyerVariantType.CopyNumberReference);
            }

            //anything NOT a refcall requires SVTYPE INFO key
            if (!variant.Info.TryGetValue(VcfConstants.SvTypeKey, out var svTypeStr))
            {
                throw new InvalidDataException(
                          $"Following variant does not have {VcfConstants.SvTypeKey} info key:\n{variant}");
            }

            if (TryParseEnumOrDescription(svTypeStr, out WittyerVariantType svType))
            {
                if (variant.Samples.Count > 0 &&
                    variant.Samples[0].SampleDictionary.ContainsKey(VcfConstants.CnSampleFieldKey) &&
                    WittyerConstants.BaseLevelStatsTypes.Contains(svType))
                {
                    return(WittyerVariantType.Cnv);
                }
                return(svType);
            }

            if (!TryParseEnumOrDescription(svTypeStr, out SvType type) ||
                !type.Equals(SvType.TranslocationBreakend))
            {
                throw new InvalidDataException($"Cannot recognize {svTypeStr}");
            }

            var bnd = variant as IGeneralBnd ?? GeneralBnd.Create(variant);

            return(!bnd.Contig.Equals(bnd.Mate.Contig)
                ? WittyerVariantType.TranslocationBreakend
                : WittyerVariantType.IntraChromosomeBreakend);
        }