private static GenomeIntervalTree <IContigAndInterval> CreateGenomeIntervalTree( [NotNull] IEnumerable <IContigAndInterval> contigIntervals) { var dictionary = new Dictionary <IContigInfo, MergedIntervalTree <uint> >(); var listOrder = new List <IContigInfo>(); foreach (var contigInterval in contigIntervals) { var contig = contigInterval.Contig; if (!dictionary.TryGetValue(contig, out var tree)) { tree = MergedIntervalTree <uint> .Create(null); listOrder.Add(contig); dictionary.Add(contig, tree); } tree.Add(contigInterval); } var ret = GenomeIntervalTree <IContigAndInterval> .Create(); foreach (var contig in listOrder) { ret.AddRange(dictionary[contig] .Select(i => i as IContigAndInterval ?? ContigAndInterval.Create(contig, i.Start, i.Stop))); var other = contig.ToUcscStyle(); if (other.Name == contig.Name) { other = contig.ToGrchStyle(); } if (other.Name != contig.Name) { ret.AddRange(dictionary[contig] .Select(i => ContigAndInterval.Create(other, i.Start, i.Stop))); } } return(ret); }
internal void AddVariantToTrees(IWittyerSimpleVariant variant) { var tree = _trees.GetOrAdd(variant.VariantType, GenomeIntervalTree <IWittyerSimpleVariant> .Create()); tree.Add(variant); }