|
@@ -1,67 +1,6 @@
|
|
|
-// reference="/data/ref/hs1/chm13v2.0.fa"
|
|
|
|
|
-// bcftools="/data/tools/bcftools-1.18/bcftools"
|
|
|
|
|
-//
|
|
|
|
|
-// DIAG_CASE_DIR="/data/longreads_basic_pipe/${name}/diag"
|
|
|
|
|
-// MRD_CASE_DIR="/data/longreads_basic_pipe/${name}/mrd"
|
|
|
|
|
-//
|
|
|
|
|
-// DIAG_OUTPUT_DIR="${DIAG_CASE_DIR}/nanomonsv"
|
|
|
|
|
-// MRD_OUTPUT_DIR="${MRD_CASE_DIR}/nanomonsv"
|
|
|
|
|
-//
|
|
|
|
|
-// DIAG_BAM="${DIAG_CASE_DIR}/${name}_diag_hs1.bam"
|
|
|
|
|
-// MRD_BAM="${MRD_CASE_DIR}/${name}_mrd_hs1.bam"
|
|
|
|
|
-//
|
|
|
|
|
-// DIAG_OUT_PREFIX="${DIAG_OUTPUT_DIR}/${name}_diag"
|
|
|
|
|
-// MRD_OUT_PREFIX="${MRD_OUTPUT_DIR}/${name}_mrd"
|
|
|
|
|
-//
|
|
|
|
|
-// if [ ! -d "$DIAG_OUTPUT_DIR" ]; then
|
|
|
|
|
-// mkdir "$DIAG_OUTPUT_DIR"
|
|
|
|
|
-// fi
|
|
|
|
|
-//
|
|
|
|
|
-// if [ ! -d "$MRD_OUTPUT_DIR" ]; then
|
|
|
|
|
-// mkdir "$MRD_OUTPUT_DIR"
|
|
|
|
|
-// fi
|
|
|
|
|
-//
|
|
|
|
|
-// # PARSE
|
|
|
|
|
-// if [ ! -f "${DIAG_OUT_PREFIX}.bp_info.sorted.bed.gz" ]; then
|
|
|
|
|
-// nanomonsv parse --reference_fasta "$reference" "$DIAG_BAM" "$DIAG_OUT_PREFIX"
|
|
|
|
|
-// fi
|
|
|
|
|
-//
|
|
|
|
|
-// if [ ! -f "${MRD_OUT_PREFIX}.bp_info.sorted.bed.gz" ]; then
|
|
|
|
|
-// echo "[pipe] NanomonSV parse ${MRD_BAM}"
|
|
|
|
|
-// nanomonsv parse --reference_fasta "$reference" "$MRD_BAM" "$MRD_OUT_PREFIX"
|
|
|
|
|
-// fi
|
|
|
|
|
-//
|
|
|
|
|
-// # GET
|
|
|
|
|
-// if [ ! -f "${DIAG_OUT_PREFIX}.nanomonsv.result.vcf" ]; then
|
|
|
|
|
-// nanomonsv get --control_prefix "$MRD_OUT_PREFIX" \
|
|
|
|
|
-// --control_bam "$MRD_BAM" \
|
|
|
|
|
-// --processes 155 \
|
|
|
|
|
-// "$DIAG_OUT_PREFIX" \
|
|
|
|
|
-// "$DIAG_BAM" "$reference"
|
|
|
|
|
-// fi
|
|
|
|
|
-//
|
|
|
|
|
-// # GET MRD
|
|
|
|
|
-// if [ ! -f "${MRD_OUT_PREFIX}.nanomonsv.result.vcf" ]; then
|
|
|
|
|
-// nanomonsv get \
|
|
|
|
|
-// --processes 155 \
|
|
|
|
|
-// "$MRD_OUT_PREFIX" \
|
|
|
|
|
-// "$MRD_BAM" "$reference"
|
|
|
|
|
-// fi
|
|
|
|
|
-//
|
|
|
|
|
-// vcf_passed="${DIAG_OUT_PREFIX}_nanomonsv_PASSED.vcf.gz"
|
|
|
|
|
-// if [ ! -f "$vcf_passed" ]; then
|
|
|
|
|
-// $bcftools sort "${DIAG_OUT_PREFIX}.nanomonsv.result.vcf" | \
|
|
|
|
|
-// $bcftools view -s "TUMOR" --write-index --threads 20 \
|
|
|
|
|
-// -i "FILTER='PASS'" \
|
|
|
|
|
-// -o "$vcf_passed"
|
|
|
|
|
-// fi
|
|
|
|
|
-
|
|
|
|
|
use std::{
|
|
use std::{
|
|
|
fs,
|
|
fs,
|
|
|
- // io::{BufRead, BufReader},
|
|
|
|
|
path::Path,
|
|
path::Path,
|
|
|
- // process::{Command, Stdio},
|
|
|
|
|
- // sync::{Arc, Mutex},
|
|
|
|
|
thread,
|
|
thread,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -99,6 +38,7 @@ pub struct NanomonSV {
|
|
|
pub diag_out_dir: String,
|
|
pub diag_out_dir: String,
|
|
|
pub mrd_out_dir: String,
|
|
pub mrd_out_dir: String,
|
|
|
pub log: String,
|
|
pub log: String,
|
|
|
|
|
+ pub log_dir: String,
|
|
|
pub config: NanomonSVConfig,
|
|
pub config: NanomonSVConfig,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -106,6 +46,7 @@ impl NanomonSV {
|
|
|
pub fn new(id: &str, diag_bam: &str, mrd_bam: &str, config: NanomonSVConfig) -> Self {
|
|
pub fn new(id: &str, diag_bam: &str, mrd_bam: &str, config: NanomonSVConfig) -> Self {
|
|
|
let diag_out_dir = format!("{}/{id}/diag/nanomonsv", &config.result_dir);
|
|
let diag_out_dir = format!("{}/{id}/diag/nanomonsv", &config.result_dir);
|
|
|
let mrd_out_dir = format!("{}/{id}/mrd/nanomonsv", &config.result_dir);
|
|
let mrd_out_dir = format!("{}/{id}/mrd/nanomonsv", &config.result_dir);
|
|
|
|
|
+ let log_dir = format!("{}/{id}/log/nanomonsv", &config.result_dir);
|
|
|
|
|
|
|
|
NanomonSV {
|
|
NanomonSV {
|
|
|
id: id.to_string(),
|
|
id: id.to_string(),
|
|
@@ -115,6 +56,7 @@ impl NanomonSV {
|
|
|
mrd_out_dir,
|
|
mrd_out_dir,
|
|
|
log: String::default(),
|
|
log: String::default(),
|
|
|
config,
|
|
config,
|
|
|
|
|
+ log_dir,
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -126,6 +68,9 @@ impl NanomonSV {
|
|
|
if !Path::new(&self.mrd_out_dir).exists() {
|
|
if !Path::new(&self.mrd_out_dir).exists() {
|
|
|
fs::create_dir_all(&self.mrd_out_dir).unwrap();
|
|
fs::create_dir_all(&self.mrd_out_dir).unwrap();
|
|
|
}
|
|
}
|
|
|
|
|
+ if !Path::new(&self.log_dir).exists() {
|
|
|
|
|
+ fs::create_dir_all(&self.log_dir).unwrap();
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
// Parse
|
|
// Parse
|
|
|
info!("Nanomonsv Parse");
|
|
info!("Nanomonsv Parse");
|
|
@@ -135,79 +80,31 @@ impl NanomonSV {
|
|
|
let diag_info_vcf = format!("{diag_out_prefix}.bp_info.sorted.bed.gz");
|
|
let diag_info_vcf = format!("{diag_out_prefix}.bp_info.sorted.bed.gz");
|
|
|
let mrd_info_vcf = format!("{mrd_out_prefix}.bp_info.sorted.bed.gz");
|
|
let mrd_info_vcf = format!("{mrd_out_prefix}.bp_info.sorted.bed.gz");
|
|
|
|
|
|
|
|
- // let log: Arc<Mutex<String>> = Arc::new(Mutex::new(String::default()));
|
|
|
|
|
-
|
|
|
|
|
let mut threads_handles = Vec::new();
|
|
let mut threads_handles = Vec::new();
|
|
|
if !Path::new(&diag_info_vcf).exists() {
|
|
if !Path::new(&diag_info_vcf).exists() {
|
|
|
- // let bin = self.config.bin.clone();
|
|
|
|
|
- // let reference = self.config.reference.clone();
|
|
|
|
|
let diag_bam = self.diag_bam.clone();
|
|
let diag_bam = self.diag_bam.clone();
|
|
|
- // let log = log.clone();
|
|
|
|
|
let diag_out_prefix = diag_out_prefix.clone();
|
|
let diag_out_prefix = diag_out_prefix.clone();
|
|
|
let config = self.config.clone();
|
|
let config = self.config.clone();
|
|
|
-
|
|
|
|
|
|
|
+ let log_dir = self.log_dir.clone();
|
|
|
let handle = thread::spawn(move || {
|
|
let handle = thread::spawn(move || {
|
|
|
- nanomonsv_parse(&diag_bam, &diag_out_prefix, config).unwrap();
|
|
|
|
|
- // let mut child = Command::new(bin)
|
|
|
|
|
- // .args([
|
|
|
|
|
- // "parse",
|
|
|
|
|
- // "--reference_fasta",
|
|
|
|
|
- // &reference,
|
|
|
|
|
- // &diag_bam,
|
|
|
|
|
- // &diag_out_prefix,
|
|
|
|
|
- // ])
|
|
|
|
|
- // .stdout(Stdio::piped())
|
|
|
|
|
- // .stderr(Stdio::inherit())
|
|
|
|
|
- // .spawn()
|
|
|
|
|
- // .expect("Failed to spawn NanomonSV parse");
|
|
|
|
|
- //
|
|
|
|
|
- // if let Some(stdout) = child.stdout.take() {
|
|
|
|
|
- // let reader = BufReader::new(stdout);
|
|
|
|
|
- // for line in reader.lines().map_while(Result::ok) {
|
|
|
|
|
- // info!("{}", line);
|
|
|
|
|
- // let mut log_lock = log.lock().unwrap();
|
|
|
|
|
- // log_lock.push_str(&line);
|
|
|
|
|
- // log_lock.push('\n');
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // child.wait().unwrap();
|
|
|
|
|
|
|
+ let report = nanomonsv_parse(&diag_bam, &diag_out_prefix, config).unwrap();
|
|
|
|
|
+ report
|
|
|
|
|
+ .save_to_file(&format!("{log_dir}/nanomonsv_parse_diag_"))
|
|
|
|
|
+ .unwrap();
|
|
|
});
|
|
});
|
|
|
threads_handles.push(handle);
|
|
threads_handles.push(handle);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if !Path::new(&mrd_info_vcf).exists() {
|
|
if !Path::new(&mrd_info_vcf).exists() {
|
|
|
- // let bin = self.config.bin.clone();
|
|
|
|
|
- // let reference = self.config.reference.clone();
|
|
|
|
|
- // let log = log.clone();
|
|
|
|
|
let mrd_out_prefix = mrd_out_prefix.clone();
|
|
let mrd_out_prefix = mrd_out_prefix.clone();
|
|
|
let mrd_bam = self.mrd_bam.clone();
|
|
let mrd_bam = self.mrd_bam.clone();
|
|
|
let config = self.config.clone();
|
|
let config = self.config.clone();
|
|
|
-
|
|
|
|
|
|
|
+ let log_dir = self.log_dir.clone();
|
|
|
let handle = thread::spawn(move || {
|
|
let handle = thread::spawn(move || {
|
|
|
- nanomonsv_parse(&mrd_bam, &mrd_out_prefix, config).unwrap();
|
|
|
|
|
- // let mut child = Command::new(bin)
|
|
|
|
|
- // .args([
|
|
|
|
|
- // "parse",
|
|
|
|
|
- // "--reference_fasta",
|
|
|
|
|
- // &reference,
|
|
|
|
|
- // &mrd_bam,
|
|
|
|
|
- // &mrd_out_prefix,
|
|
|
|
|
- // ])
|
|
|
|
|
- // .stdout(Stdio::inherit())
|
|
|
|
|
- // .stderr(Stdio::piped())
|
|
|
|
|
- // .spawn()
|
|
|
|
|
- // .expect("Failed to spawn NanomonSV parse");
|
|
|
|
|
- //
|
|
|
|
|
- // if let Some(stdout) = child.stderr.take() {
|
|
|
|
|
- // let reader = BufReader::new(stdout);
|
|
|
|
|
- // for line in reader.lines().map_while(Result::ok) {
|
|
|
|
|
- // info!("{}", line);
|
|
|
|
|
- // let mut log_lock = log.lock().unwrap();
|
|
|
|
|
- // log_lock.push_str(&line);
|
|
|
|
|
- // log_lock.push('\n');
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- // child.wait().unwrap();
|
|
|
|
|
|
|
+ let report = nanomonsv_parse(&mrd_bam, &mrd_out_prefix, config).unwrap();
|
|
|
|
|
+ report
|
|
|
|
|
+ .save_to_file(&format!("{log_dir}/nanomonsv_parse_mrd_"))
|
|
|
|
|
+ .unwrap();
|
|
|
});
|
|
});
|
|
|
threads_handles.push(handle);
|
|
threads_handles.push(handle);
|
|
|
}
|
|
}
|
|
@@ -223,7 +120,7 @@ impl NanomonSV {
|
|
|
let mrd_result_vcf = format!("{mrd_out_prefix}.nanomonsv.result.vcf");
|
|
let mrd_result_vcf = format!("{mrd_out_prefix}.nanomonsv.result.vcf");
|
|
|
|
|
|
|
|
if !Path::new(&mrd_result_vcf).exists() {
|
|
if !Path::new(&mrd_result_vcf).exists() {
|
|
|
- nanomonsv_get(
|
|
|
|
|
|
|
+ let report = nanomonsv_get(
|
|
|
&self.mrd_bam,
|
|
&self.mrd_bam,
|
|
|
&mrd_out_prefix,
|
|
&mrd_out_prefix,
|
|
|
None,
|
|
None,
|
|
@@ -231,76 +128,31 @@ impl NanomonSV {
|
|
|
self.config.clone(),
|
|
self.config.clone(),
|
|
|
)
|
|
)
|
|
|
.unwrap();
|
|
.unwrap();
|
|
|
- // let mut child = Command::new(&self.config.bin)
|
|
|
|
|
- // .args([
|
|
|
|
|
- // "get",
|
|
|
|
|
- // "--process",
|
|
|
|
|
- // &self.config.thread.to_string(),
|
|
|
|
|
- // &mrd_out_prefix,
|
|
|
|
|
- // &self.mrd_bam,
|
|
|
|
|
- // &self.config.reference,
|
|
|
|
|
- // ])
|
|
|
|
|
- // .stdout(Stdio::inherit())
|
|
|
|
|
- // .stderr(Stdio::piped())
|
|
|
|
|
- // .spawn()
|
|
|
|
|
- // .expect("Failed to spawn nanomonsv");
|
|
|
|
|
- //
|
|
|
|
|
- // if let Some(stdout) = child.stderr.take() {
|
|
|
|
|
- // let reader = BufReader::new(stdout);
|
|
|
|
|
- // for line in reader.lines().map_while(Result::ok) {
|
|
|
|
|
- // info!("{line}");
|
|
|
|
|
- // let mut log_lock = log.lock().unwrap();
|
|
|
|
|
- // log_lock.push_str(&line);
|
|
|
|
|
- // log_lock.push('\n');
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- //
|
|
|
|
|
- // child.wait().unwrap();
|
|
|
|
|
|
|
+ report
|
|
|
|
|
+ .save_to_file(&format!("{}/nanomonsv_get_mrd_", self.log_dir))
|
|
|
|
|
+ .unwrap();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if !Path::new(&diag_result_vcf).exists() {
|
|
if !Path::new(&diag_result_vcf).exists() {
|
|
|
- nanomonsv_get(
|
|
|
|
|
- &self.mrd_bam,
|
|
|
|
|
|
|
+ let report = nanomonsv_get(
|
|
|
|
|
+ &self.diag_bam,
|
|
|
&diag_out_prefix,
|
|
&diag_out_prefix,
|
|
|
Some(&self.mrd_bam),
|
|
Some(&self.mrd_bam),
|
|
|
Some(&mrd_out_prefix),
|
|
Some(&mrd_out_prefix),
|
|
|
self.config.clone(),
|
|
self.config.clone(),
|
|
|
)
|
|
)
|
|
|
.unwrap();
|
|
.unwrap();
|
|
|
- // let mut child = Command::new(&self.config.bin)
|
|
|
|
|
- // .args([
|
|
|
|
|
- // "get",
|
|
|
|
|
- // "--control_prefix",
|
|
|
|
|
- // &mrd_out_prefix,
|
|
|
|
|
- // "--control_bam",
|
|
|
|
|
- // &self.mrd_bam,
|
|
|
|
|
- // "--process",
|
|
|
|
|
- // &self.config.thread.to_string(),
|
|
|
|
|
- // &diag_out_prefix,
|
|
|
|
|
- // &self.diag_bam,
|
|
|
|
|
- // &self.config.reference,
|
|
|
|
|
- // ])
|
|
|
|
|
- // .stdout(Stdio::inherit())
|
|
|
|
|
- // .stderr(Stdio::piped())
|
|
|
|
|
- // .spawn()
|
|
|
|
|
- // .expect("Failed to spawn nanomonsv");
|
|
|
|
|
- //
|
|
|
|
|
- // if let Some(stdout) = child.stderr.take() {
|
|
|
|
|
- // let reader = BufReader::new(stdout);
|
|
|
|
|
- // for line in reader.lines().map_while(Result::ok) {
|
|
|
|
|
- // info!("{line}");
|
|
|
|
|
- // let mut log_lock = log.lock().unwrap();
|
|
|
|
|
- // log_lock.push_str(&line);
|
|
|
|
|
- // log_lock.push('\n');
|
|
|
|
|
- // }
|
|
|
|
|
- // }
|
|
|
|
|
- //
|
|
|
|
|
- // child.wait().unwrap();
|
|
|
|
|
|
|
+ report
|
|
|
|
|
+ .save_to_file(&format!("{}/nanomonsv_get_diag_", self.log_dir,))
|
|
|
|
|
+ .unwrap();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
let vcf_passed = format!("{diag_out_prefix}_nanomonsv_PASSED.vcf.gz");
|
|
let vcf_passed = format!("{diag_out_prefix}_nanomonsv_PASSED.vcf.gz");
|
|
|
if !Path::new(&vcf_passed).exists() {
|
|
if !Path::new(&vcf_passed).exists() {
|
|
|
- bcftools_keep_pass(&diag_result_vcf, &vcf_passed, BcftoolsConfig::default()).unwrap();
|
|
|
|
|
|
|
+ let report = bcftools_keep_pass(&diag_result_vcf, &vcf_passed, BcftoolsConfig::default()).unwrap();
|
|
|
|
|
+ report
|
|
|
|
|
+ .save_to_file(&format!("{}/bcftools_pass_", self.log_dir,))
|
|
|
|
|
+ .unwrap();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|