fix: custom get_destination_wells
Gitea Scan/plate-tool/pipeline/head This commit looks good Details

The code here was like, stupid tbh.
This commit is contained in:
Emilia Allison 2024-02-13 21:54:23 -05:00
parent 94cb530de8
commit 72d81439c1
Signed by: emilia
GPG Key ID: 05D5D1107E5100A1
1 changed files with 23 additions and 21 deletions

View File

@ -109,22 +109,24 @@ impl TransferRegion {
} }
pub fn get_destination_wells(&self) -> Vec<(u8, u8)> { pub fn get_destination_wells(&self) -> Vec<(u8, u8)> {
match &self.source_region {
Region::Custom(c) => c.dest.clone(),
_ => {
let map = self.calculate_map(); let map = self.calculate_map();
let source_wells = self.get_source_wells(); let source_wells = self.get_source_wells();
let mut wells = Vec::<(u8, u8)>::new(); let mut wells = Vec::<(u8, u8)>::new();
// log::debug!("GDW:");
for well in source_wells { for well in source_wells {
if let Some(mut dest_wells) = map(well) { if let Some(mut dest_wells) = map(well) {
// log::debug!("Map {:?} to {:?}", well, dest_wells);
wells.append(&mut dest_wells); wells.append(&mut dest_wells);
} }
} }
// log::debug!("GDW END.");
wells wells
} }
}
}
#[allow(clippy::type_complexity)] // Resolving gives inherent associated type error #[allow(clippy::type_complexity)] // Resolving gives inherent associated type error
pub fn calculate_map(&self) -> Box<dyn Fn((u8, u8)) -> Option<Vec<(u8, u8)>> + '_> { pub fn calculate_map(&self) -> Box<dyn Fn((u8, u8)) -> Option<Vec<(u8, u8)>> + '_> {
@ -204,14 +206,16 @@ impl TransferRegion {
// How many times can we replicate? // How many times can we replicate?
(1..) (1..)
.position(|n| { .position(|n| {
n * number_used_src_wells.0 * il_dest.0.unsigned_abs() - il_dest.0.unsigned_abs() n * number_used_src_wells.0 * il_dest.0.unsigned_abs()
- il_dest.0.unsigned_abs()
+ 1 + 1
> d_dims.0 > d_dims.0
}) })
.unwrap() as u8, .unwrap() as u8,
(1..) (1..)
.position(|n| { .position(|n| {
n * number_used_src_wells.1 * il_dest.1.unsigned_abs() - il_dest.1.unsigned_abs() n * number_used_src_wells.1 * il_dest.1.unsigned_abs()
- il_dest.1.unsigned_abs()
+ 1 + 1
> d_dims.1 > d_dims.1
}) })
@ -242,14 +246,12 @@ impl TransferRegion {
.filter(|(x, y)| { .filter(|(x, y)| {
// How many times have we replicated? < How many are we allowed // How many times have we replicated? < How many are we allowed
// to replicate? // to replicate?
x.checked_sub(d_ul.0) x.checked_sub(d_ul.0).unwrap().div_euclid(
.unwrap() number_used_src_wells.0 * il_dest.0.unsigned_abs(),
.div_euclid(number_used_src_wells.0 * il_dest.0.unsigned_abs()) ) < count.0
< count.0 && y.checked_sub(d_ul.1).unwrap().div_euclid(
&& y.checked_sub(d_ul.1) number_used_src_wells.1 * il_dest.1.unsigned_abs(),
.unwrap() ) < count.1
.div_euclid(number_used_src_wells.1 * il_dest.1.unsigned_abs())
< count.1
}) })
.collect(), .collect(),
) )