diff --git a/Cargo.lock b/Cargo.lock index 9a5384b2..4e1b6f7b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -65,7 +65,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -178,7 +178,7 @@ dependencies = [ "actix-router", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -369,7 +369,7 @@ checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -435,7 +435,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -594,9 +594,9 @@ checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" @@ -716,7 +716,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -886,7 +886,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -897,7 +897,7 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -1047,7 +1047,7 @@ checksum = "04d0b288e3bb1d861c4403c1774a6f7a798781dfc519b3647df2a3dd4ae95f25" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -1228,7 +1228,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -1671,9 +1671,9 @@ dependencies = [ [[package]] name = "libm" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "librocksdb-sys" @@ -1773,6 +1773,15 @@ dependencies = [ "libc", ] +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + [[package]] name = "matrixmultiply" version = "0.3.8" @@ -1795,9 +1804,9 @@ dependencies = [ [[package]] name = "mehari" -version = "0.10.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a95119609578b3515e0b3720c1a21a7a38cd2303a7557f5c0771372fc3d1fe4c" +checksum = "0065ee55e312f43f41238309e4a311b2b16d02ee7ce7765bcb39a70e1c06417b" dependencies = [ "actix-web", "annonars", @@ -2191,9 +2200,9 @@ dependencies = [ "proc-macro2", "quote", "regex", - "regex-syntax", + "regex-syntax 0.7.5", "structmeta", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -2333,7 +2342,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" dependencies = [ "proc-macro2", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -2362,9 +2371,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.67" +version = "1.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328" +checksum = "5b1106fec09662ec6dd98ccac0f81cef56984d0b49f75c92d8cbad76e20c005c" dependencies = [ "unicode-ident", ] @@ -2411,7 +2420,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.37", + "syn 2.0.38", "tempfile", "which", ] @@ -2426,7 +2435,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -2599,8 +2608,17 @@ checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.3.9", + "regex-syntax 0.7.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", ] [[package]] @@ -2611,9 +2629,15 @@ checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.7.5", ] +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + [[package]] name = "regex-syntax" version = "0.7.5" @@ -2681,7 +2705,7 @@ dependencies = [ "regex", "relative-path", "rustc_version 0.4.0", - "syn 2.0.37", + "syn 2.0.38", "unicode-ident", ] @@ -2837,7 +2861,7 @@ checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -2899,7 +2923,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -3046,7 +3070,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -3057,7 +3081,7 @@ checksum = "a60bcaff7397072dca0017d1db428e30d5002e00b6847703e2e42005c95fbe00" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -3079,7 +3103,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -3101,9 +3125,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.37" +version = "2.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8" +checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" dependencies = [ "proc-macro2", "quote", @@ -3165,7 +3189,7 @@ checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -3305,7 +3329,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.38", ] [[package]] @@ -3335,14 +3359,41 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" dependencies = [ + "matchers", "nu-ansi-term", + "once_cell", + "regex", "sharded-slab", "smallvec", "thread_local", + "tracing", "tracing-core", "tracing-log", ] +[[package]] +name = "tracing-test" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a2c0ff408fe918a94c428a3f2ad04e4afd5c95bbc08fcf868eff750c15728a4" +dependencies = [ + "lazy_static", + "tracing-core", + "tracing-subscriber", + "tracing-test-macro", +] + +[[package]] +name = "tracing-test-macro" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "258bc1c4f8e2e73a977812ab339d503e6feeb92700f6d07a6de4d321522d5c08" +dependencies = [ + "lazy_static", + "quote", + "syn 1.0.109", +] + [[package]] name = "triple_accel" version = "0.4.0" @@ -3455,6 +3506,8 @@ dependencies = [ "procfs", "prost", "prost-build", + "rand 0.8.5", + "rand_core 0.6.4", "regex", "rocksdb", "rstest", @@ -3472,6 +3525,7 @@ dependencies = [ "thousands", "tracing", "tracing-subscriber", + "tracing-test", "uuid", ] @@ -3523,7 +3577,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.38", "wasm-bindgen-shared", ] @@ -3545,7 +3599,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.37", + "syn 2.0.38", "wasm-bindgen-backend", "wasm-bindgen-shared", ] diff --git a/Cargo.toml b/Cargo.toml index 7572b6a6..92ae0c9c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,7 +29,7 @@ hgvs = "0.11" indexmap = { version = "2.0", features = ["serde"] } itertools = "0.11" log = "0.4" -mehari = "0.10" +mehari = "0.12" multimap = "0.9" procfs = "0.15" prost = "0.12" @@ -50,7 +50,8 @@ uuid = { version = "1.4", features = ["v4", "fast-rng", "serde"] } noodles-vcf = "0.40.0" rocksdb = { version = "0.21.0", features = ["multi-threaded-cf"] } noodles-bgzf = "0.24.0" - +rand = "0.8" +rand_core = "0.6" [build-dependencies] prost-build = "0.12" @@ -64,6 +65,7 @@ pretty_assertions = "1.4" rstest = "0.18.2" serde_test = "1.0" temp_testdir = "0.2" +tracing-test = "0.2.4" [[bin]] name = "varfish-server-worker" diff --git a/README.md b/README.md index 992fa3dd..49cce8e5 100644 --- a/README.md +++ b/README.md @@ -89,6 +89,8 @@ The `seqvars ingest` command will annotate the variants with the following infor - gnomAD genomes and exomes allele frequencies - gnomAD-mtDNA and HelixMtDb allele frequencies - functional annotation following the [VCF ANN field standard](https://pcingola.github.io/SnpEff/adds/VCFannotationformat_v1.0.pdf) + - `Gene_Name` is writen as HGNC symbol + - `Gene_ID` is written as HGNC ID The command will emit one output line for each variant allele from the input and each affected gene. That is, if two variant alleles affect two genes, four records will be written to the output file. @@ -127,6 +129,114 @@ Overall, the command will emit the following header rows in addition to the `##c > [!NOTE] > Future versions of the worker will annotate the worst effect on a MANE select or MANE Clinical transcript. +## The `strucvars ingest` Command + +This command takes as the input one or more VCF files from structural variant callers and converts it into a file for further querying. +The command supports the following variant callers and can guess the caller from the VCF header and first record. + +- Delly2 +- Dragen-SV (equivalent to Manta) +- Dragen-CNV +- GATK gCNV +- Manta +- MELT +- PopDel + +One record will be written out for each variant, each with a single alternate allele. + +The following symbolic `ALT` alleles are used: + +- `` +- `` +- `` +- `` +- VCF break-end syntax, e.g., `T[chr1:5[` + +The following `INFO` fields are written: + +- `IMPRECISE` -- flag that specifies that this is an imprecise variant +- `END` -- end position of the variants +- `SVTYPE` -- type of the variant, one of ``, ``, ``, ``, `BND` +- `SVLEN` -- absolute length of the SV for linear variants, `.` for non-linear variants +- `SVCLAIM` -- specificaton of `D` (change in abundance), `J` (novel junction), or `DJ` (both change in abundance and novel junction) +- `callers` -- (non-standard field), list of callers that called the variant +- `chr2` -- (non-standard field), second chromosome for BND variants +- `annsv` -- (non-standard field), annotation of the variant effect on each affected gene + +The `annsv` field is a pipe-character (`|`) separated list of the following fields: + +1. symbolic alternate alele, e.g., `` +2. effects on the gene's transcript, separated by `&` + - `transcript_variant` -- variant affects the whole transcript + - `exon_variant` -- variant affects exon + - `splice_region_variant` -- variant affects splice region + - `intron_variant` -- variant affects only intron + - `upstream_variant` -- variant upsream of gene + - `downstream_variant` -- variant downstream of gene + - `intergenic_variant` -- default for "no gene affected", but never written +3. HGNC gene symbol, e.g., `BRCA1` +4. HGNC gene ID, e.g., `HGNC:1100` + +The following `FORMAT` fields are written: + +- `GT` -- (standard field) genotype, if applicable +- `GQ` -- (standard field) genotype quality, if applicable +- `pec` -- total coverage with paired-end reads +- `pev` -- paired-end reads supporting the variant +- `src` -- total coverage with split reads +- `srv` -- split reads supporting the variant +- `amq` -- average mapping quality over the variant +- `cn` -- copy number of the variant in the sample +- `anc` -- average normalized coverage over the variant in the sample +- `pc` -- point count (windows/targets/probes) + + +Overall, the command will emit the following header rows in addition to the `##contig=` lines. + +``` +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##fileDate=20230421 +##x-varfish-genome-build=GRCh37 +##SAMPLE= +##SAMPLE= +##SAMPLE= +##PEDIGREE= +##PEDIGREE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +``` + +> [!NOTE] +> The `strucvars ingest` step does not perform any annotation. +> It only merges the input VCF files from multiple callers (all files must have the same samples) and converts them into the internal format. +> The `INFO/annsv` field is filled by `strucvars query`. + # Developer Information This section is only relevant for developers of `varfish-server-worker`. diff --git a/src/common.rs b/src/common.rs index fee69574..bd1c58f7 100644 --- a/src/common.rs +++ b/src/common.rs @@ -2,18 +2,18 @@ use std::{ fs::File, - io::{BufRead, BufReader, BufWriter, Write}, + io::{BufRead, BufWriter, Write}, ops::Range, path::Path, }; use byte_unit::Byte; -use clap_verbosity_flag::{InfoLevel, Verbosity}; - use clap::Parser; -use flate2::{bufread::MultiGzDecoder, write::GzEncoder, Compression}; +use clap_verbosity_flag::{InfoLevel, Verbosity}; +use flate2::{write::GzEncoder, Compression}; use hgvs::static_data::Assembly; use indexmap::IndexMap; +use noodles_vcf as vcf; /// Commonly used command line arguments. #[derive(Parser, Debug)] @@ -67,24 +67,6 @@ pub fn build_chrom_map() -> IndexMap { result } -/// Transparently open a file with gzip decoder. -pub fn open_read_maybe_gz

(path: P) -> Result, anyhow::Error> -where - P: AsRef, -{ - if path.as_ref().extension().map(|s| s.to_str()) == Some(Some("gz")) { - tracing::trace!("Opening {:?} as gzip for reading", path.as_ref()); - let file = File::open(path)?; - let bufreader = BufReader::new(file); - let decoder = MultiGzDecoder::new(bufreader); - Ok(Box::new(BufReader::new(decoder))) - } else { - tracing::trace!("Opening {:?} as plain text for reading", path.as_ref()); - let file = File::open(path).map(BufReader::new)?; - Ok(Box::new(BufReader::new(file))) - } -} - /// Transparently opena file with gzip encoder. pub fn open_write_maybe_gz

(path: P) -> Result, anyhow::Error> where @@ -234,6 +216,165 @@ mod tests { } } +/// Return the version of the `varfish-server-worker` crate and `x.y.z` in tests. +pub fn worker_version() -> &'static str { + if cfg!(test) { + "x.y.z" + } else { + env!("CARGO_PKG_VERSION") + } +} + +/// Add contigs for GRCh37. +pub fn add_contigs_37( + builder: vcf::header::Builder, +) -> Result { + use vcf::header::record::value::map::Contig; + use vcf::header::record::value::Map; + + let mut builder = builder; + + let specs: &[(&str, usize); 25] = &[ + ("1", 249250621), + ("2", 243199373), + ("3", 198022430), + ("4", 191154276), + ("5", 180915260), + ("6", 171115067), + ("7", 159138663), + ("8", 146364022), + ("9", 141213431), + ("10", 135534747), + ("11", 135006516), + ("12", 133851895), + ("13", 115169878), + ("14", 107349540), + ("15", 102531392), + ("16", 90354753), + ("17", 81195210), + ("18", 78077248), + ("19", 59128983), + ("20", 63025520), + ("21", 48129895), + ("22", 51304566), + ("X", 155270560), + ("Y", 59373566), + ("MT", 16569), + ]; + + for (contig, length) in specs { + builder = builder.add_contig( + contig + .parse() + .map_err(|_| anyhow::anyhow!("invalid contig: {}", contig))?, + Map::::builder() + .set_length(*length) + .insert( + "assembly" + .parse() + .map_err(|_| anyhow::anyhow!("invalid key: assembly"))?, + "GRCh37", + ) + .insert( + "species" + .parse() + .map_err(|_| anyhow::anyhow!("invalid key: species"))?, + "Homo sapiens", + ) + .build()?, + ); + } + + builder = builder.insert( + "x-varfish-genome-build".parse()?, + vcf::header::record::Value::from("GRCh37"), + )?; + + Ok(builder) +} + +/// Add contigs for GRCh38. +pub fn add_contigs_38( + builder: vcf::header::Builder, +) -> Result { + use vcf::header::record::value::map::Contig; + use vcf::header::record::value::Map; + + let mut builder = builder; + + let specs: &[(&str, usize); 25] = &[ + ("chr1", 248956422), + ("chr2", 242193529), + ("chr3", 198295559), + ("chr4", 190214555), + ("chr5", 181538259), + ("chr6", 170805979), + ("chr7", 159345973), + ("chr8", 145138636), + ("chr9", 138394717), + ("chr10", 133797422), + ("chr11", 135086622), + ("chr12", 133275309), + ("chr13", 114364328), + ("chr14", 107043718), + ("chr15", 101991189), + ("chr16", 90338345), + ("chr17", 83257441), + ("chr18", 80373285), + ("chr19", 58617616), + ("chr20", 64444167), + ("chr21", 46709983), + ("chr22", 50818468), + ("chrX", 156040895), + ("chrY", 57227415), + ("chrM", 16569), + ]; + + for (contig, length) in specs { + builder = builder.add_contig( + contig + .parse() + .map_err(|_| anyhow::anyhow!("invalid contig: {}", contig))?, + Map::::builder() + .set_length(*length) + .insert( + "assembly" + .parse() + .map_err(|_| anyhow::anyhow!("invalid key: assembly"))?, + "GRCh38", + ) + .insert( + "species" + .parse() + .map_err(|_| anyhow::anyhow!("invalid key: species"))?, + "Homo sapiens", + ) + .build()?, + ); + } + + builder = builder.insert( + "x-varfish-genome-build".parse()?, + vcf::header::record::Value::from("GRCh38"), + )?; + + Ok(builder) +} + +#[cfg(test)] +pub(crate) fn read_to_bytes

