use granges::{join::CombinedJoinDataLeftEmpty, prelude::*};
pub fn mean_score(join_data: CombinedJoinDataLeftEmpty<Option<f64>>) -> f64 {
let overlap_scores: Vec<f64> = join_data
.right_data
.into_iter()
.filter_map(|x| x)
.collect();
let score_sum: f64 = overlap_scores.iter().sum();
score_sum / (overlap_scores.len() as f64)
}
fn try_main() -> Result<(), granges::error::GRangesError> {
let genome = seqlens!("chr1" => 100, "chr2" => 100);
let left_iter = Bed3Iterator::new("tests_data/bedtools/map_a.txt")?;
let right_iter = Bed5Iterator::new("tests_data/bedtools/map_b.txt")?;
let left_gr = GRangesEmpty::from_iter(left_iter, &genome)?;
let right_gr = GRanges::from_iter(right_iter, &genome)?;
let right_gr = right_gr
.into_coitrees()?
.map_data(|bed5_cols| bed5_cols.score)?;
let results_gr = left_gr.left_overlaps(&right_gr)?.map_joins(mean_score)?;
results_gr.write_to_tsv(None::<String>, &BED_TSV)?;
Ok(())
}
fn main() {
try_main().unwrap();
}