1use std::time;
2use std::{env, io, path};
3
4use mzdata::spectrum::MultiLayerSpectrum;
5use mzdata::{prelude::*, MZReader};
6use rayon::prelude::*;
7
8fn scan_file<R: MZFileReader + Iterator<Item = MultiLayerSpectrum> + Send>(reader: &mut R) {
9 let start = time::Instant::now();
10 reader.enumerate().par_bridge().for_each(|(i, scan)| {
11 if i % 10000 == 0 {
12 println!(
13 "\tScan {}: {}|{} ({} seconds)",
14 i,
15 scan.id(),
16 scan.index(),
17 (time::Instant::now() - start).as_secs_f64(),
18 );
19 }
20 });
21 let end = time::Instant::now();
22 println!("Loaded in {} seconds", (end - start).as_secs_f64());
23}
24
25fn main() -> io::Result<()> {
26 env_logger::init();
27 let path = path::PathBuf::from(
28 env::args()
29 .nth(1)
30 .expect("Please pass an MS data file path"),
31 );
32
33 let mut reader = MZReader::open_path(&path)?;
34 scan_file(&mut reader);
35 Ok(())
36}