4个版本

0.1.5 2022年5月12日
0.1.4 2022年4月5日
0.1.3 2022年3月6日
0.1.2 2021年12月12日
0.1.0 2017年5月3日

#79 in 生物学

Download history 199/week @ 2024-03-13 241/week @ 2024-03-20 192/week @ 2024-03-27 223/week @ 2024-04-03 189/week @ 2024-04-10 150/week @ 2024-04-17 197/week @ 2024-04-24 113/week @ 2024-05-01 112/week @ 2024-05-08 252/week @ 2024-05-15 182/week @ 2024-05-22 221/week @ 2024-05-29 187/week @ 2024-06-05 172/week @ 2024-06-12 85/week @ 2024-06-19 74/week @ 2024-06-26

每月下载量 529
用于 2 个存储库(通过 stam-tools

MPL-2.0 许可证

29KB
761

seal

Downloads Version License

概要

Rust语言实现Needleman-Wunsch & Smith-Waterman序列比对。

动机

此存储库的目的是提供一个内存和时间效率高的Needleman-Wunsch实现以及Smith-Waterman序列比对,使用统一的API。

入门指南

seal的最新版本添加到项目的Cargo.toml依赖中。

然后添加…

extern crate seal;

…到您的存储库根文件中(例如lib.rsmain.rs)。

完成后,您就可以开始使用了!

示例

extern crate seal;

use seal::pair::{
    Alignment, AlignmentSet, InMemoryAlignmentMatrix, NeedlemanWunsch, SmithWaterman, Step,
};

fn main() {
    let str_x = "The quick brown fox jumps over the lazy dog.";
    let str_y = "The brown dog jumps over the very lazy snail.";

    let strategy = NeedlemanWunsch::new(1, -1, -1, -1);
    // Alternatively:
    // let strategy = SmithWaterman::new(2, -1, -1, -1);

    let sequence_x: Vec<char> = str_x.chars().collect();
    let sequence_y: Vec<char> = str_y.chars().collect();
    let set: AlignmentSet<InMemoryAlignmentMatrix> =
        AlignmentSet::new(sequence_x.len(), sequence_y.len(), strategy, |x, y| {
            sequence_x[x] == sequence_y[y]
        })
        .unwrap();

    let print_alignment = |alignment: Alignment| {
        for step in alignment.steps() {
            match step {
                Step::Align { x, y } => {
                    if sequence_x[x] == sequence_y[y] {
                        print!("=")
                    } else {
                        print!("!")
                    }
                }
                Step::Delete { .. } => print!("-"),
                Step::Insert { .. } => print!("+"),
            }
        }
        println!("\n");
    };

    println!("Local alignment:");
    let local_alignment = set.local_alignment();
    print_alignment(local_alignment);

    println!("Global alignment:");
    let global_alignment = set.global_alignment();
    print_alignment(global_alignment);

    // Local alignment:
    // ====------======!=!================+++++=====
    //
    // Global alignment:
    // ====------======!=!================+++++=====!!!++=
}

请参阅示例目录以获取更深入的示例。

API参考

AlignmentSet包含给定一对序列的所有最佳比对。

检索单个局部/全局最佳比对

let alignment in alignment_set.local_alignment();
let alignment in alignment_set.global_alignment();

枚举所有局部/全局最佳比对

for alignment in alignment_set.local_alignments() {
    //
}
for alignment in alignment_set.global_alignments() {
    //
}

贡献

请阅读CONTRIBUTING.md以了解我们的行为准则和提交拉取请求的流程。

许可证

本项目根据MPL-2.0授权 – 请参阅LICENSE.md文件以获取详细信息。

依赖项

~2–11MB
~118K SLoC