小马的生信笔记

基因组结构预测

引言

基因组的结构注释目前已经有很多的流程,基本上都是结合转录组+蛋白+从头预测三方证据进行整合注释。因此,本次的结构注释选择Augustus(从头预测)+Miniprot(蛋白)+PASA&hisat2&Trinity(转录组)完成。

1. 软件下载

mamba create -n Gene_Anno

mamba activate Gene_Anno

# 转录组相关

mamba install bioconda::hisat2

mamba install bioconda::trinity

mamba install bioconda::stringtie

mamba install bioconda::pasa

mamba install bioconda::samtools

# 蛋白注释

mamba install bioconda::miniprot

# 从头预测

mamba install bioconda::augustus

# 证据整合

mamba install bioconda::evidencemodeler

2. 软件使用

2.1 转录组部分

hisat2比对

hisat2-build genome.fasta ref

# 比对和排序

hisat2 --new-summary --summary-file rnaseq.hisat.summary --threads 10 -x ref -1 rnaseq_1.fastq.gz -2 rnaseq_2.fastq.gz | samtools sort -@ 5 -o rnaseq.bam -

samtools index rnaseq.bam

使用Trinity基于比对的bam文件进行转录组的组装

Trinity --max_memory 100G --genome_guided_bam ./rnaseq.bam --genome_guided_max_intron 20000 --CPU 10

运行PASA,第一步要修改PASA的配置文件

## templated variables to be replaced exist as <__var_name__>

# database settings
DATABASE=/tmp/Bra-pasa.sqlite # 数据库的路径,也是唯一需要硬性修改的地方,修改成你自己数据的路径

#######################################################
# Parameters to specify to specific scripts in pipeline
# create a key = "script_name" + ":" + "parameter"
# assign a value as done above.

#script validate_alignments_in_db.dbi
validate_alignments_in_db.dbi:--MIN_PERCENT_ALIGNED=80
validate_alignments_in_db.dbi:--MIN_AVG_PER_ID=95

#script subcluster_builder.dbi
subcluster_builder.dbi:-m=50

运行PASA pipline

### PASA pipline

Launch_PASA_pipeline.pl -c alignAssembly.config -C -R -g ./genome.fasta -t transcript.fasta --ALIGNERS minimap2 --CPU 10 

#参数

# -c 配置文件 

# -g 基因组文件 

# -t 转录本文件 

# --ALIGENERS 比对的软件 

# --CPU 运行的线程数

# -C 从头创建数据库

# -R 运行组装和比对

# 输出结果

.pasa_assemblies.gff3:最重要的输出结果,最后EVM证据整合用到的输入文件

.assemblies.fasta:PASA的组装结果

 

# PASA本很还支持调用Transdecoder对结果进行成cds和pep的预测

/usr/local/src/PASApipeline/scripts/pasa_asmbls_to_training_set.dbi --pasa_transcripts_fasta Bra-pasa.sqlite.assemblies.fasta --pasa_transcripts_gff3 Bra-pasa.sqlite.pasa_assemblies.gff3

# --pasa_transcripts_fasta PASA的组装结果

# --pasa_transcripts_gff3 PASA的gff3格式的输出结果

# 输出结果

# .transdecoder.bed bed文件

# .transdecoder.cds 预测的cds文件

# .transdecoder.pep 预测的pep文件

# .transdecoder.gff3 带有cds的gff3文件

# .transdecoder.genome.bed 转换成基因组序列ID的bed文件

# .transdecoder.genome.gff3 转换成基因组序列ID的gff3文件 后续EVM的输入文件

2.2 蛋白部分

miniprot比对

# 将下载的多个近缘物种的蛋白序列进行合并

cat 1_pep.fasta 2_pep.fasta > total_pep.fasta

# 运行miniprot

miniprot -I -t 10 --gff --outc 0.5 --outn 100 .genome.fasta total_pep.fasta > miniprot.gff

# 参数

# -I 计算内含子最大长度的阈值

# -t 线程数

# --gff 生成gff3格式的结果

# --outc 比对的百分比阈值

# --outn 比对的输出结果阈值

# 输出结果

miniprot.gff: 比对的gff3格式的结果,后续输如到EVM

2.3 从头预测

训练模型(可选步骤,如果Augustus中有近缘物种的模型,可以直接应用)

# 训练模型

autoAugTrain.pl --genome genome.fasta --trainingset training.gff --species=Test2 --optrounds=5 --cpus=10
-v -v -v

# 参数

# --genome 基因组文件

# --trainingset 用作训练的训练集数据

# --species 生成的训练模型的名字,自己制定

# --optrounds 优化轮数

# --cpus 运行的线程数

# -v -v -v 日志的输出详细程度 3个 -v则是最详细

# 输出结果

# autoAugTrain: 包含了训练过程的过程文件和最后的模型

运行Augustus(单线程)

# 直接运行Augustus

augustus --species=Test2 --genemodel=complete --softmasking=1 --codingseq=on --exonnames=on --outfile=augustus.gff --errfile=augustus.err genome.sm.fasta

# 参数

# --species 预测使用的模型

