|
vg
tools for working with variation graphs
|
#include <graph_caller.hpp>
Public Member Functions | |
| VCFOutputCaller (const string &sample_name) | |
| virtual | ~VCFOutputCaller () |
| virtual string | vcf_header (const PathHandleGraph &graph, const vector< string > &contigs, const vector< size_t > &contig_length_overrides) const |
| Write the vcf header (version and contigs and basic info) More... | |
| bool | add_variant (vcflib::Variant &var) const |
| void | write_variants (ostream &out_stream, const SnarlManager *snarl_manager=nullptr) |
| void | vcf_fixup (vcflib::Variant &var) const |
| Run vcffixup from vcflib. More... | |
| void | set_translation (const unordered_map< nid_t, pair< string, size_t >> *translation) |
| Add a translation map. More... | |
| void | set_nested (bool nested) |
| Assume writing nested snarls is enabled. More... | |
| void | set_allele_merge (double threshold, int64_t min_len) |
| unordered_set< string > | get_output_contigs () const |
| string | prune_header_contigs (const string &header, const unordered_set< string > &keep) const |
Protected Member Functions | |
| void | add_allele_path_to_info (const HandleGraph *graph, vcflib::Variant &v, int allele, const Traversal &trav, bool reversed, bool one_based) const |
| add a traversal to the VCF info field in the format of a GFA W-line or GAF path More... | |
| void | add_allele_path_to_info (vcflib::Variant &v, int allele, const SnarlTraversal &trav, bool reversed, bool one_based) const |
| legacy version of above More... | |
| string | trav_string (const HandleGraph &graph, const SnarlTraversal &trav) const |
| convert a traversal into an allele string More... | |
| bool | merge_similar_alleles (const PathPositionHandleGraph &graph, const vector< SnarlTraversal > &site_traversals, vector< int > &site_genotype, const string &sample_name, vcflib::Variant &out_variant) const |
| bool | emit_variant (const PathPositionHandleGraph &graph, SnarlCaller &snarl_caller, const Snarl &snarl, const vector< SnarlTraversal > &called_traversals, const vector< int > &genotype, int ref_trav_idx, const unique_ptr< SnarlCaller::CallInfo > &call_info, const string &ref_path_name, int ref_offset, bool genotype_snarls, int ploidy, function< string(const vector< SnarlTraversal > &, const vector< int > &, int, int, int)> trav_to_string=nullptr) |
| tuple< int64_t, int64_t, bool, step_handle_t, step_handle_t > | get_ref_interval (const PathPositionHandleGraph &graph, const Snarl &snarl, const string &ref_path_name) const |
| pair< string, int64_t > | get_ref_position (const PathPositionHandleGraph &graph, const Snarl &snarl, const string &ref_path_name, int64_t ref_path_offset) const |
| used for making gaf traversal names More... | |
| void | flatten_common_allele_ends (vcflib::Variant &variant, bool backward, size_t len_override) const |
| string | print_snarl (const HandleGraph *grpah, const handle_t &snarl_start, const handle_t &snarl_end, bool in_brackets=false) const |
| string | print_snarl (const Snarl &snarl, bool in_brackets=false) const |
| legacy version of above More... | |
| string | print_flipped_snarl (const Snarl &snarl, bool in_brackets=false) const |
| The same as above, but print the snarl as if its orientation has been flipped. More... | |
| void | scan_snarl (const string &allele_string, function< void(const string &, Snarl &)> callback) const |
| void | update_nesting_info_tags (const SnarlManager *snarl_manager) |
Static Protected Member Functions | |
| static bool | snarl_traversal_to_handles (const HandleGraph &graph, const SnarlTraversal &trav, Traversal &out_trav) |
| static int64_t | allele_core_length (const vector< string > &alleles) |
Protected Attributes | |
| vcflib::VariantCallFile | output_vcf |
| output vcf More... | |
| string | sample_name |
| Sample name. More... | |
| vector< vector< pair< pair< string, size_t >, string > > > | output_variants |
| size_t | max_uncalled_alleles = 5 |
| print up to this many uncalled alleles when doing ref-genotpes in -a mode More... | |
| const unordered_map< nid_t, pair< string, size_t > > * | translation |
| bool | include_nested |
| double | allele_merge_threshold = 1.0 |
| int64_t | allele_merge_min_len = 0 |
Static Protected Attributes | |
| static const int64_t | max_vcf_line_length = 2000000000 |
Helper class that vcf writers can inherit from to for some common code to output sorted VCF
| vg::VCFOutputCaller::VCFOutputCaller | ( | const string & | sample_name | ) |
|
virtual |
|
protected |
add a traversal to the VCF info field in the format of a GFA W-line or GAF path
|
protected |
legacy version of above
| bool vg::VCFOutputCaller::add_variant | ( | vcflib::Variant & | var | ) | const |
Add a variant to our buffer Returns false if the variant line length exceeds VCFOutputCaller::max_vcf_line_length
|
staticprotected |
The CORE LENGTH of a variant: the length of the longest allele after stripping the prefix and the suffix that every non-"*" allele shares. This is the single definition of "how big is this variant" behind –cluster-min-len in BOTH vg call and vg deconstruct. It is invariant to how much shared flanking context a caller keeps in its allele strings, which is the point: vg call flattens down to an anchor base while vg deconstruct emits the whole snarl interior, so a raw string length answers differently for the same variant. Consequences, all intended:
|
protected |
print a vcf variant return value is taken from add_variant (see above)
|
protected |
clean up the alleles to not share common prefixes / suffixes if len_override given, just do that many bases without thinking
| unordered_set< string > vg::VCFOutputCaller::get_output_contigs | ( | ) | const |
The set of reference contigs that actually have a record. Reads the sort keys of the output buffer, so it costs nothing (no decompression) and does not need the snarl tree. Only meaningful once calling is finished and before write_variants() drains the buffer.
|
protected |
get the interval of a snarl from our reference path using the PathPositionHandleGraph interface the bool is true if the snarl's backward on the path first returned value -1 if no traversal found
|
protected |
used for making gaf traversal names
|
protected |
Merge near-identical called ALT alleles in an already-populated variant. Must run AFTER SnarlCaller::update_vcf_info and after flatten_common_allele_ends, so that the genotyper and the allele-flattening both see the full pre-merge allele set: merging earlier drops the absorbed allele's reads from AD/DP and from the Poisson caller's total_other_support term. Rewrites the allele-indexed fields (alleles/alt, AT, AD, GL, GT, MAD) and records what was merged in the MAT info field. Returns true if anything merged.
|
protected |
The same as above, but print the snarl as if its orientation has been flipped.
|
protected |
print a snarl in a consistent form like >3435<12222 if in_brackets set to true, do (>3435<12222) instead (this is only used for nested caller)
|
protected |
legacy version of above
| string vg::VCFOutputCaller::prune_header_contigs | ( | const string & | header, |
| const unordered_set< string > & | keep | ||
| ) | const |
Remove ##contig lines whose ID is not in keep, leaving every other line alone. A reference contig that produced no record is not worth declaring: with a gref cover most contigs are fragments, and on a human chromosome a third of them carry nothing.
|
protected |
| void vg::VCFOutputCaller::set_allele_merge | ( | double | threshold, |
| int64_t | min_len | ||
| ) |
Enable post-genotyping merging of near-identical called ALT alleles, so that a 1/2 call of two effectively-identical alleles collapses to 1/1 with a single ALT. Uses the same similarity metric and the same core-length gate as "vg deconstruct -L/--cluster-min-len" (a length-weighted Jaccard, except that a pure deletion is scored against the site – see weighted_traversal_similarity). The gate is applied to the alleles each tool emits, and those sets differ, so the two can disagree at a given site: similarity is >= threshold to merge, and min_len > 0 restricts merging to sites whose core length reaches min_len bp (see allele_core_length). A threshold of 1.0 (the default) disables merging entirely.
| void vg::VCFOutputCaller::set_nested | ( | bool | nested | ) |
Assume writing nested snarls is enabled.
| void vg::VCFOutputCaller::set_translation | ( | const unordered_map< nid_t, pair< string, size_t >> * | translation | ) |
Add a translation map.
|
staticprotected |
Convert a SnarlTraversal to the handle vector the clustering code works on. Returns false (leaving out_trav unspecified) if the traversal cannot be represented: fewer than two visits (the "*" placeholder pushed for a star allele), or a visit carrying a child Snarl rather than a node, which NestedFlowCaller produces via SnarlGraph::embed_snarl. (LegacyCaller expands its children into node visits in top_down_genotype, so it never reaches here.)
|
protected |
convert a traversal into an allele string
|
protected |
| void vg::VCFOutputCaller::vcf_fixup | ( | vcflib::Variant & | var | ) | const |
Run vcffixup from vcflib.
|
virtual |
Write the vcf header (version and contigs and basic info)
Reimplemented in vg::NestedFlowCaller, vg::FlowCaller, vg::LegacyCaller, and vg::VCFGenotyper.
| void vg::VCFOutputCaller::write_variants | ( | ostream & | out_stream, |
| const SnarlManager * | snarl_manager = nullptr |
||
| ) |
Sort then write variants in the buffer snarl_manager needed if include_nested is true
|
protected |
|
protected |
|
protected |
|
protected |
print up to this many uncalled alleles when doing ref-genotpes in -a mode
|
staticprotected |
|
mutableprotected |
output buffers (1/thread) (for sorting) variants stored as strings (and position key pairs) because vcflib::Variant in-memory struct so huge
|
mutableprotected |
output vcf
|
protected |
Sample name.
|
protected |
1.9.1