| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- use std::{process::{Command, Stdio}, io::{BufReader, BufRead}};
- use anyhow::{Context, Ok, Result};
- use log::{info, warn};
- use super::{cosmic::Cosmic, gnomad::GnomAD};
- // /data/tools/echtvar anno -e /data/ref/hs1/CosmicCodingMuts.echtvar.zip -e /data/ref/hs1/gnomAD_4-2022_10-gnomad.echtvar.zip BENGUIRAT_diag_clairs_PASSED.vcf.gz test.bcf
- pub fn run_echtvar(in_path: &str, out_path: &str) -> Result<()> {
- let bin_dir = "/data/tools";
- let annot_sources: Vec<&str> = vec![
- "/data/ref/hs1/CosmicCodingMuts.echtvar.zip",
- "/data/ref/hs1/gnomAD_4-2022_10-gnomad.echtvar.zip",
- ]
- .iter()
- .flat_map(|e| vec!["-e", e])
- .collect();
- // info!("Running echtvar anno for {}", in_path);
- let mut cmd = Command::new(format!("{}/echtvar", bin_dir))
- .arg("anno")
- .args(annot_sources)
- .arg(in_path)
- .arg(out_path)
- .stderr(Stdio::piped())
- .spawn()
- .context("echtvar anno failed to start")?;
- let stderr = cmd.stderr.take().unwrap();
- let reader = BufReader::new(stderr);
- reader
- .lines()
- .filter_map(|line| line.ok())
- .filter(|line| line.find("error").is_some())
- .for_each(|line| warn!("{}", line));
- cmd.wait()?;
- Ok(())
- }
- pub fn parse_echtvar_val(s: &str) -> Result<(Option<Cosmic>, Option<GnomAD>)> {
- let mi: Vec<_> = s.match_indices(r";gnomad").collect();
- let (i, _) = mi[0];
- let str_cosmic = &s[..i];
- let str_gnomad = &s[i + 1..];
- let cosmic = if str_cosmic.contains("MISSING") {
- None
- } else {
- Some(str_cosmic.parse::<Cosmic>()?)
- };
- let gnomad = if str_gnomad.contains("-1") {
- None
- } else {
- Some(str_gnomad.parse::<GnomAD>()?)
- };
- Ok((cosmic, gnomad))
- }
|