|
@@ -14,29 +14,31 @@ extern crate lazy_static;
|
|
|
|
|
|
|
|
// Define DOCKER_ID lock for handling Docker kill when ctrlc is pressed
|
|
// Define DOCKER_ID lock for handling Docker kill when ctrlc is pressed
|
|
|
lazy_static! {
|
|
lazy_static! {
|
|
|
- static ref DOCKER_ID: Arc<Mutex<Option<String>>> = Arc::new(Mutex::new(None));
|
|
|
|
|
|
|
+ static ref DOCKER_ID: Arc<Mutex<Vec<String>>> = Arc::new(Mutex::new(Vec::new()));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
#[cfg(test)]
|
|
|
mod tests {
|
|
mod tests {
|
|
|
use std::{fs, path::Path};
|
|
use std::{fs, path::Path};
|
|
|
|
|
|
|
|
- use callers::nanomonsv::nanomonsv_create_pon;
|
|
|
|
|
- use commands::modkit::{bed_methyl, dmr_c_mrd_diag, ModkitConfig};
|
|
|
|
|
|
|
+ use callers::{nanomonsv::nanomonsv_create_pon, severus::{Severus, SeverusConfig}};
|
|
|
|
|
+ use commands::{longphase::{LongphaseHap, LongphaseConfig}, modkit::{bed_methyl, ModkitConfig}};
|
|
|
|
|
+ use functions::assembler::{Assembler, AssemblerConfig};
|
|
|
use log::info;
|
|
use log::info;
|
|
|
- use rayon::{prelude::*, ThreadPoolBuilder};
|
|
|
|
|
|
|
+ // use pandora_lib_assembler::assembler::AssembleConfig;
|
|
|
|
|
+ use rayon::prelude::*;
|
|
|
|
|
|
|
|
use self::{callers::deep_variant::DeepVariantConfig, collection::pod5::{FlowCellCase, Pod5Collection}, commands::dorado, config::Config};
|
|
use self::{callers::deep_variant::DeepVariantConfig, collection::pod5::{FlowCellCase, Pod5Collection}, commands::dorado, config::Config};
|
|
|
use super::*;
|
|
use super::*;
|
|
|
use crate::{callers::{clairs::{ClairS, ClairSConfig}, deep_variant::DeepVariant, nanomonsv::{NanomonSV, NanomonSVConfig, NanomonSVSolo}}, collection::{bam::{self, BamType}, run_tasks, variants::VariantsCollection, vcf::VcfCollection, Collections, CollectionsConfig}, commands::{bcftools::{bcftools_keep_pass, BcftoolsConfig}, dorado::Dorado}};
|
|
use crate::{callers::{clairs::{ClairS, ClairSConfig}, deep_variant::DeepVariant, nanomonsv::{NanomonSV, NanomonSVConfig, NanomonSVSolo}}, collection::{bam::{self, BamType}, run_tasks, variants::VariantsCollection, vcf::VcfCollection, Collections, CollectionsConfig}, commands::{bcftools::{bcftools_keep_pass, BcftoolsConfig}, dorado::Dorado}};
|
|
|
|
|
|
|
|
|
|
+ // export RUST_LOG="debug"
|
|
|
fn init() {
|
|
fn init() {
|
|
|
let _ = env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info"))
|
|
let _ = env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info"))
|
|
|
.is_test(true)
|
|
.is_test(true)
|
|
|
.try_init();
|
|
.try_init();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // export RUST_LOG="debug"
|
|
|
|
|
#[test]
|
|
#[test]
|
|
|
fn it_works() {
|
|
fn it_works() {
|
|
|
let bam_path = "/data/longreads_basic_pipe/PARACHINI/diag/PARACHINI_diag_hs1.bam";
|
|
let bam_path = "/data/longreads_basic_pipe/PARACHINI/diag/PARACHINI_diag_hs1.bam";
|
|
@@ -114,11 +116,16 @@ mod tests {
|
|
|
|
|
|
|
|
#[test_log::test]
|
|
#[test_log::test]
|
|
|
fn deep_variant() -> anyhow::Result<()> {
|
|
fn deep_variant() -> anyhow::Result<()> {
|
|
|
|
|
+ // let config = DeepVariantConfig {
|
|
|
|
|
+ // result_dir: "/data/test".to_string(),
|
|
|
|
|
+ // ..DeepVariantConfig::default()
|
|
|
|
|
+ // };
|
|
|
|
|
+ // DeepVariant::new("test_a", "diag", "/data/test_data/subset.bam", config).run()
|
|
|
let config = DeepVariantConfig {
|
|
let config = DeepVariantConfig {
|
|
|
result_dir: "/data/test".to_string(),
|
|
result_dir: "/data/test".to_string(),
|
|
|
..DeepVariantConfig::default()
|
|
..DeepVariantConfig::default()
|
|
|
};
|
|
};
|
|
|
- DeepVariant::new("test_a", "diag", "/data/test_data/subset.bam", config).run()
|
|
|
|
|
|
|
+ DeepVariant::new("LEVASSEUR", "mrd", "/data/longreads_basic_pipe/LEVASSEUR/mrd/LEVASSEUR_mrd_hs1.bam", config).run()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#[test_log::test]
|
|
#[test_log::test]
|
|
@@ -132,17 +139,20 @@ mod tests {
|
|
|
|
|
|
|
|
#[test_log::test]
|
|
#[test_log::test]
|
|
|
fn nanomonsv() -> anyhow::Result<()> {
|
|
fn nanomonsv() -> anyhow::Result<()> {
|
|
|
- let config = NanomonSVConfig {
|
|
|
|
|
- result_dir: "/data/test".to_string(),
|
|
|
|
|
- ..NanomonSVConfig::default()
|
|
|
|
|
- };
|
|
|
|
|
- NanomonSV::new("test_a", "/data/test_data/subset.bam", "/data/test_data/subset_mrd.bam", config).run()
|
|
|
|
|
|
|
+ // let config = NanomonSVConfig {
|
|
|
|
|
+ // result_dir: "/data/test".to_string(),
|
|
|
|
|
+ // ..NanomonSVConfig::default()
|
|
|
|
|
+ // };
|
|
|
|
|
+ // NanomonSV::new("test_a", "/data/test_data/subset.bam", "/data/test_data/subset_mrd.bam", config).run()
|
|
|
|
|
+
|
|
|
|
|
+ let bam = |id:&str, time_point: &str| format!("/data/longreads_basic_pipe/{id}/{time_point}/{id}_{time_point}_hs1.bam");
|
|
|
|
|
+ NanomonSV::new("CAZIER", &bam("CAZIER", "diag"), &bam("CAZIER", "mrd"), NanomonSVConfig::default()).run()
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#[test]
|
|
#[test]
|
|
|
fn nanomonsv_solo() -> anyhow::Result<()> {
|
|
fn nanomonsv_solo() -> anyhow::Result<()> {
|
|
|
init();
|
|
init();
|
|
|
- let id = "GILLOUX";
|
|
|
|
|
|
|
+ let id = "MONVILLE";
|
|
|
let time_point = "diag";
|
|
let time_point = "diag";
|
|
|
NanomonSVSolo::new(id, &format!("/data/longreads_basic_pipe/{id}/{time_point}/{id}_{time_point}_hs1.bam"), time_point, NanomonSVConfig::default()).run()?;
|
|
NanomonSVSolo::new(id, &format!("/data/longreads_basic_pipe/{id}/{time_point}/{id}_{time_point}_hs1.bam"), time_point, NanomonSVConfig::default()).run()?;
|
|
|
// let time_point = "mrd";
|
|
// let time_point = "mrd";
|
|
@@ -157,7 +167,8 @@ mod tests {
|
|
|
#[test]
|
|
#[test]
|
|
|
fn todo_all() -> anyhow::Result<()> {
|
|
fn todo_all() -> anyhow::Result<()> {
|
|
|
init();
|
|
init();
|
|
|
- let config = CollectionsConfig::default();
|
|
|
|
|
|
|
+ // let config = CollectionsConfig::default();
|
|
|
|
|
+ let config = CollectionsConfig { pod_dir: "/data/store".to_string(), ..Default::default() };
|
|
|
info!("Runing todo with config: {:#?}", config);
|
|
info!("Runing todo with config: {:#?}", config);
|
|
|
let mut collections = Collections::new(config)?;
|
|
let mut collections = Collections::new(config)?;
|
|
|
collections.todo()?;
|
|
collections.todo()?;
|
|
@@ -196,7 +207,10 @@ mod tests {
|
|
|
// export RUST_LOG="debug"
|
|
// export RUST_LOG="debug"
|
|
|
#[test_log::test]
|
|
#[test_log::test]
|
|
|
fn run_t() -> anyhow::Result<()> {
|
|
fn run_t() -> anyhow::Result<()> {
|
|
|
- run_tasks(CollectionsConfig::default())
|
|
|
|
|
|
|
+ // let config = CollectionsConfig::default();
|
|
|
|
|
+ let config = CollectionsConfig { pod_dir: "/data/store".to_string(), ..Default::default() };
|
|
|
|
|
+
|
|
|
|
|
+ run_tasks(config)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#[test_log::test]
|
|
#[test_log::test]
|
|
@@ -261,7 +275,9 @@ mod tests {
|
|
|
let collections = Collections::new(
|
|
let collections = Collections::new(
|
|
|
CollectionsConfig::default()
|
|
CollectionsConfig::default()
|
|
|
)?;
|
|
)?;
|
|
|
- collections.todo_deepvariants().iter().for_each(|t| info!("{t}"));
|
|
|
|
|
|
|
+ let tasks = collections.todo_deepvariants();
|
|
|
|
|
+ tasks.iter().for_each(|t| info!("{t}"));
|
|
|
|
|
+ info!("n tasks {}", tasks.len());
|
|
|
Ok(())
|
|
Ok(())
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -275,6 +291,11 @@ mod tests {
|
|
|
Ok(())
|
|
Ok(())
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ #[test]
|
|
|
|
|
+ fn run_assemblers() -> anyhow::Result<()> {
|
|
|
|
|
+ Assembler::new("CAMEL".to_string(), "diag".to_string(), AssemblerConfig::default()).run()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
#[test]
|
|
#[test]
|
|
|
fn run_dmr_par() -> anyhow::Result<()> {
|
|
fn run_dmr_par() -> anyhow::Result<()> {
|
|
|
init();
|
|
init();
|
|
@@ -311,4 +332,44 @@ mod tests {
|
|
|
});
|
|
});
|
|
|
Ok(())
|
|
Ok(())
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ #[test]
|
|
|
|
|
+ fn run_severus() -> anyhow::Result<()> {
|
|
|
|
|
+ init();
|
|
|
|
|
+ let id = "CUNY";
|
|
|
|
|
+ let diag_bam = format!("/data/longreads_basic_pipe/{id}/diag/{id}_diag_hs1_hp.bam");
|
|
|
|
|
+ let mrd_bam = format!("/data/longreads_basic_pipe/{id}/mrd/{id}_mrd_hs1_hp.bam");
|
|
|
|
|
+ let vcf = format!("/data/longreads_basic_pipe/{id}/diag/ClairS/CUNY_diag_clairs_PASSED.vcf.gz");
|
|
|
|
|
+ Severus::new(id, &diag_bam, &mrd_bam, &vcf, SeverusConfig::default()).run()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ #[test]
|
|
|
|
|
+ fn run_multi_deepvariant() -> anyhow::Result<()> {
|
|
|
|
|
+ init();
|
|
|
|
|
+ let mut collections = Collections::new(
|
|
|
|
|
+ CollectionsConfig::default()
|
|
|
|
|
+ )?;
|
|
|
|
|
+ collections.run_deepvariant()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ #[test]
|
|
|
|
|
+ fn run_clairs() -> anyhow::Result<()> {
|
|
|
|
|
+ init();
|
|
|
|
|
+ let collections = Collections::new(
|
|
|
|
|
+ CollectionsConfig::default()
|
|
|
|
|
+ )?;
|
|
|
|
|
+ collections.run_clairs()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ #[test]
|
|
|
|
|
+ fn run_longphase() -> anyhow::Result<()> {
|
|
|
|
|
+ init();
|
|
|
|
|
+ let id = "CUNY";
|
|
|
|
|
+ let diag_bam = format!("/data/longreads_basic_pipe/{id}/diag/{id}_diag_hs1.bam");
|
|
|
|
|
+ let vcf = format!("/data/longreads_basic_pipe/{id}/diag/ClairS/clair3_normal_tumoral_germline_output.vcf.gz");
|
|
|
|
|
+ let mrd_bam = format!("/data/longreads_basic_pipe/{id}/mrd/{id}_mrd_hs1.bam");
|
|
|
|
|
+
|
|
|
|
|
+ LongphaseHap::new(id, &diag_bam, &vcf, LongphaseConfig::default()).run()?;
|
|
|
|
|
+ LongphaseHap::new(id, &mrd_bam, &vcf, LongphaseConfig::default()).run()
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|