3个版本

0.1.2 2020年10月30日
0.1.1 2020年10月28日
0.1.0 2020年10月28日

#291生物学

每月下载量 34次

MIT 许可证

240KB
4.5K SLoC

C 4K SLoC // 0.3% comments Rust 289 SLoC // 0.0% comments Shell 7 SLoC // 0.3% comments

libwfa

Rust对wavefront算法(用于成对序列对齐)的绑定。

用法

该包将处理编译C库,并将其静态链接。

只需将 libwfa 添加到您的Cargo依赖项

[dependencies]
libwfa = "0.1"

依赖项

作为一个绑定,Unix系统上需要 llvm 和 libclang。这些可以通过包管理器安装,例如在Ubuntu上

sudo apt install llvm
sudo apt install libclang-dev

示例

在此阶段,用法与C库非常相似。

这相当于WFA自述文件中的基本示例

use libwfa::{affine_wavefront::*, bindings::*, mm_allocator::*, penalties::*};

fn main() {
    let alloc = MMAllocator::new(BUFFER_SIZE_8M as u64);

    let pattern = String::from("TCTTTACTCGCGCGTTGGAGAAATACAATAGT");
    let text = String::from("TCTATACTGCGCGTTTGGAGAAATAAAATAGT");

    let mut penalties = AffinePenalties {
        match_: 0,
        mismatch: 4,
        gap_opening: 6,
        gap_extension: 2,
    };

    let pat_len = pattern.as_bytes().len();
    let text_len = text.as_bytes().len();

    let mut wavefronts = AffineWavefronts::new_complete(
        pat_len,
        text_len,
        &mut penalties,
        &alloc,
    );

    wavefronts
        .align(pattern.as_bytes(), text.as_bytes())
        .unwrap();

    let score = wavefronts.edit_cigar_score(&mut penalties);

    println!("score: {}", score);
    wavefronts.print_cigar(pattern.as_bytes(), text.as_bytes());

    // The cigar can also be extracted as a byte vector
    let cigar = wavefronts.cigar_bytes_raw();
    let cg_str = std::str::from_utf8(&cigar).unwrap();
    println!("cigar: {}", cg_str);

    // Or as a prettier byte vector

    let cigar = wavefronts.cigar_bytes();
    let cg_str = std::str::from_utf8(&cigar).unwrap();
    println!("cigar: {}", cg_str);

}

请参阅测试以获取更多示例。

从源代码构建

请确保使用WFA子模块克隆

git clone --recursive https://github.com/chfi/wfa-rs
cd wfa-rs
cargo build

依赖项

~0–1.8MB
~35K SLoC