Skip to main content

get_scan_by/
get_scan_by.rs

1use 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    // dbg!(spectrum);
37    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}