Skip to content

Commit

Permalink
FEAT: updated frame reader
Browse files Browse the repository at this point in the history
  • Loading branch information
sander-willems-bruker committed Jun 14, 2024
1 parent d4de769 commit ded22c1
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 33 deletions.
58 changes: 38 additions & 20 deletions src/io/readers/frame_reader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,29 +41,47 @@ impl FrameReader {
}
}

pub fn collect<F: Fn(&SqlFrame) -> bool>(&self, filter: F) -> Vec<Frame> {
// let selection: Vec<usize> = (0..self.len())
// .filter(|x| filter(&self.sql_frames[*x]))
// .collect();
// selection.into_iter().map(|x| self.get(x)).collect()
let selection: Vec<Option<usize>> = (0..self.len())
.map(|x| {
if filter(&self.sql_frames[x]) {
Some(x)
} else {
None
}
})
.collect();
selection
pub fn parallel_filter<'a, F: Fn(&SqlFrame) -> bool + Sync + Send + 'a>(
&'a self,
predicate: F,
) -> impl ParallelIterator<Item = Frame> + 'a {
(0..self.len())
.into_par_iter()
.map(|x| match x {
Some(y) => self.get(y),
None => Frame::default(),
})
.collect()
.filter(move |x| predicate(&self.sql_frames[*x]))
.map(move |x| self.get(x))
// (0..self.len()).into_par_iter().map(move |x| {
// if predicate(&self.sql_frames[x]) {
// self.get(x)
// } else {
// Frame::default()
// }
// })
}

// pub fn parallel_filter2<
// 'a,
// T: Default + Sync + Send,
// Y: Default,
// F: Fn(&Y) -> bool + Sync + Send + 'a,
// >(
// &'a self,
// predicate: F,
// ) -> impl ParallelIterator<Item = T> + 'a {
// (0..self.len())
// .into_par_iter()
// .filter(move |x| predicate(&Y::default()))
// .map(move |x| T::default())
// // (0..self.len()).into_par_iter().map(move |x| {
// // if predicate(&Y::default()) {
// // // self.get(x)
// // T::default()
// // } else {
// // // Frame::default()
// // T::default()
// // }
// // })
// }

pub fn get(&self, index: usize) -> Frame {
let mut frame: Frame = Frame::default();
let sql_frame = &self.sql_frames[index];
Expand Down
47 changes: 34 additions & 13 deletions tests/frame_readers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@ fn get_local_directory() -> &'static Path {
}

#[test]
fn tdf_reader_frames() {
fn tdf_reader_frames1() {
let file_name = "test.d";
let file_path = get_local_directory()
.join(file_name)
.to_str()
.unwrap()
.to_string();
let frames: Vec<Frame> =
FileReader::new(file_path).unwrap().read_all_frames();
FileReader::new(&file_path).unwrap().read_all_ms1_frames();
let expected: Vec<Frame> = vec![
Frame {
scan_offsets: vec![0, 1, 3, 6, 10],
Expand All @@ -31,16 +31,7 @@ fn tdf_reader_frames() {
quadrupole_settings: Arc::new(QuadrupoleSettings::default()),
acquisition_type: AcquisitionType::DDAPASEF,
},
Frame {
scan_offsets: vec![0, 5, 11, 18, 26],
tof_indices: (10..36).collect(),
intensities: (10..36).map(|x| (x + 1) * 2).collect(),
index: 2,
rt: 0.2,
ms_level: MSLevel::MS2,
quadrupole_settings: Arc::new(QuadrupoleSettings::default()),
acquisition_type: AcquisitionType::DDAPASEF,
},
// Frame::default(),
Frame {
scan_offsets: vec![0, 9, 19, 30, 42],
tof_indices: (36..78).collect(),
Expand All @@ -51,6 +42,36 @@ fn tdf_reader_frames() {
quadrupole_settings: Arc::new(QuadrupoleSettings::default()),
acquisition_type: AcquisitionType::DDAPASEF,
},
// Frame::default(),
];
for i in 0..expected.len() {
assert_eq!(&frames[i], &expected[i])
}
}

#[test]
fn tdf_reader_frames2() {
let file_name = "test.d";
let file_path = get_local_directory()
.join(file_name)
.to_str()
.unwrap()
.to_string();
let frames: Vec<Frame> =
FileReader::new(&file_path).unwrap().read_all_ms2_frames();
let expected: Vec<Frame> = vec![
// Frame::default(),
Frame {
scan_offsets: vec![0, 5, 11, 18, 26],
tof_indices: (10..36).collect(),
intensities: (10..36).map(|x| (x + 1) * 2).collect(),
index: 2,
rt: 0.2,
ms_level: MSLevel::MS2,
quadrupole_settings: Arc::new(QuadrupoleSettings::default()),
acquisition_type: AcquisitionType::DDAPASEF,
},
// Frame::default(),
Frame {
scan_offsets: vec![0, 13, 27, 42, 58],
tof_indices: (78..136).collect(),
Expand All @@ -62,7 +83,7 @@ fn tdf_reader_frames() {
acquisition_type: AcquisitionType::DDAPASEF,
},
];
for i in 0..frames.len() {
for i in 0..expected.len() {
assert_eq!(&frames[i], &expected[i])
}
}
Empty file added tests/test.d/analysis.tdf2
Empty file.

0 comments on commit ded22c1

Please sign in to comment.