Exemplo n.º 1
0
        public StrandBiasFileWriter CreateStrandBiasFileWriter(string outputVcfPath)
        {
            var writer = new StrandBiasFileWriter(outputVcfPath);

            writer.WriteHeader();
            return(writer);
        }
Exemplo n.º 2
0
        public static void CallStrandedVariantsWithMockData(string vcfOutputPath, ApplicationOptions options, AmpliconTestFactory testFactory)
        {
            var appFactory = new MockFactoryWithDefaults(options);

            using (var vcfWriter = appFactory.CreateVcfWriter(vcfOutputPath, new VcfWriterInputContext()))
            {
                using (var biasWriter = new StrandBiasFileWriter(vcfOutputPath))
                {
                    var svc = CreateMockVariantCaller(vcfWriter, options, testFactory.ChrInfo, testFactory.AlignmentExtractor, biasWriter);
                    vcfWriter.WriteHeader();
                    biasWriter.WriteHeader();
                    svc.Execute();
                    biasWriter.Dispose();
                }
            }
            Assert.True(File.Exists(vcfOutputPath));
        }
Exemplo n.º 3
0
        public void Write()
        {
            var outputFile = Path.Combine(UnitTestPaths.TestDataDirectory, "StrandBiasWriterTests.txt");

            File.Delete(outputFile);

            var chromosome = "chr1";
            var reference  = "TTT";
            var alternate  = "T";
            var position   = 123;

            var BaseCalledAlleles = new List <CalledAllele>();
            var variant           = new CalledAllele(AlleleCategory.Deletion)
            {
                Chromosome        = chromosome,
                Reference         = reference,
                Alternate         = alternate,
                Coordinate        = position,
                StrandBiasResults = new StrandBiasResults()
                {
                    BiasAcceptable          = true,
                    BiasScore               = 1,
                    CovPresentOnBothStrands = true,
                    ForwardStats            = StrandBiasCalculator.CreateStats(10, 100, .1, .1, StrandBiasModel.Poisson),
                    GATKBiasScore           = .2,
                    OverallStats            = StrandBiasCalculator.CreateStats(20, 200, .2, .2, StrandBiasModel.Poisson),
                    ReverseStats            = StrandBiasCalculator.CreateStats(30, 300, .3, .3, StrandBiasModel.Poisson),
                    StitchedStats           = StrandBiasCalculator.CreateStats(40, 400, .4, .4, StrandBiasModel.Poisson),
                    TestAcceptable          = true,
                    TestScore               = .5,
                    VarPresentOnBothStrands = true,
                }
            };

            BaseCalledAlleles.Add(variant);
            var writer = new StrandBiasFileWriter(outputFile);

            writer.WriteHeader();
            writer.Write(BaseCalledAlleles);
            writer.Dispose();

            var biasFileContents = File.ReadAllLines(outputFile);

            Assert.True(biasFileContents.Length == 2);

            var header = biasFileContents.First().Split('\t');
            var data   = biasFileContents.Skip(1).First().Split('\t');
            var dict   = header.Select((a, i) => new { key = a, data = data[i] })
                         .ToDictionary(b => b.key, c => c.data);

            // Make sure well-formed and populated with the right data
            Assert.Equal(chromosome, dict["Chr"]);
            Assert.Equal(position.ToString(), dict["Position"]);
            Assert.Equal(reference, dict["Reference"]);
            Assert.Equal(alternate, dict["Alternate"]);
            Assert.Equal(variant.StrandBiasResults.OverallStats.ChanceFalsePos.ToString(), dict["Overall_ChanceFalsePos"]);
            Assert.Equal(variant.StrandBiasResults.ForwardStats.ChanceFalsePos.ToString(), dict["Forward_ChanceFalsePos"]);
            Assert.Equal(variant.StrandBiasResults.ReverseStats.ChanceFalsePos.ToString(), dict["Reverse_ChanceFalsePos"]);
            Assert.Equal(variant.StrandBiasResults.OverallStats.ChanceFalseNeg.ToString(), dict["Overall_ChanceFalseNeg"]);
            Assert.Equal(variant.StrandBiasResults.ForwardStats.ChanceFalseNeg.ToString(), dict["Forward_ChanceFalseNeg"]);
            Assert.Equal(variant.StrandBiasResults.ReverseStats.ChanceFalseNeg.ToString(), dict["Reverse_ChanceFalseNeg"]);
            Assert.Equal(variant.StrandBiasResults.OverallStats.Frequency.ToString(), dict["Overall_Freq"]);
            Assert.Equal(variant.StrandBiasResults.ForwardStats.Frequency.ToString(), dict["Forward_Freq"]);
            Assert.Equal(variant.StrandBiasResults.ReverseStats.Frequency.ToString(), dict["Reverse_Freq"]);
            Assert.Equal(variant.StrandBiasResults.OverallStats.Support.ToString(), dict["Overall_Support"]);
            Assert.Equal(variant.StrandBiasResults.ForwardStats.Support.ToString(), dict["Forward_Support"]);
            Assert.Equal(variant.StrandBiasResults.ReverseStats.Support.ToString(), dict["Reverse_Support"]);
            Assert.Equal(variant.StrandBiasResults.OverallStats.Coverage.ToString(), dict["Overall_Coverage"]);
            Assert.Equal(variant.StrandBiasResults.ForwardStats.Coverage.ToString(), dict["Forward_Coverage"]);
            Assert.Equal(variant.StrandBiasResults.ReverseStats.Coverage.ToString(), dict["Reverse_Coverage"]);
            Assert.Equal(variant.StrandBiasResults.BiasAcceptable.ToString(), dict["BiasAcceptable?"]);
            Assert.Equal(variant.StrandBiasResults.VarPresentOnBothStrands.ToString(), dict["VarPresentOnBothStrands?"]);
            Assert.Equal(variant.StrandBiasResults.CovPresentOnBothStrands.ToString(), dict["CoverageAvailableOnBothStrands?"]);

            //TODO RawCoverage/RawSupport tests


            Assert.Throws <Exception>(() => writer.WriteHeader());
            Assert.Throws <Exception>(() => writer.Write(BaseCalledAlleles));
            writer.Dispose();
        }
