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

prot_translate

将核苷酸序列翻译成蛋白质

1个不稳定版本

0.1.0 2024年4月15日

#125生物学

MIT/Apache

17KB
158

prot_translate

Build Status Cargo Documentation

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

用法

将其添加到您的 Cargo.toml

[dependencies]
prot_translate = "0.1.0"

示例

use prot_translate::*;

fn main() {
    let dna = b"GTGAGTCGTTGAGTCTGATTGCGTATC";
    let protein = translate(dna);
    assert_eq!("VSR*V*LRI", &protein);
    let dna = b"GCTAGTCGTATCGTAGCTAGTC";
     let peptide = translate3(dna,None);
     assert_eq!(&peptide, "AlaSerArgIleValAlaSer");
    // To shift reading frame
    let protein_frame2 = translate(&dna[1..]);
    assert_eq!("*VVESDCV", &protein_frame2);
    let dna = b"GCTAGTCGTATCGTAGCTAGTC";
     let peptide = translate_full(dna,None);
     assert_eq!(&peptide, "AlanineSerineArginineIsoleucineValineAlanineSerine");
}

基准测试

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

方法 10 bp* 100 bp 1,000 bp 10,000 bp 100,000 bp 1百万 bp
prot_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
prot_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

无运行时依赖项