pub struct Dbg<'a, SS: SubsetSeq + Send + Sync> { /* private fields */ }Expand description
A struct supporting de Bruijn graph operations on the spectrum of k-mers encoded in an SbwtIndex. The graph is node-centric, meaning that the nodes are the distinct k-mers in the index (not including the dummy k-mers) and there is an edge from x to y iff x[1..k) = y[0..k-1). Edge (x,y) is labeled with the last character of y. Reverse complements are not modeled. The struct takes 2n bits of extra space on top of the SBWT, where n is the number of sets in the SBWT.
Implementations§
Source§impl<'a, SS: SubsetSeq + Send + Sync> Dbg<'a, SS>
impl<'a, SS: SubsetSeq + Send + Sync> Dbg<'a, SS>
Sourcepub fn node_iterator(&'a self) -> NodeIterator<'a> ⓘ
pub fn node_iterator(&'a self) -> NodeIterator<'a> ⓘ
Returns an iterator over all nodes of the de Bruijn graph.
Sourcepub fn new(
sbwt: &'a SbwtIndex<SS>,
lcs: Option<&LcsArray>,
n_threads: usize,
) -> Selfwhere
SS: Sync,
pub fn new(
sbwt: &'a SbwtIndex<SS>,
lcs: Option<&LcsArray>,
n_threads: usize,
) -> Selfwhere
SS: Sync,
Initializes supports for de Bruijn graph operation based on the given SbwtIndex. If the Lcs array of the SBWT is available, it can be given to significantly speed up construction. IMPORTANT: select support must be built before calling this function.
Sourcepub fn push_node_kmer(&self, node: Node, buf: &mut Vec<u8>)
pub fn push_node_kmer(&self, node: Node, buf: &mut Vec<u8>)
Push the k-mer string of the node to the given buffer.
Sourcepub fn get_kmer(&self, node: Node) -> Vec<u8> ⓘ
pub fn get_kmer(&self, node: Node) -> Vec<u8> ⓘ
Get the k-mer string label of a node. To avoid memory allocation, check Dbg::push_node_kmer.
Sourcepub fn get_node(&self, kmer: &[u8]) -> Option<Node>
pub fn get_node(&self, kmer: &[u8]) -> Option<Node>
Get a handle to the node corresponding to the given k-mer, if exists in the graph.
Sourcepub fn outdegree(&self, node: Node) -> usize
pub fn outdegree(&self, node: Node) -> usize
Returns the number of outgoing edges from the given node.
Sourcepub fn indegree(&self, node: Node) -> usize
pub fn indegree(&self, node: Node) -> usize
Returns the number of incoming edges to the given node.
Sourcepub fn push_out_neighbors(&self, node: Node, output: &mut Vec<(Node, u8)>)
pub fn push_out_neighbors(&self, node: Node, output: &mut Vec<(Node, u8)>)
For each outgoing edge from the given node, pushes to the output vector a pair (v, c), where v is the target node and c is the edge label.
Sourcepub fn push_in_neighbors(&self, node: Node, output: &mut Vec<(Node, u8)>)
pub fn push_in_neighbors(&self, node: Node, output: &mut Vec<(Node, u8)>)
For each incoming edge to the given node, pushes to the output vector a pair (v, c), where v is the source node and c is the edge label. The edge label will be the same for all in-neighbors because it has to be equal to the last character of the destination k-mer.
Sourcepub fn get_last_character(&self, node: Node) -> u8
pub fn get_last_character(&self, node: Node) -> u8
Gets the last character of the k-mer string of the given node.
Sourcepub fn has_outlabel(&self, node: Node, edge_label: u8) -> bool
pub fn has_outlabel(&self, node: Node, edge_label: u8) -> bool
Returns whether the given node has an outgoing edge labeled with edge_label.
Sourcepub fn push_outlabels(&self, node: Node, output: &mut Vec<u8>)
pub fn push_outlabels(&self, node: Node, output: &mut Vec<u8>)
Pushes the labels of all outgoing edges from the given node to the output vector.
Sourcepub fn follow_outedge(&self, node: Node, edge_label: u8) -> Option<Node>
pub fn follow_outedge(&self, node: Node, edge_label: u8) -> Option<Node>
Follows the outgoing edge labeled with edge_label from the given node. Returns None if the edge does not exist.
Sourcepub fn follow_inedge(&self, node: Node, i: usize) -> Option<Node>
pub fn follow_inedge(&self, node: Node, i: usize) -> Option<Node>
Follows backward the incoming edge that comes from the i-th smallest k-mer
(i ∈ [0, indegree(node)) in colexicographic order that has an outgoing edge to node.
Returns None if i ≥ indegree(node).
pub fn iter_unitigs_with_callback<F: Fn(&[Node]) + Send + Sync>( &self, callback: F, n_threads: usize, )
Sourcepub fn parallel_export_unitigs<W: Write + Send + Sync>(
&self,
fasta_out: W,
n_threads: usize,
)
pub fn parallel_export_unitigs<W: Write + Send + Sync>( &self, fasta_out: W, n_threads: usize, )
Writes the unitigs of the graph to the given writer in FASTA format. Uses as many threads as are available with the Rayon initialization.
pub fn is_first_kmer_of_unitig(&self, v: Node) -> bool
Sourcepub fn push_unitig_string(&self, unitig_nodes: &[Node], out: &mut Vec<u8>)
pub fn push_unitig_string(&self, unitig_nodes: &[Node], out: &mut Vec<u8>)
Computes the unitig string for a unitig represented as a sequence of Nodes. You can get this sequence of nodes by calling Dbg::walk_unitig_from with a node for which Dbg::is_first_kmer_of_unitig is true. If the node sequence is not a unitig, then the computed string will be the first k-mer, plus the last character of every following k-mer.
Sourcepub fn walk_unitig_from(
&self,
v: Node,
out_labels_buf: &mut Vec<u8>,
) -> Vec<Node>
pub fn walk_unitig_from( &self, v: Node, out_labels_buf: &mut Vec<u8>, ) -> Vec<Node>
Returns the sequence of nodes and the label of the unitig The out_labels_buf is working space for the function. Don’t assume anything about its contents when the function returns. If you also want the string label of the unitig, call Dbg::push_unitig_string with the returned Node vector.
pub fn is_dummy_colex_position(&self, pos: usize) -> bool
Trait Implementations§
impl<'a, SS: Eq + SubsetSeq + Send + Sync> Eq for Dbg<'a, SS>
impl<'a, SS: SubsetSeq + Send + Sync> StructuralPartialEq for Dbg<'a, SS>
Auto Trait Implementations§
impl<'a, SS> Freeze for Dbg<'a, SS>
impl<'a, SS> RefUnwindSafe for Dbg<'a, SS>where
SS: RefUnwindSafe,
impl<'a, SS> Send for Dbg<'a, SS>
impl<'a, SS> Sync for Dbg<'a, SS>
impl<'a, SS> Unpin for Dbg<'a, SS>
impl<'a, SS> UnsafeUnpin for Dbg<'a, SS>
impl<'a, SS> UnwindSafe for Dbg<'a, SS>where
SS: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.