vg
tools for working with variation graphs
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
vg::NetGraph Class Reference

#include <snarls.hpp>

Inheritance diagram for vg::NetGraph:
handlegraph::HandleGraph

Public Member Functions

template<typename ChainContainer >
 NetGraph (const Visit &start, const Visit &end, const ChainContainer &child_chains_mixed, const HandleGraph *graph, bool use_internal_connectivity=false)
 
template<typename ChainContainer , typename SnarlContainer >
 NetGraph (const Visit &start, const Visit &end, const ChainContainer &child_chains, const SnarlContainer &child_unary_snarls, const HandleGraph *graph, bool use_internal_connectivity=false)
 Make a net graph from the given chains and unary snarls (as pointers) in the given backing graph. More...
 
 NetGraph (const Visit &start, const Visit &end, const vector< vector< pair< Snarl, bool >>> &child_chains, const vector< Snarl > &child_unary_snarls, const HandleGraph *graph, bool use_internal_connectivity=false)
 
virtual bool has_node (id_t node_id) const
 Method to check if a node exists by ID. More...
 
virtual handle_t get_handle (const id_t &node_id, bool is_reverse=false) const
 Look up the handle for the node with the given ID in the given orientation. More...
 
virtual id_t get_id (const handle_t &handle) const
 Get the ID from a handle. More...
 
virtual bool get_is_reverse (const handle_t &handle) const
 Get the orientation of a handle. More...
 
virtual handle_t flip (const handle_t &handle) const
 Invert the orientation of a handle (potentially without getting its ID) More...
 
virtual size_t get_length (const handle_t &handle) const
 Get the length of a node. More...
 
virtual string get_sequence (const handle_t &handle) const
 
virtual bool follow_edges_impl (const handle_t &handle, bool go_left, const function< bool(const handle_t &)> &iteratee) const
 
virtual bool for_each_handle_impl (const function< bool(const handle_t &)> &iteratee, bool parallel=false) const
 
virtual size_t get_node_count () const
 Return the number of nodes in the graph. More...
 
virtual id_t min_node_id () const
 Return the smallest ID used. More...
 
virtual id_t max_node_id () const
 Return the largest ID used. More...
 
const handle_tget_start () const
 
const handle_tget_end () const
 
bool is_child (const handle_t &handle) const
 
handle_t get_inward_backing_handle (const handle_t &child_handle) const
 
handle_t get_handle_from_inward_backing_handle (const handle_t &backing_handle) const
 
- Public Member Functions inherited from handlegraph::HandleGraph
virtual ~HandleGraph ()=default
 
template<typename Iteratee >
bool follow_edges (const handle_t &handle, bool go_left, const Iteratee &iteratee) const
 
template<typename Iteratee >
bool for_each_handle (const Iteratee &iteratee, bool parallel=false) const
 
virtual size_t get_degree (const handle_t &handle, bool go_left) const
 
virtual bool has_edge (const handle_t &left, const handle_t &right) const
 
bool has_edge (const edge_t &edge) const
 Convenient wrapper of has_edge for edge_t argument. More...
 
virtual size_t get_edge_count () const
 
virtual size_t get_total_length () const
 
virtual char get_base (const handle_t &handle, size_t index) const
 
virtual std::string get_subsequence (const handle_t &handle, size_t index, size_t size) const
 
handle_t forward (const handle_t &handle) const
 Get the locally forward version of a handle. More...
 
edge_t edge_handle (const handle_t &left, const handle_t &right) const
 
handle_t traverse_edge_handle (const edge_t &edge, const handle_t &left) const
 
template<typename Iteratee >
bool for_each_edge (const Iteratee &iteratee, bool parallel=false) const
 

Protected Member Functions

 NetGraph (const Visit &start, const Visit &end, const HandleGraph *graph, bool use_internal_connectivity=false)
 Make a NetGraph without filling in any of the child indexes. More...
 
void add_unary_child (const Snarl *unary)
 Add a unary child snarl to the indexes. More...
 
