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();
 | 
			
		||||
 | 
			
		||||
        log::debug!("GDW:");
 | 
			
		||||
        // log::debug!("GDW:");
 | 
			
		||||
        for well in source_wells {
 | 
			
		||||
            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);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        log::debug!("GDW END.");
 | 
			
		||||
        // log::debug!("GDW END.");
 | 
			
		||||
 | 
			
		||||
        return wells;
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -95,14 +95,14 @@ impl TransferRegion {
 | 
			
		|||
    pub fn calculate_map(&self) -> Box<dyn Fn((u8, u8)) -> Option<Vec<(u8, u8)>> + '_> {
 | 
			
		||||
        // By validating first, we have a stronger guarantee that
 | 
			
		||||
        // this function will not panic. :)
 | 
			
		||||
        log::debug!("Validating: {:?}", self.validate());
 | 
			
		||||
        // log::debug!("Validating: {:?}", self.validate());
 | 
			
		||||
        if let Err(msg) = self.validate() {
 | 
			
		||||
            eprintln!("{}", msg);
 | 
			
		||||
            eprintln!("This transfer will be empty.");
 | 
			
		||||
            return Box::new(|(_, _)| None);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        log::debug!("What is ild? {:?}", self);
 | 
			
		||||
        // log::debug!("What is ild? {:?}", self);
 | 
			
		||||
        let source_wells = self.get_source_wells();
 | 
			
		||||
        let il_dest = self.interleave_dest;
 | 
			
		||||
        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),
 | 
			
		||||
                        );
 | 
			
		||||
                        let D_per_replicate = ( // How many wells are used per replicate?
 | 
			
		||||
                            (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.0 * (il_dest.0.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?
 | 
			
		||||
                            d_dims.0.div_euclid(D_per_replicate.0),
 | 
			
		||||
                            d_dims.1.div_euclid(D_per_replicate.1),
 | 
			
		||||
                           (1..).position(
 | 
			
		||||
                               |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 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(
 | 
			
		||||
                            possible_destination_wells
 | 
			
		||||
| 
						 | 
				
			
			@ -234,7 +235,7 @@ impl TransferRegion {
 | 
			
		|||
                    return Err("Source region is out-of-bounds! (Too tall)");
 | 
			
		||||
                }
 | 
			
		||||
                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)");
 | 
			
		||||
                }
 | 
			
		||||
                // Check that source lengths divide destination lengths
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue