示例#1
0
        public static IIntervalForest <ISupplementaryInterval> CreateIntervalArray(
            IEnumerable <ISupplementaryInterval> intervals, IChromosomeRenamer renamer)
        {
            if (intervals == null)
            {
                return(new NullIntervalSearch <ISupplementaryInterval>());
            }

            var numRefSeqs = renamer.NumRefSeqs;

            var intervalLists = new List <IntervalArray <ISupplementaryInterval> .Interval> [numRefSeqs];

            for (var i = 0; i < numRefSeqs; i++)
            {
                intervalLists[i] = new List <IntervalArray <ISupplementaryInterval> .Interval>();
            }

            foreach (var interval in intervals)
            {
                ushort index = renamer.GetReferenceIndex(interval.ReferenceName);
                if (index == ChromosomeRenamer.UnknownReferenceIndex)
                {
                    continue;
                }

                intervalLists[index].Add(new IntervalArray <ISupplementaryInterval> .Interval(interval.Start, interval.End, interval));
            }

            // create the interval arrays
            var refIntervalArrays = new IntervalArray <ISupplementaryInterval> [numRefSeqs];

            for (var i = 0; i < numRefSeqs; i++)
            {
                var sortedIntervals = intervalLists[i].OrderBy(x => x.Begin).ThenBy(x => x.End).ToArray();
                refIntervalArrays[i] = new IntervalArray <ISupplementaryInterval>(sortedIntervals);
            }

            return(new IntervalForest <ISupplementaryInterval>(refIntervalArrays));
        }
示例#2
0
        public static IIntervalForest <T> CreateIntervalForest <T>(T[] refIntervals, int numRefSeqs)
            where T : ReferenceAnnotationInterval
        {
            if (refIntervals == null)
            {
                return(new NullIntervalSearch <T>());
            }

            //Array.Sort(refIntervals);
            var intervalLists = new List <IntervalArray <T> .Interval> [numRefSeqs];

            for (var i = 0; i < numRefSeqs; i++)
            {
                intervalLists[i] = new List <IntervalArray <T> .Interval>();
            }

            foreach (var transcript in refIntervals)
            {
                //debugging to see if both ensembl and refseq transcripts come up

                //var Transcript = transcript as Transcript;
                //if (Transcript?.TranscriptSource == TranscriptDataSource.RefSeq)
                //	Console.WriteLine("found refseq transcript");

                intervalLists[transcript.ReferenceIndex].Add(
                    new IntervalArray <T> .Interval(transcript.Start, transcript.End, transcript));
            }

            // create the interval arrays
            var refIntervalArrays = new IntervalArray <T> [numRefSeqs];

            for (var i = 0; i < numRefSeqs; i++)
            {
                refIntervalArrays[i] = new IntervalArray <T>(intervalLists[i].ToArray());
            }

            return(new IntervalForest <T>(refIntervalArrays));
        }