timsrust 0.4.2

A crate to read Bruker timsTOF data
Documentation
mod builder;
mod config;
mod errors;
#[cfg(feature = "minitdf")]
mod minitdf;
mod spectrum_trait;
#[cfg(feature = "tdf")]
mod tdf;

use super::TimsTofPathLike;
use crate::ms_data::Spectrum;
pub use builder::SpectrumReaderBuilder;
pub use config::{SpectrumProcessingParams, SpectrumReaderConfig};
pub use errors::SpectrumReaderError;
use rayon::prelude::*;
use spectrum_trait::SpectrumReaderTrait;

pub struct SpectrumReader {
    spectrum_reader: Box<dyn SpectrumReaderTrait>,
}

impl SpectrumReader {
    pub fn new(
        path: impl TimsTofPathLike,
    ) -> Result<Self, SpectrumReaderError> {
        Self::build().with_path(path).finalize()
    }

    pub fn build() -> SpectrumReaderBuilder {
        SpectrumReaderBuilder::default()
    }

    pub fn get(&self, index: usize) -> Result<Spectrum, SpectrumReaderError> {
        self.spectrum_reader.get(index)
    }

    pub fn len(&self) -> usize {
        self.spectrum_reader.len()
    }

    pub fn get_all(&self) -> Vec<Result<Spectrum, SpectrumReaderError>> {
        let mut spectra: Vec<Result<Spectrum, SpectrumReaderError>> = (0..self
            .len())
            .into_par_iter()
            .map(|index| self.get(index))
            .collect();
        spectra.sort_by_key(|x| match x {
            Ok(spectrum) => match spectrum.precursor {
                Some(precursor) => precursor.index,
                None => spectrum.index,
            },
            Err(_) => 0,
        });
        spectra
    }

    fn calibrate(&mut self) {
        self.spectrum_reader.calibrate();
    }
}