예제 #1
0
 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 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);
            }
        }
예제 #4
0
        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
                {
                }
            }
        }