|
@@ -10,6 +10,8 @@ use ndarray::Array2;
|
|
|
use ndarray_stats::CorrelationExt;
|
|
use ndarray_stats::CorrelationExt;
|
|
|
use std::io::Write;
|
|
use std::io::Write;
|
|
|
|
|
|
|
|
|
|
+use indicatif::{ProgressBar, ProgressStyle};
|
|
|
|
|
+
|
|
|
fn main() -> Result<(), Box<dyn Error>> {
|
|
fn main() -> Result<(), Box<dyn Error>> {
|
|
|
let filename = "/Turbine-pool/LAL-T_ChIP/data/all_sub.tsv";
|
|
let filename = "/Turbine-pool/LAL-T_ChIP/data/all_sub.tsv";
|
|
|
let enhancer_prefix = "EH38E";
|
|
let enhancer_prefix = "EH38E";
|
|
@@ -39,15 +41,19 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|
|
} else {
|
|
} else {
|
|
|
rna_set.insert(key, values);
|
|
rna_set.insert(key, values);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- // if enhancer_set.len() > 2 {
|
|
|
|
|
- // break;
|
|
|
|
|
- // }
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
println!("{} enhancers", enhancer_set.len());
|
|
println!("{} enhancers", enhancer_set.len());
|
|
|
println!("{} rnas", rna_set.len());
|
|
println!("{} rnas", rna_set.len());
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+ // Set the progress bar
|
|
|
|
|
+ let bar = ProgressBar::new(enhancer_set.len().try_into().unwrap());
|
|
|
|
|
+ bar.set_style(
|
|
|
|
|
+ ProgressStyle::default_bar()
|
|
|
|
|
+ .template("[{elapsed_precise}] [{bar:40.cyan/blue}] {pos}/{len} ({eta}) {msg}")?
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
// let best_corr: Arc<Mutex<HashMap<String, (f32, Vec<String>)>>> = Arc::new(Mutex::new(HashMap::new()));
|
|
// let best_corr: Arc<Mutex<HashMap<String, (f32, Vec<String>)>>> = Arc::new(Mutex::new(HashMap::new()));
|
|
|
|
|
|
|
|
let enhancers_to_rnas: Arc<Mutex<HashMap<String, HashMap<String, f32>>>> = Arc::new(Mutex::new(HashMap::new()));
|
|
let enhancers_to_rnas: Arc<Mutex<HashMap<String, HashMap<String, f32>>>> = Arc::new(Mutex::new(HashMap::new()));
|
|
@@ -55,27 +61,30 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|
|
enhancer_set.par_iter().for_each(|(a_k, a_v)| {
|
|
enhancer_set.par_iter().for_each(|(a_k, a_v)| {
|
|
|
|
|
|
|
|
let correlations: Arc<Mutex<HashMap<String, f32>>> = Arc::new(Mutex::new(HashMap::new()));
|
|
let correlations: Arc<Mutex<HashMap<String, f32>>> = Arc::new(Mutex::new(HashMap::new()));
|
|
|
- println!("correlation for {}", a_k);
|
|
|
|
|
|
|
+
|
|
|
|
|
+ bar.set_message(format!("correlation for {}...", a_k));
|
|
|
|
|
|
|
|
rna_set.par_iter().for_each(|(b_k, b_v)| {
|
|
rna_set.par_iter().for_each(|(b_k, b_v)| {
|
|
|
|
|
|
|
|
|
|
+ // Convert into 2darray
|
|
|
let rand_vec = vec![a_v, b_v];
|
|
let rand_vec = vec![a_v, b_v];
|
|
|
let ncols = rand_vec.first().map_or(0, |row| row.len());
|
|
let ncols = rand_vec.first().map_or(0, |row| row.len());
|
|
|
let mut nrows = 0;
|
|
let mut nrows = 0;
|
|
|
let mut data = Vec::new();
|
|
let mut data = Vec::new();
|
|
|
-
|
|
|
|
|
for i in 0..rand_vec.len() {
|
|
for i in 0..rand_vec.len() {
|
|
|
data.extend_from_slice(&rand_vec[i]);
|
|
data.extend_from_slice(&rand_vec[i]);
|
|
|
nrows += 1;
|
|
nrows += 1;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
let a: ndarray::ArrayBase<ndarray::OwnedRepr<_>, ndarray::Dim<[usize; 2]>> = Array2::from_shape_vec((nrows, ncols), data).unwrap();
|
|
let a: ndarray::ArrayBase<ndarray::OwnedRepr<_>, ndarray::Dim<[usize; 2]>> = Array2::from_shape_vec((nrows, ncols), data).unwrap();
|
|
|
|
|
|
|
|
|
|
+ // Compute the Pearson correlation and insert the result into hashmap
|
|
|
let corr = a.pearson_correlation().unwrap();
|
|
let corr = a.pearson_correlation().unwrap();
|
|
|
let mut correlations_guard = correlations.lock().unwrap();
|
|
let mut correlations_guard = correlations.lock().unwrap();
|
|
|
correlations_guard.insert(b_k.clone(), corr.clone().into_raw_vec().into_iter().reduce(f32::min).unwrap());
|
|
correlations_guard.insert(b_k.clone(), corr.clone().into_raw_vec().into_iter().reduce(f32::min).unwrap());
|
|
|
|
|
|
|
|
|
|
+ // Increment progress bar
|
|
|
});
|
|
});
|
|
|
|
|
+ bar.inc(1);
|
|
|
|
|
|
|
|
let correlations_guard = correlations.lock().unwrap();
|
|
let correlations_guard = correlations.lock().unwrap();
|
|
|
|
|
|
|
@@ -95,14 +104,20 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|
|
|
|
|
|
|
// }
|
|
// }
|
|
|
});
|
|
});
|
|
|
|
|
+ bar.finish();
|
|
|
|
|
|
|
|
let enhancers_to_rnas_guard = enhancers_to_rnas.lock().unwrap();
|
|
let enhancers_to_rnas_guard = enhancers_to_rnas.lock().unwrap();
|
|
|
println!("{:?} enhancers results to write...", enhancers_to_rnas_guard.len());
|
|
println!("{:?} enhancers results to write...", enhancers_to_rnas_guard.len());
|
|
|
|
|
|
|
|
|
|
+ let bar = ProgressBar::new(enhancers_to_rnas_guard.len().try_into().unwrap());
|
|
|
|
|
+ bar.set_style(
|
|
|
|
|
+ ProgressStyle::default_bar()
|
|
|
|
|
+ .template("[{elapsed_precise}] [{bar:40.cyan/blue}] {pos}/{len} ({eta}) {msg}")?
|
|
|
|
|
+ );
|
|
|
|
|
+ bar.set_message("Writing output.tsv");
|
|
|
let mut rna_keys: Vec<&String> = rna_set.keys().collect();
|
|
let mut rna_keys: Vec<&String> = rna_set.keys().collect();
|
|
|
rna_keys.sort();
|
|
rna_keys.sort();
|
|
|
|
|
|
|
|
-
|
|
|
|
|
let mut file = File::create("output.tsv")?;
|
|
let mut file = File::create("output.tsv")?;
|
|
|
|
|
|
|
|
// Write the header row
|
|
// Write the header row
|
|
@@ -127,7 +142,9 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
writeln!(file)?;
|
|
writeln!(file)?;
|
|
|
|
|
+ bar.inc(1);
|
|
|
}
|
|
}
|
|
|
|
|
+ bar.finish();
|
|
|
|
|
|
|
|
Ok(())
|
|
Ok(())
|
|
|
}
|
|
}
|