Пример #1
0
        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);
        }
Пример #2
0
        internal void AddVariantToTrees(IWittyerSimpleVariant variant)
        {
            var tree = _trees.GetOrAdd(variant.VariantType, GenomeIntervalTree <IWittyerSimpleVariant> .Create());

            tree.Add(variant);
        }