Skip to main content

mzcat/
mzcat.rs

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}