libmatchtigs/implementation/pathtigs/
mod.rs

1use crate::TigAlgorithm;
2use genome_graph::bigraph::algo::walk_cover::arbitrary_biwalk_cover;
3use genome_graph::bigraph::interface::static_bigraph::StaticEdgeCentricBigraph;
4use genome_graph::bigraph::interface::BidirectedData;
5use genome_graph::bigraph::traitgraph::interface::GraphBase;
6use genome_graph::bigraph::traitgraph::walks::VecEdgeWalk;
7use log::info;
8
9/// The pathtig algorithm computes a heuristically small set of edge-disjoint paths, similar to simplitigs and UST-tigs.
10/// This algorithm does not alter the graph.
11#[derive(Default)]
12pub struct PathtigAlgorithm;
13
14impl<Graph: GraphBase> TigAlgorithm<Graph> for PathtigAlgorithm
15where
16    Graph: StaticEdgeCentricBigraph,
17    Graph::EdgeData: BidirectedData + Eq,
18{
19    type Configuration = ();
20
21    fn compute_tigs(
22        graph: &mut Graph,
23        _configuration: &Self::Configuration,
24    ) -> Vec<VecEdgeWalk<Graph>> {
25        compute_pathtigs(graph)
26    }
27}
28
29/// Compute pathtigs for the given graph.
30/// This is a heuristically small set of edge-disjoint paths, similar to simplitigs and UST-tigs.
31fn compute_pathtigs<
32    EdgeData: BidirectedData + Eq,
33    Graph: StaticEdgeCentricBigraph<EdgeData = EdgeData>,
34>(
35    graph: &Graph,
36) -> Vec<VecEdgeWalk<Graph>> {
37    info!("Computing pathtigs");
38    let pathtigs = arbitrary_biwalk_cover(graph);
39    info!("Found {} pathtigs", pathtigs.len());
40    pathtigs
41}