pub mod benchmark_suite;
pub mod cancer_presets;
pub mod edit;
pub mod learn_profile;
pub mod presets;
pub mod simulate;
pub mod validate;
use clap::{Parser, Subcommand};
use std::path::PathBuf;
#[derive(Parser)]
#[command(
name = "varforge",
version,
about = "Synthetic cancer sequencing data generator"
)]
pub struct Args {
#[command(subcommand)]
pub command: Command,
#[arg(long, global = true, default_value = "info")]
pub log_level: String,
#[arg(short = 't', long, global = true)]
pub threads: Option<usize>,
}
impl Args {
pub fn log_level(&self) -> &str {
&self.log_level
}
}
#[derive(Subcommand)]
pub enum Command {
Simulate(SimulateOpts),
Validate(ValidateOpts),
Edit(edit::EditOpts),
LearnProfile(learn_profile::LearnProfileOpts),
BenchmarkSuite(BenchmarkSuiteOpts),
}
#[derive(Parser)]
pub struct BenchmarkSuiteOpts {
#[arg(short, long)]
pub config: PathBuf,
#[arg(long, num_args = 1.., value_delimiter = ',')]
pub vafs: Vec<f64>,
#[arg(long, num_args = 1.., value_delimiter = ',')]
pub coverages: Vec<f64>,
#[arg(short, long)]
pub output: Option<PathBuf>,
}
#[derive(Parser)]
pub struct SimulateOpts {
#[arg(short, long)]
pub config: PathBuf,
#[arg(short, long)]
pub output_dir: Option<PathBuf>,
#[arg(long)]
pub seed: Option<u64>,
#[arg(long)]
pub coverage: Option<f64>,
#[arg(long)]
pub read_length: Option<usize>,
#[arg(long)]
pub purity: Option<f64>,
#[arg(long)]
pub fragment_mean: Option<f64>,
#[arg(long)]
pub fragment_sd: Option<f64>,
#[arg(long)]
pub random_mutations: Option<usize>,
#[arg(long)]
pub vaf_range: Option<String>,
#[arg(long)]
pub preset: Option<String>,
#[arg(long)]
pub dry_run: bool,
#[arg(long)]
pub list_presets: bool,
#[arg(long = "set", value_name = "KEY=VALUE", action = clap::ArgAction::Append)]
pub set: Option<Vec<String>>,
}
#[derive(Parser)]
pub struct ValidateOpts {
#[arg(short, long)]
pub config: PathBuf,
}