compressed_mzml/
compressed_mzml.rs1use 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}