timsrust 0.4.2

A crate to read Bruker timsTOF data
Documentation
use crate::{
    io::readers::file_readers::parquet_reader::{
        precursors::ParquetPrecursor, ParquetReaderError, ReadableParquetTable,
    },
    ms_data::Precursor,
    readers::TimsTofPathLike,
};

use super::PrecursorReaderTrait;

#[derive(Debug)]
pub struct MiniTDFPrecursorReader {
    parquet_precursors: Vec<ParquetPrecursor>,
}

impl MiniTDFPrecursorReader {
    pub fn new(
        path: impl TimsTofPathLike,
    ) -> Result<Self, MiniTDFPrecursorReaderError> {
        let parquet_precursors = ParquetPrecursor::from_parquet_file(path)?;
        let reader = Self { parquet_precursors };
        Ok(reader)
    }
}

impl PrecursorReaderTrait for MiniTDFPrecursorReader {
    fn get(&self, index: usize) -> Option<Precursor> {
        let parquet_precursor = &self.parquet_precursors.get(index)?;
        let precursor = Precursor {
            mz: parquet_precursor.mz,
            rt: parquet_precursor.rt,
            im: parquet_precursor.im,
            charge: Some(parquet_precursor.charge),
            intensity: Some(parquet_precursor.intensity),
            index: parquet_precursor.index,
            frame_index: parquet_precursor.frame_index,
        };
        Some(precursor)
    }

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

#[derive(thiserror::Error, Debug)]
#[error("{0}")]
pub struct MiniTDFPrecursorReaderError(#[from] ParquetReaderError);