Fix replicates (again)
This commit is contained in:
parent
32dd3814af
commit
ebb8bf70af
|
@ -80,14 +80,14 @@ impl TransferRegion {
|
||||||
|
|
||||||
let mut wells = Vec::<(u8, u8)>::new();
|
let mut wells = Vec::<(u8, u8)>::new();
|
||||||
|
|
||||||
log::debug!("GDW:");
|
// 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);
|
// log::debug!("Map {:?} to {:?}", well, dest_wells);
|
||||||
wells.append(&mut dest_wells);
|
wells.append(&mut dest_wells);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log::debug!("GDW END.");
|
// log::debug!("GDW END.");
|
||||||
|
|
||||||
return wells;
|
return wells;
|
||||||
}
|
}
|
||||||
|
@ -95,14 +95,14 @@ impl TransferRegion {
|
||||||
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)>> + '_> {
|
||||||
// By validating first, we have a stronger guarantee that
|
// By validating first, we have a stronger guarantee that
|
||||||
// this function will not panic. :)
|
// this function will not panic. :)
|
||||||
log::debug!("Validating: {:?}", self.validate());
|
// log::debug!("Validating: {:?}", self.validate());
|
||||||
if let Err(msg) = self.validate() {
|
if let Err(msg) = self.validate() {
|
||||||
eprintln!("{}", msg);
|
eprintln!("{}", msg);
|
||||||
eprintln!("This transfer will be empty.");
|
eprintln!("This transfer will be empty.");
|
||||||
return Box::new(|(_, _)| None);
|
return Box::new(|(_, _)| None);
|
||||||
}
|
}
|
||||||
|
|
||||||
log::debug!("What is ild? {:?}", self);
|
// log::debug!("What is ild? {:?}", self);
|
||||||
let source_wells = self.get_source_wells();
|
let source_wells = self.get_source_wells();
|
||||||
let il_dest = self.interleave_dest;
|
let il_dest = self.interleave_dest;
|
||||||
let il_source = self.interleave_source;
|
let il_source = self.interleave_source;
|
||||||
|
@ -161,19 +161,20 @@ impl TransferRegion {
|
||||||
(s_dims.1 + il_source.1.abs() as u8 - 1).div_euclid(il_source.1.abs() as u8),
|
(s_dims.1 + il_source.1.abs() as u8 - 1).div_euclid(il_source.1.abs() as u8),
|
||||||
);
|
);
|
||||||
let D_per_replicate = ( // How many wells are used per replicate?
|
let D_per_replicate = ( // How many wells are used per replicate?
|
||||||
(N_s.0 * (il_dest.0.abs() as u8))
|
(N_s.0 * (il_dest.0.abs() as u8)),
|
||||||
// Conditionally subtract one to ignore the trailing interleave well
|
|
||||||
.saturating_sub(if il_dest.0.abs() > 1 {1} else {0}),
|
|
||||||
(N_s.1 * (il_dest.1.abs() as u8))
|
(N_s.1 * (il_dest.1.abs() as u8))
|
||||||
.saturating_sub(if il_dest.1.abs() > 1 {1} else {0}),
|
|
||||||
);
|
);
|
||||||
let count = ( // How many times can we replicate?
|
let count = ( // How many times can we replicate?
|
||||||
d_dims.0.div_euclid(D_per_replicate.0),
|
(1..).position(
|
||||||
d_dims.1.div_euclid(D_per_replicate.1),
|
|n| n*N_s.0*il_dest.0.abs() as u8 - il_dest.0.abs() as u8 + 1
|
||||||
|
> d_dims.0).unwrap() as u8,
|
||||||
|
(1..).position(
|
||||||
|
|n| n*N_s.1*il_dest.1.abs() as u8 - il_dest.1.abs() as u8 + 1
|
||||||
|
> d_dims.1).unwrap() as u8,
|
||||||
);
|
);
|
||||||
let i = i.saturating_sub(s_ul.0).saturating_div(il_source.0.abs() as u8);
|
let i = i.saturating_sub(s_ul.0).saturating_div(il_source.0.abs() as u8);
|
||||||
let j = j.saturating_sub(s_ul.1).saturating_div(il_source.1.abs() as u8);
|
let j = j.saturating_sub(s_ul.1).saturating_div(il_source.1.abs() as u8);
|
||||||
log::debug!("s_dims: {:?}, N_s: {:?}", s_dims, N_s);
|
// log::debug!("N_s: {:?}, d_dims: {:?}, D_per: {:?}, count: {:?}", N_s, d_dims, D_per_replicate, count);
|
||||||
|
|
||||||
Some(
|
Some(
|
||||||
possible_destination_wells
|
possible_destination_wells
|
||||||
|
@ -234,7 +235,7 @@ impl TransferRegion {
|
||||||
return Err("Source region is out-of-bounds! (Too tall)");
|
return Err("Source region is out-of-bounds! (Too tall)");
|
||||||
}
|
}
|
||||||
if s1.1 > source_max.1 || s2.1 > source_max.1 {
|
if s1.1 > source_max.1 || s2.1 > source_max.1 {
|
||||||
log::debug!("s1.1: {}, max.1: {}", s1.1, source_max.1);
|
// log::debug!("s1.1: {}, max.1: {}", s1.1, source_max.1);
|
||||||
return Err("Source region is out-of-bounds! (Too wide)");
|
return Err("Source region is out-of-bounds! (Too wide)");
|
||||||
}
|
}
|
||||||
// Check that source lengths divide destination lengths
|
// Check that source lengths divide destination lengths
|
||||||
|
|
Loading…
Reference in New Issue