#翻译 #蛋白质 #dna #rna #生物信息学

protein-translate

将核酸序列翻译成蛋白质

4个版本

0.2.0 2019年8月11日
0.1.2 2019年8月9日
0.1.1 2019年7月14日
0.1.0 2019年7月14日

#195生物学 分类中

MIT/Apache

9KB
58

protein-translate

Build Status Cargo Documentation

将核酸序列(dna或rna)翻译成蛋白质。

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
protein-translate = "0.2.0"

示例

use protein_translate::translate;

fn main() {
    let dna = b"GTGAGTCGTTGAGTCTGATTGCGTATC";
    let protein = translate(dna);
    assert_eq!("VSR*V*LRI", &protein);

    // To shift reading frame
    let protein_frame2 = translate(&dna[1..]);
    assert_eq!("*VVESDCV", &protein_frame2);

}

基准测试

当前的算法灵感来源于 seqan的实现,该实现使用数组索引。以下是如何与其他方法(在2012年macbook pro上测试)的性能比较。

方法 10 bp* 100 bp 1,000 bp 10,000 bp 100,000 bp 1百万 bp
protein_translate 91 ns 0.29 μs 2.28 μs 23 μs 215 μs 2.25 ms
fnv hashmap 111 ns 0.37 μs 3.58 μs 37 μs 366 us 3.86 ms
std hashmap 160 ns 1.03 μs 9.65 μs 100 μs 943 μs 9.40 ms
phf_map 177 ns 1.04 μs 9.47 μs 100 μs 936 μs 9.91
match语句 259 ns 1.77 μs 17.9 μs 163 μs 1941 μs 19.1 ms
protein_translate (unchecked) 90 ns 0.26 μs 2.02 μs 20 μs 197 μs 1.92 ms

*bp = "base pairs"

要自己进行基准测试(由于phf_map宏,必须使用nightly版本)。

cargo +nightly bench

想法

  • FNV 看起来是一个不错的选择,但我选择了当前的实现,因为它稍微快一些,并且不需要任何依赖。
  • 最初有一个名为 translate_unchecked 的函数,它不会验证每个字节是否为有效的ASCII,但由于性能提升微乎其微,因此已将其删除。

待办事项

  • 添加其他密码子表(例如,脊椎动物线粒体,酵母线粒体,霉菌线粒体等)
  • 添加对模糊核苷酸的支持(目前仅支持A,U,T,C,G)

测试

要测试

cargo test

也可以生成新的测试数据(需要python3和 biopython)。

# Generate 500 random sequences and their peptides
python3 tests/generate_test_data.py 500

无运行时依赖