利用TransDecoder提取转录本CDS、UTR序列

前言:在对miRNA进行靶标预测分析时,需要特定物种的转录本作为靶向的数据库。通常对miRNA预测以3'UTR区域为主,这就需要对转录本数据库进行UTR区域的提取。
我在之前写过一个教程讲述了利用ExUTR包进行UTR序列的提取[1],该脚本需要比对至UTR数据库,所以会丢失很大一部分没有比对上的序列。
在本文,利用TransDecoder包对转录本的ORF进行预测并比对至Uniprot数据库寻找同源支持,几乎所有的mRNA转录本都能获得ORF区域,并生成基于转录本的gff3注释文件。随后,利用python编程从TransDecoder的输出文件中,可以轻松提取出3'UTR、CDS和5'UTR序列,该方法是目前我认为最完整提取UTR的办法。

软件安装:

1.从网站下载
#创建文件夹并进入文件夹
mkdir -p ~/opt/biosoft && cd ~/opt/biosoft
#获取下载链接
wget https://github.com/TransDecoder/TransDecoder/archive/TransDecoder-v5.5.0.zip
#解压缩
unzip TransDecoder-v5.5.0.zip
#重命名
mv TransDecoder-TransDecoder-v5.5.0 TransDecoder-v5.5.0
2.利用conda安装
#激活虚拟环境
conda activate mirna
#在指定环境中安装包
conda install -n minran TransDecoder
#测试
TransDecoder help

运行TransDecoder

这里以我已经通过de novo组装获得的转录本或者自己收集到的基因fasta序列为起点开始,所以省略其他步骤。
输入的文件名为: transcripts.fasta
1. 预测转录本中长的开放阅读框, 默认是100个氨基酸,可以用-m修改。

TransDecoder.LongOrfs -t transcripts.fasta

输出的结果为两个文件夹,
transcripts.fasta.transdecoder_dir和transcripts.fasta.transdecoder_dir.__checkpoints。

2. 使用DIAMOND对上一步输出的transcripts.fasta.transdecoder.pep在蛋白数据库中进行搜索,寻找同源证据支持。
DIAMOND软件安装及使用详见其他教程[2]

# BLASTP比对
diamond blastp -d uniprot_sprot.fasta -q transcripts.fasta.transdecoder_dir/longest_orfs.pep --evalue 1e-5 --max-target-seqs 1 > blastp.outfmt6

uniprot_sprot.fasta:为构建的蛋白数据库
--evalue: 设置比对的阈值1e-5
--max-target-seqs: 最多比对数为1
blastp.outfmt6 为输出的比对后序列

3. 预测可能的编码区

TransDecoder.Predict \
    -t transcripts.fasta \
    --retain_blastp_hits blastp.outfmt6 

输出的文件包括:
transcripts.fasta.transdecoder.cds: 最终预测的CDS序列
transcripts.fasta.transdecoder.gff3: 最终ORF对应的GFF3
其中gff3文件内包含了CDS\five_primer_UTR\three_primer_UTR在转录本的信息,非常重要的文件。
--retain_blastp_hits <string> blastp output in '-outfmt 6' format. Any ORF with a blast match will be retained in the final output.

4.提取CDS、five_primer_UTR、three_primer_UTR序列
根据gff3文件的信息可以提取,这部分需要用到python编程:

  1. 对gff3文件进行预处理
#删除gff3文件中空白行,重定向为新的gff3文件
grep -v '^\s*$' 09_Bdo_endocytosis_trans_sequence.fasta.transdecoder.gff3 > 09_output.gff3
  1. 新建脚本并写入python代码

具体代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from Bio import SeqIO
 
# fasta = open("/data2/masw_data/seqdb/chr1A.fasta", "rU")
#转录本的fasta文件
record_dict = SeqIO.index("/home/user/input/09_Bdo_endocytosis_trans_sequence.fasta", "fasta")
five_UTR_sequence = open('five_UTR.fasta', 'w')
CDS_sequence = open('CDS.fasta','w')
three_UTR_sequence = open('three_UTR.fasta', 'w')
 
five_UTR = {}
CDS = {}
three_UTR = {}
 
with open('/home/user/input/09_output.gff3', 'r') as f:
    for line in f:
        line1 = line.strip().split()
        chr = line1[0]
        feature = line1[2]
        start = line1[3]
        end = line1[4]
        direction = line1[6]
        name = line1[0]
        
        if feature == 'five_prime_UTR':
                five_UTR[name] = (chr, start, end, direction)
        if feature == 'CDS':
                CDS[name] = (chr, start, end, direction)
        if feature == 'three_prime_UTR':
                three_UTR[name] = (chr, start, end, direction)
        
 
# get five_UTR_sequence
for key, value in five_UTR.items():
    if value[3] == '+':
        five_UTR_sequence.write('>%s\n%s\n' % (key, record_dict[value[0]][int(value[1])-1:int(value[2])].seq))
    if value[3] == '-':
        five_UTR_sequence.write('>%s\n%s\n' % (key, record_dict[value[0]][int(value[1]) - 1:int(value[2])].seq.reverse_complement()))
 
# get CDS
for key, value in CDS.items():
    if value[3] == '+':
        CDS_sequence.write('>%s\n%s\n' % (key, record_dict[value[0]][int(value[1])-1:int(value[2])].seq))
    if value[3] == '-':
        CDS_sequence.write('>%s\n%s\n' % (key, record_dict[value[0]][int(value[1]) - 1:int(value[2])].seq.reverse_complement()))
 
# get three_UTR_sequence
for key, value in three_UTR.items():
    if value[3] == '+':
        three_UTR_sequence.write('>%s\n%s\n' % (key, record_dict[value[0]][int(value[1])-1:int(value[2])].seq))
    if value[3] == '-':
        three_UTR_sequence.write('>%s\n%s\n' % (key, record_dict[value[0]][int(value[1]) - 1:int(value[2])].seq.reverse_complement()))
 
 
five_UTR_sequence.close()
CDS_sequence.close()
three_UTR_sequence.close()

3)修改可执行权限

sudo chmod + x gff3_fasta.py
  1. 执行python脚本
./gff3_fasta.py

参考文献:

  1. 使用TransDecoder寻找转录本中的编码区
  2. 从gff3文件获得fasta序列

  1. 3'UTR提取软件ExUTR的安装与使用

  2. DIAMOND: 超快的蛋白序列比对软件

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348

推荐阅读更多精彩内容