Exemplo n.º 4
0
        public void TestForStrandBiasOnStitchingScenarios(StitchingScenario scenario, string resultFile)
        {
            //limit the scope of concern for now.
            if (scenario.ShouldRefStitch != true)
            {
                return;
            }


            //limit the scope of concern for now.
            if (scenario.ShouldStitch != true)
            {
                return;
            }

            var resultsSummary = Path.Combine(Options.OutputFolder, StrandBiasSummaryFileName);

            using (StreamWriter sw = new StreamWriter(resultsSummary, true))
            {
                var sb = new StringBuilder(
                    string.Join(",", DateTime.Today.ToShortDateString(),
                                DateTime.Now.ToLongTimeString(),
                                scenario.Category, scenario.Id));

                try
                {
                    if (!Directory.Exists(Options.OutputFolder))
                    {
                        Directory.CreateDirectory(Options.OutputFolder);
                    }


                    var factory = new AmpliconTestFactory(new string('A', 100), sourceIsStitched: true);

                    byte qualityForAll      = 30;
                    int  numVariantCounts   = 2; // 10;
                    int  numReferenceCounts = 2; // 90;
                    var  varRead            = BuildRead(scenario.OutputRead1, qualityForAll, StageMNVdata(scenario));
                    var  refRead            = BuildRead(scenario.OutputRefRead1, qualityForAll, NoMNVdata(scenario));

                    if (refRead == null)
                    {
                        return;
                    }

                    factory.StageStitchedVariant(
                        varRead, numVariantCounts,
                        refRead, numReferenceCounts);

                    var outputFileName = string.Format("{0}_{1}.vcf", scenario.Category, scenario.Id);
                    var vcfOutputPath  = Path.Combine(Options.OutputFolder, outputFileName);
                    var biasOutputPath = StrandBiasFileWriter.GetBiasFilePath(vcfOutputPath);

                    File.Delete(vcfOutputPath);
                    File.Delete(biasOutputPath);

                    StitchedReadBiasHelper.CallStrandedVariantsWithMockData(vcfOutputPath, Options, factory);
                    var varResults  = StitchedReadBiasHelper.GetResults(VcfReader.GetAllVariantsInFile(vcfOutputPath));
                    var biasResults = StitchedReadBiasHelper.GetStrandResultsFromFile(biasOutputPath);

                    var observedFrequency = (varResults.Count == 0) ? "0": "";
                    var observedSB        = (biasResults.Count == 0) ? "FN": "";

                    for (int i = 0; i < varResults.Count; i++)
                    {
                        var varResult = varResults[i];
                        if (i != 0)
                        {
                            observedFrequency += ";";
                        }
                        observedFrequency += varResult.VariantFrequency;
                    }

                    for (int i = 0; i < biasResults.Count; i++)
                    {
                        var biasResult = biasResults[i];
                        if (i != 0)
                        {
                            observedSB += ";";
                        }
                        observedSB += biasResult.HasStrandBias;

                        //there should be no SB on our current set of stitched scenarios.
                        Assert.True(!biasResult.HasStrandBias);
                    }

                    var expectedValues = new List <string>()
                    {
                        "1", scenario.Frequency, scenario.ShouldBias
                    };

                    var observedValues = new List <string>()
                    {
                        varResults.Count.ToString(), observedFrequency, observedSB
                    };

                    sb.Append(GetResultString(expectedValues, observedValues));

                    sw.WriteLine(sb.ToString());
                }
                catch (Exception ex)
                {
                    sb.Append(",Fail:  " + ex);
                    sw.WriteLine(sb.ToString());
                }
            }
        }
