Entering edit mode
2 days ago
dwpeng
▴
120
I create a rust crate that a binding for bsalign. Bsalign, wrote by ruanjue, is a fast sequence aligner that designed for pairwise and multi sequence alignment.
bsalign-rs
A rust binding for the bsalign library.
Install
cargo install bsalign
Pairwise sequence alignment
use bsalign::pairwise::{BsPairwirseAligner, BsPairwiseParam};
fn main() {
let seq = "ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT";
let param = BsPairwiseParam::default().set_ksize(4);
let mut aligner = BsPairwirseAligner::new(param);
let result = aligner.align_banded_striped_8bit(&seq, &seq);
assert_eq!(result.aln, qseq.len() as i32);
let alnstr = result.to_string();
println!(
"{}\n{}\n{}",
alnstr.tseq().to_string(),
alnstr.alignment().to_string(),
alnstr.qseq().to_string(),
);
println!("Alignment result: {}", result);
}
Multiple sequence alignment
use bsalign::{
BitSeq,
poa::{BsPoaAligner, BsPoaParam},
};
fn main() {
let param = BsPoaParam::default();
let mut poa = BsPoaAligner::new(param);
let seq = "ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT";
poa.add_sequence(seq);
poa.add_sequence(seq);
poa.add_sequence(seq);
poa.align();
let consensus = poa.get_cns();
let bitseq: BitSeq = consensus.into();
let consensus = bitseq.to_string();
println!("Consensus: {}", consensus);
}
ps: any questions are welcome.
github repo: https://github.com/dwpeng/bsalign-rs