|
@@ -40,7 +40,7 @@ pub struct Dorado {
|
|
|
|
|
|
|
|
impl Dorado {
|
|
impl Dorado {
|
|
|
pub fn init(case: FlowCellCase, config: Config) -> anyhow::Result<Self> {
|
|
pub fn init(case: FlowCellCase, config: Config) -> anyhow::Result<Self> {
|
|
|
- let data_dir = "/data/longreads_basic_pipe";
|
|
|
|
|
|
|
+ let data_dir = &config.result_dir;
|
|
|
let case_dir = format!("{}/{}", data_dir, case.id);
|
|
let case_dir = format!("{}/{}", data_dir, case.id);
|
|
|
let time_dir = format!("{}/{}", case_dir, case.time_point);
|
|
let time_dir = format!("{}/{}", case_dir, case.time_point);
|
|
|
let bam = format!("{}/{}_{}_hs1.bam", time_dir, case.id, case.time_point);
|
|
let bam = format!("{}/{}_{}_hs1.bam", time_dir, case.id, case.time_point);
|
|
@@ -100,7 +100,7 @@ impl Dorado {
|
|
|
info!("Running: {pipe}");
|
|
info!("Running: {pipe}");
|
|
|
|
|
|
|
|
let pipe_cmd = cmd!("bash", "-c", pipe);
|
|
let pipe_cmd = cmd!("bash", "-c", pipe);
|
|
|
- let mut reader = pipe_cmd.stdout_capture().reader()?;
|
|
|
|
|
|
|
+ let mut reader = pipe_cmd.stderr_capture().reader()?;
|
|
|
|
|
|
|
|
let mut buffer = [0; 1];
|
|
let mut buffer = [0; 1];
|
|
|
let mut line = String::new();
|
|
let mut line = String::new();
|
|
@@ -110,7 +110,7 @@ impl Dorado {
|
|
|
Ok(0) => break, // End of output
|
|
Ok(0) => break, // End of output
|
|
|
Ok(_) => {
|
|
Ok(_) => {
|
|
|
let char = buffer[0] as char;
|
|
let char = buffer[0] as char;
|
|
|
- eprint!("{}", char);
|
|
|
|
|
|
|
+ eprint!("-{}", char);
|
|
|
std::io::stderr().flush()?;
|
|
std::io::stderr().flush()?;
|
|
|
|
|
|
|
|
if char == '\n' {
|
|
if char == '\n' {
|
|
@@ -139,7 +139,7 @@ impl Dorado {
|
|
|
Ok(())
|
|
Ok(())
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- fn run_cramino(&self) -> anyhow::Result<()> {
|
|
|
|
|
|
|
+ pub fn run_cramino(&self) -> anyhow::Result<()> {
|
|
|
let cramino_out = format!(
|
|
let cramino_out = format!(
|
|
|
"{}/{}_{}_hs1_cramino.txt",
|
|
"{}/{}_{}_hs1_cramino.txt",
|
|
|
self.time_dir, self.case.id, self.case.time_point
|
|
self.time_dir, self.case.id, self.case.time_point
|
|
@@ -150,8 +150,6 @@ impl Dorado {
|
|
|
"cramino",
|
|
"cramino",
|
|
|
"-t",
|
|
"-t",
|
|
|
"150",
|
|
"150",
|
|
|
- "--hist",
|
|
|
|
|
- "--checksum",
|
|
|
|
|
"--karyotype",
|
|
"--karyotype",
|
|
|
&self.bam
|
|
&self.bam
|
|
|
)
|
|
)
|
|
@@ -164,7 +162,7 @@ impl Dorado {
|
|
|
Ok(())
|
|
Ok(())
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- fn run_modkit(&self) -> anyhow::Result<()> {
|
|
|
|
|
|
|
+ pub fn run_modkit(&self) -> anyhow::Result<()> {
|
|
|
let mod_summary = format!(
|
|
let mod_summary = format!(
|
|
|
"{}/{}_{}_5mC_5hmC_summary.txt",
|
|
"{}/{}_{}_5mC_5hmC_summary.txt",
|
|
|
self.time_dir, self.case.id, self.case.time_point
|
|
self.time_dir, self.case.id, self.case.time_point
|
|
@@ -181,7 +179,7 @@ impl Dorado {
|
|
|
Ok(())
|
|
Ok(())
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- fn create_fastq(&self) -> anyhow::Result<()> {
|
|
|
|
|
|
|
+ pub fn create_fastq(&self) -> anyhow::Result<()> {
|
|
|
let bam = &self.bam;
|
|
let bam = &self.bam;
|
|
|
let fastq = format!(
|
|
let fastq = format!(
|
|
|
"{}/{}/{}/{}_{}.fastq.gz",
|
|
"{}/{}/{}/{}_{}.fastq.gz",
|
|
@@ -198,7 +196,7 @@ impl Dorado {
|
|
|
Ok(())
|
|
Ok(())
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- fn merge_bam(&self, bam: &Path) -> anyhow::Result<()> {
|
|
|
|
|
|
|
+ pub fn merge_bam(&self, bam: &Path) -> anyhow::Result<()> {
|
|
|
let composition_a: Vec<String> =
|
|
let composition_a: Vec<String> =
|
|
|
pandora_lib_pileup::bam_compo(bam.to_string_lossy().as_ref(), 20000)?
|
|
pandora_lib_pileup::bam_compo(bam.to_string_lossy().as_ref(), 20000)?
|
|
|
.iter()
|
|
.iter()
|
|
@@ -213,7 +211,8 @@ impl Dorado {
|
|
|
.filter(|id| composition_b.contains(id))
|
|
.filter(|id| composition_b.contains(id))
|
|
|
.count();
|
|
.count();
|
|
|
if n_id > 0 {
|
|
if n_id > 0 {
|
|
|
- return Err(anyhow::anyhow!("Already merged"));
|
|
|
|
|
|
|
+ warn!("{} is already merged", self.case.id);
|
|
|
|
|
+ return Ok(());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
let into = PathBuf::from(&self.bam);
|
|
let into = PathBuf::from(&self.bam);
|