Skip to main content

random_access_iter/
random_access_iter.rs

1use 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        // "test/data/batching_test.mzML"
12    );
13
14    let mut reader = mzml::MzMLReader::open_path(path)?;
15
16    let n_spectra = reader.len();
17
18    // Find the spectrum at the midpoint of the run
19    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    // Jump the iterator to that point in time
28    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    // Convert the iterator into a group iterator
38    let mut group_iter = reader.into_groups();
39    // Jump the group iterator to that point in time (If an MSn spectrum was found, the next MS1 may be shown instead)
40    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    // Convert the group iterator into an averaging group iterator
49    let mut avg_iter = group_iter.averaging(1, 200.0, 2200.0, 0.005);
50    // Jump the group iterator to that point in time (If an MSn spectrum was found, the next MS1 may be shown instead)
51    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}