void add_chain_child (const Chain &chain)
 Add a chain of one or more non-unary snarls to the index. More...
 
- Protected Member Functions inherited from handlegraph::HandleGraph
virtual bool follow_edges_impl (const handle_t &handle, bool go_left, const std::function< bool(const handle_t &)> &iteratee) const =0
 
virtual bool for_each_handle_impl (const std::function< bool(const handle_t &)> &iteratee, bool parallel=false) const =0
 

Protected Attributes

const HandleGraphgraph
 
handle_t start
 
handle_t end
 
bool use_internal_connectivity
 
unordered_set< handle_tunary_boundaries
 
unordered_map< handle_t, handle_tchain_end_rewrites
 
unordered_map< handle_t, handle_tchain_ends_by_start
 
unordered_map< id_t, tuple< bool, bool, bool > > connectivity
 

Detailed Description

Allow traversing a graph of nodes and child snarl chains within a snarl within another HandleGraph. Uses its own internal child index because it's used in the construction of snarls to feed to SnarlManagers.

Assumes that the snarls in the chains we get are in the order they occur in the graph.

We adapt the handle graph abstraction as follows:

A chain becomes a single node with the ID and local forward orientation of its first snarl's start.

A chain node connects on its left to everything connected to its first start and on its right to everything connected to its last end.

A unary snarl becomes a single node, too. It is identified by its boundary node's ID.

If you're not using internal connectivity, a chain node or a unary snarl node behaves just like an ordinary node.

If you are using internal connectivity, edges are slightly faked:

A chain node also sees out its right everything that is out its left if it has a left-left connected snarl before any disconnected snarl.

And similarly for the mirror case.

All the edges on either side of a unary snarl node are the same.

In this part of the code we talk about "heads" (the inward-facing base graph handles used to represent child snarls/chains), and "tails" (the inward-facing ending handles of child chains).

Constructor & Destructor Documentation

◆ NetGraph() [1/4]

template<typename ChainContainer >
vg::NetGraph::NetGraph ( const Visit start,
const Visit end,
const ChainContainer &  child_chains_mixed,
const HandleGraph graph,
bool  use_internal_connectivity = false 
)
inline

Make a new NetGraph for the given snarl in the given backing graph, using the given chains as child chains. Unary snarls are stored as trivial chains just like other trivial chains.

◆ NetGraph() [2/4]

template<typename ChainContainer , typename SnarlContainer >
vg::NetGraph::NetGraph ( const Visit start,
const Visit end,
const ChainContainer &  child_chains,
const SnarlContainer &  child_unary_snarls,
const HandleGraph graph,
bool  use_internal_connectivity = false 
)
inline

Make a net graph from the given chains and unary snarls (as pointers) in the given backing graph.

◆ NetGraph() [3/4]

vg::NetGraph::NetGraph ( const Visit start,
const Visit end,
const vector< vector< pair< Snarl, bool >>> &  child_chains,
const vector< Snarl > &  child_unary_snarls,
const HandleGraph graph,
bool  use_internal_connectivity = false 
)

Make a net graph from the given chains and unary snarls (as raw values) in the given backing graph. Mostly for testing.

◆ NetGraph() [4/4]

vg::NetGraph::NetGraph ( const Visit start,
const Visit end,
const HandleGraph graph,
bool  use_internal_connectivity = false 
)
protected

Make a NetGraph without filling in any of the child indexes.

Member Function Documentation

◆ add_chain_child()

void vg::NetGraph::add_chain_child ( const Chain chain)
protected

Add a chain of one or more non-unary snarls to the index.

◆ add_unary_child()

void vg::NetGraph::add_unary_child ( const Snarl unary)
protected

Add a unary child snarl to the indexes.

◆ flip()

handle_t vg::NetGraph::flip ( const handle_t handle) const
virtual

Invert the orientation of a handle (potentially without getting its ID)

Implements handlegraph::HandleGraph.

◆ follow_edges_impl()

bool vg::NetGraph::follow_edges_impl ( const handle_t handle,
bool  go_left,
const function< bool(const handle_t &)> &  iteratee 
) const
virtual

