private static IEnumerable <AnnotationRange> GetAnnotationRanges(NirvanaConfig config, GenomeAssembly genomeAssembly) { string cachePathPrefix = LambdaUtilities.GetCachePathPrefix(genomeAssembly); IntervalForest <IGene> geneIntervalForest; IDictionary <string, IChromosome> refNameToChromosome; List <long> blockOffsets; using (var tabixStream = PersistentStreamUtils.GetReadStream(config.tabixUrl)) using (var tabixReader = new BinaryReader(new BlockGZipStream(tabixStream, CompressionMode.Decompress))) using (var referenceStream = PersistentStreamUtils.GetReadStream(LambdaUrlHelper.GetRefUrl(genomeAssembly))) using (var sequenceProvider = new ReferenceSequenceProvider(referenceStream)) using (var taProvider = new TranscriptAnnotationProvider(cachePathPrefix, sequenceProvider, null)) { long vcfSize = HttpUtilities.GetLength(config.vcfUrl); int numPartitions = Math.Max(Math.Min((int)((vcfSize - 1) / MinPartitionSize + 1), MaxNumPartitions), MinNumPartitions); var tabixIndex = Reader.Read(tabixReader, sequenceProvider.RefNameToChromosome); blockOffsets = PartitionUtilities.GetFileOffsets(config.vcfUrl, numPartitions, tabixIndex); IntervalArray <ITranscript>[] transcriptIntervalArrays = taProvider.TranscriptIntervalArrays; geneIntervalForest = GeneForestGenerator.GetGeneForest(transcriptIntervalArrays); refNameToChromosome = sequenceProvider.RefNameToChromosome; } IEnumerable <AnnotationRange> annotationRanges = PartitionUtilities.GenerateAnnotationRanges(blockOffsets, config.vcfUrl, geneIntervalForest, refNameToChromosome); return(annotationRanges); }