/// <summary> /// Create a sequence enumerator that filters the reads and adds them to the depth of coverage counter /// if necessary. /// </summary> /// <param name="fileName">Filename to load data from</param> /// <returns>Enumerable set of ISequence elements</returns> private IEnumerable <CompactSAMSequence> createSequenceProducer(string fileName, DepthOfCoverageGraphMaker coveragePlotter = null, bool alsoGetNuclearHits = false) { if (!Skip_DepthOfCoveragePlot && !Helper.IsBAM(fileName)) { Skip_DepthOfCoveragePlot = true; Output.WriteLine(OutputLevel.Error, "Warning: No coverage plots can be made without an input BAM File"); } IEnumerable <CompactSAMSequence> sequences; if (!alsoGetNuclearHits) { var parser = new BAMSequenceParser(Filename); if (ChromosomeName != string.Empty) { parser.ChromosomeToGet = ChromosomeName; sequences = parser.Parse(); } else { sequences = parser.Parse(); } } else { sequences = BAMNuclearChromosomeReadGenerator.GetNuclearAndMitochondrialReads(fileName); } //Filter by quality return(ReadFilter.FilterReads(sequences, coveragePlotter)); }
/// <summary> /// Create a sequence enumerator that filters the reads and adds them to the depth of coverage counter /// if necessary. /// </summary> /// <param name="bamFileName">Filename to load data from</param> /// <returns>Enumerable set of ISequence elements</returns> public static IEnumerable <CompactSAMSequence> GetNuclearAndMitochondrialReads(string bamFileName) { var parser = new BAMSequenceParser(bamFileName); var header = parser.GetFileHeader(); foreach (var chr in Regions.Split('\n')) { var chr2 = chr.Trim(); var split = chr2.Split('\t'); var locs = split.Skip(1).Select(x => Convert.ToInt32(x)).ToList(); var name = split[0]; if (!header.ReferenceSequences.Any(z => z.Name == name)) { name = "chr" + name; if (!header.ReferenceSequences.Any(z => z.Name == name)) { continue; } } foreach (var v in parser.ParseRangeAsEnumerableSequences(bamFileName, name, locs[0], locs[1])) { yield return(v); } } }