public ValidationParser(PileupProcessorOptions options, MpileupResult result) { _options = options; _parser = options.GetPileupItemParser(false); _rdFilter = new PileupItemReadDepthFilter(options.MinimumReadDepth, options.MinimumBaseQuality); _normalTest = new PileupItemNormalTest(options.MaximumPercentageOfMinorAlleleInNormal); _tumorTest = new PileupItemTumorTest(options.MinimumReadsOfMinorAlleleInTumor, options.MinimumPercentageOfMinorAlleleInTumor); _result = result; }
public MpileupParser(PileupProcessorOptions options, MpileupResult result) { _options = options; _normalTest = new PileupItemNormalTest(options.MaximumPercentageOfMinorAlleleInNormal); _tumorTest = new PileupItemTumorTest(options.MinimumReadsOfMinorAlleleInTumor, options.MinimumPercentageOfMinorAlleleInTumor); _parser = options.GetPileupItemParser(); _result = result; if (File.Exists(_options.ExcludeBedFile)) { bedMap = new BedItemFile <BedItem>().ReadFromFile(_options.ExcludeBedFile).ToGroupDictionary(m => m.Seqname); } }
public void RunTask(string chr, CancellationTokenSource cts) { if (cts.IsCancellationRequested) { throw new UserTerminatedException(); } var result = new MpileupResult(chr, _options.CandidatesDirectory); Progress.SetMessage("Processing chromosome {0} in thread {1}", chr, Thread.CurrentThread.ManagedThreadId); var process = ExecuteSamtools(new[] { _options.NormalBam, _options.TumorBam }, chr); if (process == null) { throw new Exception(string.Format("Fail to execute samtools for chromosome {0}.", chr)); } var parser = _options.GetPileupItemParser(); var pfile = new PileupFile(parser); pfile.Open(process.StandardOutput); var proc = new MpileupParser(_options, result) { Progress = this.Progress }; try { using (pfile) { string line; while ((line = pfile.ReadLine()) != null) { result.TotalCount++; if (cts.IsCancellationRequested) { return; } try { proc.Parse(line); } catch (Exception ex) { throw new Exception(string.Format("Parsing mpileup entry failed : {0}\n{1}", ex.Message, line), ex); } } new MpileupResultCountFormat(_options, true).WriteToFile(result.CandidateSummary, result); Progress.SetMessage("Processing chromosome {0} in thread {1} finished.", chr, Thread.CurrentThread.ManagedThreadId); } } catch (Exception ex) { cts.Cancel(); throw new Exception(string.Format("Processing chromosome {0} failed : {1}", result.Name, ex.Message), ex); } finally { try { if (process != null) { process.Kill(); } } catch { } } }