logo
Expand description

Partial-Order Alignment for fast alignment and consensus of multiple homologous sequences.

  • time complexity: O(N^2 * L^2), where N is the number of sequences and L 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

Enums

Constants

Type Definitions