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); }