redicat 0.4.2

REDICAT - RNA Editing Cellular Assessment Toolkit: A highly parallelized utility for analyzing RNA editing events in single-cell RNA-seq data
Documentation
use anyhow::{anyhow, Result};
use std::path::{Path, PathBuf};

use crate::commands::common;
use crate::commands::bulk::{run_bulk, BulkArgs};
use redicat_lib::utils;

use super::args::Bam2MtxArgs;

pub fn prepare_positions_file(args: &Bam2MtxArgs) -> Result<PathBuf> {
    if args.two_pass {
        let requested_path = args.tsv.clone().unwrap_or_else(|| {
            args.output
                .parent()
                .map(|p| p.to_path_buf())
                .unwrap_or_else(|| PathBuf::from("."))
                .join("1pass.tsv.gz")
        });
        let output_path = common::ensure_gz_path(&requested_path);
        run_bulk_first_pass(args, &output_path)?;
        Ok(output_path)
    } else {
        args.tsv
            .clone()
            .ok_or_else(|| anyhow!("--tsv must be provided unless --two-pass is enabled"))
    }
}

fn run_bulk_first_pass(args: &Bam2MtxArgs, target: &Path) -> Result<()> {
    log::info!("Running bulk first pass to generate {:?}", target);
    utils::make_parent_dirs(target)?;

    let bulk_args = BulkArgs {
        reads: args.bam.clone(),
        output: target.to_path_buf(),
        threads: args.threads,
        chunksize: args.chunksize,
        min_baseq: Some(args.min_baseq),
        mapquality: args.min_mapq,
        zero_base: false,
        max_depth: 10000,
        min_depth: 5,
        max_n_fraction: 10,
        all: false,
        editing_threshold: 10000,
        all_contigs: args.all_contigs,
    };

    run_bulk(bulk_args)
}