use std::{env, io, path};
use mzdata::io::mzml;
use mzdata::prelude::*;
fn main() -> io::Result<()> {
let path = path::PathBuf::from(
env::args()
.nth(1)
.expect("Please pass an MS data file path"),
);
let mut reader = mzml::MzMLReader::open_path(path)?;
let n_spectra = reader.len();
let spec = reader.get_spectrum_by_index(n_spectra / 2).unwrap();
eprintln!(
"Midpoint spectrum {} (level {}) at time {}",
spec.id(),
spec.ms_level(),
spec.start_time()
);
reader.start_from_time(spec.start_time())?;
let s = reader.next().unwrap();
eprintln!(
"Resuming at {} (level {}) at time {}",
s.id(),
s.ms_level(),
s.start_time()
);
let mut group_iter = reader.into_groups();
group_iter.start_from_time(spec.start_time())?;
let g = group_iter.next().unwrap();
eprintln!(
"Resuming at group having {:?} at time {:?}",
g.earliest_spectrum().map(|s| s.id()),
g.earliest_spectrum().map(|s| s.start_time())
);
let mut avg_iter = group_iter.averaging(1, 200.0, 2200.0, 0.005);
avg_iter.start_from_time(spec.start_time())?;
let g = avg_iter.next().unwrap();
eprintln!(
"Resuming at group having {:?} at time {:?}",
g.earliest_spectrum().map(|s| s.id()),
g.earliest_spectrum().map(|s| s.start_time())
);
Ok(())
}