开放阅读框(Open Reading Frame, ORF)是由起始密码子开始,直到终止密码子结束,中间不含有其他终止密码子的核酸序列。由于 DNA 是双链结构,任何一条链都可以作为模板合成 RNA;并且又因为遗传密码是三联体,由三个核苷酸决定一个氨基酸,因此对于一段 DNA 序列,有六种可能的阅读框(正向三个,反向三个)。通常情况下,六种阅读框只有一种是正确的:一般是翻译得到最长氨基酸序列的阅读框。

图源:rosalind.info

给定: Fasta 文件中一条长度不超过 1kb 的 DNA 序列。

需得: 不同的由 ORF 翻译而来的蛋白序列。返回翻译的蛋白序列时可以是任意顺序。

示例数据

>Rosalind_99
AGCCATGTAGCTAACTCAGGTTACATGGGGATGACCCCGCGACTTGGATTAGAGTCTCTTTTGGAATAAGCCTGAATGATCCGAGTAGCATCTCAG

示例结果

MLLGSFRLIPKETLIQVAGSSPCNLS
M
MGMTPRLGLESLLE
MTPRLGLESLLE

Python 实现

Open_Reading_Frames.py

import sys
import pysam
table = """TTT F      CTT L      ATT I      GTT V
TTC F      CTC L      ATC I      GTC V
TTA L      CTA L      ATA I      GTA V
TTG L      CTG L      ATG M      GTG V
TCT S      CCT P      ACT T      GCT A
TCC S      CCC P      ACC T      GCC A
TCA S      CCA P      ACA T      GCA A
TCG S      CCG P      ACG T      GCG A
TAT Y      CAT H      AAT N      GAT D
TAC Y      CAC H      AAC N      GAC D
TAA Stop   CAA Q      AAA K      GAA E
TAG Stop   CAG Q      AAG K      GAG E
TGT C      CGT R      AGT S      GGT G
TGC C      CGC R      AGC S      GGC G
TGA Stop   CGA R      AGA R      GGA G
TGG W      CGG R      AGG R      GGG G"""
table = dict(zip(table.split()[::2],table.split()[1::2]))def translate(dna):aa = ''for i in range(0, len(dna), 3):codon = dna[i:i+3]if table[codon] == 'Stop':breakaa += table[dna[i:i+3]]return aadef reverse_complement(dna):revc = ""basepair = {'A':'T', 'T':'A', 'G':'C', 'C':'G'}for c in dna:revc = basepair[c] + revcreturn revcdef find_orf(dna):ret = []dna_len = int(len(dna)/3) * 3i = 0for i in range(0, dna_len, 3):codon = dna[i:i+3]if codon != 'ATG': continuebase = codonfor j in range(i+3, dna_len, 3):codon = dna[j:j+3]base += codonif table[codon] == 'Stop':ret.append(base)breakreturn retdef six_frame_translate(dna):revc = reverse_complement(dna)amino_acids = []for i in range(3):for orf in find_orf(dna[i:]) + find_orf(revc[i:]):if orf:amino_acids.append(translate(orf))return set(amino_acids)def test():dna = 'AGCCATGTAGCTAACTCAGGTTACATGGGGATGACCCCGCGACTTGGATTAGAGTCTCTTTTGGAATAAGCCTGAATGATCCGAGTAGCATCTCAG'return 'MLLGSFRLIPKETLIQVAGSSPCNLS' in six_frame_translate(dna)if __name__ == '__main__':if not test():print("six_frame_translate: Failed")sys.exit(1)with pysam.FastxFile('rosalind_orf.txt') as fh:for r in fh:six = six_frame_translate(r.sequence)print("\n".join(six))
  • 六框翻译,即正向三次,反向三次

  • 由于允许 ORF 重叠,因此本题的关键是要找到所有的 ORF(find_orf 函数,使用了双层循环,第一层找起始密码子,第二层找终止密码子)

  • 逐个翻译每个 ORF(translate 函数),最后用 set()函数去除冗余


喜欢文章请点个“赞”吧!或者点击“在看”让更多朋友看到,点击“阅读原文”可以在知乎专栏上给我留言,博客地址:https://jianzuoyi.github.io

