use crate::Platform;
use std::path::Path;
use std::path::PathBuf;
use super::{TwoSetStrategy, DEFAULT_QUERY_NUM_READS, DEFAULT_TARGET_NUM_READS};
pub struct Builder {
target_num_reads: usize,
target_num_bases: usize,
query_num_reads: usize,
query_num_bases: usize,
remove_internal: bool,
max_overhang_ratio: f32,
use_min_ref: bool,
tmpdir: PathBuf,
threads: usize,
seed: Option<u64>,
platform: Platform,
}
impl Default for Builder {
fn default() -> Self {
let tmpdir = std::env::temp_dir();
Self {
target_num_reads: DEFAULT_TARGET_NUM_READS,
target_num_bases: 0,
query_num_reads: DEFAULT_QUERY_NUM_READS,
query_num_bases: 0,
remove_internal: false,
max_overhang_ratio: 0.2,
use_min_ref: false,
tmpdir,
threads: 1,
seed: None,
platform: Platform::default(),
}
}
}
impl Builder {
pub fn new() -> Self {
Self::default()
}
pub fn target_num_reads(mut self, target_num_reads: usize) -> Self {
self.target_num_reads = target_num_reads;
self
}
pub fn query_num_reads(mut self, query_num_reads: usize) -> Self {
self.query_num_reads = query_num_reads;
self
}
pub fn remove_internal(mut self, filter_contained: bool, ratio: f32) -> Self {
self.remove_internal = filter_contained;
if filter_contained {
self.max_overhang_ratio = ratio;
}
self
}
pub fn use_min_ref(mut self, use_min_ref: bool) -> Self {
self.use_min_ref = use_min_ref;
self
}
pub fn threads(mut self, threads: usize) -> Self {
self.threads = threads;
self
}
pub fn tmpdir<P: AsRef<Path>>(mut self, tmpdir: P) -> Self {
self.tmpdir = tmpdir.as_ref().to_path_buf();
self
}
pub fn seed(mut self, seed: Option<u64>) -> Self {
self.seed = seed;
self
}
pub fn platform(mut self, platform: Platform) -> Self {
self.platform = platform;
self
}
pub fn build<P: AsRef<Path>>(self, input: P) -> TwoSetStrategy {
TwoSetStrategy {
input: input.as_ref().to_path_buf(),
target_num_reads: self.target_num_reads,
target_num_bases: self.target_num_bases,
query_num_reads: self.query_num_reads,
query_num_bases: self.query_num_bases,
remove_internal: self.remove_internal,
max_overhang_ratio: self.max_overhang_ratio,
use_min_ref: self.use_min_ref,
tmpdir: self.tmpdir,
threads: self.threads,
seed: self.seed,
platform: self.platform,
}
}
}