random_access_iter/
random_access_iter.rs1use std::{env, io, path};
2
3use mzdata::io::mzml;
4use mzdata::prelude::*;
5
6fn main() -> io::Result<()> {
7 let path = path::PathBuf::from(
8 env::args()
9 .nth(1)
10 .expect("Please pass an MS data file path"),
11 );
13
14 let mut reader = mzml::MzMLReader::open_path(path)?;
15
16 let n_spectra = reader.len();
17
18 let spec = reader.get_spectrum_by_index(n_spectra / 2).unwrap();
20 eprintln!(
21 "Midpoint spectrum {} (level {}) at time {}",
22 spec.id(),
23 spec.ms_level(),
24 spec.start_time()
25 );
26
27 reader.start_from_time(spec.start_time())?;
29 let s = reader.next().unwrap();
30 eprintln!(
31 "Resuming at {} (level {}) at time {}",
32 s.id(),
33 s.ms_level(),
34 s.start_time()
35 );
36
37 let mut group_iter = reader.into_groups();
39 group_iter.start_from_time(spec.start_time())?;
41 let g = group_iter.next().unwrap();
42 eprintln!(
43 "Resuming at group having {:?} at time {:?}",
44 g.earliest_spectrum().map(|s| s.id()),
45 g.earliest_spectrum().map(|s| s.start_time())
46 );
47
48 let mut avg_iter = group_iter.averaging(1, 200.0, 2200.0, 0.005);
50 avg_iter.start_from_time(spec.start_time())?;
52 let g = avg_iter.next().unwrap();
53 eprintln!(
54 "Resuming at group having {:?} at time {:?}",
55 g.earliest_spectrum().map(|s| s.id()),
56 g.earliest_spectrum().map(|s| s.start_time())
57 );
58
59 Ok(())
60}