Example #1
0
        /// <summary>
        /// Performs fragment binning.
        /// </summary>
        /// <returns></returns>
        public int Bin()
        {
            if (parameters.predefinedBinsFile == null)
            {
                throw new ApplicationException("Predefined bins in BED is required for fragment binning.");
            }
            if (!parameters.isPairedEnd) // Janus-SRS-189
            {
                throw new ApplicationException("Paired-end reads are required for fragment binning.");
            }

            Dictionary<string, List<GenomicBin>> predefinedBins = Utilities.LoadBedFile(parameters.predefinedBinsFile, gcIndex: 3);
            List<string> chromosomes = GetChromosomesInBam(); // used to order chromosomes

            if (!Utilities.IsSubset(predefinedBins.Keys, chromosomes))
            {
                throw new ApplicationException(
                    String.Format("Not all chromosomes in {0} are found in {1}.", parameters.predefinedBinsFile, parameters.bamFile));
            }

            // Count fragments by chromosome
            List<ThreadStart> binningThreads = new List<ThreadStart>();
            List<BinTask> tasks = new List<BinTask>();
            foreach (string chrom in chromosomes)
            {
                if (!predefinedBins.ContainsKey(chrom)) { continue; }
                BinTask task = new BinTask(parameters.referenceFile, chrom, parameters.bamFile, predefinedBins[chrom]);
                tasks.Add(task);
                binningThreads.Add(new ThreadStart(() => { task.DoIt(); }));
            }

            Console.WriteLine("Launch fragment binning jobs...");
            Console.Out.WriteLine();
            Parallel.ForEach(binningThreads, t => { t.Invoke(); });
            Console.WriteLine("Completed fragment binning jobs.");
            Console.Out.WriteLine();

            long usableFragmentCount = tasks.Select(t => t.UsableFragmentCount).Sum();
            if (usableFragmentCount == 0)
            {
                throw new ApplicationException(String.Format("No passing-filter fragments overlapping bins are found in {0}", parameters.bamFile));
            }

            // Aggregate bins
            List<GenomicBin> finalBins = new List<GenomicBin>();
            foreach (string chrom in chromosomes)
            {
                if (!predefinedBins.ContainsKey(chrom)) { continue; }
                finalBins.AddRange(predefinedBins[chrom]);
            }

            // Output!
            CanvasIO.WriteToTextFile(parameters.outFile, finalBins);

            return 0;
        }
Example #2
0
        /// <summary>
        /// Performs fragment binning.
        /// </summary>
        /// <returns></returns>
        public int Bin()
        {
            if (parameters.predefinedBinsFile == null)
            {
                throw new Illumina.Common.IlluminaException("Predefined bins in BED is required for fragment binning.");
            }
            if (!parameters.isPairedEnd) // Janus-SRS-189
            {
                throw new Illumina.Common.IlluminaException("Paired-end reads are required for fragment binning.");
            }

            Dictionary <string, List <SampleGenomicBin> > predefinedBins = Utilities.LoadBedFile(parameters.predefinedBinsFile, gcIndex: 3);
            List <string> chromosomes = GetChromosomesInBam(); // used to order chromosomes

            if (!Utilities.IsSubset(predefinedBins.Keys, chromosomes))
            {
                throw new Illumina.Common.IlluminaException(
                          String.Format("Not all chromosomes in {0} are found in {1}.", parameters.predefinedBinsFile, parameters.bamFile));
            }

            // Count fragments by chromosome
            List <ThreadStart> binningThreads = new List <ThreadStart>();
            List <BinTask>     tasks          = new List <BinTask>();

            foreach (string chrom in chromosomes)
            {
                if (!predefinedBins.ContainsKey(chrom))
                {
                    continue;
                }
                BinTask task = new BinTask(parameters.referenceFile, chrom, parameters.bamFile, predefinedBins[chrom]);
                tasks.Add(task);
                binningThreads.Add(new ThreadStart(() => { task.DoIt(); }));
            }

            Console.WriteLine("Launch fragment binning jobs...");
            Console.Out.WriteLine();
            Parallel.ForEach(binningThreads, t => { t.Invoke(); });
            Console.WriteLine("Completed fragment binning jobs.");
            Console.Out.WriteLine();

            long usableFragmentCount = tasks.Select(t => t.UsableFragmentCount).Sum();

            if (usableFragmentCount == 0)
            {
                throw new Illumina.Common.IlluminaException(String.Format("No passing-filter fragments overlapping bins are found in {0}", parameters.bamFile));
            }

            // Aggregate bins
            List <SampleGenomicBin> finalBins = new List <SampleGenomicBin>();

            foreach (string chrom in chromosomes)
            {
                if (!predefinedBins.ContainsKey(chrom))
                {
                    continue;
                }
                finalBins.AddRange(predefinedBins[chrom]);
            }

            // Output!
            CanvasIO.WriteToTextFile(parameters.outFile, finalBins);

            return(0);
        }