get_scan_by/
get_scan_by.rs1use std::{env, io, path};
2
3use log::info;
4use mzdata::io::MZReader;
5use mzdata::prelude::*;
6
7fn main() -> io::Result<()> {
8 env_logger::init();
9 let mut args = env::args().skip(1);
10
11 let path = path::PathBuf::from(args.next().expect("Please pass an MS data file path"));
12
13 let key = args
14 .next()
15 .expect("Please provide a key type, \"id\", \"index\" or \"time\"");
16 let key_value = args
17 .next()
18 .expect("Please provide a key value matching the key type");
19
20 info!("Opening {}", path.display());
21 let mut reader = MZReader::open_path(path)?;
22 info!("{} spectra detected", reader.len());
23 let spectrum = match key.as_str() {
24 "id" => reader.get_spectrum_by_id(&key_value).unwrap(),
25 "index" => reader
26 .get_spectrum_by_index(key_value.parse().unwrap())
27 .unwrap(),
28 "time" => reader
29 .get_spectrum_by_time(key_value.parse().unwrap())
30 .unwrap(),
31 _ => {
32 panic!("Unknown key type {}", key);
33 }
34 };
35
36 println!(
38 "ID: {}; Index: {}; Time: {}",
39 spectrum.id(),
40 spectrum.index(),
41 spectrum.start_time()
42 );
43 println!(
44 "Num data points: {}",
45 spectrum
46 .raw_arrays()
47 .and_then(|r| Some(r.mzs().ok()?.len()))
48 .unwrap_or_default()
49 );
50 if spectrum.signal_continuity().is_centroid() && spectrum.raw_arrays().is_none() {
51 println!("Num peaks: {}", spectrum.peaks().len());
52 }
53 Ok(())
54}