Expand description
Partial-Order Alignment for fast alignment and consensus of multiple homologous sequences.
- time complexity:
O(N^2 * L^2)
, whereN
is the number of sequences andL
is the length of each sequence.
For the original concept and theory, see:
- Lee, Christopher, Catherine Grasso, and Mark F. Sharlow. “Multiple sequence alignment using partial order graphs.” Bioinformatics 18.3 (2002): 452-464.
- Lee, Christopher. “Generating consensus sequences from partial order multiple sequence alignment graphs.” Bioinformatics 19.8 (2003): 999-1008.
For a modern reference implementation, see poapy: https://github.com/ljdursi/poapy
Example
use bio::alignment::pairwise::Scoring;
use bio::alignment::poa::*;
let x = b"AAAAAAA";
let y = b"AABBBAA";
let z = b"AABCBAA";
let scoring = Scoring::new(-1, 0, |a: u8, b: u8| if a == b { 1i32 } else { -1i32 });
let mut aligner = Aligner::new(scoring, x);
// z differs from x in 3 locations
assert_eq!(aligner.global(z).alignment().score, 1);
aligner.global(y).add_to_graph();
// z differs from x and y's partial order alignment by 1 base
assert_eq!(aligner.global(z).alignment().score, 5);
Structs
A partially ordered aligner builder
A partially ordered alignment graph