Loop over all the handles to next/previous (right/left) nodes. Passes them to a callback which returns false to stop iterating and true to continue. Returns true if we finished and false if we stopped early.

◆ for_each_handle_impl()

bool vg::NetGraph::for_each_handle_impl ( const function< bool(const handle_t &)> &  iteratee,
bool  parallel = false 
) const
virtual

Loop over all the nodes in the graph in their local forward orientations, in their internal stored order. Stop if the iteratee returns false.

◆ get_end()

const handle_t & vg::NetGraph::get_end ( ) const

Get the outward-facing end handle for this net graph. Useful when working with traversals.

◆ get_handle()

handle_t vg::NetGraph::get_handle ( const id_t node_id,
bool  is_reverse = false 
) const
virtual

Look up the handle for the node with the given ID in the given orientation.

Implements handlegraph::HandleGraph.

◆ get_handle_from_inward_backing_handle()

handle_t vg::NetGraph::get_handle_from_inward_backing_handle ( const handle_t backing_handle) const

Given a handle to a node in the backing graph that reads into a child chain or snarl (in either direction), get the handle in this graph used to represent that child chain or snarl in that orientation.

◆ get_id()

id_t vg::NetGraph::get_id ( const handle_t handle) const
virtual

Get the ID from a handle.

Implements handlegraph::HandleGraph.

◆ get_inward_backing_handle()

handle_t vg::NetGraph::get_inward_backing_handle ( const handle_t child_handle) const

Get the handle in the backing graph reading into the child chain or unary snarl in the orientation represented by this handle to a node representing a child chain or unary snarl.

◆ get_is_reverse()

bool vg::NetGraph::get_is_reverse ( const handle_t handle) const
virtual

Get the orientation of a handle.

Implements handlegraph::HandleGraph.

◆ get_length()

size_t vg::NetGraph::get_length ( const handle_t handle) const
virtual

Get the length of a node.

Implements handlegraph::HandleGraph.

◆ get_node_count()

size_t vg::NetGraph::get_node_count ( ) const
virtual

Return the number of nodes in the graph.

Implements handlegraph::HandleGraph.

◆ get_sequence()

string vg::NetGraph::get_sequence ( const handle_t handle) const
virtual

Get the sequence of a node, presented in the handle's local forward orientation.

Implements handlegraph::HandleGraph.

◆ get_start()

const handle_t & vg::NetGraph::get_start ( ) const

Get the inward-facing start handle for this net graph. Useful when working with traversals.

◆ has_node()

bool vg::NetGraph::has_node ( id_t  node_id) const
virtual

Method to check if a node exists by ID.

Implements handlegraph::HandleGraph.

◆ is_child()

bool vg::NetGraph::is_child ( const handle_t handle) const

Returns true if the given handle represents a meta-node for a child chain or unary snarl, and false if it is a normal node actually in the net graph snarl's contents.

◆ max_node_id()

id_t vg::NetGraph::max_node_id ( ) const
virtual

Return the largest ID used.

Implements handlegraph::HandleGraph.

◆ min_node_id()

id_t vg::NetGraph::min_node_id ( ) const
virtual

Return the smallest ID used.

Implements handlegraph::HandleGraph.

Member Data Documentation

◆ chain_end_rewrites

unordered_map<handle_t, handle_t> vg::NetGraph::chain_end_rewrites
protected

◆ chain_ends_by_start

unordered_map<handle_t, handle_t> vg::NetGraph::chain_ends_by_start
protected

◆ connectivity

unordered_map<id_t, tuple<bool, bool, bool> > vg::NetGraph::connectivity
protected

◆ end

handle_t vg::NetGraph::end
protected

◆ graph

const HandleGraph* vg::NetGraph::graph
protected

◆ start

handle_t vg::NetGraph::start
protected

◆ unary_boundaries

unordered_set<handle_t> vg::NetGraph::unary_boundaries
protected

◆ use_internal_connectivity

bool vg::NetGraph::use_internal_connectivity
protected

The documentation for this class was generated from the following files: