Skip to main content

compressed_mzml/
compressed_mzml.rs

1/*!
2 * Demo how to read an mzML file that is compressed
3 */
4use std::env;
5use std::fs;
6use std::io;
7use std::process::exit;
8use std::time::Instant;
9
10use mzdata::io::PreBufferedStream;
11use mzdata::io::{MzMLReader, RestartableGzDecoder};
12use mzdata::prelude::*;
13
14fn main() -> io::Result<()> {
15    let input = env::args().nth(1).unwrap_or_else(|| {
16        eprintln!("Please provide a file path or '-' for STDIN");
17        exit(1)
18    });
19    let start = Instant::now();
20    let groups = if input == "-" {
21        let stream =
22            RestartableGzDecoder::new(io::BufReader::new(PreBufferedStream::new(io::stdin())?));
23        let reader = MzMLReader::new(stream);
24        let groups: Vec<_> = reader.into_groups().collect();
25        groups
26    } else {
27        let stream = RestartableGzDecoder::new(io::BufReader::new(fs::File::open(input)?));
28        let reader = MzMLReader::new(stream);
29        let groups: Vec<_> = reader.into_groups().collect();
30        groups
31    };
32    let spectra: Vec<_> = groups
33        .iter()
34        .flat_map(|g| g.precursor.iter().chain(g.products.iter()))
35        .collect();
36    let end = Instant::now();
37    eprintln!(
38        "Read {} groups with {} spectra in {:0.3?}",
39        groups.len(),
40        spectra.len(),
41        end - start
42    );
43    assert!(!spectra.is_empty());
44
45    Ok(())
46}