Пример #1
0
        public static ExitCodes Annotate(Stream headerStream, Stream inputVcfStream, Stream outputJsonStream,
                                         Stream outputJsonIndexStream, AnnotationResources annotationResources, IVcfFilter vcfFilter, bool ignoreEmptyChromosome = false)
        {
            var logger  = outputJsonStream is BlockGZipStream ? new ConsoleLogger() : (ILogger) new NullLogger();
            var metrics = new PerformanceMetrics(logger);

            using (annotationResources)
                using (var vcfReader = GetVcfReader(headerStream, inputVcfStream, annotationResources, vcfFilter))
                    using (var jsonWriter = new JsonWriter(outputJsonStream, outputJsonIndexStream, annotationResources, Date.CurrentTimeStamp, vcfReader.GetSampleNames(), false))
                    {
                        try
                        {
                            CheckGenomeAssembly(annotationResources, vcfReader);
                            SetMitochondrialAnnotationBehavior(annotationResources, vcfReader);

                            int       previousChromIndex = -1;
                            IPosition position;

                            while ((position = vcfReader.GetNextPosition()) != null)
                            {
                                if (ignoreEmptyChromosome && position.Chromosome.IsEmpty())
                                {
                                    continue;
                                }
                                if (previousChromIndex != position.Chromosome.Index)
                                {
                                    annotationResources.PreLoad(position.Chromosome);
                                }
                                previousChromIndex = UpdatePerformanceMetrics(previousChromIndex, position.Chromosome, metrics);

                                var annotatedPosition = position.Variants != null?annotationResources.Annotator.Annotate(position) : null;

                                string json = annotatedPosition?.GetJsonString();
                                if (json != null)
                                {
                                    jsonWriter.WriteJsonEntry(annotatedPosition.Position, json);
                                }

                                metrics.Increment();
                            }

                            jsonWriter.WriteAnnotatedGenes(annotationResources.Annotator.GetGeneAnnotations());
                        }
                        catch (Exception e)
                        {
                            e.Data[ExitCodeUtilities.VcfLine] = vcfReader.VcfLine;
                            throw;
                        }
                    }

            metrics.ShowAnnotationTime();

            return(ExitCodes.Success);
        }
Пример #2
0
        private static AnnotationResources GetAnnotationResources()
        {
            var annotationResources = new AnnotationResources(_refSequencePath, _inputCachePrefix, SupplementaryAnnotationDirectories, null, _pluginDirectory, _disableRecomposition, _forceMitochondrialAnnotation);

            if (SupplementaryAnnotationDirectories.Count == 0)
            {
                return(annotationResources);
            }

            using (var preloadVcfStream = GZipUtilities.GetAppropriateStream(
                       new PersistentStream(PersistentStreamUtils.GetReadStream(_vcfPath),
                                            ConnectUtilities.GetFileConnectFunc(_vcfPath), 0)))
            {
                annotationResources.GetVariantPositions(preloadVcfStream, null);
            }
            return(annotationResources);
        }
Пример #3
0
        private static AnnotationResources GetAnnotationResources()
        {
            if (_outputFileName == "-")
            {
                Logger.Silence();
            }
            var metrics = new PerformanceMetrics();

            var annotationResources = new AnnotationResources(_refSequencePath, _inputCachePrefix,
                                                              SupplementaryAnnotationDirectories, null, _customStrTsv,
                                                              _disableRecomposition, _forceMitochondrialAnnotation, _useLegacyVids, metrics);

            if (SupplementaryAnnotationDirectories.Count == 0)
            {
                return(annotationResources);
            }

            using (var preloadVcfStream = GZipUtilities.GetAppropriateStream(PersistentStreamUtils.GetReadStream(_vcfPath)))
            {
                annotationResources.GetVariantPositions(preloadVcfStream, null);
            }

            return(annotationResources);
        }
Пример #4
0
        public static ExitCodes Annotate(Stream headerStream, Stream inputVcfStream, Stream outputJsonStream,
                                         Stream outputJsonIndexStream, AnnotationResources annotationResources, IVcfFilter vcfFilter,
                                         bool ignoreEmptyChromosome)
        {
            var metrics = annotationResources.Metrics;

            PerformanceMetrics.ShowAnnotationHeader();

            IChromosome currentChromosome = new EmptyChromosome("dummy");
            int         numVariants       = 0;
            IMitoHeteroplasmyProvider mitoHeteroplasmyProvider = MitoHeteroplasmyReader.GetProvider();

            using (var vcfReader = GetVcfReader(headerStream, inputVcfStream, annotationResources, vcfFilter, mitoHeteroplasmyProvider))
                using (var jsonWriter = new JsonWriter(outputJsonStream, outputJsonIndexStream, annotationResources, Date.CurrentTimeStamp, vcfReader.GetSampleNames(), false))
                {
                    try
                    {
                        CheckGenomeAssembly(annotationResources, vcfReader);
                        SetMitochondrialAnnotationBehavior(annotationResources, vcfReader);

                        IPosition position;

                        while ((position = vcfReader.GetNextPosition()) != null)
                        {
                            IChromosome chromosome = position.Chromosome;
                            if (ignoreEmptyChromosome && chromosome.IsEmpty())
                            {
                                continue;
                            }

                            if (chromosome.Index != currentChromosome.Index)
                            {
                                if (!currentChromosome.IsEmpty())
                                {
                                    metrics.ShowAnnotationEntry(currentChromosome, numVariants);
                                }

                                numVariants = 0;

                                metrics.Preload.Start();
                                annotationResources.PreLoad(chromosome);
                                metrics.Preload.Stop();

                                metrics.Annotation.Start();
                                currentChromosome = chromosome;
                            }

                            var annotatedPosition = position.Variants != null?annotationResources.Annotator.Annotate(position) : null;

                            string json = annotatedPosition?.GetJsonString();
                            if (json != null)
                            {
                                jsonWriter.WritePosition(annotatedPosition.Position, json);
                            }

                            numVariants++;
                        }

                        jsonWriter.WriteGenes(annotationResources.Annotator.GetGeneAnnotations());
                    }
                    catch (Exception e)
                    {
                        e.Data[ExitCodeUtilities.VcfLine] = vcfReader.VcfLine;
                        throw;
                    }
                }

            if (!currentChromosome.IsEmpty())
            {
                metrics.ShowAnnotationEntry(currentChromosome, numVariants);
            }

            metrics.ShowSummaryTable();

            return(ExitCodes.Success);
        }