Exemplo n.º 5
0
        protected override void Initialize()
        {
            if (ShouldThrottle)
            {
                // one writer per bam
                foreach (var workRequest in WorkRequests)
                {
                    var vcfWriter = _factory.CreateVcfWriter(workRequest.OutputFilePath, new VcfWriterInputContext
                    {
                        ReferenceName           = Genome.Directory,
                        QuotedCommandLineString = _factory.GetCommandLine(),
                        SampleName   = Path.GetFileName(workRequest.BamFilePath),
                        ContigsByChr = Genome.ChromosomeLengths
                    });

                    if (_writeHeader)
                    {
                        vcfWriter.WriteHeader();
                    }


                    StrandBiasFileWriter   sbBiasFileWriter = null;
                    AmpliconBiasFileWriter abBiasFileWriter = null;
                    if (_factory.Options.OutputBiasFiles)
                    {
                        sbBiasFileWriter = _factory.CreateStrandBiasFileWriter(workRequest.OutputFilePath);
                        abBiasFileWriter = _factory.CreateAmpliconBiasFileWriter(workRequest.OutputFilePath);
                    }

                    // use same writer across all chr.  we will never be writing multiple chrs for a given bam at the same time
                    foreach (var chrName in Genome.ChromosomesToProcess)
                    {
                        var writerKey = GetChrOutputPath(workRequest, chrName);

                        _writerByChrLookup[writerKey]       = vcfWriter;
                        _sbBiasWriterByChrLookup[writerKey] = sbBiasFileWriter;
                        _abBiasWriterByChrLookup[writerKey] = abBiasFileWriter;
                    }

                    _writers.Add(vcfWriter);

                    if (sbBiasFileWriter != null)
                    {
                        _sbBiasWriters.Add(sbBiasFileWriter);
                    }

                    if (abBiasFileWriter != null)
                    {
                        _abBiasWriters.Add(abBiasFileWriter);
                    }
                }
            }
            else
            {
                // one writer per bam and per chr
                // files will get stitched together later
                foreach (var workRequest in WorkRequests)
                {
                    foreach (var chrName in Genome.ChromosomesToProcess)
                    {
                        var outputPath = GetChrOutputPath(workRequest, chrName);

                        var vcfWriter = _factory.CreateVcfWriter(outputPath, new VcfWriterInputContext
                        {
                            ReferenceName           = Genome.Directory,
                            QuotedCommandLineString = _factory.GetCommandLine(),
                            SampleName   = Path.GetFileName(workRequest.BamFilePath),
                            ContigsByChr = Genome.ChromosomeLengths
                        });

                        StrandBiasFileWriter   sbBiasFileWriter = null;
                        AmpliconBiasFileWriter abBiasFileWriter = null;
                        if (_factory.Options.OutputBiasFiles)
                        {
                            sbBiasFileWriter = _factory.CreateStrandBiasFileWriter(outputPath);
                            abBiasFileWriter = _factory.CreateAmpliconBiasFileWriter(outputPath);
                        }

                        var writerKey = outputPath;

                        _writerByChrLookup[writerKey]       = vcfWriter;
                        _sbBiasWriterByChrLookup[writerKey] = sbBiasFileWriter;
                        _abBiasWriterByChrLookup[writerKey] = abBiasFileWriter;

                        _writers.Add(vcfWriter);

                        if (sbBiasFileWriter != null)
                        {
                            _sbBiasWriters.Add(sbBiasFileWriter);
                        }

                        if (abBiasFileWriter != null)
                        {
                            _abBiasWriters.Add(abBiasFileWriter);
                        }
                    }
                }
            }
        }