# --genemodel 只保留完整预测的基因

# --softmasking 是否使用软屏蔽后的基因序列

# --codingseq 结果中输出CDS序列

# --exonnames 结果中输出外显子名称

# --outfile 输出文件名

# --errfile 输出的报错信息文件

# 输出文件

augustus.gff:预测结果

 

# Augustus 还支持添加其他的证据信息进行预测(例如转录组)

# bam文件转化为Augustus的证据格式

bam2hints --in=../01.RNAseq/rnaseq.bam --out=hints.gff

# 运行Augustus

augustus --species=Test2 --hintsfile=hints.gff --extrinsicCfgFile=~/augustus_config/extrinsic/extrinsic.M.RM.E.W.cfg --genemodel=complete --softmasking=1 --codingseq=on --exonnames=on --outfile=augustus.gff --errfile=augustus.err genome.sm.fasta

 

# 得到gff文件后,还可以把预测的CDS和PEP序列直接提前出来

getAnnoFasta.pl --seqfile genome.sm.fasta augustus.gff

# 输出结果

# .aa PEP序列

# .codingseq CDS序列

# .cdsexons 外显子序列

多线程并行运行Augustus

# 切分基因组(按序列)

seqkit split -i -O split genome.sm.fasta

 

# 生成Augustus指定的序列文件列表