(path: P) -> Result, anyhow::Error> +where + P: AsRef, +{ + use std::io::Read; + + let mut f = std::fs::File::open(&path).expect("no file found"); + let metadata = std::fs::metadata(&path).expect("unable to read metadata"); + let mut buffer = vec![0; metadata.len() as usize]; + f.read_exact(&mut buffer).expect("buffer overflow"); + Ok(buffer) +} + #[cfg(test)] mod test { use std::io::Read; @@ -253,6 +394,8 @@ mod test { #[case(true)] #[case(false)] fn open_write_maybe_gz(#[case] is_gzip: bool) -> Result<(), anyhow::Error> { + mehari::common::set_snapshot_suffix!("{:?}", is_gzip); + let filename = if is_gzip { "test.txt" } else { "test.txt.gz" }; let tmp_dir = temp_testdir::TempDir::default(); @@ -270,24 +413,6 @@ mod test { Ok(()) } - #[rstest::rstest] - #[case(true)] - #[case(false)] - fn open_read_maybe_gz(#[case] is_gzip: bool) -> Result<(), anyhow::Error> { - let mut f = super::open_read_maybe_gz(if is_gzip { - "tests/common/test.txt.gz" - } else { - "tests/common/test.txt" - })?; - - let mut buf = String::new(); - f.read_to_string(&mut buf)?; - - insta::assert_snapshot!(&buf); - - Ok(()) - } - #[rstest::rstest] #[case(0..10, 0..10, 1.0)] #[case(0..10, 5..15, 0.5)] diff --git a/src/db/mk_inhouse/cli.rs b/src/db/mk_inhouse/cli.rs index e0219b4a..74491d72 100644 --- a/src/db/mk_inhouse/cli.rs +++ b/src/db/mk_inhouse/cli.rs @@ -10,6 +10,7 @@ use std::{ use bio::data_structures::interval_tree::IntervalTree; use clap::{command, Parser}; +use mehari::common::open_read_maybe_gz; use serde_json::to_writer; use serde_jsonlines::JsonLinesReader; use strum::IntoEnumIterator; @@ -17,10 +18,9 @@ use thousands::Separable; use crate::{ common::{ - build_chrom_map, open_read_maybe_gz, open_write_maybe_gz, read_lines, trace_rss_now, - GenomeRelease, CHROMS, + build_chrom_map, open_write_maybe_gz, read_lines, trace_rss_now, GenomeRelease, CHROMS, }, - sv::query::schema::SvType, + strucvars::query::schema::SvType, }; /// Create one file with records for each chromosome and SV type. diff --git a/src/db/mk_inhouse/input.rs b/src/db/mk_inhouse/input.rs index 6605e4c2..b8f874ca 100644 --- a/src/db/mk_inhouse/input.rs +++ b/src/db/mk_inhouse/input.rs @@ -2,7 +2,7 @@ use serde::{de::IntoDeserializer, Deserialize, Deserializer, Serialize}; -use crate::sv::query::schema::{StrandOrientation, SvType}; +use crate::strucvars::query::schema::{StrandOrientation, SvType}; /// Representation of the fields from the `StructuralVariant` table from /// VarFish Server that we need for building the background records. diff --git a/src/db/mk_inhouse/output.rs b/src/db/mk_inhouse/output.rs index 8aa0ac7f..19c45d11 100644 --- a/src/db/mk_inhouse/output.rs +++ b/src/db/mk_inhouse/output.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; -use crate::sv::query::schema::{StrandOrientation, SvType}; +use crate::strucvars::query::schema::{StrandOrientation, SvType}; use super::input::Record as InputRecord; diff --git a/src/db/to_bin/clinvar/input.rs b/src/db/to_bin/clinvar/input.rs index ed05d702..6e714cae 100644 --- a/src/db/to_bin/clinvar/input.rs +++ b/src/db/to_bin/clinvar/input.rs @@ -3,7 +3,7 @@ //! Note that not the full model is implemented, only the parts that are needed for the //! conversion of the ClinVar structural variants. -use crate::sv::query::clinvar::pbs::{Pathogenicity, VariationType}; +use crate::strucvars::query::clinvar::pbs::{Pathogenicity, VariationType}; /// Accession of a ClinVar record. #[derive(Debug, serde::Deserialize, serde::Serialize)] diff --git a/src/db/to_bin/clinvar/mod.rs b/src/db/to_bin/clinvar/mod.rs index 14099bd7..11a21285 100644 --- a/src/db/to_bin/clinvar/mod.rs +++ b/src/db/to_bin/clinvar/mod.rs @@ -2,12 +2,13 @@ use std::{fs::File, io::BufRead, io::Write, path::Path, time::Instant}; +use mehari::common::open_read_maybe_gz; use prost::Message; use thousands::Separable; use crate::{ - common::{build_chrom_map, open_read_maybe_gz, trace_rss_now}, - sv::query::clinvar::pbs::{Pathogenicity, SvDatabase, SvRecord}, + common::{build_chrom_map, trace_rss_now}, + strucvars::query::clinvar::pbs::{Pathogenicity, SvDatabase, SvRecord}, }; pub mod input; @@ -71,7 +72,7 @@ fn convert_jsonl_to_protobuf( for measure in &record.reference_clinvar_assertion.measures.measures { // convert from JSONL to protocolbuffers: variation type let variation_type: Result< - crate::sv::query::clinvar::pbs::VariationType, + crate::strucvars::query::clinvar::pbs::VariationType, anyhow::Error, > = measure.r#type.try_into(); let variation_type = if let Ok(variation_type) = variation_type { @@ -182,22 +183,14 @@ where #[cfg(test)] mod test { - use crate::common::open_read_maybe_gz; use crate::db::to_bin::clinvar::input::Assembly; - - macro_rules! set_snapshot_suffix { - ($($expr:expr),*) => { - let mut settings = insta::Settings::clone_current(); - settings.set_snapshot_suffix(format!($($expr,)*)); - let _guard = settings.bind_to_scope(); - } - } + use mehari::common::open_read_maybe_gz; #[rstest::rstest] #[case(Assembly::Grch37)] #[case(Assembly::Grch38)] fn run_convert_jsonl_to_protobuf(#[case] assembly: Assembly) -> Result<(), anyhow::Error> { - set_snapshot_suffix!("{:?}", assembly); + mehari::common::set_snapshot_suffix!("{:?}", assembly); let reader = open_read_maybe_gz( "tests/db/to-bin/varfish-db-downloader/vardbs/clinvar/clinvar-svs.jsonl", )?; diff --git a/src/db/to_bin/gene_region.rs b/src/db/to_bin/gene_region.rs index 2d17a7af..b5f1fcd0 100644 --- a/src/db/to_bin/gene_region.rs +++ b/src/db/to_bin/gene_region.rs @@ -2,11 +2,12 @@ use std::{fs::File, io::Write, path::Path, time::Instant}; +use mehari::common::open_read_maybe_gz; use prost::Message; use thousands::Separable; use crate::{ - common::{build_chrom_map, numeric_gene_id, open_read_maybe_gz, trace_rss_now}, + common::{build_chrom_map, numeric_gene_id, trace_rss_now}, db::pbs::{GeneRegionDatabase, GeneRegionRecord}, }; diff --git a/src/db/to_bin/masked.rs b/src/db/to_bin/masked.rs index 6410c60b..f2fdeae5 100644 --- a/src/db/to_bin/masked.rs +++ b/src/db/to_bin/masked.rs @@ -2,11 +2,12 @@ use std::{fs::File, io::Write, path::Path, time::Instant}; +use mehari::common::open_read_maybe_gz; use prost::Message; use thousands::Separable; use crate::{ - common::{build_chrom_map, open_read_maybe_gz, trace_rss_now}, + common::{build_chrom_map, trace_rss_now}, db::pbs::{MaskedDatabase, MaskedDbRecord}, }; diff --git a/src/db/to_bin/vardbs/input.rs b/src/db/to_bin/vardbs/input.rs index a2bfa6d9..45472f11 100644 --- a/src/db/to_bin/vardbs/input.rs +++ b/src/db/to_bin/vardbs/input.rs @@ -5,7 +5,7 @@ use serde::Deserialize; use tracing::error; use crate::db::mk_inhouse::output::Record as InhouseDbRecord; -use crate::sv::query::schema::SvType; +use crate::strucvars::query::schema::SvType; /// dbVar database record as read from TSV file. #[derive(Debug, Deserialize)] diff --git a/src/db/to_bin/vardbs/mod.rs b/src/db/to_bin/vardbs/mod.rs index 4239d6ab..a99e27db 100644 --- a/src/db/to_bin/vardbs/mod.rs +++ b/src/db/to_bin/vardbs/mod.rs @@ -6,14 +6,15 @@ use std::path::Path; use std::time::Instant; use anyhow::anyhow; +use mehari::common::open_read_maybe_gz; use prost::Message; use thousands::Separable; -use crate::common::{build_chrom_map, open_read_maybe_gz, trace_rss_now}; +use crate::common::{build_chrom_map, trace_rss_now}; use crate::db; use crate::db::mk_inhouse::output::Record as InhouseDbRecord; use crate::db::pbs::{BackgroundDatabase, BgDbRecord}; -use crate::sv::query::schema::SvType; +use crate::strucvars::query::schema::SvType; use self::input::InputRecord; diff --git a/src/db/to_bin/xlink.rs b/src/db/to_bin/xlink.rs index fd78f442..75b91c3f 100644 --- a/src/db/to_bin/xlink.rs +++ b/src/db/to_bin/xlink.rs @@ -2,11 +2,12 @@ use std::{fs::File, io::Write, path::Path, time::Instant}; +use mehari::common::open_read_maybe_gz; use prost::Message; use thousands::Separable; use crate::{ - common::{numeric_gene_id, open_read_maybe_gz, trace_rss_now}, + common::{numeric_gene_id, trace_rss_now}, db::pbs::{XlinkDatabase, XlinkRecord}, }; diff --git a/src/main.rs b/src/main.rs index 6ea9bca6..7badf899 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,7 @@ pub mod common; pub mod db; pub mod seqvars; -pub mod sv; +pub mod strucvars; use clap::{Args, Parser, Subcommand}; use console::{Emoji, Term}; @@ -32,8 +32,8 @@ struct Cli { enum Commands { /// Database building related commands. Db(Db), - /// SV filtration related commands. - Sv(Sv), + /// Structural variant related commands. + Strucvars(Strucvars), /// Sequence variant related commands. Seqvars(Seqvars), } @@ -58,16 +58,17 @@ enum DbCommands { /// Parsing of "sv *" sub commands. #[derive(Debug, Args)] #[command(args_conflicts_with_subcommands = true)] -struct Sv { +struct Strucvars { /// The sub command to run #[command(subcommand)] - command: SvCommands, + command: StrucvarsCommands, } /// Enum supporting the parsing of "sv *" sub commands. #[derive(Debug, Subcommand)] -enum SvCommands { - Query(sv::query::Args), +enum StrucvarsCommands { + Ingest(strucvars::ingest::Args), + Query(strucvars::query::Args), } /// Parsing of "seqvars *" sub commands. @@ -121,9 +122,12 @@ fn main() -> Result<(), anyhow::Error> { seqvars::ingest::run(&cli.common, args)?; } }, - Commands::Sv(sv) => match &sv.command { - SvCommands::Query(args) => { - sv::query::run(&cli.common, args)?; + Commands::Strucvars(strucvars) => match &strucvars.command { + StrucvarsCommands::Ingest(args) => { + strucvars::ingest::run(&cli.common, args)?; + } + StrucvarsCommands::Query(args) => { + strucvars::query::run(&cli.common, args)?; } }, } diff --git a/src/seqvars/ingest/header.rs b/src/seqvars/ingest/header.rs index ac857839..4c978ef0 100644 --- a/src/seqvars/ingest/header.rs +++ b/src/seqvars/ingest/header.rs @@ -421,21 +421,13 @@ mod test { use super::VariantCaller; - macro_rules! set_snapshot_suffix { - ($($expr:expr),*) => { - let mut settings = insta::Settings::clone_current(); - settings.set_snapshot_suffix(format!($($expr,)*)); - let _guard = settings.bind_to_scope(); - } - } - #[rstest] #[case("tests/seqvars/ingest/example_dragen.07.021.624.3.10.4.vcf")] #[case("tests/seqvars/ingest/example_dragen.07.021.624.3.10.9.vcf")] #[case("tests/seqvars/ingest/example_gatk_hc.3.7-0.vcf")] #[case("tests/seqvars/ingest/example_gatk_hc.4.4.0.0.vcf")] fn variant_caller_guess(#[case] path: &str) -> Result<(), anyhow::Error> { - set_snapshot_suffix!("{}", path.split('/').last().unwrap()); + mehari::common::set_snapshot_suffix!("{}", path.split('/').last().unwrap()); let vcf_header = noodles_vcf::reader::Builder .build_from_path(path)? @@ -452,7 +444,7 @@ mod test { #[case("tests/seqvars/ingest/example_gatk_hc.3.7-0.vcf")] #[case("tests/seqvars/ingest/example_gatk_hc.4.4.0.0.vcf")] fn build_output_header_37(#[case] path: &str) -> Result<(), anyhow::Error> { - set_snapshot_suffix!("{}", path.split('/').last().unwrap()); + mehari::common::set_snapshot_suffix!("{}", path.split('/').last().unwrap()); let tmpdir = temp_testdir::TempDir::default(); let pedigree = PedigreeByName::from_path(path.replace(".vcf", ".ped")).unwrap(); @@ -485,7 +477,7 @@ mod test { #[case("tests/seqvars/ingest/example_gatk_hc.3.7-0.vcf")] #[case("tests/seqvars/ingest/example_gatk_hc.4.4.0.0.vcf")] fn build_output_header_38(#[case] path: &str) -> Result<(), anyhow::Error> { - set_snapshot_suffix!("{}", path.split('/').last().unwrap()); + mehari::common::set_snapshot_suffix!("{}", path.split('/').last().unwrap()); let tmpdir = temp_testdir::TempDir::default(); let pedigree = PedigreeByName::from_path(path.replace(".vcf", ".ped")).unwrap(); diff --git a/src/seqvars/ingest/mod.rs b/src/seqvars/ingest/mod.rs index 27a67322..0ad4e0b7 100644 --- a/src/seqvars/ingest/mod.rs +++ b/src/seqvars/ingest/mod.rs @@ -2,8 +2,9 @@ use std::sync::{Arc, OnceLock}; -use crate::common::{self, open_read_maybe_gz, open_write_maybe_gz, GenomeRelease}; +use crate::common::{self, open_write_maybe_gz, worker_version, GenomeRelease}; use mehari::annotate::seqvars::provider::MehariProvider; +use mehari::common::open_read_maybe_gz; use noodles_vcf as vcf; use thousands::Separable; @@ -33,15 +34,6 @@ pub struct Args { pub path_out: String, } -/// Return the version of the `varfish-server-worker` crate and `x.y.z` in tests. -fn worker_version() -> &'static str { - if cfg!(test) { - "x.y.z" - } else { - env!("CARGO_PKG_VERSION") - } -} - /// Return path component fo rth egiven assembly. pub fn path_component(genomebuild: GenomeRelease) -> &'static str { match genomebuild { @@ -475,20 +467,11 @@ pub fn run(args_common: &crate::common::Args, args: &Args) -> Result<(), anyhow: #[cfg(test)] mod test { - use std::io::Read; use rstest::rstest; use crate::common::GenomeRelease; - macro_rules! set_snapshot_suffix { - ($($expr:expr),*) => { - let mut settings = insta::Settings::clone_current(); - settings.set_snapshot_suffix(format!($($expr,)*)); - let _guard = settings.bind_to_scope(); - } - } - #[rstest] #[case("tests/seqvars/ingest/example_dragen.07.021.624.3.10.4.vcf")] #[case("tests/seqvars/ingest/example_dragen.07.021.624.3.10.9.vcf")] @@ -497,7 +480,10 @@ mod test { #[case("tests/seqvars/ingest/NA12878_dragen.vcf")] #[case("tests/seqvars/ingest/Case_1.vcf")] fn result_snapshot_test(#[case] path: &str) -> Result<(), anyhow::Error> { - set_snapshot_suffix!("{}", path.split('/').last().unwrap().replace('.', "_")); + mehari::common::set_snapshot_suffix!( + "{}", + path.split('/').last().unwrap().replace('.', "_") + ); let tmpdir = temp_testdir::TempDir::default(); @@ -521,17 +507,6 @@ mod test { Ok(()) } - fn read_to_bytes

