def _lane_stats(cur_name, work_dir): """Parse metrics information from files in the working directory. """ parser = PicardMetricsParser() metrics_files = glob.glob(os.path.join(work_dir, "%s*metrics" % cur_name)) metrics = parser.extract_metrics(metrics_files) return metrics
def _bowtie_for_innerdist(start, fastq_file, pair_file, ref_file, out_base, out_dir, config, remove_workdir=False): work_dir = os.path.join(out_dir, "innerdist_estimate") if os.path.exists(work_dir): shutil.rmtree(work_dir) safe_makedir(work_dir) extra_args = ["-s", str(start), "-u", "250000"] bowtie_runner = _select_bowtie_version(config) out_sam = bowtie_runner.align(fastq_file, pair_file, ref_file, out_base, work_dir, config, extra_args) runner = broad.runner_from_config(config) metrics_file = runner.run_fn("picard_insert_metrics", out_sam) if not file_exists(metrics_file): return None, None parser = PicardMetricsParser() with open(metrics_file) as metrics_handle: insert_metrics = parser._parse_insert_metrics(metrics_handle) avg_read_length = _calculate_average_read_length(out_sam) mean_insert = int(float(insert_metrics["MEAN_INSERT_SIZE"])) - int( 2 * avg_read_length) std_deviation = int(float(insert_metrics["STANDARD_DEVIATION"])) return mean_insert, std_deviation
def main(run_name, work_dir=None, config_file=None, ref_file=None, bait_file=None, target_file=None): if work_dir is None: work_dir = os.getcwd() parser = PicardMetricsParser() base_bams = _get_base_bams(work_dir, run_name) samples = [_get_sample_name(b) for (_, _, b) in base_bams] metrics = [ lane_stats(l, b, f, run_name, parser, config_file, ref_file, bait_file, target_file) for (l, b, f) in base_bams ] header_counts = _get_header_counts(samples, metrics) header = [m for m in WANT_METRICS if header_counts[m] > 0] out_file = "%s-summary.csv" % (run_name) with open(out_file, "w") as out_handle: writer = csv.writer(out_handle) writer.writerow(["sample"] + header) for i, sample in enumerate(samples): info = [metrics[i].get(m, "") for m in header] writer.writerow([sample] + info)
def _bowtie_for_innerdist(start, fastq_file, pair_file, ref_file, out_base, out_dir, config, remove_workdir=False): work_dir = os.path.join(out_dir, "innerdist_estimate") if os.path.exists(work_dir): shutil.rmtree(work_dir) safe_makedir(work_dir) extra_args = ["-s", str(start), "-u", "250000"] bowtie_runner = _select_bowtie_version(config) out_sam = bowtie_runner.align(fastq_file, pair_file, ref_file, out_base, work_dir, config, extra_args) runner = broad.runner_from_config(config) metrics_file = runner.run_fn("picard_insert_metrics", out_sam) if not file_exists(metrics_file): return None, None parser = PicardMetricsParser() with open(metrics_file) as metrics_handle: insert_metrics = parser._parse_insert_metrics(metrics_handle) avg_read_length = _calculate_average_read_length(out_sam) mean_insert = int(float(insert_metrics["MEAN_INSERT_SIZE"])) - int(2 * avg_read_length) std_deviation = int(float(insert_metrics["STANDARD_DEVIATION"])) return mean_insert, std_deviation
def __init__(self): PicardMetricsParser.__init__(self)