protected override MpileupResult GetMpileupResult() { var result = new MpileupResult(string.Empty, _options.CandidatesDirectory); Progress.SetMessage("Single thread mode ..."); var parser = _options.GetPileupItemParser(false); var pfile = new PileupFile(parser); var mutationList = GetValidationList(); result.TotalCount = mutationList.Items.Length; var map = mutationList.Items.ToDictionary(m => GenomeUtils.GetKey(m.Chr, m.Pos)); switch (_options.From) { case DataSourceType.Mpileup: pfile.Open(_options.MpileupFile); break; case DataSourceType.BAM: var posFile = Path.Combine(_options.CandidatesDirectory, "pos.bed"); mutationList.WriteToFile(posFile, 500); var proc = new MpileupProcessor(_options).ExecuteSamtools(new[] { _options.NormalBam, _options.TumorBam }, "", posFile); if (proc == null) { throw new Exception("Cannot execute mpileup."); } pfile.Open(proc.StandardOutput); pfile.Samtools = proc; break; case DataSourceType.Console: pfile.Open(Console.In); break; } Progress.SetMessage("Total {0} entries in validation list", mutationList.Items.Length); foreach (var m in map) { Console.WriteLine(m.Key); } using (pfile) { try { IMpileupParser proc = new ValidationParser(_options, result); string line; while ((line = pfile.ReadLine()) != null) { try { var locus = parser.GetSequenceIdentifierAndPosition(line); var locusKey = GenomeUtils.GetKey(locus.SequenceIdentifier, locus.Position); //Console.WriteLine(locusKey); ValidationItem vitem = null; if (!map.TryGetValue(locusKey, out vitem)) { continue; } //Console.WriteLine("Parsing " + line); var parres = proc.Parse(line, true); if (!string.IsNullOrEmpty(parres.FailedReason)) { Progress.SetMessage("{0}\t{1}\t{2} ~ {3}\t{4}", parres.Item.SequenceIdentifier, parres.Item.Position, parres.Group.Sample1, parres.Group.Sample2, parres.FailedReason); } result.Results.Add(parres); } catch (Exception ex) { var error = string.Format("parsing error {0}\n{1}", ex.Message, line); Progress.SetMessage(error); Console.Error.WriteLine(ex.StackTrace); throw new Exception(error); } } } finally { if (pfile.Samtools != null) { try { pfile.Samtools.Kill(); } // ReSharper disable once EmptyGeneralCatchClause catch (Exception) { } } } } result.NotCovered = result.TotalCount - result.Results.Count; return(result); }
protected override MpileupResult GetMpileupResult() { var result = new MpileupResult(string.Empty, _options.CandidatesDirectory); Progress.SetMessage("Single thread mode ..."); var parser = _options.GetPileupItemParser(false); var pfile = new PileupFile(parser); var mutationList = GetValidationList(); result.TotalCount = mutationList.Items.Length; var map = mutationList.Items.ToDictionary(m => GenomeUtils.GetKey(m.Chr, m.Pos)); switch (_options.From) { case DataSourceType.Mpileup: pfile.Open(_options.MpileupFile); break; case DataSourceType.BAM: var posFile = Path.Combine(_options.CandidatesDirectory, "pos.bed"); mutationList.WriteToFile(posFile, 500); var proc = new MpileupProcessor(_options).ExecuteSamtools(new[] { _options.NormalBam, _options.TumorBam }, "", posFile); if (proc == null) { throw new Exception("Cannot execute mpileup."); } pfile.Open(proc.StandardOutput); pfile.Samtools = proc; break; case DataSourceType.Console: pfile.Open(Console.In); break; } Progress.SetMessage("Total {0} entries in validation list", mutationList.Items.Length); foreach (var m in map) { Console.WriteLine(m.Key); } using (pfile) { try { IMpileupParser proc = new ValidationParser(_options, result); string line; while ((line = pfile.ReadLine()) != null) { try { var locus = parser.GetSequenceIdentifierAndPosition(line); var locusKey = GenomeUtils.GetKey(locus.SequenceIdentifier, locus.Position); //Console.WriteLine(locusKey); ValidationItem vitem = null; if (!map.TryGetValue(locusKey, out vitem)) { continue; } //Console.WriteLine("Parsing " + line); var parres = proc.Parse(line, true); if (!string.IsNullOrEmpty(parres.FailedReason)) { Progress.SetMessage("{0}\t{1}\t{2} ~ {3}\t{4}", parres.Item.SequenceIdentifier, parres.Item.Position, parres.Group.Sample1, parres.Group.Sample2, parres.FailedReason); } result.Results.Add(parres); } catch (Exception ex) { var error = string.Format("parsing error {0}\n{1}", ex.Message, line); Progress.SetMessage(error); Console.Error.WriteLine(ex.StackTrace); throw new Exception(error); } } } finally { if (pfile.Samtools != null) { try { pfile.Samtools.Kill(); } // ReSharper disable once EmptyGeneralCatchClause catch (Exception) { } } } } result.NotCovered = result.TotalCount - result.Results.Count; return result; }