生物信息学算法之Python实现|Rosalind刷题笔记:011 DNA六框翻译相关推荐

  1. 生物信息学算法之Python实现|Rosalind刷题笔记:003 中心法则:翻译

    我在生物信息学:全景一文中,阐述了生物信息学的应用领域非常广泛.但是有一点是很关键的,就是细胞内的生命活动都遵从中心法则,生物信息学很多时候就是在中心法则上做文章: 分子生物学中心法则:DNA --& ...

  2. 生物信息学算法之Python实现|Rosalind刷题笔记:002 中心法则:转录

    我在生物信息学:全景一文中,阐述了生物信息学的应用领域非常广泛.但是有一点是很关键的,就是细胞内的生命活动都遵从中心法则,生物信息学很多时候就是在中心法则上做文章: 分子生物学中心法则:DNA --& ...

  3. 生物信息学算法之Python实现|Rosalind刷题笔记:001 碱基统计

    前言 Rosalind is a platform for learning bioinformatics and programming through problem solving. Rosal ...

  4. 生物信息学算法之Python实现|Rosalind刷题笔记:004 求DNA的反向互补序列

    碱基互补配对原则是:A 与 T 配对,G 与 C 配对. 求 DNA 的反向互补序列分两步:第一是反向,第二是互补.比如序列"ATGC",反向就是"CGTA", ...

  5. 生物信息学算法之Python实现|Rosalind刷题笔记:013 随机DNA序列

    众所周知,基因组的核酸链不可能是随机形成的.有时候许多物种基因组之间,存在一些保守序列(motif),这意味着它们可能具有重要功能.但是,我们如何确定这些序列不是随机形成的 DNA 片段呢? 一个常识 ...

  6. 生物信息学算法之Python实现|Rosalind刷题笔记:010 DNA一致性序列计算

    经常碰到需要计算一组 DNA 序列的一致性序列,比如去除测序数据中的 PCR 错误,最简单的方法就是通过计算它们之间的一致性序列. 图源:rosalind.info 计算一致性序列,通常借助一个中间矩 ...

  7. Python牛客刷题笔记

    一.类型转换 a=input() print(a.lower()) #全小写 print(a.upper()) #全大写 print(a.title()) #首字母大写a=int(input()) p ...

  8. Github最强算法刷题笔记.pdf

    资料一 昨晚逛GitHub,无意中看到一位大佬(https://github.com/halfrost)的算法刷题笔记,感觉发现了宝藏!有些小伙伴可能已经发现了,但咱这里还是忍不住安利一波,怕有些小伙 ...

  9. 写了三百篇算法题解,关于如何刷题有些话我想对你说

    这篇文章憋了我挺久的,感觉都快憋出内伤,一次次的打开 Typora 写几十个字,一次次的修改删除最后关闭 Typora,如此反复. 为什么会如此纠结? 或许是太狂妄了,我真的想让那些看了这篇文章的人都 ...

最新文章

  1. 【Android 安全】使用 360 加固宝加固应用 ( 购买高级加固服务 | 设置资源加固 | 设置 SO 文件保护配置 | 设置 SO 防盗用文件配置 | 反编译验证加固效果 )
  2. Win8下的SAP安装初体验
  3. springboot事务回滚源码_002 | 搭上SpringBoot事务源码分析专车
  4. 解决新浪微博API调用限制 突破rate_limit_status瓶颈
  5. java怎么递归_Java的递归、如何与流相结合
  6. MyBatisPlus_AR篇_入门试炼_06
  7. 诺基亚9 PureView五摄机皇再曝光 低配高价毫无诚意?
  8. leetcode python3 简单题66. Plus One
  9. BZOJ3697 采药人的路径 【点分治】
  10. VScode设置中文界面
  11. 排序(2)二分排序、快速排序、归并排序
  12. LoraWAN协议框架和应用实例解析
  13. 番茄钟怎么调_番茄时钟起床时间怎么设置 番茄时钟起床时间设置方法
  14. Mint UI - 饿了么出品的开源、轻量的移动端 UI 组件库
  15. 兄弟HL4150cdn恢复出厂设置_兄弟打印机恢复出厂设置
  16. Docker for mac安装教程及国内镜像加速器配置
  17. 用Java写Flybird游戏
  18. php微商城微信支付教程,微信支付接口配置教程(微商城版)
  19. java实现3D动态效果_js实现3D粒子酷炫动态旋转特效
  20. Web项目经理手册之项目经理需要铭记在心的话

热门文章

  1. 高德地图-鼠标获取坐标
  2. 生僻字怎么用计算机的,最实用生僻字输入方案大全
  3. VSCODE 系列(一)VSCODE下载和安装
  4. 申请Oracle Cloud永久免费主机服务
  5. JavaScript中join()方法详解
  6. 数图互通高校房产管理公用房定额管理需要哪些功能及标准?
  7. C语言Printf格式大全(各种%输出形式)
  8. 软考项目管理领域的常见英文术语,特别是 9 大知识领域有关的知识
  9. 学习c/c++ 推荐学习什么书籍?
  10. 对于硬件成品测试,可以设计哪些测试用例?