public void PopulateBAMPaths() { var BAMFolder = TestPaths.SharedBamDirectory; //Happy Path var options_1 = new PiscesApplicationOptions() { BAMPaths = BamProcessorParsingUtils.UpdateBamPathsWithBamsFromFolder(BAMFolder), GenomePaths = new[] { _existingGenome }, IntervalPaths = new[] { _existingInterval } }; Assert.NotNull(options_1.BAMPaths); Assert.True(options_1.BAMPaths.Length > 0); //no bam files found var options_3 = new PiscesApplicationOptions() { GenomePaths = new[] { _existingGenome }, }; var parser = new PiscesOptionsParser() { Options = options_3 }; Assert.Null(options_3.BAMPaths); Assert.Throws <ArgumentException>(() => parser.ValidateAndSetDerivedValues()); }
public void ReadGenome() { Directory.CreateDirectory(_outputFolder); var options_1 = new HygeaOptions() { BAMPaths = BamProcessorParsingUtils.UpdateBamPathsWithBamsFromFolder(_existingBamFolder), GenomePaths = new[] { _existingGenome }, OutputDirectory = _outputFolder }; var factory = new Factory(options_1); Assert.Equal(factory.GetOutputFile(_existingBamPath), _outputFilePath); // Run the genome processor using the filter for chr19, it will run through the IndelRealigner path as usual. var genome = new Genome(_existingGenome, new List <string>() { "chr19" }); var gp1 = new GenomeProcessor(factory, genome, "chr19"); gp1.Execute(1); var outputFilePath = Path.Combine(_outputFolder, Path.GetFileName(_existingBamPath)); Assert.True(File.Exists(outputFilePath)); Assert.NotEqual(new FileInfo(outputFilePath).Length, new FileInfo(_existingBamPath).Length); File.Delete(outputFilePath); // Run the genome processor using the filter for chr18 to follow the path in GenomeProcessor.Process // for chromosomes outside the filter. var gp2 = new GenomeProcessor(factory, genome, "chr18"); gp2.Execute(1); Assert.True(File.Exists(outputFilePath)); Assert.NotEqual(new FileInfo(outputFilePath).Length, new FileInfo(_existingBamPath).Length); }
public void Validate() { // --------------------- // verify default should be valid // --------------------- var option = GetBasicOptions(); var parser = new PiscesOptionsParser() { Options = option }; parser.ValidateAndSetDerivedValues(); // --------------------- // verify log folder // --------------------- Assert.Equal(Path.Combine(TestPaths.SharedBamDirectory, "PiscesLogs"), option.LogFolder); // --------------------------------------------------- // BAMPath(s) should be specified. // --------------------------------------------------- ExecuteValidationTest((o) => { o.BAMPaths = new[] { _existingBamPath }; }, true); ExecuteValidationTest((o) => { o.BAMPaths = new[] { "bampath1.bam" }; }, false); ExecuteValidationTest((o) => { o.BAMPaths = null; }, false); // --------------------------------------------------- // BAMFolder // Folder should exist (given as the first string in BAMPaths) // 1 Genome Path should be specified when BAMFolder is specified. // Atmost 1 Interval Path should be specified when BAMFolder is specified. // Threading by chromosome is not supported when BAMFolder is specified. // --------------------------------------------------- ExecuteValidationTest(o => { o.BAMPaths = new string[] { @"C:\NonexistantBAMFolder" }; o.GenomePaths = new[] { _existingGenome }; }, false); ExecuteValidationTest(o => { o.BAMPaths = new string[] { TestPaths.SharedBamDirectory }; o.GenomePaths = new[] { "folder1", "folder2" }; }, false); ExecuteValidationTest(o => { o.BAMPaths = new string[] { TestPaths.SharedBamDirectory }; o.GenomePaths = new[] { _existingGenome }; o.IntervalPaths = new[] { "file1.intervals", "file2.intervals" }; }, false); ExecuteValidationTest(o => { o.BAMPaths = BamProcessorParsingUtils.UpdateBamPathsWithBamsFromFolder(TestPaths.SharedBamDirectory); o.GenomePaths = new[] { _existingGenome }; o.IntervalPaths = new[] { _existingInterval }; }, true); // --------------------- // BAM Paths // Duplicate BAMPaths detected. // BAM Path does not exist. // --------------------- ExecuteValidationTest((o) => { o.BAMPaths = new string[0]; }, false); ExecuteValidationTest((o) => { o.BAMPaths = new[] { _existingBamPath, _existingBamPath }; }, false); ExecuteValidationTest((o) => { o.BAMPaths = new[] { "nonexistant.bam" }; }, false); // genome paths ExecuteValidationTest((o) => { o.GenomePaths = null; }, false); ExecuteValidationTest((o) => { o.GenomePaths = new string[0]; }, false); ExecuteValidationTest((o) => { o.GenomePaths = new[] { _existingGenome, _existingGenome }; }, false); ExecuteValidationTest((o) => { o.GenomePaths = new[] { "nonexistant" }; }, false); ExecuteValidationTest((o) => { o.BAMPaths = new[] { _existingBamPath, _existingBamPath2 }; o.GenomePaths = new[] { _existingGenome, _existingGenome }; }, true); // dup genomes ok // intervals ExecuteValidationTest((o) => { o.IntervalPaths = new[] { _existingInterval, _existingInterval }; }, false); ExecuteValidationTest((o) => { o.IntervalPaths = new[] { "nonexistant.picard" }; }, false); ExecuteValidationTest((o) => { o.BAMPaths = new[] { _existingBamPath, _existingBamPath2 }; o.IntervalPaths = new[] { _existingInterval, _existingInterval }; }, true); // dup intervals ok ExecuteValidationTest((o) => { o.BAMPaths = new[] { _existingBamPath, _existingBamPath2 }; o.IntervalPaths = new[] { _existingInterval, _existingInterval, _existingInterval }; }, false); // --------------------- // verify parameters // --------------------- ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumVariantQScore = 0; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumVariantQScore = 100; o.VariantCallingParameters.MinimumVariantQScoreFilter = 100; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumVariantQScore = -1; }, false); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumVariantQScore = 101; }, false); ExecuteValidationTest((o) => { o.VariantCallingParameters.MaximumVariantQScore = 0; o.VariantCallingParameters.MinimumVariantQScore = 0; o.VariantCallingParameters.MinimumVariantQScoreFilter = 0; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.MaximumVariantQScore = 100; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.MaximumVariantQScore = -1; }, false); ExecuteValidationTest((o) => { o.VariantCallingParameters.MaximumVariantQScore = 101; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumVariantQScore = 50; o.VariantCallingParameters.MaximumVariantQScore = 49; }, false); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumVariantQScore = 50; o.VariantCallingParameters.MaximumVariantQScore = 50; o.VariantCallingParameters.MinimumVariantQScoreFilter = 50; }, true); ExecuteValidationTest((o) => { o.BamFilterParameters.MinimumBaseCallQuality = 0; }, true); ExecuteValidationTest((o) => { o.BamFilterParameters.MinimumBaseCallQuality = -1; }, false); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumFrequency = 0f; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumFrequency = 1f; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumFrequency = -0.99f; }, false); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumFrequency = 1.01f; }, false); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumVariantQScoreFilter = o.VariantCallingParameters.MinimumVariantQScore; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumVariantQScoreFilter = o.VariantCallingParameters.MaximumVariantQScore; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumVariantQScoreFilter = o.VariantCallingParameters.MinimumVariantQScore - 1; }, false); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumVariantQScoreFilter = o.VariantCallingParameters.MaximumVariantQScore + 1; }, false); ExecuteValidationTest((o) => { o.VariantCallingParameters.ForcedNoiseLevel = 0; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.ForcedNoiseLevel = -50; }, false); ExecuteValidationTest((o) => { o.MaxSizeMNV = 0; }, true); // ok if not calling mnv ExecuteValidationTest((o) => { o.MaxGapBetweenMNV = -1; }, true); // ok if not calling mnv ExecuteValidationTest((o) => { o.OutputDirectory = TestPaths.LocalTestDataDirectory; }, true); // True for valid path ExecuteValidationTest((o) => { o.CallMNVs = true; o.MaxSizeMNV = 1; }, true); ExecuteValidationTest((o) => { o.CallMNVs = true; o.MaxSizeMNV = 0; }, false); ExecuteValidationTest((o) => { o.CallMNVs = true; o.MaxSizeMNV = GlobalConstants.RegionSize; }, true); ExecuteValidationTest((o) => { o.CallMNVs = true; o.MaxSizeMNV = GlobalConstants.RegionSize + 1; }, false); ExecuteValidationTest((o) => { o.CallMNVs = true; o.MaxGapBetweenMNV = 0; }, true); ExecuteValidationTest((o) => { o.CallMNVs = true; o.MaxGapBetweenMNV = -1; }, false); ExecuteValidationTest((o) => { o.BamFilterParameters.MinimumMapQuality = 0; }, true); ExecuteValidationTest((o) => { o.BamFilterParameters.MinimumMapQuality = -1; }, false); ExecuteValidationTest((o) => { o.VariantCallingParameters.StrandBiasAcceptanceCriteria = 0f; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.StrandBiasAcceptanceCriteria = -0.01f; }, false); ExecuteValidationTest((o) => { o.MaxNumThreads = 1; }, true); ExecuteValidationTest((o) => { o.MaxNumThreads = 0; }, false); //FilteredVariantFrequency Scenarios ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumFrequencyFilter = 0; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumFrequencyFilter = 1f; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumFrequencyFilter = -1; o.VariantCallingParameters.MinimumFrequency = -1; }, false); ExecuteValidationTest((o) => { o.VariantCallingParameters.MinimumFrequencyFilter = 1.1f; }, false); //FilteredLowGenomeQuality Scenarios ExecuteValidationTest((o) => { o.VariantCallingParameters.PloidyModel = PloidyModel.DiploidByThresholding; o.VariantCallingParameters.LowGenotypeQualityFilter = 0; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.PloidyModel = PloidyModel.DiploidByThresholding; o.VariantCallingParameters.LowGenotypeQualityFilter = 100; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.PloidyModel = PloidyModel.DiploidByThresholding; o.VariantCallingParameters.LowGenotypeQualityFilter = -1; }, false); ExecuteValidationTest((o) => { o.VariantCallingParameters.PloidyModel = PloidyModel.DiploidByThresholding; o.VariantCallingParameters.LowGenotypeQualityFilter = 101; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.LowGenotypeQualityFilter = 0; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.LowGenotypeQualityFilter = 100; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.LowGenotypeQualityFilter = -1; }, false); ExecuteValidationTest((o) => { o.VariantCallingParameters.LowGenotypeQualityFilter = 101; }, true); //FilteredIndelRepeats Scenarios ExecuteValidationTest((o) => { o.VariantCallingParameters.IndelRepeatFilter = 0; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.IndelRepeatFilter = 10; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.IndelRepeatFilter = -1; }, false); ExecuteValidationTest((o) => { o.VariantCallingParameters.IndelRepeatFilter = 11; }, false); //FilteredLowDepth Scenarios ExecuteValidationTest(o => { o.VariantCallingParameters.LowDepthFilter = 0; o.VariantCallingParameters.MinimumCoverage = 0; }, true); ExecuteValidationTest(o => { o.VariantCallingParameters.LowDepthFilter = 1; o.VariantCallingParameters.MinimumCoverage = 0; }, true); ExecuteValidationTest(o => { o.VariantCallingParameters.LowDepthFilter = -1; o.VariantCallingParameters.MinimumCoverage = 0; }, false); //Priors path ExecuteValidationTest((o) => { o.PriorsPath = _existingBamPath; }, true); ExecuteValidationTest((o) => { o.PriorsPath = Path.Combine(TestPaths.LocalTestDataDirectory, "Nonexistant.txt"); }, false); // Thread by chr ExecuteValidationTest(o => { o.ThreadByChr = true; o.ChromosomeFilter = "chr1"; }, false); // Validate ncfilter ExecuteValidationTest((o) => { o.VariantCallingParameters.NoCallFilterThreshold = 0f; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.NoCallFilterThreshold = 1f; }, true); ExecuteValidationTest((o) => { o.VariantCallingParameters.NoCallFilterThreshold = -1f; }, false); ExecuteValidationTest((o) => { o.VariantCallingParameters.NoCallFilterThreshold = 2f; }, false); }