Example #1
0
 public VariantCaller(CopyNumberLikelihoodCalculator copyNumberLikelihoodCalculator, PedigreeCallerParameters callerParameters, int qualityFilterThreshold)
 {
     _copyNumberLikelihoodCalculator = copyNumberLikelihoodCalculator;
     _callerParameters       = callerParameters;
     _qualityFilterThreshold = qualityFilterThreshold;
     _genotypes = GenerateGenotypeCombinations(callerParameters.MaximumCopyNumber);
 }
Example #2
0
 public CanvasPedigreeCaller(ILogger logger, int qualityFilterThreshold, int deNovoQualityFilterThreshold,
                             PedigreeCallerParameters callerParameters, CopyNumberLikelihoodCalculator copyNumberLikelihoodCalculator,
                             IVariantCaller variantCaller, ICoverageBigWigWriter coverageBigWigWriter,
                             ICopyNumberModelFactory copyNumberModelFactory, ICopyNumberBedGraphWriter copyNumberBedGraphWriter,
                             CoverageBedGraphWriter partitionCoverageBedGraphWriter)
 {
     _logger = logger;
     _qualityFilterThreshold         = qualityFilterThreshold;
     _deNovoQualityFilterThreshold   = deNovoQualityFilterThreshold;
     _callerParameters               = callerParameters;
     _copyNumberLikelihoodCalculator = copyNumberLikelihoodCalculator;
     _variantCaller                   = variantCaller;
     _coverageBigWigWriter            = coverageBigWigWriter;
     _copyNumberModelFactory          = copyNumberModelFactory;
     _copyNumberBedGraphWriter        = copyNumberBedGraphWriter;
     _partitionCoverageBedGraphWriter = partitionCoverageBedGraphWriter;
 }
