Beispiel #1
0
        /// <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));
        }
Beispiel #2
0
        /// <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);
                }
            }
        }