ls split/*.fasta | while read f ;do seqkit fx2tab -i -n -l $f |awk '{print "'$f'\t1\t" $2}'; done > chr.list

 

# 生成并行的Augustus运行命令

createAugustusJoblist.pl --sequences=chr.list --wrap="#" --overlap=100000 --chunksize=10000000 --outputdir=./augDir --joblist=jobs.lst --jobprefix=augSplit_ --command "augustus --species=Test1 --extrinsicCfgFile=./extrinsic.cfg --hintsfile=hints.gff --genemodel=complete --softmasking=1 --codingseq=on --exonnames=on "

# 参数

--sequences=chr.list 基因组序列文件信息

--wrap="#" 运行脚本的类型,因为我用的是服务器不是集群,所以是#

--overlap=100000 片段之间的覆盖区大小

--chunksize=10000000 拆分的片段大小

--outputdir=./augDir 输出文件夹

--joblist=jobs.lst 命令列表

--jobprefix=augSplit_ 输出的文件前缀

--command 具体的Augustus命令

# 输出结果

augSplit_X:每个并行任务的命令

jobs.lst:整合每个并行任务文件的列表文件

 

# 运行并行Augustus程序

parallel -j 8 "bash ./{}" < jobs.lst

 

#合并并行运行的结果

cat jobs.lst | xargs cat | sed -n 's/^.*--outfile=\(\S*\)\s.*$/\1/p' | xargs cat > augustus_concat.gtf

singularity exec ../../container/GENETools202309.sif join_aug_pred.pl < augustus_concat.gtf > augustus_combine.gtf

# 输出结果

augustus_combine.gtf:Augustus的运行结果,也是EVM的输入的从头预测的结果

 

2.4 EVM证据整合

预测结果文件格式调整(只需要调整Augustus和miniprot的,PASA不需要调整)

# augustus结果调整

perl /opt/EVidenceModeler/EvmUtils/misc/augustus_GTF_to_EVM_GFF3.pl augustus_combine.gtf > augustuts.gff3

 

# miniprot结果调整

python /opt/EVidenceModeler/EvmUtils/misc/miniprot_GFF_2_EVM_alignment_GFF3.py ../04.miniprot/miniprot.gff > miniprot.gff3

 

# 合并从头预测结果文件(PASA生成的结果文件然后通过Transdecoder预测的和Augustus从头预测的)

cat augustuts.gff3 pasa_transdecoder.gff3 > evm.gene_predictions.gff3

运行EVM

EVidenceModeler --CPU 10 --sample_id Bra --genome genome.fasta --weights evm_weights.txt --gene_predictions evm.gene_predictions.gff3 --protein_alignments evm.protein_alignments.gff3 --transcript_alignments evm.transcript_alignments.gff3 --repeats ../../P1.RepeatAnno/rmout_combine/genome.out.gff --segmentSize 500000 --overlapSize 50000

# 参数

--CPU 运行的线程数

--sample_id 输出文件前缀

--genome 基因组文件

--weights 权重文件

--gene_predictions 从头预测结果文件

--protein_alignments 蛋白预测结果文件

--transcript_alignments 转录组预测结果文件

--repeats 重复序列注释结果的gff文件

--segmentSize 片段大小

--overlapSize 两个连续片段的重复区域大小

# 输出结果

.EVM.pep:证据整合后预测的pep文件

.EVM.cds:证据整合后预测的cds文件

.EVM.gff3:证据整合后预测的gff3格式注释文件

.EVM.bed:证据整合后预测的bed文件

准备EVM的权重文件

# 第一列未证据名 第二列是每个预测结果的第三列 第三列的每个预测结果的权重

PROTEIN miniprot_protAln 2 # 蛋白预测结果
TRANSCRIPT assembler-Bra-pasa.sqlite 10 # 转录组预测结果
ABINITIO_PREDICTION Augustus 1 # 从头预测结果
OTHER_PREDICTION transdecoder 5 # 其他预测结果

2.5 注释文件中添加UTR和可变剪切

# 检查注释文件的格式

pasa_gff3_validator.pl Bra.EVM.gff3

# 加载gff3文件到数据库

Load_Current_Gene_Annotations.dbi -c alignAssembly.config -g genome.fasta -P Bra.EVM.gff3

# 更新gff3文件

Launch_PASA_pipeline.pl --CPU 10 -c annotCompare.config -A -g genome.fasta -t transcript.fasta

# 简化gff3文件

awk '$1 !~ /^#/' Bra-pasa.new.sqlite.gene_structures_post_PASA_updates.*.gff3 > Bra.EVM.update.gff3

# 提取PEP和CDS

gff3_file_to_proteins.pl Bra.EVM.update.gff3 genome.fasta prot > Bra.EVM.update.pep.fasta

gff3_file_to_proteins.pl Bra.EVM.update.gff3 genome.fasta CDS > Bra.EVM.update.cds.fasta

更改配置文件annotCompare.config

## templated variables to be replaced exist as <__var_name__>

# database settings
DATABASE=<__DATABASE__> # 更改为之前构建的数据库名称

#######################################################
# Parameters to specify to specific scripts in pipeline
# create a key = "script_name" + ":" + "parameter"
# assign a value as done above.

#script cDNA_annotation_comparer.dbi
cDNA_annotation_comparer.dbi:--MIN_PERCENT_OVERLAP=<__MIN_PERCENT_OVERLAP__>
cDNA_annotation_comparer.dbi:--MIN_PERCENT_PROT_CODING=<__MIN_PERCENT_PROT_CODING__>
cDNA_annotation_comparer.dbi:--MIN_PERID_PROT_COMPARE=<__MIN_PERID_PROT_COMPARE__>
cDNA_annotation_comparer.dbi:--MIN_PERCENT_LENGTH_FL_COMPARE=<__MIN_PERCENT_LENGTH_FL_COMPARE__>
cDNA_annotation_comparer.dbi:--MIN_PERCENT_LENGTH_NONFL_COMPARE=<__MIN_PERCENT_LENGTH_NONFL_COMPARE__>
cDNA_annotation_comparer.dbi:--MIN_FL_ORF_SIZE=<__MIN_FL_ORF_SIZE__>
cDNA_annotation_comparer.dbi:--MIN_PERCENT_ALIGN_LENGTH=<__MIN_PERCENT_ALIGN_LENGTH__>
cDNA_annotation_comparer.dbi:--MIN_PERCENT_OVERLAP_GENE_REPLACE=<__MIN_PERCENT_OVERLAP_GENE_REPLACE__>
cDNA_annotation_comparer.dbi:--STOMP_HIGH_PERCENTAGE_OVERLAPPING_GENE=<__STOMP_HIGH_PERCENTAGE_OVERLAPPING_GENE__>
cDNA_annotation_comparer.dbi:--TRUST_FL_STATUS=<__TRUST_FL_STATUS__>
cDNA_annotation_comparer.dbi:--MAX_UTR_EXONS=<__MAX_UTR_EXONS__>
cDNA_annotation_comparer.dbi:--GENETIC_CODE=<__GENETIC_CODE__>

2.6 提取最长转录组

### gff3转换成标准ensembl gtf格式

gffread -T genome.gff3 > tmp.genome.gtf

### 检查gtf文件是否有额外";",如有替换成"-"

# awk -F "\t" '$NF ~ /"\S+;\S*"/' tmp.genome.gtf |less

# mv tmp.genome.gtf tmp.gtf 

# sed 's/\( "\S*\);\(\S*"\)/\1-\2/g' tmp.gtf > tmp.genome.gtf

# rm tmp.gtf

### 转换成标准ensembl格式

gtftk convert_ensembl -i tmp.genome.gtf > genome.gtf

## 统计

gtftk count -i genome.gtf > genome.gtf.count

## 提取编码基因gtf并统计

gtftk select_by_key -k feature -v CDS -i genome.gtf | gtftk tabulate -k transcript_id,gene_id --unique --no-header > coding_mapid.txt

perl ../script/gtf_extract.pl genome.gtf coding_mapid.txt > genes_coding.gtf

gtftk count -i genes_coding.gtf > genes_coding.gtf.count

## 筛选最长转录本

gtftk short_long -g -l -i genes_coding.gtf > genes_longest.gtf

gtftk count -i genes_longest.gtf > genes_longest.gtf.count

gffread -x genes_longest.cds.fasta -y genes_longest.pep.fasta -g genome.fasta genes_longest.gtf

《基因组结构预测》有1条评论

  1. 作者你好呀!我想请教一下,修改PASA的配置文件:DATABASE=/tmp/Bra-pasa.sqlite # 数据库的路径,也是唯一需要硬性修改的地方,修改成你自己数据的路径。这一步数据库具体是什么呀?不是很懂可以麻烦回答一下吗,谢谢

    回复

发表评论

基因组专栏