Example #3
0
        private static int Run(string[] args)
        {
            Utilities.LogCommandLine(args);
            string outDir                 = null;
            var    segmentFiles           = new List <string>();
            var    variantFrequencyFiles  = new List <string>();
            var    sampleTypesString      = new List <string>();
            string ploidyBedPath          = null;
            string referenceFolder        = null;
            var    sampleNames            = new List <string>();
            bool   needHelp               = false;
            int?   qScoreThresholdOption  = null;
            int?   dqScoreThresholdOption = null;
            string commonCnvsBedPath      = null;
            string parameterconfigPath    = Path.Combine(Isas.Framework.Utilities.Utilities.GetAssemblyFolder(typeof(Program)), "PedigreeCallerParameters.json");

            var p = new OptionSet()
            {
                { "i|infile=", "file containing bins, their counts, and assigned segments (obtained from CanvasPartition.exe)", v => segmentFiles.Add(v) },
                { "v|varfile=", "file containing variant frequencies (obtained from CanvasSNV.exe)", v => variantFrequencyFiles.Add(v) },
                { "t|sampleType=", "sample types", v => sampleTypesString.Add(v) },
                { "o|outdir=", "name of output directory", v => outDir = v },
                { "r|reference=", "reference genome folder that contains GenomeSize.xml", v => referenceFolder = v },
                { "n|sampleName=", "sample name for output VCF header (optional)", v => sampleNames.Add(v) },
                { "p|ploidyBed=", "bed file specifying reference ploidy (e.g. for sex chromosomes) (optional)", v => ploidyBedPath = v },
                { "h|help", "show this message and exit", v => needHelp = v != null },
                { "q|qscore=", $"quality filter threshold (default {CanvasPedigreeCaller.DefaultQualityFilterThreshold})", v => qScoreThresholdOption = int.Parse(v) },
                { "commoncnvs=", "bed file with common CNVs (always include these intervals into segmentation results)", v => commonCnvsBedPath = v },
                { "d|dqscore=", $"de novo quality filter threshold (default {CanvasPedigreeCaller.DefaultDeNovoQualityFilterThreshold})", v => dqScoreThresholdOption = int.Parse(v) },
                { "c|config=", $"parameter configuration path (default {parameterconfigPath})", v => parameterconfigPath = v }
            };

            var extraArgs = p.Parse(args);

            if (extraArgs.Count > 0)
            {
                Console.WriteLine("* Error: I don't understand the argument '{0}'", extraArgs[0]);
                needHelp = true;
            }

            if (needHelp)
            {
                ShowHelp(p);
                return(0);
            }

            if (!segmentFiles.Any() || !variantFrequencyFiles.Any() || string.IsNullOrEmpty(referenceFolder) || string.IsNullOrEmpty(outDir))
            {
                ShowHelp(p);
                return(0);
            }

            foreach (string segmentFile in segmentFiles)
            {
                if (File.Exists(segmentFile))
                {
                    continue;
                }
                Console.WriteLine($"CanvasPedigreeCaller.exe: File {segmentFile} does not exist! Exiting.");
                return(1);
            }

            foreach (string variantFrequencyFile in variantFrequencyFiles)
            {
                if (File.Exists(variantFrequencyFile))
                {
                    continue;
                }
                Console.WriteLine($"CanvasPedigreeCaller.exe: File {variantFrequencyFile} does not exist! Exiting.");
                return(1);
            }

            var sampleTypesEnum = sampleTypesString.Select(GetSampleType).ToList();

            if (!File.Exists(Path.Combine(referenceFolder, "GenomeSize.xml")))
            {
                Console.WriteLine($"CanvasPedigreeCaller.exe: File {Path.Combine(referenceFolder, "GenomeSize.xml")} does not exist! Exiting.");
                return(1);
            }

            if (!File.Exists(parameterconfigPath))
            {
                Console.WriteLine($"CanvasPedigreeCaller.exe: File {parameterconfigPath} does not exist! Exiting.");
                return(1);
            }

            if (commonCnvsBedPath != null)
            {
                if (!File.Exists(commonCnvsBedPath))
                {
                    Console.WriteLine($"CanvasPedigreeCaller.exe: File {commonCnvsBedPath} does not exist! Exiting.");
                    return(1);
                }
            }

            var parameterconfigFile = new FileLocation(parameterconfigPath);
            var callerParameters    = Deserialize <PedigreeCallerParameters>(parameterconfigFile);

            int qScoreThreshold = CanvasPedigreeCaller.DefaultQualityFilterThreshold;

            if (qScoreThresholdOption != null)
            {
                qScoreThreshold = qScoreThresholdOption.Value;
                Console.WriteLine($"CanvasPedigreeCaller.exe: Using user-supplied quality score threshold {qScoreThresholdOption}.");
            }
            if (qScoreThreshold < 0 || qScoreThreshold >= callerParameters.MaxQscore)
            {
                throw new IlluminaException($"Quality score threshold must be >= 0 and < {callerParameters.MaxQscore}");
            }

            int dqScoreThreshold = CanvasPedigreeCaller.DefaultDeNovoQualityFilterThreshold;

            if (dqScoreThresholdOption != null)
            {
                dqScoreThreshold = dqScoreThresholdOption.Value;
                Console.WriteLine($"CanvasPedigreeCaller.exe: Using user-supplied de novo quality score threshold {qScoreThresholdOption}.");
            }
            if (dqScoreThreshold < 0 || dqScoreThreshold >= callerParameters.MaxQscore)
            {
                throw new IlluminaException($"De novo quality score threshold must be >= 0 and < {callerParameters.MaxQscore}");
            }

            var logger                      = new Logger(new[] { Console.Out }, new[] { Console.Error });
            var settings                    = IsasConfigurationSettings.GetConfigSettings();
            var outputDirectory             = new DirectoryLocation(outDir);
            var workerDirectory             = new DirectoryLocation(Isas.Framework.Utilities.Utilities.GetAssemblyFolder(typeof(CanvasPedigreeCaller)));
            var commandManager              = new CommandManager(new ExecutableProcessor(settings, logger, workerDirectory));
            var result                      = -1;
            var pedigreeCallerWorkDirectory = outputDirectory.GetDirectoryLocation("CanvasPedigreeCaller");

            WorkDoerFactory.RunWithWorkDoer(logger, settings, pedigreeCallerWorkDirectory, workDoer =>
            {
                var copyNumberLikelihoodCalculator = new CopyNumberLikelihoodCalculator(callerParameters.MaximumCopyNumber);
                var variantCaller = callerParameters.DefaultCaller == CallerType.VariantCaller ?
                                    (IVariantCaller) new VariantCaller(copyNumberLikelihoodCalculator, callerParameters, qScoreThreshold) :
                                    new HaplotypeVariantCaller(copyNumberLikelihoodCalculator, callerParameters, qScoreThreshold);

                var copyNumberModelFactory = new HaplotypeCopyNumberModelFactory();
                var referenceGenome        = new ReferenceGenomeFactory().GetReferenceGenome(new DirectoryLocation(referenceFolder));
                var genomeMetadata         = referenceGenome.GenomeMetadata;

                var coverageBigWigWriterFactory =
                    new CoverageVisualizationWriterFactory(logger, workDoer, commandManager, genomeMetadata);
                var roundingBedGraphWriter        = new RoundingBedGraphWriter(new BedGraphWriterFacade(), 4);
                var coverageBigWigWriter          = coverageBigWigWriterFactory.CreateBinCoverageBigWigWriter(roundingBedGraphWriter);
                var segmentCoverageBedGraphWriter = coverageBigWigWriterFactory.CreateSegmentBedGraphWriter(roundingBedGraphWriter);

                var tabixWrapper             = TabixWrapperFactory.GetTabixWrapper(logger, workDoer, commandManager);
                var bgzfBedGraphWriter       = new BgzfBedGraphWriter(new BedGraphWriterFacade(), tabixWrapper);
                var copyNumberBedGraphWriter = new CopyNumberBedGraphWriter(bgzfBedGraphWriter, new CopyNumberBedGraphCalculator());

                var caller = new CanvasPedigreeCaller(logger, qScoreThreshold, dqScoreThreshold, callerParameters, copyNumberLikelihoodCalculator, variantCaller, coverageBigWigWriter, copyNumberModelFactory, copyNumberBedGraphWriter, segmentCoverageBedGraphWriter);

                var outVcf = outputDirectory.GetFileLocation("CNV.vcf.gz");
                result     = caller.CallVariants(variantFrequencyFiles, segmentFiles, outVcf, ploidyBedPath, referenceFolder, sampleNames, commonCnvsBedPath, sampleTypesEnum);
            });
            return(result);
        }