02Prodigal基因预测

发布时间 2023-05-04 20:58:13作者: 王哲MGG_AI

1、简介

Prodigal是为细菌和古菌基因组进行蛋白编码基因预测的软件 ,其缩写源于PROkaryotic DYnamic Programming Genefinding ALgorithm,表示原核生物基因预测的动态规划算法。

最早在2007年,在美国能源部联合基因组研究所(DOE)的支持下,由橡树岭国家实验室和田纳西大学诺克斯维尔分校联合开发.2010年,发表在BMC Bioinformatics.很快,Prodigal成为使用最多的微生物基因预测算法之一。截至2021年2月,该出版物已被引用4400多次,在NCBI的ftp网站上保存着使用Prodigal预测的所有细菌和古生菌基因组的结果。

2、基因特点

原核生物mRNA的特征:

• 1.原核生物mRNA的5’端无帽子结构,3’端没有或只有较短的多聚(A)结构

• 2.原核生物起始密码子AUG上游有一被称为Ribosome Binding Site (RBS)或SD

序列(Shine –Dalgarno sequence)的保守区,该序列与16S-rRNA 3’端反向互

补,被认为在核糖体-mRNA的结合过程中起作用

 

• 3.原核生物常以AUG(有时GUG,甚至UUG)作为起始密码子;真核生物几乎永远以

AUG作为起始密码子

• 4.半衰期短:原核生物中,mRNA的转录和翻译是在同一个细胞空间里同步进行的,

蛋白质合成往往在mRNA刚开始转录时就被引发了;大多数细菌mRNA在转录开始1

分钟后就开始降解

• 5.许多原核生物mRNA以多顺反子的形式存在:原核细胞的mRNA(包括病毒)有时可

以同时编码几个多肽

• 单顺反子mRNA (monocistronic mRNA):只编码一个蛋白质的mRNA

• 多顺反子mRNA(polycistronic mRNA):编码多个蛋白质的mRNA

3、特点

 

Prodigal可以做的: 

• 处理基因组类型多样: Finished genomes、draft genomes以及metagenomes

• 输出格式多样: GFF3、Genbank以及Sequin表格形式

• 运行速度快: 在PC上10秒钟就能分析出E. coli K-12基因组的蛋白序列

• 无监督学习: 使用无监督的机器学习算法,无需提供任何训练数据,而是从输入

序列本身自动学习基因组的特性,包括遗传密码使用以及核糖体结合位点的

motif识别

• 可以处理基因组gaps、contig、scaffolds和不完整基因预测

 

Prodigal不能做的:

• 预测RNA基因: Prodigal暂不能预测RNA基因

• 处理含有内含子的基因: 原核生物种含有内含子的基因非常罕见,所以Prodiga省

去了对这一部分基因的预测

• 基因功能注释: Prodigal并不为它预测的基因提供功能注释

• 处理移码突变(frame shifts): 不包含任何处理碱基插入或删除的逻辑, Indel类型的

测序错误将对基因预测产生影响

• 病毒基因预测: 慎重,尽管可以进行预测, 但是没有大规模验证

4、安装

 

conda install -c bioconda prodigal 

5、输入文件

多种类型的基因组文件:

• Finished genomes: 原核生物基因组完整基因组

• Draft genomes: 原核生物组装草图基因组

• Metagenomes:元基因组组装基因组

Prodigal适用于上述所有基因组的基因预测,并且支持多种格式的输入文件

• 单个或多个序列的FASTA格式序列

• 单个或多个序列的Genbank格式序列

• 单个或多个序列的EMBL格式序列

• 推荐FASTA格式序列

6、基本命令

conda activate py2env

conda install prodigal -c bioconda

perl filter.pl contig.fa ###删去500bp 一下的序列,生成filter.fa

比如: perl /home/wz/prodigal/filter.pl M3W4_3_final.contigs.fa

这一步需要用到一个名为filter.pl的脚本

#!/usr/bin/perl
open IN,"$ARGV[0]";
open OUT,">./filter.fa";
$/ = ">";
readline(IN);
while($line=<IN>)
{
$line =~ s/>//g;
($name,$seq) = split(/\n/,$line,2);
$seq =~ s/\n//g;
$len = length($seq);
if($len >= 500)
{
print OUT ">$line\n";
}
else
{
next;
}
}

prodigal  -a  ./prodigal/protein.fa -d ./prodigal/dna.fa -i  ./megahit/finalfinal.contigs.fa  -m -o ./prodigal/temp.txt -p meta -q

  • -a ./prodigal/protein.fa: 设置输出文件 protein.fa,将预测到的氨基酸序列写入该文件。
  • -d ./prodigal/dna.fa: 设置输出文件 dna.fa,将预测到的dna序列写入该文件。
  • -i ./megahit/finalfinal.contigs.fa: 输入文件为 finalfinal.contigs.fa,代表拼接好的contigs序列。
  • -m: 指示 prodigal 使用 meta 模式,以便处理宏转录组或宏基因组样本。
  • -o ./prodigal/temp.txt: 设置输出文件 temp.txt,具体输出内容和格式由 -p 参数控制。
  • -p meta: 指示 prodigal 输出与 meta 模式相关的信息,例如orf(开放阅读框架)预测结果、编码调整状态等。可以选择其他模式,如 single、normal 或 mito,分别用于常见基因组、无线粒体基因组和原核基因组的预测。
  • -q: 禁用标准错误输出。

 接下来,对得到的dna和蛋白进行rename ###否则可能报错有相同名字的序列

对得到的dna和蛋白进行rename ###否则可能报错有相同名字的序列
perl rename.pl dna.fa ###得到dna_rename.fa

建立专门装所有样品dna序列的文件夹dna
建立专门装所有样品protein序列的文件夹protein

mv dna_rename.fa ../dna/0414.fa ###命名为样品名字
mv protein_rename.fa ../protein/0414.fa ###命名为样品名字
#将所有核酸序列dna.fa (rename后的) cat在一起dna_all.fa
#将所有蛋白序列protein.fa (rename后的) cat在一起protein_all.fa

这一步需要用到一个名为rename2.pl的脚本

#!/usr/bin/perl
open IN,"$ARGV[0]";
$a = $ARGV[0];
$a =~ /(\S+).fa/;
$name = $1;
open OUT,">./${name}_rename.fa";
while($line=<IN>)
{
if($line =~ /^>/)
{
$line =~ s/>/>$name\_/;
print OUT "$line";
}
else
{
print OUT "$line";
}

}

##################################################################################

perl /home/wz/prodigal/filter.pl M3W4_3_final.contigs.fa

 

prodigal -a ./protein.fa -d ./dna.fa -i ./filter.fa -m -o ./temp.txt -p meta -q

 

perl rename2.pl dna.fa

perl rename2.pl protein.fa

 

mv dna_rename.fa M3W4_3.fa

perl rename2.pl M3W4_3.fa

mv M3W4_3_rename.fa /home/wz/prodigal/dna

 

mv protein_rename.fa M3W4_3.fa

perl rename2.pl M3W4_3.fa

mv M3W4_3_rename.fa /home/wz/prodigal/protein

##################################################################################################