Skip to main content

Dbg

Struct Dbg 

Source
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>

Source

pub fn node_iterator(&'a self) -> NodeIterator<'a>

Returns an iterator over all nodes of the de Bruijn graph.

Source

pub fn new( sbwt: &'a SbwtIndex<SS>, lcs: Option<&LcsArray>, n_threads: usize, ) -> Self
where 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.

Source

pub fn push_node_kmer(&self, node: Node, buf: &mut Vec<u8>)

Push the k-mer string of the node to the given buffer.

Source

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.

Source

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.

Source

pub fn outdegree(&self, node: Node) -> usize

Returns the number of outgoing edges from the given node.

Source

pub fn indegree(&self, node: Node) -> usize

Returns the number of incoming edges to the given node.

Source

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.

Source

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.

Source

pub fn get_last_character(&self, node: Node) -> u8

Gets the last character of the k-mer string of the given node.

Source

pub fn has_outlabel(&self, node: Node, edge_label: u8) -> bool

Returns whether the given node has an outgoing edge labeled with edge_label.

Source

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.

Source

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.

Source

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).

Source

pub fn iter_unitigs_with_callback<F: Fn(&[Node]) + Send + Sync>( &self, callback: F, n_threads: usize, )

Source

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.

Source

pub fn is_first_kmer_of_unitig(&self, v: Node) -> bool

Source

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.

Source

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.

Source

pub fn is_dummy_colex_position(&self, pos: usize) -> bool

Trait Implementations§

Source§

impl<'a, SS: Clone + SubsetSeq + Send + Sync> Clone for Dbg<'a, SS>

Source§

fn clone(&self) -> Dbg<'a, SS>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<'a, SS: Debug + SubsetSeq + Send + Sync> Debug for Dbg<'a, SS>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'a, SS: PartialEq + SubsetSeq + Send + Sync> PartialEq for Dbg<'a, SS>

Source§

fn eq(&self, other: &Dbg<'a, SS>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<'a, SS: Eq + SubsetSeq + Send + Sync> Eq for Dbg<'a, SS>

Source§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .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
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> Erased for T