(path: P) -> Result, anyhow::Error> - where - P: AsRef, - { - let mut f = std::fs::File::open(&path).expect("no file found"); - let metadata = std::fs::metadata(&path).expect("unable to read metadata"); - let mut buffer = vec![0; metadata.len() as usize]; - f.read_exact(&mut buffer).expect("buffer overflow"); - Ok(buffer) - } - #[test] fn result_snapshot_test_gz() -> Result<(), anyhow::Error> { let tmpdir = temp_testdir::TempDir::default(); @@ -554,8 +529,8 @@ mod test { }; super::run(&args_common, &args)?; - let mut buffer = Vec::new(); - hxdmp::hexdump(&read_to_bytes(&args.path_out)?, &mut buffer)?; + let mut buffer: Vec = Vec::new(); + hxdmp::hexdump(&crate::common::read_to_bytes(&args.path_out)?, &mut buffer)?; insta::assert_snapshot!(String::from_utf8_lossy(&buffer)); Ok(()) diff --git a/src/snapshots/varfish_server_worker__common__test__open_read_maybe_gz-2.snap b/src/snapshots/varfish_server_worker__common__test__open_read_maybe_gz@false.snap similarity index 100% rename from src/snapshots/varfish_server_worker__common__test__open_read_maybe_gz-2.snap rename to src/snapshots/varfish_server_worker__common__test__open_read_maybe_gz@false.snap diff --git a/src/snapshots/varfish_server_worker__common__test__open_read_maybe_gz.snap b/src/snapshots/varfish_server_worker__common__test__open_read_maybe_gz@true.snap similarity index 100% rename from src/snapshots/varfish_server_worker__common__test__open_read_maybe_gz.snap rename to src/snapshots/varfish_server_worker__common__test__open_read_maybe_gz@true.snap diff --git a/src/snapshots/varfish_server_worker__common__test__open_write_maybe_gz-2.snap b/src/snapshots/varfish_server_worker__common__test__open_write_maybe_gz@false.snap similarity index 100% rename from src/snapshots/varfish_server_worker__common__test__open_write_maybe_gz-2.snap rename to src/snapshots/varfish_server_worker__common__test__open_write_maybe_gz@false.snap diff --git a/src/snapshots/varfish_server_worker__common__test__open_write_maybe_gz.snap b/src/snapshots/varfish_server_worker__common__test__open_write_maybe_gz@true.snap similarity index 100% rename from src/snapshots/varfish_server_worker__common__test__open_write_maybe_gz.snap rename to src/snapshots/varfish_server_worker__common__test__open_write_maybe_gz@true.snap diff --git a/src/snapshots/varfish_server_worker__common__test__open_write_maybe_gz_plain.snap b/src/snapshots/varfish_server_worker__common__test__open_write_maybe_gz_plain.snap deleted file mode 100644 index a7fbc40b..00000000 --- a/src/snapshots/varfish_server_worker__common__test__open_write_maybe_gz_plain.snap +++ /dev/null @@ -1,5 +0,0 @@ ---- -source: src/common.rs -expression: "format!(\"{:x?}\", & buf)" ---- -[] diff --git a/src/strucvars/ingest/header.rs b/src/strucvars/ingest/header.rs new file mode 100644 index 00000000..52c84e08 --- /dev/null +++ b/src/strucvars/ingest/header.rs @@ -0,0 +1,372 @@ +use std::collections::HashSet; + +use noodles_vcf as vcf; +use vcf::header::{record::value::map::AlternativeAllele, SampleNames}; + +use crate::common::{add_contigs_37, add_contigs_38, GenomeRelease}; + +/// Return token for caller name. +fn caller_name(sv_caller: &mehari::annotate::strucvars::SvCaller) -> &'static str { + match sv_caller { + mehari::annotate::strucvars::SvCaller::Delly { .. } => "Delly", + mehari::annotate::strucvars::SvCaller::DragenSv { .. } => "DragenSv", + mehari::annotate::strucvars::SvCaller::DragenCnv { .. } => "DragenCnv", + mehari::annotate::strucvars::SvCaller::Gcnv { .. } => "Gcnv", + mehari::annotate::strucvars::SvCaller::Manta { .. } => "Manta", + mehari::annotate::strucvars::SvCaller::Melt { .. } => "Melt", + mehari::annotate::strucvars::SvCaller::Popdel { .. } => "Popdel", + } +} + +/// Return caller version. +fn caller_version(sv_caller: &mehari::annotate::strucvars::SvCaller) -> String { + match sv_caller { + mehari::annotate::strucvars::SvCaller::Delly { version } + | mehari::annotate::strucvars::SvCaller::DragenSv { version } + | mehari::annotate::strucvars::SvCaller::DragenCnv { version } + | mehari::annotate::strucvars::SvCaller::Gcnv { version } + | mehari::annotate::strucvars::SvCaller::Manta { version } + | mehari::annotate::strucvars::SvCaller::Melt { version } + | mehari::annotate::strucvars::SvCaller::Popdel { version } => version.clone(), + } +} + +/// Generate the output header from the input header. +pub fn build_output_header( + input_sample_names: &SampleNames, + input_sv_callers: &[&mehari::annotate::strucvars::SvCaller], + pedigree: Option<&mehari::ped::PedigreeByName>, + genomebuild: GenomeRelease, + file_date: &str, + worker_version: &str, + case_uuid: &str, +) -> Result { + use vcf::header::record::value::{ + map::{format, info, Filter, Format, Info}, + Map, + }; + use vcf::header::Number; + use vcf::record::genotypes::keys::key; + + let builder = vcf::Header::builder() + .insert( + "fileDate".parse()?, + vcf::header::record::Value::from(file_date), + )? + .add_filter("PASS", Map::::new("All filters passed")) + .add_info( + vcf::record::info::field::key::IS_IMPRECISE, + Map::::from(&vcf::record::info::field::key::IS_IMPRECISE), + ) + .add_info( + vcf::record::info::field::key::END_POSITION, + Map::::from(&vcf::record::info::field::key::END_POSITION), + ) + .add_info( + vcf::record::info::field::key::SV_TYPE, + Map::::from(&vcf::record::info::field::key::SV_TYPE), + ) + .add_info( + vcf::record::info::field::key::SV_LENGTHS, + Map::::from(&vcf::record::info::field::key::SV_LENGTHS), + ) + .add_info( + vcf::record::info::field::key::SV_CLAIM, + Map::::from(&vcf::record::info::field::key::SV_CLAIM), + ) + .add_info( + "callers".parse()?, + Map::::new( + Number::Unknown, + info::Type::String, + "Callers that called the variant", + ), + ) + .add_info( + "chr2".parse()?, + Map::::new( + Number::Count(1), + info::Type::String, + "Second chromosome, if not equal to CHROM", + ), + ) + .add_info( + "annsv".parse()?, + Map::::new( + Number::Count(1), + info::Type::String, + "Effect annotations: 'Allele | Annotation | Gene_Name | Gene_ID'", + ), + ) + .add_format( + key::CONDITIONAL_GENOTYPE_QUALITY, + Map::::from(&key::CONDITIONAL_GENOTYPE_QUALITY), + ) + .add_format(key::GENOTYPE, Map::::from(&key::GENOTYPE)) + .add_format( + "pec".parse()?, + Map::::new( + Number::Count(1), + format::Type::Integer, + "Total coverage with paired-end reads", + ), + ) + .add_format( + "pev".parse()?, + Map::::new( + Number::Count(1), + format::Type::Integer, + "Paired-end reads supporting the variant", + ), + ) + .add_format( + "src".parse()?, + Map::::new( + Number::Count(1), + format::Type::Integer, + "Total coverage with split reads", + ), + ) + .add_format( + "srv".parse()?, + Map::::new( + Number::Count(1), + format::Type::Integer, + "Split reads supporting the variant", + ), + ) + .add_format( + "amq".parse()?, + Map::::new( + Number::Count(1), + format::Type::Float, + "Average mapping quality over the variant", + ), + ) + .add_format( + "cn".parse()?, + Map::::new( + Number::Count(1), + format::Type::Integer, + "Copy number of the variant in the sample", + ), + ) + .add_format( + "anc".parse()?, + Map::::new( + Number::Count(1), + format::Type::Float, + "Average normalized coverage over the variant in the sample", + ), + ) + .add_format( + "pc".parse()?, + Map::::new( + Number::Count(1), + format::Type::Integer, + "Point count (windows/targets/probes)", + ), + ) + .add_alternative_allele("DEL".parse()?, Map::::new("Deletion")) + .add_alternative_allele("DUP".parse()?, Map::::new("Duplication")) + .add_alternative_allele("INS".parse()?, Map::::new("Insertion")) + .add_alternative_allele( + "CNV".parse()?, + Map::::new("Copy Number Variation"), + ) + .add_alternative_allele("INV".parse()?, Map::::new("Inversion")); + + let mut builder = match genomebuild { + GenomeRelease::Grch37 => add_contigs_37(builder), + GenomeRelease::Grch38 => add_contigs_38(builder), + } + .map_err(|e| anyhow::anyhow!("problem adding contigs: {}", e))?; + + if let Some(pedigree) = pedigree { + let ped_idv = pedigree + .individuals + .iter() + .map(|(name, _)| name.clone()) + .collect::>(); + let input_idv = input_sample_names.iter().cloned().collect::>(); + if !ped_idv.eq(&input_idv) { + anyhow::bail!( + "pedigree individuals = {:?} != input individuals: {:?}", + &ped_idv, + &input_idv + ) + } + + for name in input_sample_names { + let i = pedigree + .individuals + .get(name) + .expect("checked equality above"); + if input_sample_names.contains(&i.name) { + builder = builder.add_sample_name(i.name.clone()); + } + + // Add SAMPLE entry. + builder = builder.insert( + "SAMPLE".parse()?, + noodles_vcf::header::record::Value::Map( + i.name.clone(), + Map::::builder() + .insert( + "Sex".parse()?, + mehari::annotate::strucvars::vcf_header::sex_str(i.sex), + ) + .insert( + "Disease".parse()?, + mehari::annotate::strucvars::vcf_header::disease_str(i.disease), + ) + .build()?, + ), + )?; + + // Add PEDIGREE entry. + let mut map_builder = Map::::builder(); + if let Some(father) = i.father.as_ref() { + map_builder = map_builder.insert("Father".parse()?, father.clone()); + } + if let Some(mother) = i.mother.as_ref() { + map_builder = map_builder.insert("Mother".parse()?, mother.clone()); + } + builder = builder.insert( + "PEDIGREE".parse()?, + noodles_vcf::header::record::Value::Map(i.name.clone(), map_builder.build()?), + )?; + } + } else { + for name in input_sample_names { + builder = builder.add_sample_name(name.clone()); + } + } + + use vcf::header::record::value::map::Other; + + let mut builder = builder + .insert( + "x-varfish-case-uuid".parse()?, + vcf::header::record::Value::from(case_uuid), + )? + .insert( + "x-varfish-version".parse()?, + vcf::header::record::Value::Map( + String::from("varfish-server-worker"), + Map::::builder() + .insert("Version".parse()?, worker_version) + .build()?, + ), + )?; + + for sv_caller in input_sv_callers.iter() { + builder = builder.insert( + "x-varfish-version".parse()?, + vcf::header::record::Value::Map( + caller_name(sv_caller).into(), + Map::::builder() + .insert("Name".parse()?, caller_name(sv_caller)) + .insert("Version".parse()?, caller_version(sv_caller)) + .build()?, + ), + )?; + } + + Ok(builder.build()) +} + +#[cfg(test)] +mod test { + use mehari::ped::PedigreeByName; + use rstest::rstest; + + #[rstest] + #[case("tests/strucvars/ingest/delly2-min.vcf")] + #[case("tests/strucvars/ingest/dragen-cnv-min.vcf")] + #[case("tests/strucvars/ingest/dragen-sv-min.vcf")] + #[case("tests/strucvars/ingest/gcnv-min.vcf")] + #[case("tests/strucvars/ingest/manta-min.vcf")] + #[case("tests/strucvars/ingest/melt-min.vcf")] + #[case("tests/strucvars/ingest/popdel-min.vcf")] + + fn build_output_header_37(#[case] path: &str) -> Result<(), anyhow::Error> { + mehari::common::set_snapshot_suffix!("{}", path.split('/').last().unwrap()); + let tmpdir = temp_testdir::TempDir::default(); + + let pedigree = PedigreeByName::from_path(path.replace(".vcf", ".ped")).unwrap(); + + let input_vcf_header = noodles_vcf::reader::Builder + .build_from_path(path)? + .read_header()?; + let sv_callers = { + let reader = mehari::common::open_read_maybe_gz(path)?; + vec![mehari::annotate::strucvars::guess_sv_caller(reader)?] + }; + let sv_caller_refs = sv_callers.iter().collect::>(); + let output_vcf_header = super::build_output_header( + input_vcf_header.sample_names(), + &sv_caller_refs, + Some(&pedigree), + crate::common::GenomeRelease::Grch37, + "20230421", + "x.y.z", + "d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c", + )?; + + let out_path = tmpdir.join("out.vcf"); + let out_path_str = out_path.to_str().expect("invalid path"); + { + noodles_vcf::writer::Writer::new(std::fs::File::create(out_path_str)?) + .write_header(&output_vcf_header)?; + } + + insta::assert_snapshot!(std::fs::read_to_string(out_path_str)?); + + Ok(()) + } + + #[rstest] + #[case("tests/strucvars/ingest/delly2-min.vcf")] + #[case("tests/strucvars/ingest/dragen-cnv-min.vcf")] + #[case("tests/strucvars/ingest/dragen-sv-min.vcf")] + #[case("tests/strucvars/ingest/gcnv-min.vcf")] + #[case("tests/strucvars/ingest/manta-min.vcf")] + #[case("tests/strucvars/ingest/melt-min.vcf")] + #[case("tests/strucvars/ingest/popdel-min.vcf")] + fn build_output_header_38(#[case] path: &str) -> Result<(), anyhow::Error> { + mehari::common::set_snapshot_suffix!("{}", path.split('/').last().unwrap()); + let tmpdir = temp_testdir::TempDir::default(); + + let pedigree = PedigreeByName::from_path(path.replace(".vcf", ".ped")).unwrap(); + + let input_vcf_header = noodles_vcf::reader::Builder + .build_from_path(path)? + .read_header()?; + let sv_callers = { + let reader = mehari::common::open_read_maybe_gz(path)?; + vec![mehari::annotate::strucvars::guess_sv_caller(reader)?] + }; + let sv_caller_refs = sv_callers.iter().collect::>(); + let output_vcf_header = super::build_output_header( + input_vcf_header.sample_names(), + &sv_caller_refs, + Some(&pedigree), + crate::common::GenomeRelease::Grch38, + "20230421", + "x.y.z", + "d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c", + )?; + + let out_path = tmpdir.join("out.vcf"); + let out_path_str = out_path.to_str().expect("invalid path"); + { + noodles_vcf::writer::Writer::new(std::fs::File::create(out_path_str)?) + .write_header(&output_vcf_header)?; + } + + insta::assert_snapshot!(std::fs::read_to_string(out_path_str)?); + + Ok(()) + } +} diff --git a/src/strucvars/ingest/mod.rs b/src/strucvars/ingest/mod.rs new file mode 100644 index 00000000..c804e3b4 --- /dev/null +++ b/src/strucvars/ingest/mod.rs @@ -0,0 +1,597 @@ +//! Implementation of `strucvars ingest` subcommand. + +use std::io::{BufRead, Write}; + +use crate::common::{self, open_write_maybe_gz, worker_version, GenomeRelease}; +use mehari::{annotate::seqvars::AnnotatedVcfWriter, common::open_read_maybe_gz}; +use rand_core::SeedableRng; + +use mehari::annotate::strucvars::guess_sv_caller; +use noodles_vcf as vcf; + +pub mod header; + +/// Command line arguments for `strucvars ingest` subcommand. +#[derive(Debug, clap::Parser)] +#[command(author, version, about = "ingest structural variant VCF", long_about = None)] +pub struct Args { + /// Maximal number of variants to write out; optional. + #[clap(long)] + pub max_var_count: Option, + /// The assumed genome build. + #[clap(long)] + pub genomebuild: GenomeRelease, + /// Path to the pedigree file. + #[clap(long)] + pub path_ped: String, + /// Path to input files. + #[clap(long, required = true)] + pub path_in: Vec, + /// Path to coverage VCF files from maelstrom; optional. + #[clap(long)] + pub path_cov_vcf: Vec, + /// Path to output file. + #[clap(long)] + pub path_out: String, + + /// Minimal reciprocal overlap to require. + #[arg(long, default_value_t = 0.8)] + pub min_overlap: f32, + /// Slack to use around break-ends. + #[arg(long, default_value_t = 50)] + pub slack_bnd: i32, + /// Slack to use around insertions. + #[arg(long, default_value_t = 50)] + pub slack_ins: i32, + + /// Seed for random number generator (UUIDs), if any. + #[arg(long)] + pub rng_seed: Option, + /// Value to write to `##fileDate`. + #[arg(long)] + pub file_date: String, + /// Value to write out for `##x-varfish-case-uuid`. + #[arg(long)] + pub case_uuid: String, +} + +/// Wrapper around noodle's VCF writer that adjusts the record for the worker. +pub struct WriterWrapper { + inner: vcf::Writer>, +} + +impl WriterWrapper { + pub fn new(inner: vcf::Writer>) -> Self { + Self { inner } + } +} + +impl mehari::annotate::seqvars::AnnotatedVcfWriter for WriterWrapper { + fn write_header(&mut self, header: &vcf::Header) -> Result<(), anyhow::Error> { + self.inner + .write_header(header) + .map_err(|e| anyhow::anyhow!("Error writing VCF header: {}", e)) + } + + fn write_record( + &mut self, + header: &vcf::Header, + input_record: &vcf::Record, + ) -> Result<(), anyhow::Error> { + // copy over CHROM, POS, REF + let mut builder = vcf::Record::builder() + .set_chromosome(input_record.chromosome().clone()) + .set_position(input_record.position()) + .set_reference_bases(input_record.reference_bases().clone()); + + // copy over first ALT allele, remove any SV sub types + if input_record.alternate_bases().len() != 1 { + anyhow::bail!( + "unexpected number of ALT alleles (should be ==1) in: {:?}", + input_record.alternate_bases() + ); + } + let alt_0 = &input_record.alternate_bases()[0]; + let sv_type; + let bnd; + match alt_0 { + vcf::record::alternate_bases::Allele::Breakend(bnd_string) => { + sv_type = "BND".parse()?; + builder = builder + .set_alternate_bases(vcf::record::AlternateBases::from(vec![alt_0.clone()])); + bnd = Some( + mehari::annotate::strucvars::bnd::Breakend::from_ref_alt_str( + &format!("{}", input_record.reference_bases()), + bnd_string, + )?, + ); + } + vcf::record::alternate_bases::Allele::Symbol(symbol) => match symbol { + vcf::record::alternate_bases::allele::Symbol::StructuralVariant(sv) => { + sv_type = sv.ty(); + builder = builder + .set_alternate_bases(vcf::record::AlternateBases::from( + vec![vcf::record::alternate_bases::Allele::Symbol( + vcf::record::alternate_bases::allele::Symbol::StructuralVariant( + vcf::record::alternate_bases::allele::symbol::structural_variant::StructuralVariant::from( + sv.ty() + ) + ) + )] + )); + bnd = None; + } + _ => anyhow::bail!("unexpected symbolic allele: {:?}", &symbol), + }, + _ => anyhow::bail!("unexpected alternate base type: {:?}", &alt_0), + } + + // copy over FORMAT tags, all except FT + let mut keys_with_value = std::collections::HashSet::::new(); + let output_format_values = input_record + .genotypes() + .values() + .map(|g| { + g.keys() + .iter() + .zip(g.values().iter()) + .filter(|(k, _)| k.as_ref() != "FT") + .map(|(k, v)| { + if v.is_some() { + keys_with_value.insert(k.as_ref().to_string()); + } + + v.clone() + }) + .collect::>() + }) + .collect::>(); + let output_keys = vcf::record::genotypes::Keys::try_from( + input_record + .genotypes() + .keys() + .iter() + .filter(|k| k.as_ref() != "FT") + .cloned() + .map(|k| { + if k.as_ref() == "CN" { + "cn".parse().expect("invalid key: cn") + } else { + k + } + }) + .collect::>(), + )?; + builder = builder.set_genotypes(vcf::record::Genotypes::new( + output_keys, + output_format_values, + )); + + // copy over INFO tags + // Note: annsv will be added only in "strucvars query" + let mut info: noodles_vcf::record::Info = Default::default(); + match sv_type { + vcf::record::alternate_bases::allele::symbol::structural_variant::Type::Deletion | + vcf::record::alternate_bases::allele::symbol::structural_variant::Type::Duplication | + vcf::record::alternate_bases::allele::symbol::structural_variant::Type::CopyNumberVariation => { + let claim = if keys_with_value.contains("pev") || keys_with_value.contains("srv") { + "DJ" + } else { + "D" + }; + info.insert( + vcf::record::info::field::key::SV_CLAIM, + Some(vcf::record::info::field::Value::Array( + vcf::record::info::field::value::Array::String(vec![Some(claim.to_string())]), + ) + )); + + } + vcf::record::alternate_bases::allele::symbol::structural_variant::Type::Insertion | + vcf::record::alternate_bases::allele::symbol::structural_variant::Type::Inversion | + vcf::record::alternate_bases::allele::symbol::structural_variant::Type::Breakend => { + info.insert( + vcf::record::info::field::key::SV_CLAIM, + Some(vcf::record::info::field::Value::Array( + vcf::record::info::field::value::Array::String(vec![Some("J".to_string())]), + ) + )); + }, + } + info.insert( + vcf::record::info::field::key::SV_TYPE, + Some(vcf::record::info::field::Value::String(sv_type.to_string())), + ); + if let Some(Some(vcf::record::info::field::Value::Integer(end))) = input_record + .info() + .get(&vcf::record::info::field::key::END_POSITION) + { + info.insert( + vcf::record::info::field::key::END_POSITION, + Some(vcf::record::info::field::Value::Integer(*end)), + ); + + if sv_type + == vcf::record::alternate_bases::allele::symbol::structural_variant::Type::Breakend + { + info.insert( + "chr2".parse()?, + Some(vcf::record::info::field::value::Value::String( + bnd.expect("must be set here").chrom.clone(), + )), + ); + } else { + let pos: usize = input_record.position().into(); + let sv_len: usize = *end as usize - pos + 1; + info.insert( + vcf::record::info::field::key::SV_LENGTHS, + Some(vcf::record::info::field::Value::Array( + vcf::record::info::field::value::Array::Integer(vec![Some(sv_len as i32)]), + )), + ); + } + } + + fn map_caller(caller: &str) -> Result, anyhow::Error> { + if caller.starts_with("DELLYv") { + Ok(Some("Delly".to_string())) + } else if caller.starts_with("DRAGEN_CNVv") { + Ok(Some("DragenCnv".to_string())) + } else if caller.starts_with("DRAGEN_SVv") { + Ok(Some("DragenSv".to_string())) + } else if caller.starts_with("GATK_GCNVv") { + Ok(Some("Gcnv".to_string())) + } else if caller.starts_with("MANTAv") { + Ok(Some("Manta".to_string())) + } else if caller.starts_with("POPDELv") { + Ok(Some("Popdel".to_string())) + } else if caller.starts_with("MELTv") { + Ok(Some("Melt".to_string())) + } else { + anyhow::bail!("unknown caller: {}", caller) + } + } + + let key_callers: vcf::record::info::field::Key = "callers".parse()?; + eprintln!("callers = {:?}", &input_record.info().get(&key_callers)); + if let Some(Some(callers)) = input_record.info().get(&key_callers) { + if let vcf::record::info::field::Value::Array( + vcf::record::info::field::value::Array::String(callers), + ) = callers + { + let output_callers = callers + .iter() + .flatten() + .map(|caller| map_caller(caller)) + .collect::, _>>()?; + info.insert( + key_callers, + Some(vcf::record::info::field::Value::Array( + vcf::record::info::field::value::Array::String(output_callers), + )), + ); + } else if let vcf::record::info::field::Value::String(caller) = callers { + let output_callers = vec![map_caller(caller)?]; + info.insert( + key_callers, + Some(vcf::record::info::field::Value::Array( + vcf::record::info::field::value::Array::String(output_callers), + )), + ); + } + } else { + anyhow::bail!("no callers INFO tag found"); + } + + builder = builder.set_info(info); + + let record = builder.build()?; + + self.inner + .write_record(header, &record) + .map_err(|e| anyhow::anyhow!("Error writing VCF record: {}", e)) + } +} + +/// Write out variants from input files. +fn process_variants( + pedigree: &mehari::ped::PedigreeByName, + output_writer: &mut dyn mehari::annotate::seqvars::AnnotatedVcfWriter, + input_readers: &mut [vcf::Reader>], + output_header: &vcf::Header, + input_header: &[vcf::Header], + input_sv_callers: &[mehari::annotate::strucvars::SvCaller], + args: &Args, +) -> Result<(), anyhow::Error> { + // Initialize the random number generator from command line seed if given or local entropy + // source. + let mut rng = if let Some(rng_seed) = args.rng_seed { + rand::rngs::StdRng::seed_from_u64(rng_seed) + } else { + rand::rngs::StdRng::from_entropy() + }; + + // Create temporary directory. We will create one temporary file (containing `jsonl` + // seriealized `VarFishStrucvarTsvRecord`s) for each SV type and contig. + let tmp_dir = tempdir::TempDir::new("mehari")?; + + // Read through input VCF files and write out to temporary files. + tracing::info!("converting input VCF files to temporary files..."); + for (reader, sv_caller, header) in itertools::izip!( + input_readers.iter_mut(), + input_sv_callers.iter(), + input_header.iter() + ) { + mehari::annotate::strucvars::run_vcf_to_jsonl( + pedigree, + reader, + header, + sv_caller, + &tmp_dir, + &mut std::collections::HashMap::new(), + &mut rng, + )?; + } + tracing::info!("... done converting input files"); + + tracing::info!("clustering SVs to output..."); + // Read through temporary files by contig, cluster by overlap as configured, and write to `writer`. + for contig_no in 1..=25 { + tracing::info!( + " contig: {}", + annonars::common::cli::CANONICAL[contig_no - 1] + ); + let clusters = mehari::annotate::strucvars::read_and_cluster_for_contig( + &tmp_dir, + contig_no, + args.slack_ins, + args.slack_bnd, + args.min_overlap, + )?; + for record in clusters { + output_writer.write_record(output_header, &record.try_into()?)?; + } + } + tracing::info!("... done clustering SVs to output"); + + Ok(()) +} + +/// Main entry point for `strucvars ingest` sub command. +pub fn run(args_common: &crate::common::Args, args: &Args) -> Result<(), anyhow::Error> { + let before_anything = std::time::Instant::now(); + tracing::info!("args_common = {:#?}", &args_common); + tracing::info!("args = {:#?}", &args); + + common::trace_rss_now(); + + tracing::info!("loading pedigree..."); + let pedigree = mehari::ped::PedigreeByName::from_path(&args.path_ped) + .map_err(|e| anyhow::anyhow!("problem parsing PED file: {}", e))?; + tracing::info!("pedigre = {:#?}", &pedigree); + + tracing::info!("opening input file..."); + let mut input_readers = args + .path_in + .iter() + .map(|path_in| { + vcf::reader::Builder + .build_from_reader(open_read_maybe_gz(path_in)?) + .map_err(|e| anyhow::anyhow!("could not build VCF reader: {}", e)) + }) + .collect::, _>>()?; + + tracing::info!("guessing SV callers..."); + let input_sv_callers = args + .path_in + .iter() + .map(|path| { + let reader = open_read_maybe_gz(path)?; + guess_sv_caller(reader) + }) + .collect::, _>>()?; + + tracing::info!("processing header..."); + let input_headers = input_readers + .iter_mut() + .map(|input_reader| { + input_reader + .read_header() + .map_err(|e| anyhow::anyhow!("problem reading VCF header: {}", e)) + }) + .collect::, _>>()?; + let sample_names = input_headers + .first() + .expect("must have at least one input file") + .sample_names(); + for (indexno, other_input_header) in input_headers.iter().enumerate().skip(1) { + if other_input_header.sample_names() != sample_names { + return Err(anyhow::anyhow!( + "input file #{} has different sample names than first one: {}", + indexno, + &args.path_in[indexno] + )); + } + } + let output_header = header::build_output_header( + sample_names, + &input_sv_callers.iter().collect::>(), + Some(&pedigree), + args.genomebuild, + &args.file_date, + worker_version(), + &args.case_uuid, + ) + .map_err(|e| anyhow::anyhow!("problem building output header: {}", e))?; + + let mut output_writer = WriterWrapper::new(vcf::writer::Writer::new(open_write_maybe_gz( + &args.path_out, + )?)); + output_writer + .write_header(&output_header) + .map_err(|e| anyhow::anyhow!("problem writing header: {}", e))?; + + process_variants( + &pedigree, + &mut output_writer, + &mut input_readers, + &output_header, + &input_headers, + &input_sv_callers, + args, + )?; + + tracing::info!( + "All of `strucvars ingest` completed in {:?}", + before_anything.elapsed() + ); + Ok(()) +} + +#[cfg(test)] +mod test { + use crate::common::GenomeRelease; + + #[tracing_test::traced_test] + #[test] + fn smoke_test_trio() -> Result<(), anyhow::Error> { + let tmpdir = temp_testdir::TempDir::default(); + + let args_common = Default::default(); + let args = super::Args { + max_var_count: None, + path_in: vec![ + String::from("tests/strucvars/ingest/delly2-min.vcf"), + String::from("tests/strucvars/ingest/popdel-min.vcf"), + ], + path_cov_vcf: vec![], + path_ped: "tests/strucvars/ingest/delly2-min.ped".into(), + genomebuild: GenomeRelease::Grch37, + path_out: tmpdir + .join("out.vcf") + .to_str() + .expect("invalid path") + .into(), + min_overlap: 0.8, + slack_bnd: 50, + slack_ins: 50, + rng_seed: Some(42), + file_date: String::from("20230421"), + case_uuid: String::from("d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c"), + }; + super::run(&args_common, &args)?; + + insta::assert_snapshot!(std::fs::read_to_string(&args.path_out)?); + + Ok(()) + } + #[tracing_test::traced_test] + #[test] + fn smoke_test_singleton() -> Result<(), anyhow::Error> { + let tmpdir = temp_testdir::TempDir::default(); + + let args_common = Default::default(); + let args = super::Args { + max_var_count: None, + path_in: vec![ + String::from("tests/strucvars/ingest/dragen-cnv-min.vcf"), + String::from("tests/strucvars/ingest/dragen-sv-min.vcf"), + String::from("tests/strucvars/ingest/gcnv-min.vcf"), + String::from("tests/strucvars/ingest/manta-min.vcf"), + String::from("tests/strucvars/ingest/melt-min.vcf"), + ], + path_cov_vcf: vec![], + path_ped: "tests/strucvars/ingest/dragen-cnv-min.ped".into(), + genomebuild: GenomeRelease::Grch37, + path_out: tmpdir + .join("out.vcf") + .to_str() + .expect("invalid path") + .into(), + min_overlap: 0.8, + slack_bnd: 50, + slack_ins: 50, + rng_seed: Some(42), + file_date: String::from("20230421"), + case_uuid: String::from("d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c"), + }; + super::run(&args_common, &args)?; + + insta::assert_snapshot!(std::fs::read_to_string(&args.path_out)?); + + Ok(()) + } + + #[tracing_test::traced_test] + #[test] + fn smoke_test_trio_gz() -> Result<(), anyhow::Error> { + let tmpdir = temp_testdir::TempDir::default(); + + let args_common = Default::default(); + let args = super::Args { + max_var_count: None, + path_in: vec![ + String::from("tests/strucvars/ingest/delly2-min.vcf.gz"), + String::from("tests/strucvars/ingest/popdel-min.vcf.gz"), + ], + path_cov_vcf: vec![], + path_ped: "tests/strucvars/ingest/delly2-min.ped".into(), + genomebuild: GenomeRelease::Grch37, + path_out: tmpdir + .join("out.vcf.gz") + .to_str() + .expect("invalid path") + .into(), + min_overlap: 0.8, + slack_bnd: 50, + slack_ins: 50, + rng_seed: Some(42), + file_date: String::from("20230421"), + case_uuid: String::from("d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c"), + }; + super::run(&args_common, &args)?; + + let mut buffer: Vec = Vec::new(); + hxdmp::hexdump(&crate::common::read_to_bytes(&args.path_out)?, &mut buffer)?; + + Ok(()) + } + + #[tracing_test::traced_test] + #[test] + fn smoke_test_singleton_gz() -> Result<(), anyhow::Error> { + let tmpdir = temp_testdir::TempDir::default(); + + let args_common = Default::default(); + let args = super::Args { + max_var_count: None, + path_in: vec![ + String::from("tests/strucvars/ingest/dragen-cnv-min.vcf.gz"), + String::from("tests/strucvars/ingest/dragen-sv-min.vcf.gz"), + String::from("tests/strucvars/ingest/gcnv-min.vcf.gz"), + String::from("tests/strucvars/ingest/manta-min.vcf.gz"), + String::from("tests/strucvars/ingest/melt-min.vcf.gz"), + ], + path_cov_vcf: vec![], + path_ped: "tests/strucvars/ingest/dragen-cnv-min.ped".into(), + genomebuild: GenomeRelease::Grch37, + path_out: tmpdir + .join("out.vcf.gz") + .to_str() + .expect("invalid path") + .into(), + min_overlap: 0.8, + slack_bnd: 50, + slack_ins: 50, + rng_seed: Some(42), + file_date: String::from("20230421"), + case_uuid: String::from("d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c"), + }; + super::run(&args_common, &args)?; + + let mut buffer: Vec = Vec::new(); + hxdmp::hexdump(&crate::common::read_to_bytes(&args.path_out)?, &mut buffer)?; + + Ok(()) + } +} diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@delly2-min.vcf.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@delly2-min.vcf.snap new file mode 100644 index 00000000..9bb5424a --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@delly2-min.vcf.snap @@ -0,0 +1,67 @@ +--- +source: src/strucvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh37 +##SAMPLE= +##SAMPLE= +##SAMPLE= +##PEDIGREE= +##PEDIGREE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT index father mother + diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@dragen-cnv-min.vcf.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@dragen-cnv-min.vcf.snap new file mode 100644 index 00000000..be89862c --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@dragen-cnv-min.vcf.snap @@ -0,0 +1,63 @@ +--- +source: src/strucvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh37 +##SAMPLE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE + diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@dragen-sv-min.vcf.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@dragen-sv-min.vcf.snap new file mode 100644 index 00000000..fbe1cdd8 --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@dragen-sv-min.vcf.snap @@ -0,0 +1,63 @@ +--- +source: src/strucvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh37 +##SAMPLE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE + diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@gcnv-min.vcf.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@gcnv-min.vcf.snap new file mode 100644 index 00000000..b23f0a1f --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@gcnv-min.vcf.snap @@ -0,0 +1,63 @@ +--- +source: src/strucvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh37 +##SAMPLE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE + diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@manta-min.vcf.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@manta-min.vcf.snap new file mode 100644 index 00000000..4cb5bd71 --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@manta-min.vcf.snap @@ -0,0 +1,63 @@ +--- +source: src/strucvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh37 +##SAMPLE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE + diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@melt-min.vcf.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@melt-min.vcf.snap new file mode 100644 index 00000000..3074596a --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@melt-min.vcf.snap @@ -0,0 +1,63 @@ +--- +source: src/strucvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh37 +##SAMPLE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE + diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@popdel-min.vcf.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@popdel-min.vcf.snap new file mode 100644 index 00000000..b0312a31 --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_37@popdel-min.vcf.snap @@ -0,0 +1,67 @@ +--- +source: src/strucvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh37 +##SAMPLE= +##SAMPLE= +##SAMPLE= +##PEDIGREE= +##PEDIGREE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT index father mother + diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@delly2-min.vcf.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@delly2-min.vcf.snap new file mode 100644 index 00000000..c47cfa62 --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@delly2-min.vcf.snap @@ -0,0 +1,67 @@ +--- +source: src/strucvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh38 +##SAMPLE= +##SAMPLE= +##SAMPLE= +##PEDIGREE= +##PEDIGREE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT index father mother + diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@dragen-cnv-min.vcf.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@dragen-cnv-min.vcf.snap new file mode 100644 index 00000000..c2954ee3 --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@dragen-cnv-min.vcf.snap @@ -0,0 +1,63 @@ +--- +source: src/strucvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh38 +##SAMPLE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE + diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@dragen-sv-min.vcf.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@dragen-sv-min.vcf.snap new file mode 100644 index 00000000..6136c98b --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@dragen-sv-min.vcf.snap @@ -0,0 +1,63 @@ +--- +source: src/strucvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh38 +##SAMPLE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE + diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@gcnv-min.vcf.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@gcnv-min.vcf.snap new file mode 100644 index 00000000..2f68b496 --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@gcnv-min.vcf.snap @@ -0,0 +1,63 @@ +--- +source: src/strucvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh38 +##SAMPLE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE + diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@manta-min.vcf.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@manta-min.vcf.snap new file mode 100644 index 00000000..39bcd070 --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@manta-min.vcf.snap @@ -0,0 +1,63 @@ +--- +source: src/strucvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh38 +##SAMPLE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE + diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@melt-min.vcf.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@melt-min.vcf.snap new file mode 100644 index 00000000..9c15deb7 --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@melt-min.vcf.snap @@ -0,0 +1,63 @@ +--- +source: src/strucvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh38 +##SAMPLE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE + diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@popdel-min.vcf.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@popdel-min.vcf.snap new file mode 100644 index 00000000..484bcf91 --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__header__test__build_output_header_38@popdel-min.vcf.snap @@ -0,0 +1,67 @@ +--- +source: src/strucvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh38 +##SAMPLE= +##SAMPLE= +##SAMPLE= +##PEDIGREE= +##PEDIGREE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT index father mother + diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__test__smoke_test_singleton.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__test__smoke_test_singleton.snap new file mode 100644 index 00000000..0c1e99fe --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__test__smoke_test_singleton.snap @@ -0,0 +1,73 @@ +--- +source: src/strucvars/ingest/mod.rs +expression: "std::fs::read_to_string(&args.path_out)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh37 +##SAMPLE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +##x-varfish-version= +##x-varfish-version= +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE +1 1000 . N . . SVCLAIM=J;SVTYPE=INS;END=1000;SVLEN=1;callers=Melt GT:GQ:pec:pev:src:srv:amq:cn:anc:pc 1/1:2:1:1:2:2:.:.:.:. +1 2000 . N . . SVCLAIM=J;SVTYPE=INS;END=2000;SVLEN=1;callers=Melt GT:GQ:pec:pev:src:srv:amq:cn:anc:pc 0/0:4:4:0:4:1:.:.:.:. +1 3000 . N . . SVCLAIM=J;SVTYPE=INS;END=3000;SVLEN=1;callers=Melt GT:GQ:pec:pev:src:srv:amq:cn:anc:pc 0/0:28:23:0:24:1:.:.:.:. +1 1283844 . N . . SVCLAIM=D;SVTYPE=CNV;END=1284844;SVLEN=1001;callers=DragenCnv GT:GQ:pec:pev:src:srv:amq:cn:anc:pc 0/1:.:.:.:.:.:.:1:.:1 +1 1598413 . N . . SVCLAIM=DJ;SVTYPE=DEL;END=1598580;SVLEN=168;callers=DragenSv GT:GQ:pec:pev:src:srv:amq:cn:anc:pc 1/1:53:2:2:20:20:.:.:.:. +1 4124001 . N . . SVCLAIM=D;SVTYPE=DEL;END=4125000;SVLEN=1000;callers=Gcnv GT:GQ:pec:pev:src:srv:amq:cn:anc:pc 1:.:.:.:.:.:.:1:.:1 + diff --git a/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__test__smoke_test_trio.snap b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__test__smoke_test_trio.snap new file mode 100644 index 00000000..cf0405b1 --- /dev/null +++ b/src/strucvars/ingest/snapshots/varfish_server_worker__strucvars__ingest__test__smoke_test_trio.snap @@ -0,0 +1,71 @@ +--- +source: src/strucvars/ingest/mod.rs +expression: "std::fs::read_to_string(&args.path_out)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##fileDate=20230421 +##x-varfish-genome-build=GRCh37 +##SAMPLE= +##SAMPLE= +##SAMPLE= +##PEDIGREE= +##PEDIGREE= +##PEDIGREE= +##x-varfish-case-uuid=d2bad2ec-a75d-44b9-bd0a-83a3f1331b7c +##x-varfish-version= +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT index father mother +1 586412 . N . . SVCLAIM=DJ;SVTYPE=DEL;END=586439;SVLEN=28;callers=Delly GT:GQ:pec:pev:src:srv:amq:cn:anc:pc 0/1:59:0:0:11:4:.:.:.:. 0/1:22:0:0:8:2:.:.:.:. 0/1:10:0:0:13:2:.:.:.:. +1 1224181 . N . . SVCLAIM=D;SVTYPE=DEL;END=1225801;SVLEN=1621;callers=Popdel GT:GQ:pec:pev:src:srv:amq:cn:anc:pc 0/1:4:.:.:.:.:.:.:.:. 0/1:7:.:.:.:.:.:.:.:. 0/1:7:.:.:.:.:.:.:.:. +2 321681 . N G]17:198982] . . SVCLAIM=J;SVTYPE=BND;END=198982;chr2=17;callers=Delly GT:GQ:pec:pev:src:srv:amq:cn:anc:pc 0/1:.:0:.:0:.:.:.:.:. 0/1:.:0:.:0:.:.:.:.:. 0/1:.:0:.:0:.:.:.:.:. + diff --git a/src/strucvars/mod.rs b/src/strucvars/mod.rs new file mode 100644 index 00000000..c4205066 --- /dev/null +++ b/src/strucvars/mod.rs @@ -0,0 +1,2 @@ +pub mod ingest; +pub mod query; diff --git a/src/sv/query/bgdbs.rs b/src/strucvars/query/bgdbs.rs similarity index 100% rename from src/sv/query/bgdbs.rs rename to src/strucvars/query/bgdbs.rs diff --git a/src/sv/query/clinvar.rs b/src/strucvars/query/clinvar.rs similarity index 100% rename from src/sv/query/clinvar.rs rename to src/strucvars/query/clinvar.rs diff --git a/src/sv/query/genes.rs b/src/strucvars/query/genes.rs similarity index 99% rename from src/sv/query/genes.rs rename to src/strucvars/query/genes.rs index 6e120dac..11509002 100644 --- a/src/sv/query/genes.rs +++ b/src/strucvars/query/genes.rs @@ -3,12 +3,13 @@ use std::{collections::HashSet, ops::Range, path::Path, time::Instant}; use bio::data_structures::interval_tree::ArrayBackedIntervalTree; +use mehari::common::open_read_maybe_gz; use prost::Message; use serde::Deserialize; use tracing::info; use crate::{ - common::{open_read_maybe_gz, CHROMS}, + common::CHROMS, db::{ conf::{Database, GenomeRelease}, pbs, diff --git a/src/sv/query/interpreter.rs b/src/strucvars/query/interpreter.rs similarity index 99% rename from src/sv/query/interpreter.rs rename to src/strucvars/query/interpreter.rs index 827474c5..cb6df271 100644 --- a/src/sv/query/interpreter.rs +++ b/src/strucvars/query/interpreter.rs @@ -380,7 +380,7 @@ mod tests { use crate::{ db::conf::Database, - sv::query::schema::{ + strucvars::query::schema::{ CallInfo, GenomicRegion, GenotypeChoice, GenotypeCriteria, StrandOrientation, }, }; diff --git a/src/sv/query/masked.rs b/src/strucvars/query/masked.rs similarity index 96% rename from src/sv/query/masked.rs rename to src/strucvars/query/masked.rs index b3546a3a..51ef7855 100644 --- a/src/sv/query/masked.rs +++ b/src/strucvars/query/masked.rs @@ -293,14 +293,16 @@ mod test { masked_db: super::MaskedDb, chrom_map: indexmap::IndexMap, ) { - let sv = crate::sv::query::schema::StructuralVariant { + let sv = crate::strucvars::query::schema::StructuralVariant { chrom: String::from("1"), pos: sv_pos, end: sv_end, chrom2: None, - sv_type: crate::sv::query::schema::SvType::Del, - sv_sub_type: crate::sv::query::schema::SvSubType::Del, - strand_orientation: Some(crate::sv::query::schema::StrandOrientation::FiveToThree), + sv_type: crate::strucvars::query::schema::SvType::Del, + sv_sub_type: crate::strucvars::query::schema::SvSubType::Del, + strand_orientation: Some( + crate::strucvars::query::schema::StrandOrientation::FiveToThree, + ), call_info: Default::default(), }; diff --git a/src/sv/query/mod.rs b/src/strucvars/query/mod.rs similarity index 99% rename from src/sv/query/mod.rs rename to src/strucvars/query/mod.rs index fe6fa710..fbc6cea5 100644 --- a/src/sv/query/mod.rs +++ b/src/strucvars/query/mod.rs @@ -23,6 +23,7 @@ use indexmap::IndexMap; use log::warn; use mehari::{ annotate::seqvars::provider::TxIntervalTrees, + common::open_read_maybe_gz, db::create::txs::data::{Strand, Transcript, TxSeqDatabase}, }; use serde::Serialize; @@ -30,9 +31,9 @@ use thousands::Separable; use uuid::Uuid; use crate::{ - common::{build_chrom_map, numeric_gene_id, open_read_maybe_gz, trace_rss_now}, + common::{build_chrom_map, numeric_gene_id, trace_rss_now}, db::conf::{Database, GenomeRelease, TadSet as TadSetChoice}, - sv::query::{ + strucvars::query::{ interpreter::QueryInterpreter, pathogenic::Record as KnownPathogenicRecord, records::StructuralVariant as RecordSv, schema::CaseQuery, schema::StructuralVariant as SchemaSv, diff --git a/src/sv/query/pathogenic.rs b/src/strucvars/query/pathogenic.rs similarity index 98% rename from src/sv/query/pathogenic.rs rename to src/strucvars/query/pathogenic.rs index 90becddf..ef402574 100644 --- a/src/sv/query/pathogenic.rs +++ b/src/strucvars/query/pathogenic.rs @@ -4,11 +4,12 @@ use std::path::Path; use bio::data_structures::interval_tree::ArrayBackedIntervalTree; use indexmap::IndexMap; +use mehari::common::open_read_maybe_gz; use serde::Serialize; use tracing::{info, warn}; use crate::{ - common::{build_chrom_map, open_read_maybe_gz, CHROMS}, + common::{build_chrom_map, CHROMS}, db::conf::GenomeRelease, }; diff --git a/src/sv/query/records.rs b/src/strucvars/query/records.rs similarity index 100% rename from src/sv/query/records.rs rename to src/strucvars/query/records.rs diff --git a/src/sv/query/schema.rs b/src/strucvars/query/schema.rs similarity index 100% rename from src/sv/query/schema.rs rename to src/strucvars/query/schema.rs diff --git a/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__masked__test__load_masked_db_records.snap b/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__masked__test__load_masked_db_records.snap new file mode 100644 index 00000000..50f45c46 --- /dev/null +++ b/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__masked__test__load_masked_db_records.snap @@ -0,0 +1,113 @@ +--- +source: src/strucvars/query/masked.rs +expression: result +--- +records: + - - begin: 0 + end: 2 + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] + - [] +trees: + - entries: + - data: 0 + interval: + start: 0 + end: 2 + max: 2 + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + - entries: [] + max_level: 0 + indexed: true + diff --git a/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__masked__test__masked_db_fetch_records.snap b/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__masked__test__masked_db_fetch_records.snap new file mode 100644 index 00000000..55869bac --- /dev/null +++ b/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__masked__test__masked_db_fetch_records.snap @@ -0,0 +1,13 @@ +--- +source: src/strucvars/query/masked.rs +expression: result +--- +left: + - begin: 0 + end: 10 + - begin: 5 + end: 15 +right: + - begin: 100 + end: 110 + diff --git a/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__schema__tests__call_info_serde_smoke.snap b/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__schema__tests__call_info_serde_smoke.snap new file mode 100644 index 00000000..21922035 --- /dev/null +++ b/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__schema__tests__call_info_serde_smoke.snap @@ -0,0 +1,18 @@ +--- +source: src/strucvars/query/schema.rs +expression: "serde_json::to_string_pretty(&info).unwrap()" +--- +{ + "genotype": "0/1", + "effective_genotype": null, + "matched_gt_criteria": null, + "quality": 10.0, + "paired_end_cov": 10, + "paired_end_var": 10, + "split_read_cov": 10, + "split_read_var": 10, + "copy_number": 1, + "average_normalized_cov": 0.491, + "point_count": 5, + "average_mapping_quality": 60.0 +} diff --git a/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__schema__tests__case_query_serde_smoke.snap b/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__schema__tests__case_query_serde_smoke.snap new file mode 100644 index 00000000..38e6fe1f --- /dev/null +++ b/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__schema__tests__case_query_serde_smoke.snap @@ -0,0 +1,77 @@ +--- +source: src/strucvars/query/schema.rs +expression: "serde_json::to_string_pretty(&query).unwrap()" +--- +{ + "database": "refseq", + "svdb_dgv_enabled": false, + "svdb_dgv_min_overlap": null, + "svdb_dgv_max_count": null, + "svdb_dgv_gs_enabled": false, + "svdb_dgv_gs_min_overlap": null, + "svdb_dgv_gs_max_count": null, + "svdb_gnomad_enabled": false, + "svdb_gnomad_min_overlap": null, + "svdb_gnomad_max_count": null, + "svdb_exac_enabled": false, + "svdb_exac_min_overlap": null, + "svdb_exac_max_count": null, + "svdb_dbvar_enabled": false, + "svdb_dbvar_min_overlap": null, + "svdb_dbvar_max_count": null, + "svdb_g1k_enabled": false, + "svdb_g1k_min_overlap": null, + "svdb_g1k_max_count": null, + "svdb_inhouse_enabled": false, + "svdb_inhouse_min_overlap": null, + "svdb_inhouse_max_count": null, + "clinvar_sv_min_overlap": null, + "clinvar_sv_min_pathogenicity": null, + "sv_size_min": null, + "sv_size_max": null, + "sv_types": [ + "DEL", + "DUP", + "INV", + "INS", + "BND", + "CNV" + ], + "sv_sub_types": [ + "DEL", + "DEL:ME", + "DEL:ME:SVA", + "DEL:ME:L1", + "DEL:ME:ALU", + "DUP", + "DUP:TANDEM", + "INV", + "INS", + "INS:ME", + "INS:ME:SVA", + "INS:ME:L1", + "INS:ME:ALU", + "BND", + "CNV" + ], + "tx_effects": [ + "transcript_variant", + "exon_variant", + "splice_region_variant", + "intron_variant", + "upstream_variant", + "downstream_variant", + "intergenic_variant" + ], + "gene_allowlist": null, + "genomic_region": null, + "regulatory_overlap": 100, + "regulatory_ensembl_features": null, + "regulatory_vista_validation": null, + "regulatory_custom_configs": [], + "tad_set": null, + "genotype": {}, + "genotype_criteria": [], + "recessive_mode": null, + "recessive_index": null +} diff --git a/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__schema__tests__genotype_criteria_serde_smoke.snap b/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__schema__tests__genotype_criteria_serde_smoke.snap new file mode 100644 index 00000000..4416248e --- /dev/null +++ b/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__schema__tests__genotype_criteria_serde_smoke.snap @@ -0,0 +1,51 @@ +--- +source: src/strucvars/query/schema.rs +expression: "serde_json::to_string_pretty(&crit).unwrap()" +--- +{ + "genotype": "het", + "select_sv_sub_type": [], + "select_sv_min_size": null, + "select_sv_max_size": null, + "max_brk_segdup": null, + "max_brk_repeat": null, + "max_brk_segduprepeat": null, + "gt_one_of": null, + "min_gq": null, + "min_pr_cov": null, + "max_pr_cov": null, + "min_pr_ref": null, + "max_pr_ref": null, + "min_pr_var": null, + "max_pr_var": null, + "min_pr_ab": null, + "max_pr_ab": null, + "min_sr_cov": null, + "max_sr_cov": null, + "min_sr_ref": null, + "max_sr_ref": null, + "min_sr_var": null, + "max_sr_var": null, + "min_sr_ab": null, + "max_sr_ab": null, + "min_srpr_cov": null, + "max_srpr_cov": null, + "min_srpr_ref": null, + "max_srpr_ref": null, + "min_srpr_var": null, + "max_srpr_var": null, + "min_srpr_ab": null, + "max_srpr_ab": null, + "min_rd_dev": null, + "max_rd_dev": null, + "min_amq": null, + "max_amq": null, + "missing_gt_ok": true, + "missing_gq_ok": true, + "missing_pr_ok": true, + "missing_sr_ok": true, + "missing_srpr_ok": true, + "missing_rd_dev_ok": true, + "missing_amq_ok": true, + "comment": null +} diff --git a/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__schema__tests__structural_variant_serde_smoke.snap b/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__schema__tests__structural_variant_serde_smoke.snap new file mode 100644 index 00000000..c6015179 --- /dev/null +++ b/src/strucvars/query/snapshots/varfish_server_worker__strucvars__query__schema__tests__structural_variant_serde_smoke.snap @@ -0,0 +1,14 @@ +--- +source: src/strucvars/query/schema.rs +expression: "serde_json::to_string_pretty(&sv).unwrap()" +--- +{ + "chrom": "chr1", + "pos": 123, + "sv_type": "DEL", + "sv_sub_type": "DEL:ME:L1", + "chrom2": null, + "end": 245, + "strand_orientation": "3to5", + "call_info": {} +} diff --git a/src/sv/query/snapshots/varfish_server_worker__sv__query__masked__test__load_masked_db_records.snap b/src/strucvars/query/snapshots/varfish_server_worker__sv__query__masked__test__load_masked_db_records.snap similarity index 100% rename from src/sv/query/snapshots/varfish_server_worker__sv__query__masked__test__load_masked_db_records.snap rename to src/strucvars/query/snapshots/varfish_server_worker__sv__query__masked__test__load_masked_db_records.snap diff --git a/src/sv/query/snapshots/varfish_server_worker__sv__query__masked__test__masked_db_fetch_records.snap b/src/strucvars/query/snapshots/varfish_server_worker__sv__query__masked__test__masked_db_fetch_records.snap similarity index 100% rename from src/sv/query/snapshots/varfish_server_worker__sv__query__masked__test__masked_db_fetch_records.snap rename to src/strucvars/query/snapshots/varfish_server_worker__sv__query__masked__test__masked_db_fetch_records.snap diff --git a/src/sv/query/snapshots/varfish_server_worker__sv__query__schema__tests__call_info_serde_smoke.snap b/src/strucvars/query/snapshots/varfish_server_worker__sv__query__schema__tests__call_info_serde_smoke.snap similarity index 100% rename from src/sv/query/snapshots/varfish_server_worker__sv__query__schema__tests__call_info_serde_smoke.snap rename to src/strucvars/query/snapshots/varfish_server_worker__sv__query__schema__tests__call_info_serde_smoke.snap diff --git a/src/sv/query/snapshots/varfish_server_worker__sv__query__schema__tests__case_query_serde_smoke.snap b/src/strucvars/query/snapshots/varfish_server_worker__sv__query__schema__tests__case_query_serde_smoke.snap similarity index 100% rename from src/sv/query/snapshots/varfish_server_worker__sv__query__schema__tests__case_query_serde_smoke.snap rename to src/strucvars/query/snapshots/varfish_server_worker__sv__query__schema__tests__case_query_serde_smoke.snap diff --git a/src/sv/query/snapshots/varfish_server_worker__sv__query__schema__tests__genotype_criteria_serde_smoke.snap b/src/strucvars/query/snapshots/varfish_server_worker__sv__query__schema__tests__genotype_criteria_serde_smoke.snap similarity index 100% rename from src/sv/query/snapshots/varfish_server_worker__sv__query__schema__tests__genotype_criteria_serde_smoke.snap rename to src/strucvars/query/snapshots/varfish_server_worker__sv__query__schema__tests__genotype_criteria_serde_smoke.snap diff --git a/src/sv/query/snapshots/varfish_server_worker__sv__query__schema__tests__structural_variant_serde_smoke.snap b/src/strucvars/query/snapshots/varfish_server_worker__sv__query__schema__tests__structural_variant_serde_smoke.snap similarity index 100% rename from src/sv/query/snapshots/varfish_server_worker__sv__query__schema__tests__structural_variant_serde_smoke.snap rename to src/strucvars/query/snapshots/varfish_server_worker__sv__query__schema__tests__structural_variant_serde_smoke.snap diff --git a/src/sv/query/tads.rs b/src/strucvars/query/tads.rs similarity index 99% rename from src/sv/query/tads.rs rename to src/strucvars/query/tads.rs index ec104540..d44d397c 100644 --- a/src/sv/query/tads.rs +++ b/src/strucvars/query/tads.rs @@ -4,10 +4,11 @@ use std::path::Path; use bio::data_structures::interval_tree::ArrayBackedIntervalTree; use indexmap::IndexMap; +use mehari::common::open_read_maybe_gz; use tracing::info; use crate::{ - common::{build_chrom_map, open_read_maybe_gz, CHROMS}, + common::{build_chrom_map, CHROMS}, db::conf::{GenomeRelease, TadSet as TadSetChoice}, }; diff --git a/src/sv/mod.rs b/src/sv/mod.rs deleted file mode 100644 index 67350db2..00000000 --- a/src/sv/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod query; diff --git a/tests/strucvars/ingest/delly2-min.ped b/tests/strucvars/ingest/delly2-min.ped new file mode 100644 index 00000000..44eea94d --- /dev/null +++ b/tests/strucvars/ingest/delly2-min.ped @@ -0,0 +1,3 @@ +FAM index father mother 1 2 +FAM father 0 0 1 1 +FAM mother 0 0 2 1 diff --git a/tests/strucvars/ingest/delly2-min.vcf b/tests/strucvars/ingest/delly2-min.vcf new file mode 100644 index 00000000..15da9e54 --- /dev/null +++ b/tests/strucvars/ingest/delly2-min.vcf @@ -0,0 +1,133 @@ +##fileformat=VCFv4.2 +##FILTER= +##fileDate=20220829 +##ALT= +##ALT= +##ALT= +##ALT= +##ALT= +##FILTER= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##reference=/fast/projects/cubit/20.05/static_data/reference/GRCh37/hs37d5/hs37d5.fa +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##bcftools_viewVersion=1.15.1+htslib-1.15.1 +##bcftools_viewCommand=view -O z -o work/bwa.delly2.SAMPLE-N1-DNA1-WGS1/out/bwa.delly2.SAMPLE-N1-DNA1-WGS1.vcf.gz /data/gpfs-1/users/holtgrem_c/scratch/tmp/hpc-cpu-164/20220829/tmp.jo3WnHhrQp/cwd/1.bcf; Date=Mon Aug 29 16:04:36 2022 +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT index father mother +1 586412 DEL00000004 C 92 PASS PRECISE;SVTYPE=DEL;SVMETHOD=EMBL.DELLYv1.1.3;END=586439;PE=0;MAPQ=0;CT=3to5;CIPOS=-20,20;CIEND=-20,20;SRMAPQ=23;INSLEN=0;HOMLEN=20;SR=4;SRQ=1;CONSENSUS=CTCAGGGTGTTCGGGATAAAGAAGACTCAGGAAGACAAGTATGAAGCATAATCTGTGACATTATTGATATCTTCCTGAAGAACATAATTCCTGCCTACCATCAACAAGCATCAATACTTTCTACCAGCTATTCTCAACCCTCATCATCGGAAGAGACAGACACTGACTGTGTCAAA;CE=1.96018;AC=3;AN=6 GT:GL:GQ:FT:RCL:RC:RCR:RDCN:DR:DV:RR:RV 0/1:-5.90527,0,-14.2974:59:PASS:203:373:203:2:0:0:7:4 0/1:-2.23535,0,-11.3961:22:PASS:188:321:130:2:0:0:6:2 0/1:-1.0313,0,-19.791:10:LowQual:327:515:247:2:0:0:11:2 +2 321681 . G G]17:198982] 6 PASS SVTYPE=BND GT 0/1 0/1 0/1 diff --git a/tests/strucvars/ingest/delly2-min.vcf.gz b/tests/strucvars/ingest/delly2-min.vcf.gz new file mode 100644 index 00000000..98f68dd0 Binary files /dev/null and b/tests/strucvars/ingest/delly2-min.vcf.gz differ diff --git a/tests/strucvars/ingest/delly2-min.vcf.gz.tbi b/tests/strucvars/ingest/delly2-min.vcf.gz.tbi new file mode 100644 index 00000000..dedf2b50 Binary files /dev/null and b/tests/strucvars/ingest/delly2-min.vcf.gz.tbi differ diff --git a/tests/strucvars/ingest/dragen-cnv-min.ped b/tests/strucvars/ingest/dragen-cnv-min.ped new file mode 100644 index 00000000..de863440 --- /dev/null +++ b/tests/strucvars/ingest/dragen-cnv-min.ped @@ -0,0 +1 @@ +FAM SAMPLE 0 0 1 2 diff --git a/tests/strucvars/ingest/dragen-cnv-min.vcf b/tests/strucvars/ingest/dragen-cnv-min.vcf new file mode 100644 index 00000000..046597a9 --- /dev/null +++ b/tests/strucvars/ingest/dragen-cnv-min.vcf @@ -0,0 +1,48 @@ +##fileformat=VCFv4.2 +##DRAGENVersion= +##DRAGENCommandLine= +##reference=file:///staging/human/reference/hs37d5/hs37d5.fa.k_21.f_16.m_149 +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##ALT= +##ALT= +##ALT= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##CoverageUniformity=0.333610 +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE +1 1283844 DRAGEN:LOSS:1:1283845-1284844 N 20 cnvLength SVLEN=-1000;SVTYPE=CNV;END=1284844;REFLEN=1000 GT:SM:CN:BC:PE 0/1:0.321909:1:1:1,1 diff --git a/tests/strucvars/ingest/dragen-cnv-min.vcf.gz b/tests/strucvars/ingest/dragen-cnv-min.vcf.gz new file mode 100644 index 00000000..249f90c5 Binary files /dev/null and b/tests/strucvars/ingest/dragen-cnv-min.vcf.gz differ diff --git a/tests/strucvars/ingest/dragen-cnv-min.vcf.gz.tbi b/tests/strucvars/ingest/dragen-cnv-min.vcf.gz.tbi new file mode 100644 index 00000000..2b58902a Binary files /dev/null and b/tests/strucvars/ingest/dragen-cnv-min.vcf.gz.tbi differ diff --git a/tests/strucvars/ingest/dragen-sv-min.ped b/tests/strucvars/ingest/dragen-sv-min.ped new file mode 100644 index 00000000..de863440 --- /dev/null +++ b/tests/strucvars/ingest/dragen-sv-min.ped @@ -0,0 +1 @@ +FAM SAMPLE 0 0 1 2 diff --git a/tests/strucvars/ingest/dragen-sv-min.vcf b/tests/strucvars/ingest/dragen-sv-min.vcf new file mode 100644 index 00000000..43d239f8 --- /dev/null +++ b/tests/strucvars/ingest/dragen-sv-min.vcf @@ -0,0 +1,133 @@ +##fileformat=VCFv4.1 +##fileDate=20220321 +##source=DRAGEN 07.021.624.3.10.4 +##reference=file:///staging/human/reference/hs37d5/hs37d5.fa.k_21.f_16.m_149 +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT=0.999"> +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##ALT= +##ALT= +##ALT= +##cmdline=dragen --ref-dir /staging/human/reference/hs37d5/hs37d5.fa.k_21.f_16.m_149 --fastq-file1 /mnt/smb01-hum/NGSRawData/220318_A01077_0174_AH7JGVDMXY/Data/Intensities/BaseCalls/NA-12878WGS-Genom-size_S1_R1_001.fastq.gz --fastq-file2 /mnt/smb01-hum/NGSRawData/220318_A01077_0174_AH7JGVDMXY/Data/Intensities/BaseCalls/NA-12878WGS-Genom-size_S1_R2_001.fastq.gz --output-directory /staging/output/220318_A01077_0174_AH7JGVDMXY/NA-12878WGSWGS/ --output-file-prefix NA-12878WGSWGS_dragen --RGID WGS --RGSM NA-12878WGSWGS --num-threads 46 --enable-map-align true --enable-map-align-output true --enable-duplicate-marking true --enable-variant-caller true --qc-cross-cont-vcf /opt/edico/config/sample_cross_contamination_resource_GRCh37.vcf.gz --enable-cnv true --cnv-enable-self-normalization true --enable-sv true --qc-coverage-region-1 /staging/human/bed/CDS-v19-ROIs_v2.bed --qc-coverage-reports-1 cov_report full_res --qc-coverage-region-2 /staging/human/bed/Regions_Exomev8.bed --qc-coverage-reports-2 cov_report full_res --qc-coverage-region-3 /staging/human/bed/Padded_Exomev8.bed --qc-coverage-reports-3 cov_report full_res +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE +1 1598413 MantaDEL:19042:0:0:0:0:0 ACACGCCTGTAATCCCAGCTACTTGGGAGGCTGAGGCAGGAGAATCACTTCAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCAAACCAGAGAAATCCAGCTCTGGGTGACAGAGCAAGACTCTGTTTCGGGAAAAATAAAATACATAGGCAGGGCGCGGTGGCT A 762 PASS END=1598580;SVTYPE=DEL;SVLEN=-167;CIGAR=1M167D;CIPOS=0,18;HOMLEN=18;HOMSEQ=CACGCCTGTAATCCCAGC GT:FT:GQ:PL:PR:SR 1/1:PASS:53:815,56,0:0,2:0,20 diff --git a/tests/strucvars/ingest/dragen-sv-min.vcf.gz b/tests/strucvars/ingest/dragen-sv-min.vcf.gz new file mode 100644 index 00000000..1ecadb8c Binary files /dev/null and b/tests/strucvars/ingest/dragen-sv-min.vcf.gz differ diff --git a/tests/strucvars/ingest/dragen-sv-min.vcf.gz.tbi b/tests/strucvars/ingest/dragen-sv-min.vcf.gz.tbi new file mode 100644 index 00000000..91f491df Binary files /dev/null and b/tests/strucvars/ingest/dragen-sv-min.vcf.gz.tbi differ diff --git a/tests/strucvars/ingest/gcnv-min.ped b/tests/strucvars/ingest/gcnv-min.ped new file mode 100644 index 00000000..de863440 --- /dev/null +++ b/tests/strucvars/ingest/gcnv-min.ped @@ -0,0 +1 @@ +FAM SAMPLE 0 0 1 2 diff --git a/tests/strucvars/ingest/gcnv-min.vcf b/tests/strucvars/ingest/gcnv-min.vcf new file mode 100644 index 00000000..f9239f45 --- /dev/null +++ b/tests/strucvars/ingest/gcnv-min.vcf @@ -0,0 +1,112 @@ +##fileformat=VCFv4.2 +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##GATKCommandLine= +##GATKCommandLine= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##gcnvVcfSchemaVersion=2.0 +##source=JointGermlineCNVSegmentation +##source=PostprocessGermlineCNVCalls +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE +1 4124001 . N . . END=4125000;SVTYPE=DEL;SVLEN=-999;AC=1;AN=1 GT:CN:NP:QA:QS:QSE:QSS 1:1:1:107:107:107:107 diff --git a/tests/strucvars/ingest/gcnv-min.vcf.gz b/tests/strucvars/ingest/gcnv-min.vcf.gz new file mode 100644 index 00000000..8a5a8806 Binary files /dev/null and b/tests/strucvars/ingest/gcnv-min.vcf.gz differ diff --git a/tests/strucvars/ingest/gcnv-min.vcf.gz.tbi b/tests/strucvars/ingest/gcnv-min.vcf.gz.tbi new file mode 100644 index 00000000..48b1fdbe Binary files /dev/null and b/tests/strucvars/ingest/gcnv-min.vcf.gz.tbi differ diff --git a/tests/strucvars/ingest/manta-min.ped b/tests/strucvars/ingest/manta-min.ped new file mode 100644 index 00000000..de863440 --- /dev/null +++ b/tests/strucvars/ingest/manta-min.ped @@ -0,0 +1 @@ +FAM SAMPLE 0 0 1 2 diff --git a/tests/strucvars/ingest/manta-min.vcf b/tests/strucvars/ingest/manta-min.vcf new file mode 100644 index 00000000..bcc9fdea --- /dev/null +++ b/tests/strucvars/ingest/manta-min.vcf @@ -0,0 +1,128 @@ +##fileformat=VCFv4.1 +##fileDate=20220907 +##source=GenerateSVCandidates 1.6.0 +##reference=file:///fast/projects/cubit/20.05/static_data/reference/GRCh37/hs37d5/hs37d5.fa +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT=0.999"> +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##ALT= +##ALT= +##ALT= +##cmdline=configManta.py --referenceFasta /fast/projects/cubit/20.05/static_data/reference/GRCh37/hs37d5/hs37d5.fa --runDir work/bwa.manta.SAMPLE-N1-DNA1-WGS1/work --bam ngs_mapping/output/bwa.SAMPLE-N1-DNA1-WGS1/out/bwa.SAMPLE-N1-DNA1-WGS1.bam +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE +1 1598413 MantaDEL:19042:0:0:0:0:0 ACACGCCTGTAATCCCAGCTACTTGGGAGGCTGAGGCAGGAGAATCACTTCAACCCGGGAGGCGGAGGTTGCAGTGAGCCGAGATCAAACCAGAGAAATCCAGCTCTGGGTGACAGAGCAAGACTCTGTTTCGGGAAAAATAAAATACATAGGCAGGGCGCGGTGGCT A 762 PASS END=1598580;SVTYPE=DEL;SVLEN=-167;CIGAR=1M167D;CIPOS=0,18;HOMLEN=18;HOMSEQ=CACGCCTGTAATCCCAGC GT:FT:GQ:PL:PR:SR 1/1:PASS:53:815,56,0:0,2:0,20 diff --git a/tests/strucvars/ingest/manta-min.vcf.gz b/tests/strucvars/ingest/manta-min.vcf.gz new file mode 100644 index 00000000..e0991fd6 Binary files /dev/null and b/tests/strucvars/ingest/manta-min.vcf.gz differ diff --git a/tests/strucvars/ingest/manta-min.vcf.gz.tbi b/tests/strucvars/ingest/manta-min.vcf.gz.tbi new file mode 100644 index 00000000..8f3640b6 Binary files /dev/null and b/tests/strucvars/ingest/manta-min.vcf.gz.tbi differ diff --git a/tests/strucvars/ingest/melt-min.ped b/tests/strucvars/ingest/melt-min.ped new file mode 100644 index 00000000..de863440 --- /dev/null +++ b/tests/strucvars/ingest/melt-min.ped @@ -0,0 +1 @@ +FAM SAMPLE 0 0 1 2 diff --git a/tests/strucvars/ingest/melt-min.vcf b/tests/strucvars/ingest/melt-min.vcf new file mode 100644 index 00000000..f0338686 --- /dev/null +++ b/tests/strucvars/ingest/melt-min.vcf @@ -0,0 +1,55 @@ +##fileformat=VCFv4.2 +##FILTER= +##fileDate=Jan 10, 2023, 7:53:31 AM +##source=MELTv2.2.2 +##reference=hs37d5.fa +##ALT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##ALT= +##INFO= +##ALT= +##contig= +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT SAMPLE +1 1000 . T . PASS TSD=null;ASSESS=0;INTERNAL=null,null;SVTYPE=ALU;SVLEN=279;MEINFO=AluYa5,1,280,+;DIFF=0.53:t89c,g90a,c96a,g145a,c174t,g237c;LP=2;RP=1;RA=1;PRIOR=false;SR=0 GT:GL:DP:AD 1/1:-30,-1.81,-0:3:3 +1 2000 . C . lc;ac0 TSD=null;ASSESS=2;INTERNAL=null,null;SVTYPE=SVA;SVLEN=1240;MEINFO=SVA,75,1315,-;DIFF=0.1:n1-74,a78c,c126t,c158t,a167g,g192c,t193c,n201-1316;LP=6;RP=1;RA=2.585;PRIOR=false;SR=0 GT:GL:DP:AD 0/0:-0.6,-4.82,-84.6:8:1 +1 3000 . A . ac0 TSD=null;ASSESS=3;INTERNAL=NM_014813,INTRONIC;SVTYPE=LINE1;SVLEN=121;MEINFO=L1Ambig,5897,6018,+;DIFF=0.01:n1-5896,t5901c,a5929g,c5930a,a5931g,a5989t,n5996-6019;LP=10;RP=1;RA=3.322;ISTP=0;PRIOR=false;SR=1 GT:GL:DP:AD 0/0:-0.6,-28.3,-545.8:47:1 diff --git a/tests/strucvars/ingest/melt-min.vcf.gz b/tests/strucvars/ingest/melt-min.vcf.gz new file mode 100644 index 00000000..acc4653d Binary files /dev/null and b/tests/strucvars/ingest/melt-min.vcf.gz differ diff --git a/tests/strucvars/ingest/melt-min.vcf.gz.tbi b/tests/strucvars/ingest/melt-min.vcf.gz.tbi new file mode 100644 index 00000000..037ac5f7 Binary files /dev/null and b/tests/strucvars/ingest/melt-min.vcf.gz.tbi differ diff --git a/tests/strucvars/ingest/popdel-min.ped b/tests/strucvars/ingest/popdel-min.ped new file mode 100644 index 00000000..44eea94d --- /dev/null +++ b/tests/strucvars/ingest/popdel-min.ped @@ -0,0 +1,3 @@ +FAM index father mother 1 2 +FAM father 0 0 1 1 +FAM mother 0 0 2 1 diff --git a/tests/strucvars/ingest/popdel-min.vcf b/tests/strucvars/ingest/popdel-min.vcf new file mode 100644 index 00000000..a7cea57b --- /dev/null +++ b/tests/strucvars/ingest/popdel-min.vcf @@ -0,0 +1,121 @@ +##fileformat=VCFv4.3 +##FILTER= +##fileDate=[20230123] +##source=PopDel-V1.1.2 +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##bcftools_annotateVersion=1.16+htslib-1.16 +##bcftools_annotateCommand=annotate --header-lines /data/cephfs-1/scratch/groups/cubi/holtgrem_c/tmp/hpc-cpu-56/20230123/tmp.mQMOoq0Xvg/header.txt /data/cephfs-1/scratch/groups/cubi/holtgrem_c/tmp/hpc-cpu-56/20230123/tmp.mQMOoq0Xvg/tmp.vcf; Date=Mon Jan 23 14:28:42 2023 +##bcftools_concatVersion=1.16+htslib-1.16 +##bcftools_concatCommand=concat work/bwa_mem2.popdel_call.1-1-10020000/out/bwa_mem2.popdel_call.1-1-10020000.vcf.gz work/bwa_mem2.popdel_call.1-9980000-20020000/out/bwa_mem2.popdel_call.1-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.1-19980000-30020000/out/bwa_mem2.popdel_call.1-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.1-29980000-40020000/out/bwa_mem2.popdel_call.1-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.1-39980000-50020000/out/bwa_mem2.popdel_call.1-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.1-49980000-60020000/out/bwa_mem2.popdel_call.1-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.1-59980000-70020000/out/bwa_mem2.popdel_call.1-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.1-69980000-80020000/out/bwa_mem2.popdel_call.1-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.1-79980000-90020000/out/bwa_mem2.popdel_call.1-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.1-89980000-100020000/out/bwa_mem2.popdel_call.1-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.1-99980000-110020000/out/bwa_mem2.popdel_call.1-99980000-110020000.vcf.gz work/bwa_mem2.popdel_call.1-109980000-120020000/out/bwa_mem2.popdel_call.1-109980000-120020000.vcf.gz work/bwa_mem2.popdel_call.1-119980000-130020000/out/bwa_mem2.popdel_call.1-119980000-130020000.vcf.gz work/bwa_mem2.popdel_call.1-129980000-140020000/out/bwa_mem2.popdel_call.1-129980000-140020000.vcf.gz work/bwa_mem2.popdel_call.1-139980000-150020000/out/bwa_mem2.popdel_call.1-139980000-150020000.vcf.gz work/bwa_mem2.popdel_call.1-149980000-160020000/out/bwa_mem2.popdel_call.1-149980000-160020000.vcf.gz work/bwa_mem2.popdel_call.1-159980000-170020000/out/bwa_mem2.popdel_call.1-159980000-170020000.vcf.gz work/bwa_mem2.popdel_call.1-169980000-180020000/out/bwa_mem2.popdel_call.1-169980000-180020000.vcf.gz work/bwa_mem2.popdel_call.1-179980000-190020000/out/bwa_mem2.popdel_call.1-179980000-190020000.vcf.gz work/bwa_mem2.popdel_call.1-189980000-200020000/out/bwa_mem2.popdel_call.1-189980000-200020000.vcf.gz work/bwa_mem2.popdel_call.1-199980000-210020000/out/bwa_mem2.popdel_call.1-199980000-210020000.vcf.gz work/bwa_mem2.popdel_call.1-209980000-220020000/out/bwa_mem2.popdel_call.1-209980000-220020000.vcf.gz work/bwa_mem2.popdel_call.1-219980000-230020000/out/bwa_mem2.popdel_call.1-219980000-230020000.vcf.gz work/bwa_mem2.popdel_call.1-229980000-240020000/out/bwa_mem2.popdel_call.1-229980000-240020000.vcf.gz work/bwa_mem2.popdel_call.1-239980000-249250621/out/bwa_mem2.popdel_call.1-239980000-249250621.vcf.gz work/bwa_mem2.popdel_call.2-1-10020000/out/bwa_mem2.popdel_call.2-1-10020000.vcf.gz work/bwa_mem2.popdel_call.2-9980000-20020000/out/bwa_mem2.popdel_call.2-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.2-19980000-30020000/out/bwa_mem2.popdel_call.2-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.2-29980000-40020000/out/bwa_mem2.popdel_call.2-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.2-39980000-50020000/out/bwa_mem2.popdel_call.2-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.2-49980000-60020000/out/bwa_mem2.popdel_call.2-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.2-59980000-70020000/out/bwa_mem2.popdel_call.2-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.2-69980000-80020000/out/bwa_mem2.popdel_call.2-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.2-79980000-90020000/out/bwa_mem2.popdel_call.2-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.2-89980000-100020000/out/bwa_mem2.popdel_call.2-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.2-99980000-110020000/out/bwa_mem2.popdel_call.2-99980000-110020000.vcf.gz work/bwa_mem2.popdel_call.2-109980000-120020000/out/bwa_mem2.popdel_call.2-109980000-120020000.vcf.gz work/bwa_mem2.popdel_call.2-119980000-130020000/out/bwa_mem2.popdel_call.2-119980000-130020000.vcf.gz work/bwa_mem2.popdel_call.2-129980000-140020000/out/bwa_mem2.popdel_call.2-129980000-140020000.vcf.gz work/bwa_mem2.popdel_call.2-139980000-150020000/out/bwa_mem2.popdel_call.2-139980000-150020000.vcf.gz work/bwa_mem2.popdel_call.2-149980000-160020000/out/bwa_mem2.popdel_call.2-149980000-160020000.vcf.gz work/bwa_mem2.popdel_call.2-159980000-170020000/out/bwa_mem2.popdel_call.2-159980000-170020000.vcf.gz work/bwa_mem2.popdel_call.2-169980000-180020000/out/bwa_mem2.popdel_call.2-169980000-180020000.vcf.gz work/bwa_mem2.popdel_call.2-179980000-190020000/out/bwa_mem2.popdel_call.2-179980000-190020000.vcf.gz work/bwa_mem2.popdel_call.2-189980000-200020000/out/bwa_mem2.popdel_call.2-189980000-200020000.vcf.gz work/bwa_mem2.popdel_call.2-199980000-210020000/out/bwa_mem2.popdel_call.2-199980000-210020000.vcf.gz work/bwa_mem2.popdel_call.2-209980000-220020000/out/bwa_mem2.popdel_call.2-209980000-220020000.vcf.gz work/bwa_mem2.popdel_call.2-219980000-230020000/out/bwa_mem2.popdel_call.2-219980000-230020000.vcf.gz work/bwa_mem2.popdel_call.2-229980000-240020000/out/bwa_mem2.popdel_call.2-229980000-240020000.vcf.gz work/bwa_mem2.popdel_call.2-239980000-243199373/out/bwa_mem2.popdel_call.2-239980000-243199373.vcf.gz work/bwa_mem2.popdel_call.3-1-10020000/out/bwa_mem2.popdel_call.3-1-10020000.vcf.gz work/bwa_mem2.popdel_call.3-9980000-20020000/out/bwa_mem2.popdel_call.3-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.3-19980000-30020000/out/bwa_mem2.popdel_call.3-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.3-29980000-40020000/out/bwa_mem2.popdel_call.3-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.3-39980000-50020000/out/bwa_mem2.popdel_call.3-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.3-49980000-60020000/out/bwa_mem2.popdel_call.3-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.3-59980000-70020000/out/bwa_mem2.popdel_call.3-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.3-69980000-80020000/out/bwa_mem2.popdel_call.3-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.3-79980000-90020000/out/bwa_mem2.popdel_call.3-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.3-89980000-100020000/out/bwa_mem2.popdel_call.3-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.3-99980000-110020000/out/bwa_mem2.popdel_call.3-99980000-110020000.vcf.gz work/bwa_mem2.popdel_call.3-109980000-120020000/out/bwa_mem2.popdel_call.3-109980000-120020000.vcf.gz work/bwa_mem2.popdel_call.3-119980000-130020000/out/bwa_mem2.popdel_call.3-119980000-130020000.vcf.gz work/bwa_mem2.popdel_call.3-129980000-140020000/out/bwa_mem2.popdel_call.3-129980000-140020000.vcf.gz work/bwa_mem2.popdel_call.3-139980000-150020000/out/bwa_mem2.popdel_call.3-139980000-150020000.vcf.gz work/bwa_mem2.popdel_call.3-149980000-160020000/out/bwa_mem2.popdel_call.3-149980000-160020000.vcf.gz work/bwa_mem2.popdel_call.3-159980000-170020000/out/bwa_mem2.popdel_call.3-159980000-170020000.vcf.gz work/bwa_mem2.popdel_call.3-169980000-180020000/out/bwa_mem2.popdel_call.3-169980000-180020000.vcf.gz work/bwa_mem2.popdel_call.3-179980000-190020000/out/bwa_mem2.popdel_call.3-179980000-190020000.vcf.gz work/bwa_mem2.popdel_call.3-189980000-198022430/out/bwa_mem2.popdel_call.3-189980000-198022430.vcf.gz work/bwa_mem2.popdel_call.4-1-10020000/out/bwa_mem2.popdel_call.4-1-10020000.vcf.gz work/bwa_mem2.popdel_call.4-9980000-20020000/out/bwa_mem2.popdel_call.4-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.4-19980000-30020000/out/bwa_mem2.popdel_call.4-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.4-29980000-40020000/out/bwa_mem2.popdel_call.4-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.4-39980000-50020000/out/bwa_mem2.popdel_call.4-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.4-49980000-60020000/out/bwa_mem2.popdel_call.4-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.4-59980000-70020000/out/bwa_mem2.popdel_call.4-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.4-69980000-80020000/out/bwa_mem2.popdel_call.4-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.4-79980000-90020000/out/bwa_mem2.popdel_call.4-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.4-89980000-100020000/out/bwa_mem2.popdel_call.4-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.4-99980000-110020000/out/bwa_mem2.popdel_call.4-99980000-110020000.vcf.gz work/bwa_mem2.popdel_call.4-109980000-120020000/out/bwa_mem2.popdel_call.4-109980000-120020000.vcf.gz work/bwa_mem2.popdel_call.4-119980000-130020000/out/bwa_mem2.popdel_call.4-119980000-130020000.vcf.gz work/bwa_mem2.popdel_call.4-129980000-140020000/out/bwa_mem2.popdel_call.4-129980000-140020000.vcf.gz work/bwa_mem2.popdel_call.4-139980000-150020000/out/bwa_mem2.popdel_call.4-139980000-150020000.vcf.gz work/bwa_mem2.popdel_call.4-149980000-160020000/out/bwa_mem2.popdel_call.4-149980000-160020000.vcf.gz work/bwa_mem2.popdel_call.4-159980000-170020000/out/bwa_mem2.popdel_call.4-159980000-170020000.vcf.gz work/bwa_mem2.popdel_call.4-169980000-180020000/out/bwa_mem2.popdel_call.4-169980000-180020000.vcf.gz work/bwa_mem2.popdel_call.4-179980000-190020000/out/bwa_mem2.popdel_call.4-179980000-190020000.vcf.gz work/bwa_mem2.popdel_call.4-189980000-191154276/out/bwa_mem2.popdel_call.4-189980000-191154276.vcf.gz work/bwa_mem2.popdel_call.5-1-10020000/out/bwa_mem2.popdel_call.5-1-10020000.vcf.gz work/bwa_mem2.popdel_call.5-9980000-20020000/out/bwa_mem2.popdel_call.5-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.5-19980000-30020000/out/bwa_mem2.popdel_call.5-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.5-29980000-40020000/out/bwa_mem2.popdel_call.5-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.5-39980000-50020000/out/bwa_mem2.popdel_call.5-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.5-49980000-60020000/out/bwa_mem2.popdel_call.5-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.5-59980000-70020000/out/bwa_mem2.popdel_call.5-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.5-69980000-80020000/out/bwa_mem2.popdel_call.5-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.5-79980000-90020000/out/bwa_mem2.popdel_call.5-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.5-89980000-100020000/out/bwa_mem2.popdel_call.5-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.5-99980000-110020000/out/bwa_mem2.popdel_call.5-99980000-110020000.vcf.gz work/bwa_mem2.popdel_call.5-109980000-120020000/out/bwa_mem2.popdel_call.5-109980000-120020000.vcf.gz work/bwa_mem2.popdel_call.5-119980000-130020000/out/bwa_mem2.popdel_call.5-119980000-130020000.vcf.gz work/bwa_mem2.popdel_call.5-129980000-140020000/out/bwa_mem2.popdel_call.5-129980000-140020000.vcf.gz work/bwa_mem2.popdel_call.5-139980000-150020000/out/bwa_mem2.popdel_call.5-139980000-150020000.vcf.gz work/bwa_mem2.popdel_call.5-149980000-160020000/out/bwa_mem2.popdel_call.5-149980000-160020000.vcf.gz work/bwa_mem2.popdel_call.5-159980000-170020000/out/bwa_mem2.popdel_call.5-159980000-170020000.vcf.gz work/bwa_mem2.popdel_call.5-169980000-180020000/out/bwa_mem2.popdel_call.5-169980000-180020000.vcf.gz work/bwa_mem2.popdel_call.5-179980000-180915260/out/bwa_mem2.popdel_call.5-179980000-180915260.vcf.gz work/bwa_mem2.popdel_call.6-1-10020000/out/bwa_mem2.popdel_call.6-1-10020000.vcf.gz work/bwa_mem2.popdel_call.6-9980000-20020000/out/bwa_mem2.popdel_call.6-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.6-19980000-30020000/out/bwa_mem2.popdel_call.6-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.6-29980000-40020000/out/bwa_mem2.popdel_call.6-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.6-39980000-50020000/out/bwa_mem2.popdel_call.6-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.6-49980000-60020000/out/bwa_mem2.popdel_call.6-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.6-59980000-70020000/out/bwa_mem2.popdel_call.6-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.6-69980000-80020000/out/bwa_mem2.popdel_call.6-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.6-79980000-90020000/out/bwa_mem2.popdel_call.6-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.6-89980000-100020000/out/bwa_mem2.popdel_call.6-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.6-99980000-110020000/out/bwa_mem2.popdel_call.6-99980000-110020000.vcf.gz work/bwa_mem2.popdel_call.6-109980000-120020000/out/bwa_mem2.popdel_call.6-109980000-120020000.vcf.gz work/bwa_mem2.popdel_call.6-119980000-130020000/out/bwa_mem2.popdel_call.6-119980000-130020000.vcf.gz work/bwa_mem2.popdel_call.6-129980000-140020000/out/bwa_mem2.popdel_call.6-129980000-140020000.vcf.gz work/bwa_mem2.popdel_call.6-139980000-150020000/out/bwa_mem2.popdel_call.6-139980000-150020000.vcf.gz work/bwa_mem2.popdel_call.6-149980000-160020000/out/bwa_mem2.popdel_call.6-149980000-160020000.vcf.gz work/bwa_mem2.popdel_call.6-159980000-170020000/out/bwa_mem2.popdel_call.6-159980000-170020000.vcf.gz work/bwa_mem2.popdel_call.6-169980000-171115067/out/bwa_mem2.popdel_call.6-169980000-171115067.vcf.gz work/bwa_mem2.popdel_call.7-1-10020000/out/bwa_mem2.popdel_call.7-1-10020000.vcf.gz work/bwa_mem2.popdel_call.7-9980000-20020000/out/bwa_mem2.popdel_call.7-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.7-19980000-30020000/out/bwa_mem2.popdel_call.7-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.7-29980000-40020000/out/bwa_mem2.popdel_call.7-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.7-39980000-50020000/out/bwa_mem2.popdel_call.7-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.7-49980000-60020000/out/bwa_mem2.popdel_call.7-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.7-59980000-70020000/out/bwa_mem2.popdel_call.7-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.7-69980000-80020000/out/bwa_mem2.popdel_call.7-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.7-79980000-90020000/out/bwa_mem2.popdel_call.7-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.7-89980000-100020000/out/bwa_mem2.popdel_call.7-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.7-99980000-110020000/out/bwa_mem2.popdel_call.7-99980000-110020000.vcf.gz work/bwa_mem2.popdel_call.7-109980000-120020000/out/bwa_mem2.popdel_call.7-109980000-120020000.vcf.gz work/bwa_mem2.popdel_call.7-119980000-130020000/out/bwa_mem2.popdel_call.7-119980000-130020000.vcf.gz work/bwa_mem2.popdel_call.7-129980000-140020000/out/bwa_mem2.popdel_call.7-129980000-140020000.vcf.gz work/bwa_mem2.popdel_call.7-139980000-150020000/out/bwa_mem2.popdel_call.7-139980000-150020000.vcf.gz work/bwa_mem2.popdel_call.7-149980000-159138663/out/bwa_mem2.popdel_call.7-149980000-159138663.vcf.gz work/bwa_mem2.popdel_call.8-1-10020000/out/bwa_mem2.popdel_call.8-1-10020000.vcf.gz work/bwa_mem2.popdel_call.8-9980000-20020000/out/bwa_mem2.popdel_call.8-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.8-19980000-30020000/out/bwa_mem2.popdel_call.8-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.8-29980000-40020000/out/bwa_mem2.popdel_call.8-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.8-39980000-50020000/out/bwa_mem2.popdel_call.8-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.8-49980000-60020000/out/bwa_mem2.popdel_call.8-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.8-59980000-70020000/out/bwa_mem2.popdel_call.8-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.8-69980000-80020000/out/bwa_mem2.popdel_call.8-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.8-79980000-90020000/out/bwa_mem2.popdel_call.8-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.8-89980000-100020000/out/bwa_mem2.popdel_call.8-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.8-99980000-110020000/out/bwa_mem2.popdel_call.8-99980000-110020000.vcf.gz work/bwa_mem2.popdel_call.8-109980000-120020000/out/bwa_mem2.popdel_call.8-109980000-120020000.vcf.gz work/bwa_mem2.popdel_call.8-119980000-130020000/out/bwa_mem2.popdel_call.8-119980000-130020000.vcf.gz work/bwa_mem2.popdel_call.8-129980000-140020000/out/bwa_mem2.popdel_call.8-129980000-140020000.vcf.gz work/bwa_mem2.popdel_call.8-139980000-146364022/out/bwa_mem2.popdel_call.8-139980000-146364022.vcf.gz work/bwa_mem2.popdel_call.9-1-10020000/out/bwa_mem2.popdel_call.9-1-10020000.vcf.gz work/bwa_mem2.popdel_call.9-9980000-20020000/out/bwa_mem2.popdel_call.9-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.9-19980000-30020000/out/bwa_mem2.popdel_call.9-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.9-29980000-40020000/out/bwa_mem2.popdel_call.9-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.9-39980000-50020000/out/bwa_mem2.popdel_call.9-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.9-49980000-60020000/out/bwa_mem2.popdel_call.9-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.9-59980000-70020000/out/bwa_mem2.popdel_call.9-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.9-69980000-80020000/out/bwa_mem2.popdel_call.9-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.9-79980000-90020000/out/bwa_mem2.popdel_call.9-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.9-89980000-100020000/out/bwa_mem2.popdel_call.9-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.9-99980000-110020000/out/bwa_mem2.popdel_call.9-99980000-110020000.vcf.gz work/bwa_mem2.popdel_call.9-109980000-120020000/out/bwa_mem2.popdel_call.9-109980000-120020000.vcf.gz work/bwa_mem2.popdel_call.9-119980000-130020000/out/bwa_mem2.popdel_call.9-119980000-130020000.vcf.gz work/bwa_mem2.popdel_call.9-129980000-140020000/out/bwa_mem2.popdel_call.9-129980000-140020000.vcf.gz work/bwa_mem2.popdel_call.9-139980000-141213431/out/bwa_mem2.popdel_call.9-139980000-141213431.vcf.gz work/bwa_mem2.popdel_call.10-1-10020000/out/bwa_mem2.popdel_call.10-1-10020000.vcf.gz work/bwa_mem2.popdel_call.10-9980000-20020000/out/bwa_mem2.popdel_call.10-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.10-19980000-30020000/out/bwa_mem2.popdel_call.10-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.10-29980000-40020000/out/bwa_mem2.popdel_call.10-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.10-39980000-50020000/out/bwa_mem2.popdel_call.10-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.10-49980000-60020000/out/bwa_mem2.popdel_call.10-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.10-59980000-70020000/out/bwa_mem2.popdel_call.10-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.10-69980000-80020000/out/bwa_mem2.popdel_call.10-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.10-79980000-90020000/out/bwa_mem2.popdel_call.10-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.10-89980000-100020000/out/bwa_mem2.popdel_call.10-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.10-99980000-110020000/out/bwa_mem2.popdel_call.10-99980000-110020000.vcf.gz work/bwa_mem2.popdel_call.10-109980000-120020000/out/bwa_mem2.popdel_call.10-109980000-120020000.vcf.gz work/bwa_mem2.popdel_call.10-119980000-130020000/out/bwa_mem2.popdel_call.10-119980000-130020000.vcf.gz work/bwa_mem2.popdel_call.10-129980000-135534747/out/bwa_mem2.popdel_call.10-129980000-135534747.vcf.gz work/bwa_mem2.popdel_call.11-1-10020000/out/bwa_mem2.popdel_call.11-1-10020000.vcf.gz work/bwa_mem2.popdel_call.11-9980000-20020000/out/bwa_mem2.popdel_call.11-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.11-19980000-30020000/out/bwa_mem2.popdel_call.11-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.11-29980000-40020000/out/bwa_mem2.popdel_call.11-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.11-39980000-50020000/out/bwa_mem2.popdel_call.11-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.11-49980000-60020000/out/bwa_mem2.popdel_call.11-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.11-59980000-70020000/out/bwa_mem2.popdel_call.11-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.11-69980000-80020000/out/bwa_mem2.popdel_call.11-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.11-79980000-90020000/out/bwa_mem2.popdel_call.11-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.11-89980000-100020000/out/bwa_mem2.popdel_call.11-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.11-99980000-110020000/out/bwa_mem2.popdel_call.11-99980000-110020000.vcf.gz work/bwa_mem2.popdel_call.11-109980000-120020000/out/bwa_mem2.popdel_call.11-109980000-120020000.vcf.gz work/bwa_mem2.popdel_call.11-119980000-130020000/out/bwa_mem2.popdel_call.11-119980000-130020000.vcf.gz work/bwa_mem2.popdel_call.11-129980000-135006516/out/bwa_mem2.popdel_call.11-129980000-135006516.vcf.gz work/bwa_mem2.popdel_call.12-1-10020000/out/bwa_mem2.popdel_call.12-1-10020000.vcf.gz work/bwa_mem2.popdel_call.12-9980000-20020000/out/bwa_mem2.popdel_call.12-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.12-19980000-30020000/out/bwa_mem2.popdel_call.12-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.12-29980000-40020000/out/bwa_mem2.popdel_call.12-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.12-39980000-50020000/out/bwa_mem2.popdel_call.12-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.12-49980000-60020000/out/bwa_mem2.popdel_call.12-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.12-59980000-70020000/out/bwa_mem2.popdel_call.12-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.12-69980000-80020000/out/bwa_mem2.popdel_call.12-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.12-79980000-90020000/out/bwa_mem2.popdel_call.12-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.12-89980000-100020000/out/bwa_mem2.popdel_call.12-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.12-99980000-110020000/out/bwa_mem2.popdel_call.12-99980000-110020000.vcf.gz work/bwa_mem2.popdel_call.12-109980000-120020000/out/bwa_mem2.popdel_call.12-109980000-120020000.vcf.gz work/bwa_mem2.popdel_call.12-119980000-130020000/out/bwa_mem2.popdel_call.12-119980000-130020000.vcf.gz work/bwa_mem2.popdel_call.12-129980000-133851895/out/bwa_mem2.popdel_call.12-129980000-133851895.vcf.gz work/bwa_mem2.popdel_call.13-1-10020000/out/bwa_mem2.popdel_call.13-1-10020000.vcf.gz work/bwa_mem2.popdel_call.13-9980000-20020000/out/bwa_mem2.popdel_call.13-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.13-19980000-30020000/out/bwa_mem2.popdel_call.13-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.13-29980000-40020000/out/bwa_mem2.popdel_call.13-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.13-39980000-50020000/out/bwa_mem2.popdel_call.13-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.13-49980000-60020000/out/bwa_mem2.popdel_call.13-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.13-59980000-70020000/out/bwa_mem2.popdel_call.13-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.13-69980000-80020000/out/bwa_mem2.popdel_call.13-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.13-79980000-90020000/out/bwa_mem2.popdel_call.13-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.13-89980000-100020000/out/bwa_mem2.popdel_call.13-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.13-99980000-110020000/out/bwa_mem2.popdel_call.13-99980000-110020000.vcf.gz work/bwa_mem2.popdel_call.13-109980000-115169878/out/bwa_mem2.popdel_call.13-109980000-115169878.vcf.gz work/bwa_mem2.popdel_call.14-1-10020000/out/bwa_mem2.popdel_call.14-1-10020000.vcf.gz work/bwa_mem2.popdel_call.14-9980000-20020000/out/bwa_mem2.popdel_call.14-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.14-19980000-30020000/out/bwa_mem2.popdel_call.14-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.14-29980000-40020000/out/bwa_mem2.popdel_call.14-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.14-39980000-50020000/out/bwa_mem2.popdel_call.14-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.14-49980000-60020000/out/bwa_mem2.popdel_call.14-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.14-59980000-70020000/out/bwa_mem2.popdel_call.14-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.14-69980000-80020000/out/bwa_mem2.popdel_call.14-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.14-79980000-90020000/out/bwa_mem2.popdel_call.14-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.14-89980000-100020000/out/bwa_mem2.popdel_call.14-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.14-99980000-107349540/out/bwa_mem2.popdel_call.14-99980000-107349540.vcf.gz work/bwa_mem2.popdel_call.15-1-10020000/out/bwa_mem2.popdel_call.15-1-10020000.vcf.gz work/bwa_mem2.popdel_call.15-9980000-20020000/out/bwa_mem2.popdel_call.15-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.15-19980000-30020000/out/bwa_mem2.popdel_call.15-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.15-29980000-40020000/out/bwa_mem2.popdel_call.15-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.15-39980000-50020000/out/bwa_mem2.popdel_call.15-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.15-49980000-60020000/out/bwa_mem2.popdel_call.15-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.15-59980000-70020000/out/bwa_mem2.popdel_call.15-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.15-69980000-80020000/out/bwa_mem2.popdel_call.15-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.15-79980000-90020000/out/bwa_mem2.popdel_call.15-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.15-89980000-100020000/out/bwa_mem2.popdel_call.15-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.15-99980000-102531392/out/bwa_mem2.popdel_call.15-99980000-102531392.vcf.gz work/bwa_mem2.popdel_call.16-1-10020000/out/bwa_mem2.popdel_call.16-1-10020000.vcf.gz work/bwa_mem2.popdel_call.16-9980000-20020000/out/bwa_mem2.popdel_call.16-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.16-19980000-30020000/out/bwa_mem2.popdel_call.16-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.16-29980000-40020000/out/bwa_mem2.popdel_call.16-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.16-39980000-50020000/out/bwa_mem2.popdel_call.16-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.16-49980000-60020000/out/bwa_mem2.popdel_call.16-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.16-59980000-70020000/out/bwa_mem2.popdel_call.16-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.16-69980000-80020000/out/bwa_mem2.popdel_call.16-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.16-79980000-90020000/out/bwa_mem2.popdel_call.16-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.16-89980000-90354753/out/bwa_mem2.popdel_call.16-89980000-90354753.vcf.gz work/bwa_mem2.popdel_call.17-1-10020000/out/bwa_mem2.popdel_call.17-1-10020000.vcf.gz work/bwa_mem2.popdel_call.17-9980000-20020000/out/bwa_mem2.popdel_call.17-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.17-19980000-30020000/out/bwa_mem2.popdel_call.17-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.17-29980000-40020000/out/bwa_mem2.popdel_call.17-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.17-39980000-50020000/out/bwa_mem2.popdel_call.17-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.17-49980000-60020000/out/bwa_mem2.popdel_call.17-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.17-59980000-70020000/out/bwa_mem2.popdel_call.17-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.17-69980000-80020000/out/bwa_mem2.popdel_call.17-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.17-79980000-81195210/out/bwa_mem2.popdel_call.17-79980000-81195210.vcf.gz work/bwa_mem2.popdel_call.18-1-10020000/out/bwa_mem2.popdel_call.18-1-10020000.vcf.gz work/bwa_mem2.popdel_call.18-9980000-20020000/out/bwa_mem2.popdel_call.18-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.18-19980000-30020000/out/bwa_mem2.popdel_call.18-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.18-29980000-40020000/out/bwa_mem2.popdel_call.18-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.18-39980000-50020000/out/bwa_mem2.popdel_call.18-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.18-49980000-60020000/out/bwa_mem2.popdel_call.18-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.18-59980000-70020000/out/bwa_mem2.popdel_call.18-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.18-69980000-78077248/out/bwa_mem2.popdel_call.18-69980000-78077248.vcf.gz work/bwa_mem2.popdel_call.19-1-10020000/out/bwa_mem2.popdel_call.19-1-10020000.vcf.gz work/bwa_mem2.popdel_call.19-9980000-20020000/out/bwa_mem2.popdel_call.19-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.19-19980000-30020000/out/bwa_mem2.popdel_call.19-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.19-29980000-40020000/out/bwa_mem2.popdel_call.19-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.19-39980000-50020000/out/bwa_mem2.popdel_call.19-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.19-49980000-59128983/out/bwa_mem2.popdel_call.19-49980000-59128983.vcf.gz work/bwa_mem2.popdel_call.20-1-10020000/out/bwa_mem2.popdel_call.20-1-10020000.vcf.gz work/bwa_mem2.popdel_call.20-9980000-20020000/out/bwa_mem2.popdel_call.20-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.20-19980000-30020000/out/bwa_mem2.popdel_call.20-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.20-29980000-40020000/out/bwa_mem2.popdel_call.20-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.20-39980000-50020000/out/bwa_mem2.popdel_call.20-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.20-49980000-60020000/out/bwa_mem2.popdel_call.20-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.20-59980000-63025520/out/bwa_mem2.popdel_call.20-59980000-63025520.vcf.gz work/bwa_mem2.popdel_call.21-1-10020000/out/bwa_mem2.popdel_call.21-1-10020000.vcf.gz work/bwa_mem2.popdel_call.21-9980000-20020000/out/bwa_mem2.popdel_call.21-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.21-19980000-30020000/out/bwa_mem2.popdel_call.21-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.21-29980000-40020000/out/bwa_mem2.popdel_call.21-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.21-39980000-48129895/out/bwa_mem2.popdel_call.21-39980000-48129895.vcf.gz work/bwa_mem2.popdel_call.22-1-10020000/out/bwa_mem2.popdel_call.22-1-10020000.vcf.gz work/bwa_mem2.popdel_call.22-9980000-20020000/out/bwa_mem2.popdel_call.22-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.22-19980000-30020000/out/bwa_mem2.popdel_call.22-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.22-29980000-40020000/out/bwa_mem2.popdel_call.22-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.22-39980000-50020000/out/bwa_mem2.popdel_call.22-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.22-49980000-51304566/out/bwa_mem2.popdel_call.22-49980000-51304566.vcf.gz work/bwa_mem2.popdel_call.X-1-10020000/out/bwa_mem2.popdel_call.X-1-10020000.vcf.gz work/bwa_mem2.popdel_call.X-9980000-20020000/out/bwa_mem2.popdel_call.X-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.X-19980000-30020000/out/bwa_mem2.popdel_call.X-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.X-29980000-40020000/out/bwa_mem2.popdel_call.X-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.X-39980000-50020000/out/bwa_mem2.popdel_call.X-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.X-49980000-60020000/out/bwa_mem2.popdel_call.X-49980000-60020000.vcf.gz work/bwa_mem2.popdel_call.X-59980000-70020000/out/bwa_mem2.popdel_call.X-59980000-70020000.vcf.gz work/bwa_mem2.popdel_call.X-69980000-80020000/out/bwa_mem2.popdel_call.X-69980000-80020000.vcf.gz work/bwa_mem2.popdel_call.X-79980000-90020000/out/bwa_mem2.popdel_call.X-79980000-90020000.vcf.gz work/bwa_mem2.popdel_call.X-89980000-100020000/out/bwa_mem2.popdel_call.X-89980000-100020000.vcf.gz work/bwa_mem2.popdel_call.X-99980000-110020000/out/bwa_mem2.popdel_call.X-99980000-110020000.vcf.gz work/bwa_mem2.popdel_call.X-109980000-120020000/out/bwa_mem2.popdel_call.X-109980000-120020000.vcf.gz work/bwa_mem2.popdel_call.X-119980000-130020000/out/bwa_mem2.popdel_call.X-119980000-130020000.vcf.gz work/bwa_mem2.popdel_call.X-129980000-140020000/out/bwa_mem2.popdel_call.X-129980000-140020000.vcf.gz work/bwa_mem2.popdel_call.X-139980000-150020000/out/bwa_mem2.popdel_call.X-139980000-150020000.vcf.gz work/bwa_mem2.popdel_call.X-149980000-155270560/out/bwa_mem2.popdel_call.X-149980000-155270560.vcf.gz work/bwa_mem2.popdel_call.Y-1-10020000/out/bwa_mem2.popdel_call.Y-1-10020000.vcf.gz work/bwa_mem2.popdel_call.Y-9980000-20020000/out/bwa_mem2.popdel_call.Y-9980000-20020000.vcf.gz work/bwa_mem2.popdel_call.Y-19980000-30020000/out/bwa_mem2.popdel_call.Y-19980000-30020000.vcf.gz work/bwa_mem2.popdel_call.Y-29980000-40020000/out/bwa_mem2.popdel_call.Y-29980000-40020000.vcf.gz work/bwa_mem2.popdel_call.Y-39980000-50020000/out/bwa_mem2.popdel_call.Y-39980000-50020000.vcf.gz work/bwa_mem2.popdel_call.Y-49980000-59373566/out/bwa_mem2.popdel_call.Y-49980000-59373566.vcf.gz work/bwa_mem2.popdel_call.MT-1-16569/out/bwa_mem2.popdel_call.MT-1-16569.vcf.gz work/bwa_mem2.popdel_call.GL000207__dot__1-1-4262/out/bwa_mem2.popdel_call.GL000207__dot__1-1-4262.vcf.gz work/bwa_mem2.popdel_call.GL000226__dot__1-1-15008/out/bwa_mem2.popdel_call.GL000226__dot__1-1-15008.vcf.gz work/bwa_mem2.popdel_call.GL000229__dot__1-1-19913/out/bwa_mem2.popdel_call.GL000229__dot__1-1-19913.vcf.gz work/bwa_mem2.popdel_call.GL000231__dot__1-1-27386/out/bwa_mem2.popdel_call.GL000231__dot__1-1-27386.vcf.gz work/bwa_mem2.popdel_call.GL000210__dot__1-1-27682/out/bwa_mem2.popdel_call.GL000210__dot__1-1-27682.vcf.gz work/bwa_mem2.popdel_call.GL000239__dot__1-1-33824/out/bwa_mem2.popdel_call.GL000239__dot__1-1-33824.vcf.gz work/bwa_mem2.popdel_call.GL000235__dot__1-1-34474/out/bwa_mem2.popdel_call.GL000235__dot__1-1-34474.vcf.gz work/bwa_mem2.popdel_call.GL000201__dot__1-1-36148/out/bwa_mem2.popdel_call.GL000201__dot__1-1-36148.vcf.gz work/bwa_mem2.popdel_call.GL000247__dot__1-1-36422/out/bwa_mem2.popdel_call.GL000247__dot__1-1-36422.vcf.gz work/bwa_mem2.popdel_call.GL000245__dot__1-1-36651/out/bwa_mem2.popdel_call.GL000245__dot__1-1-36651.vcf.gz work/bwa_mem2.popdel_call.GL000197__dot__1-1-37175/out/bwa_mem2.popdel_call.GL000197__dot__1-1-37175.vcf.gz work/bwa_mem2.popdel_call.GL000203__dot__1-1-37498/out/bwa_mem2.popdel_call.GL000203__dot__1-1-37498.vcf.gz work/bwa_mem2.popdel_call.GL000246__dot__1-1-38154/out/bwa_mem2.popdel_call.GL000246__dot__1-1-38154.vcf.gz work/bwa_mem2.popdel_call.GL000249__dot__1-1-38502/out/bwa_mem2.popdel_call.GL000249__dot__1-1-38502.vcf.gz work/bwa_mem2.popdel_call.GL000196__dot__1-1-38914/out/bwa_mem2.popdel_call.GL000196__dot__1-1-38914.vcf.gz work/bwa_mem2.popdel_call.GL000248__dot__1-1-39786/out/bwa_mem2.popdel_call.GL000248__dot__1-1-39786.vcf.gz work/bwa_mem2.popdel_call.GL000244__dot__1-1-39929/out/bwa_mem2.popdel_call.GL000244__dot__1-1-39929.vcf.gz work/bwa_mem2.popdel_call.GL000238__dot__1-1-39939/out/bwa_mem2.popdel_call.GL000238__dot__1-1-39939.vcf.gz work/bwa_mem2.popdel_call.GL000202__dot__1-1-40103/out/bwa_mem2.popdel_call.GL000202__dot__1-1-40103.vcf.gz work/bwa_mem2.popdel_call.GL000234__dot__1-1-40531/out/bwa_mem2.popdel_call.GL000234__dot__1-1-40531.vcf.gz work/bwa_mem2.popdel_call.GL000232__dot__1-1-40652/out/bwa_mem2.popdel_call.GL000232__dot__1-1-40652.vcf.gz work/bwa_mem2.popdel_call.GL000206__dot__1-1-41001/out/bwa_mem2.popdel_call.GL000206__dot__1-1-41001.vcf.gz work/bwa_mem2.popdel_call.GL000240__dot__1-1-41933/out/bwa_mem2.popdel_call.GL000240__dot__1-1-41933.vcf.gz work/bwa_mem2.popdel_call.GL000236__dot__1-1-41934/out/bwa_mem2.popdel_call.GL000236__dot__1-1-41934.vcf.gz work/bwa_mem2.popdel_call.GL000241__dot__1-1-42152/out/bwa_mem2.popdel_call.GL000241__dot__1-1-42152.vcf.gz work/bwa_mem2.popdel_call.GL000243__dot__1-1-43341/out/bwa_mem2.popdel_call.GL000243__dot__1-1-43341.vcf.gz work/bwa_mem2.popdel_call.GL000242__dot__1-1-43523/out/bwa_mem2.popdel_call.GL000242__dot__1-1-43523.vcf.gz work/bwa_mem2.popdel_call.GL000230__dot__1-1-43691/out/bwa_mem2.popdel_call.GL000230__dot__1-1-43691.vcf.gz work/bwa_mem2.popdel_call.GL000237__dot__1-1-45867/out/bwa_mem2.popdel_call.GL000237__dot__1-1-45867.vcf.gz work/bwa_mem2.popdel_call.GL000233__dot__1-1-45941/out/bwa_mem2.popdel_call.GL000233__dot__1-1-45941.vcf.gz work/bwa_mem2.popdel_call.GL000204__dot__1-1-81310/out/bwa_mem2.popdel_call.GL000204__dot__1-1-81310.vcf.gz work/bwa_mem2.popdel_call.GL000198__dot__1-1-90085/out/bwa_mem2.popdel_call.GL000198__dot__1-1-90085.vcf.gz work/bwa_mem2.popdel_call.GL000208__dot__1-1-92689/out/bwa_mem2.popdel_call.GL000208__dot__1-1-92689.vcf.gz work/bwa_mem2.popdel_call.GL000191__dot__1-1-106433/out/bwa_mem2.popdel_call.GL000191__dot__1-1-106433.vcf.gz work/bwa_mem2.popdel_call.GL000227__dot__1-1-128374/out/bwa_mem2.popdel_call.GL000227__dot__1-1-128374.vcf.gz work/bwa_mem2.popdel_call.GL000228__dot__1-1-129120/out/bwa_mem2.popdel_call.GL000228__dot__1-1-129120.vcf.gz work/bwa_mem2.popdel_call.GL000214__dot__1-1-137718/out/bwa_mem2.popdel_call.GL000214__dot__1-1-137718.vcf.gz work/bwa_mem2.popdel_call.GL000221__dot__1-1-155397/out/bwa_mem2.popdel_call.GL000221__dot__1-1-155397.vcf.gz work/bwa_mem2.popdel_call.GL000209__dot__1-1-159169/out/bwa_mem2.popdel_call.GL000209__dot__1-1-159169.vcf.gz work/bwa_mem2.popdel_call.GL000218__dot__1-1-161147/out/bwa_mem2.popdel_call.GL000218__dot__1-1-161147.vcf.gz work/bwa_mem2.popdel_call.GL000220__dot__1-1-161802/out/bwa_mem2.popdel_call.GL000220__dot__1-1-161802.vcf.gz work/bwa_mem2.popdel_call.GL000213__dot__1-1-164239/out/bwa_mem2.popdel_call.GL000213__dot__1-1-164239.vcf.gz work/bwa_mem2.popdel_call.GL000211__dot__1-1-166566/out/bwa_mem2.popdel_call.GL000211__dot__1-1-166566.vcf.gz work/bwa_mem2.popdel_call.GL000199__dot__1-1-169874/out/bwa_mem2.popdel_call.GL000199__dot__1-1-169874.vcf.gz work/bwa_mem2.popdel_call.GL000217__dot__1-1-172149/out/bwa_mem2.popdel_call.GL000217__dot__1-1-172149.vcf.gz work/bwa_mem2.popdel_call.GL000216__dot__1-1-172294/out/bwa_mem2.popdel_call.GL000216__dot__1-1-172294.vcf.gz work/bwa_mem2.popdel_call.GL000215__dot__1-1-172545/out/bwa_mem2.popdel_call.GL000215__dot__1-1-172545.vcf.gz work/bwa_mem2.popdel_call.GL000205__dot__1-1-174588/out/bwa_mem2.popdel_call.GL000205__dot__1-1-174588.vcf.gz work/bwa_mem2.popdel_call.GL000219__dot__1-1-179198/out/bwa_mem2.popdel_call.GL000219__dot__1-1-179198.vcf.gz work/bwa_mem2.popdel_call.GL000224__dot__1-1-179693/out/bwa_mem2.popdel_call.GL000224__dot__1-1-179693.vcf.gz work/bwa_mem2.popdel_call.GL000223__dot__1-1-180455/out/bwa_mem2.popdel_call.GL000223__dot__1-1-180455.vcf.gz work/bwa_mem2.popdel_call.GL000195__dot__1-1-182896/out/bwa_mem2.popdel_call.GL000195__dot__1-1-182896.vcf.gz work/bwa_mem2.popdel_call.GL000212__dot__1-1-186858/out/bwa_mem2.popdel_call.GL000212__dot__1-1-186858.vcf.gz work/bwa_mem2.popdel_call.GL000222__dot__1-1-186861/out/bwa_mem2.popdel_call.GL000222__dot__1-1-186861.vcf.gz work/bwa_mem2.popdel_call.GL000200__dot__1-1-187035/out/bwa_mem2.popdel_call.GL000200__dot__1-1-187035.vcf.gz work/bwa_mem2.popdel_call.GL000193__dot__1-1-189789/out/bwa_mem2.popdel_call.GL000193__dot__1-1-189789.vcf.gz work/bwa_mem2.popdel_call.GL000194__dot__1-1-191469/out/bwa_mem2.popdel_call.GL000194__dot__1-1-191469.vcf.gz work/bwa_mem2.popdel_call.GL000225__dot__1-1-211173/out/bwa_mem2.popdel_call.GL000225__dot__1-1-211173.vcf.gz work/bwa_mem2.popdel_call.GL000192__dot__1-1-547496/out/bwa_mem2.popdel_call.GL000192__dot__1-1-547496.vcf.gz; Date=Mon Jan 23 14:31:37 2023 +##INFO= +##INFO= +##bcftools_viewVersion=1.16+htslib-1.16 +##bcftools_viewCommand=view --samples-file /data/cephfs-1/scratch/groups/cubi/holtgrem_c/tmp/hpc-cpu-8/20230123/tmp.gEa7PqtfGr/samples.txt --output-type u work/bwa_mem2.popdel_concat_calls/out/bwa_mem2.popdel_concat_calls.vcf.gz; Date=Mon Jan 23 14:34:09 2023 +##bcftools_viewCommand=view --output-file work/bwa_mem2.popdel.11_0351-N1-DNA1-WGS1/out/bwa_mem2.popdel.11_0351-N1-DNA1-WGS1.vcf.gz --output-type z --include '(GT !~ "\.") && (GT ~ "1")'; Date=Mon Jan 23 14:34:09 2023 +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT index father mother +1 1224181 . N 100 PASS IMPRECISE;SVLEN=-1621;END=1225801;SVTYPE=DEL;AF=0.151466;LR=1048.74;SVMETHOD=PopDelv1.1.2;YIELD=1;SWIN=480;AC=3;AN=6 GT:PL:GQ:LAD:DAD:FL:FLD 0/1:4,0,30:4:0,0,1:0,0,0,1,0:1223400,1224000:600 0/1:7,0,36:7:0,0,1:0,0,0,1,0:1223490,1223970:480 0/1:80,0,7:7:0,1,5:0,0,1,3,2:1223340,1225380:2040 diff --git a/tests/strucvars/ingest/popdel-min.vcf.gz b/tests/strucvars/ingest/popdel-min.vcf.gz new file mode 100644 index 00000000..96441f47 Binary files /dev/null and b/tests/strucvars/ingest/popdel-min.vcf.gz differ diff --git a/tests/strucvars/ingest/popdel-min.vcf.gz.tbi b/tests/strucvars/ingest/popdel-min.vcf.gz.tbi new file mode 100644 index 00000000..a3b2d945 Binary files /dev/null and b/tests/strucvars/ingest/popdel-min.vcf.gz.tbi differ