diff --git a/src/seqvars/ingest/header.rs b/src/seqvars/ingest/header.rs index 87616b15..6659f606 100644 --- a/src/seqvars/ingest/header.rs +++ b/src/seqvars/ingest/header.rs @@ -11,29 +11,39 @@ pub enum VariantCaller { Other, } +impl VariantCaller { + /// Return a string with the name of the variant caller for the VCF header string. + fn name(&self) -> &'static str { + match self { + VariantCaller::GatkHaplotypeCaller { .. } => "GatkHaplotypeCaller", + VariantCaller::GatkUnifiedGenotyper { .. } => "GatkUnifiedGenotyper", + VariantCaller::Dragen { .. } => "Dragen", + VariantCaller::Other => "Other", + } + } +} + impl VariantCaller { pub fn guess(header: &vcf::Header) -> Option { for (other, collection) in header.other_records() { - if other.as_ref().starts_with("GATKCommandLine") - || other.as_ref().starts_with("DRAGENCommandLine") + if ["GATKCommandLine", "DRAGENCommandLine"] + .iter() + .any(|k| other.as_ref().starts_with(k)) { use vcf::header::record::value::collection::Collection; if let Collection::Structured(map) = collection { for (key, values) in map.iter() { - if let ("HaplotypeCaller", Some(version)) = - (key.as_str(), values.other_fields().get("Version").cloned()) - { - return Some(VariantCaller::GatkHaplotypeCaller { version }); - } - if let ("UnifiedGenotyper", Some(version)) = - (key.as_str(), values.other_fields().get("Version").cloned()) - { - return Some(VariantCaller::GatkUnifiedGenotyper { version }); - } - if let ("dragen", Some(version)) = - (key.as_str(), values.other_fields().get("Version").cloned()) - { - return Some(VariantCaller::Dragen { version }); + match (key.as_str(), values.other_fields().get("Version").cloned()) { + ("HaplotypeCaller", Some(version)) => { + return Some(VariantCaller::GatkHaplotypeCaller { version }) + } + ("UnifiedGenotyper", Some(version)) => { + return Some(VariantCaller::GatkUnifiedGenotyper { version }) + } + ("dragen", Some(version)) => { + return Some(VariantCaller::Dragen { version }) + } + _ => (), } } } @@ -43,14 +53,285 @@ impl VariantCaller { } } +/// Add contigs for GRCh37. +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::::builder() + .set_length(*length) + .insert("assembly".parse()?, "GRCh37") + .insert("species".parse()?, "Homo sapiens") + .build()?, + ); + } + + Ok(builder) +} + +/// Add contigs for GRCh38. +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::::builder() + .set_length(*length) + .insert("assembly".parse()?, "GRCh37") + .insert("species".parse()?, "Homo sapiens") + .build()?, + ); + } + + Ok(builder) +} + /// Generate the output header from the input header. pub fn build_output_header( input_header: &vcf::Header, genomebuild: GenomeRelease, + worker_version: &str, ) -> Result { - let variant_caller = VariantCaller::guess(input_header) - .ok_or_else(|| anyhow::anyhow!("Unable to guess variant caller"))?; - todo!() + use vcf::header::record::value::map::format::Type as FormatType; + use vcf::header::record::value::{ + map::{info::Type, Filter, Format, Info}, + Map, + }; + use vcf::header::Number; + use vcf::record::genotypes::keys::key; + + let builder = vcf::Header::builder() + .add_filter("PASS", Map::::new("All filters passed")) + .add_info( + "gnomad_exomes_an".parse()?, + Map::::new( + Number::Count(1), + Type::Integer, + "Number of samples in gnomAD exomes", + ), + ) + .add_info( + "gnomad_exomes_hom".parse()?, + Map::::new( + Number::Count(1), + Type::Integer, + "Number of hom. alt. carriers in gnomAD exomes", + ), + ) + .add_info( + "gnomad_exomes_het".parse()?, + Map::::new( + Number::Count(1), + Type::Integer, + "Number of het. alt. carriers in gnomAD exomes", + ), + ) + .add_info( + "gnomad_exomes_hemi".parse()?, + Map::::new( + Number::Count(1), + Type::Integer, + "Number of hemi. alt. carriers in gnomAD exomes", + ), + ) + .add_info( + "gnomad_genomes_an".parse()?, + Map::::new( + Number::Count(1), + Type::Integer, + "Number of samples in gnomAD genomes", + ), + ) + .add_info( + "gnomad_genomes_hom".parse()?, + Map::::new( + Number::Count(1), + Type::Integer, + "Number of hom. alt. carriers in gnomAD genomes", + ), + ) + .add_info( + "gnomad_genomes_het".parse()?, + Map::::new( + Number::Count(1), + Type::Integer, + "Number of het. alt. carriers in gnomAD genomes", + ), + ) + .add_info( + "gnomad_genomes_hemi".parse()?, + Map::::new( + Number::Count(1), + Type::Integer, + "Number of hemi. alt. carriers in gnomAD genomes", + ), + ) + .add_info( + "helix_an".parse()?, + Map::::new( + Number::Count(1), + Type::Integer, + "Number of samples in HelixMtDb", + ), + ) + .add_info( + "helix_hom".parse()?, + Map::::new( + Number::Count(1), + Type::Integer, + "Number of hom. alt. carriers in HelixMtDb", + ), + ) + .add_info( + "helix_het".parse()?, + Map::::new( + Number::Count(1), + Type::Integer, + "Number of het. alt. carriers in HelixMtDb", + ), + ) + .add_info( + "ANN".parse()?, + Map::::new( + Number::Unknown, + Type::String, + "Functional annotations: 'Allele | Annotation | Annotation_Impact | \ + Gene_Name | Gene_ID | Feature_Type | Feature_ID | Transcript_BioType | Rank | \ + HGVS.c | HGVS.p | cDNA.pos / cDNA.length | CDS.pos / CDS.length | \ + AA.pos / AA.length | Distance | ERRORS / WARNINGS / INFO'", + ), + ) + .add_format(key::READ_DEPTHS, Map::::from(&key::READ_DEPTHS)) + .add_format(key::READ_DEPTH, Map::::from(&key::READ_DEPTH)) + .add_format( + key::CONDITIONAL_GENOTYPE_QUALITY, + Map::::from(&key::CONDITIONAL_GENOTYPE_QUALITY), + ) + .add_format(key::GENOTYPE, Map::::from(&key::GENOTYPE)) + .add_format( + "PID".parse()?, + Map::::builder() + .set_number(Number::Count(1)) + .set_type(FormatType::String) + .set_description( + "Physical phasing ID information, where each unique ID within a given sample \ + (but not across samples) connects records within a phasing group", + ) + .build()?, + ); + + let builder = match genomebuild { + GenomeRelease::Grch37 => add_contigs_37(builder), + GenomeRelease::Grch38 => add_contigs_38(builder), + }?; + + use vcf::header::record::value::map::Other; + + let orig_caller = VariantCaller::guess(input_header) + .ok_or_else(|| anyhow::anyhow!("unable to guess original variant caller"))?; + + let builder = builder.insert( + "x-varfish-version".parse()?, + vcf::header::record::Value::Map( + String::from("varfish-server-worker"), + Map::::builder() + .insert("Version".parse()?, worker_version) + .build()?, + ), + )?; + + let builder = match &orig_caller { + VariantCaller::GatkHaplotypeCaller { version } + | VariantCaller::GatkUnifiedGenotyper { version } + | VariantCaller::Dragen { version } => builder.insert( + "x-varfish-version".parse()?, + vcf::header::record::Value::Map( + String::from("orig-caller"), + Map::::builder() + .insert("Name".parse()?, orig_caller.name()) + .insert("Version".parse()?, version) + .build()?, + ), + )?, + VariantCaller::Other => builder.insert( + "x-varfish-version".parse()?, + vcf::header::record::Value::Map( + String::from("orig-caller"), + Map::::builder() + .insert("Name".parse()?, "Other") + .build()?, + ), + )?, + }; + + // TODO: embed pedigree information + + Ok(builder.build()) } #[cfg(test)] @@ -89,21 +370,54 @@ mod test { #[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 build_output_header(#[case] path: &str) -> Result<(), anyhow::Error> { + fn build_output_header_37(#[case] path: &str) -> Result<(), anyhow::Error> { + set_snapshot_suffix!("{:?}", path.split('/').last().unwrap()); + let tmpdir = temp_testdir::TempDir::default(); + + let input_vcf_header = noodles_vcf::reader::Builder::default() + .build_from_path(path)? + .read_header()?; + let output_vcf_header = super::build_output_header( + &input_vcf_header, + crate::common::GenomeRelease::Grch37, + "x.y.z", + )?; + + 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/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 build_output_header_38(#[case] path: &str) -> Result<(), anyhow::Error> { set_snapshot_suffix!("{:?}", path.split('/').last().unwrap()); let tmpdir = temp_testdir::TempDir::default(); let input_vcf_header = noodles_vcf::reader::Builder::default() .build_from_path(path)? .read_header()?; - let output_vcf_header = - super::build_output_header(&input_vcf_header, crate::common::GenomeRelease::Grch37)?; + let output_vcf_header = super::build_output_header( + &input_vcf_header, + crate::common::GenomeRelease::Grch38, + "x.y.z", + )?; 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(&input_vcf_header)?; + .write_header(&output_vcf_header)?; } insta::assert_snapshot!(std::fs::read_to_string(out_path_str)?); diff --git a/src/seqvars/ingest/mod.rs b/src/seqvars/ingest/mod.rs index bd487577..557a3d94 100644 --- a/src/seqvars/ingest/mod.rs +++ b/src/seqvars/ingest/mod.rs @@ -20,6 +20,15 @@ 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") + } +} + /// Main entry point for `seqvars ingest` sub command. pub fn run(args_common: &crate::common::Args, args: &Args) -> Result<(), anyhow::Error> { let before_anything = std::time::Instant::now(); @@ -42,7 +51,8 @@ pub fn run(args_common: &crate::common::Args, args: &Args) -> Result<(), anyhow: let input_header = input_reader .read_header() .map_err(|e| anyhow::anyhow!("problem reading VCF header: {}", e))?; - let output_header = header::build_output_header(&input_header, args.genomebuild)?; + let output_header = + header::build_output_header(&input_header, args.genomebuild, worker_version())?; let mut output_writer = { let writer = std::fs::File::create(&args.path_out).map_err(|e| { diff --git "a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@\"example_dragen.07.021.624.3.10.4.vcf\".snap" "b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@\"example_dragen.07.021.624.3.10.4.vcf\".snap" new file mode 100644 index 00000000..af09d34c --- /dev/null +++ "b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@\"example_dragen.07.021.624.3.10.4.vcf\".snap" @@ -0,0 +1,52 @@ +--- +source: src/seqvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO + diff --git "a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@\"example_dragen.07.021.624.3.10.9.vcf\".snap" "b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@\"example_dragen.07.021.624.3.10.9.vcf\".snap" new file mode 100644 index 00000000..5e9f9bd5 --- /dev/null +++ "b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@\"example_dragen.07.021.624.3.10.9.vcf\".snap" @@ -0,0 +1,52 @@ +--- +source: src/seqvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO + diff --git "a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@\"example_gatk_hc.3.7-0.vcf\".snap" "b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@\"example_gatk_hc.3.7-0.vcf\".snap" new file mode 100644 index 00000000..7cd3b298 --- /dev/null +++ "b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@\"example_gatk_hc.3.7-0.vcf\".snap" @@ -0,0 +1,52 @@ +--- +source: src/seqvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO + diff --git "a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@\"example_gatk_hc.4.4.0.0.vcf\".snap" "b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@\"example_gatk_hc.4.4.0.0.vcf\".snap" new file mode 100644 index 00000000..ca90c579 --- /dev/null +++ "b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__build_output_header_38@\"example_gatk_hc.4.4.0.0.vcf\".snap" @@ -0,0 +1,52 @@ +--- +source: src/seqvars/ingest/header.rs +expression: "std::fs::read_to_string(out_path_str)?" +--- +##fileformat=VCFv4.4 +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##INFO= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##FORMAT= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##contig= +##x-varfish-version= +##x-varfish-version= +#CHROM POS ID REF ALT QUAL FILTER INFO + diff --git a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_dragen.07.021.624.3.10.4.vcf.snap.new b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_dragen.07.021.624.3.10.4.vcf.snap similarity index 88% rename from src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_dragen.07.021.624.3.10.4.vcf.snap.new rename to src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_dragen.07.021.624.3.10.4.vcf.snap index b26d8340..0df41bd3 100644 --- a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_dragen.07.021.624.3.10.4.vcf.snap.new +++ b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_dragen.07.021.624.3.10.4.vcf.snap @@ -1,6 +1,5 @@ --- source: src/seqvars/ingest/header.rs -assertion_line: 82 expression: "VariantCaller::guess(&vcf_header)" --- Dragen: diff --git a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_dragen.07.021.624.3.10.9.vcf.snap.new b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_dragen.07.021.624.3.10.9.vcf.snap similarity index 88% rename from src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_dragen.07.021.624.3.10.9.vcf.snap.new rename to src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_dragen.07.021.624.3.10.9.vcf.snap index 82613538..5089a957 100644 --- a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_dragen.07.021.624.3.10.9.vcf.snap.new +++ b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_dragen.07.021.624.3.10.9.vcf.snap @@ -1,6 +1,5 @@ --- source: src/seqvars/ingest/header.rs -assertion_line: 82 expression: "VariantCaller::guess(&vcf_header)" --- Dragen: diff --git a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_gatk_hc.3.7-0.vcf.snap.new b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_gatk_hc.3.7-0.vcf.snap similarity index 88% rename from src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_gatk_hc.3.7-0.vcf.snap.new rename to src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_gatk_hc.3.7-0.vcf.snap index 2b6b1021..d6f9fb36 100644 --- a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_gatk_hc.3.7-0.vcf.snap.new +++ b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_gatk_hc.3.7-0.vcf.snap @@ -1,6 +1,5 @@ --- source: src/seqvars/ingest/header.rs -assertion_line: 82 expression: "VariantCaller::guess(&vcf_header)" --- GatkHaplotypeCaller: diff --git a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_gatk_hc.4.4.0.0.vcf.snap.new b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_gatk_hc.4.4.0.0.vcf.snap similarity index 87% rename from src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_gatk_hc.4.4.0.0.vcf.snap.new rename to src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_gatk_hc.4.4.0.0.vcf.snap index 5c3ac4b5..aeddbb48 100644 --- a/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_gatk_hc.4.4.0.0.vcf.snap.new +++ b/src/seqvars/ingest/snapshots/varfish_server_worker__seqvars__ingest__header__test__variant_caller_guess@example_gatk_hc.4.4.0.0.vcf.snap @@ -1,6 +1,5 @@ --- source: src/seqvars/ingest/header.rs -assertion_line: 82 expression: "VariantCaller::guess(&vcf_header)" --- GatkHaplotypeCaller: