vg
tools for working with variation graphs
|
#include <snarls.hpp>
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_t & | get_start () const |
const handle_t & | get_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 HandleGraph * | graph |
handle_t | start |
handle_t | end |
bool | use_internal_connectivity |
unordered_set< handle_t > | unary_boundaries |
unordered_map< handle_t, handle_t > | chain_end_rewrites |
unordered_map< handle_t, handle_t > | chain_ends_by_start |
unordered_map< id_t, tuple< bool, bool, bool > > | connectivity |
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).
|
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.
|
inline |
Make a net graph from the given chains and unary snarls (as pointers) in the given backing graph.
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.
|
protected |
Make a NetGraph without filling in any of the child indexes.
|
protected |
Add a chain of one or more non-unary snarls to the index.
|
protected |
Add a unary child snarl to the indexes.
Invert the orientation of a handle (potentially without getting its ID)
Implements handlegraph::HandleGraph.
|
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.
|
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.
const handle_t & vg::NetGraph::get_end | ( | ) | const |
Get the outward-facing end handle for this net graph. Useful when working with traversals.
Look up the handle for the node with the given ID in the given orientation.
Implements handlegraph::HandleGraph.
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 the ID from a handle.
Implements handlegraph::HandleGraph.
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.
|
virtual |
Get the orientation of a handle.
Implements handlegraph::HandleGraph.
|
virtual |
Get the length of a node.
Implements handlegraph::HandleGraph.
|
virtual |
Return the number of nodes in the graph.
Implements handlegraph::HandleGraph.
|
virtual |
Get the sequence of a node, presented in the handle's local forward orientation.
Implements handlegraph::HandleGraph.
const handle_t & vg::NetGraph::get_start | ( | ) | const |
Get the inward-facing start handle for this net graph. Useful when working with traversals.
|
virtual |
Method to check if a node exists by ID.
Implements handlegraph::HandleGraph.
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.
|
virtual |
Return the largest ID used.
Implements handlegraph::HandleGraph.
|
virtual |
Return the smallest ID used.
Implements handlegraph::HandleGraph.
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |