基因組組裝完成后,或者是完成了草圖,就不可避免遇到一個(gè)問題,需要對(duì)基因組序列進(jìn)行注釋。注釋之前首先得構(gòu)建基因模型,有三種策略:
- 從頭注釋(de novo prediction):通過已有的概率模型來預(yù)測(cè)基因結(jié)構(gòu),在預(yù)測(cè)剪切位點(diǎn)和UTR區(qū)準(zhǔn)確性較低
- 同源預(yù)測(cè)(homology-based prediction):有一些基因蛋白在相近物種間的保守型搞,所以可以使用已有的高質(zhì)量近緣物種注釋信息通過序列聯(lián)配的方式確定外顯子邊界和剪切位點(diǎn)
- 基于轉(zhuǎn)錄組預(yù)測(cè)(transcriptome-based prediction):通過物種的RNA-seq數(shù)據(jù)輔助注釋,能夠較為準(zhǔn)確的確定剪切位點(diǎn)和外顯子區(qū)域。
每一種方法都有自己的優(yōu)缺點(diǎn),所以最后需要用EvidenceModeler(EVM)和GLEAN工具進(jìn)行整合,合并成完整的基因結(jié)構(gòu)。基于可靠的基因結(jié)構(gòu),后續(xù)可才是功能注釋,蛋白功能域注釋,基因本體論注釋,通路注釋等。
那么基因注釋重要嗎?可以說是非常重要了,尤其是高通量測(cè)序非常便宜的現(xiàn)在。你可以花不到一萬(wàn)的價(jià)格對(duì)600M的物種進(jìn)行100X的普通文庫(kù)測(cè)序,然后拼接出草圖。但是這個(gè)草圖的價(jià)值還需要你進(jìn)行注釋后才能顯現(xiàn)出來。有可能你和諾貝爾獎(jiǎng)就差一個(gè)注釋的基因組。
從案例中學(xué)習(xí)套路
陸地棉基因組注釋
文章標(biāo)題為“Sequencing of allotetraploid cotton (Gossypium hirsutum L. acc. TM-1) provides a resource for fiber improvement”.
同源注釋:從Phytozome上下載了7個(gè)植物的基因組蛋白序列(Arabidopsis thaliana, Carica papaya, Glycine max, G. raimondii, Populus trichocarpa, Theobroma cacao and Vitis vinifera), 使用 TblastN 將蛋白序列比對(duì)到組裝序列上,E-value的閾值為1e-5. 將不同蛋白的BLAST的hits用 Solar 軟件進(jìn)行合并。GeneWise 根據(jù)每個(gè)BLAST hit的對(duì)應(yīng)基因區(qū)域預(yù)測(cè)完整的基因結(jié)構(gòu)。
從頭預(yù)測(cè):先得構(gòu)建repeat-mask genome, 在這個(gè)基礎(chǔ)上就用 August, Genescan, GlimmerHMM, Geneid 和 SNAP 預(yù)測(cè)編碼區(qū)
轉(zhuǎn)錄組預(yù)測(cè):用Tophat將RNA-seq數(shù)據(jù)比對(duì)到組裝序列上,然后用cufflinks組裝轉(zhuǎn)錄本形成基因模型。
綜上,使用 EvidenceModeler(EVM) 將上面的結(jié)果組裝成非冗余的基因結(jié)構(gòu)。進(jìn)一步根據(jù)Cscore > 0.5,peptide coverage > 0.5 和CDS overlaping with TE進(jìn)行篩選。還有過濾掉超過30%編碼區(qū)被Pfam或Interprot TE domain的注釋的基因模型。
這些基因模型使用BLASTP進(jìn)行功能注釋,所用數(shù)據(jù)庫(kù)為SWiss-Prot和TrEMBL.蛋白功能使用InterProScan和HMMER注釋,數(shù)據(jù)庫(kù)為InterPro和Pfam。GO注釋則是直接雇傭InterPro和Pfam注釋得到的對(duì)應(yīng)entry。通路注釋使用KEGG數(shù)據(jù)庫(kù)。
Cardamine hirsuta基因組注釋
文章標(biāo)題為“The Cardamine hirsuta genome offers insight into the evolution of morphological diversity”。
同源注釋:使用 GenomeThreader 以擬南芥為剪切模型,以及PlantsGDB resourc上 Brassica rapa (v1.1), A. thaliana(TAIR10), A. lyrata (v6), tomato (v3.6), poplar (v2) 和 A. thaliana (version PUT-169), B. napus (version PUT-172) EST assemblies 的完整的代表性蛋白集。
轉(zhuǎn)錄本預(yù)測(cè): 將 C. hirsuta RNA-seq數(shù)據(jù)比對(duì)到基因序列,然后用cufflinks拼接
從頭預(yù)測(cè):轉(zhuǎn)錄本預(yù)測(cè)得到的潛在蛋白編碼轉(zhuǎn)錄本使用網(wǎng)頁(yè)工具 ORFpredictor 進(jìn)行預(yù)測(cè), 同時(shí)用 blastx 和 A. thalina 進(jìn)行比較,選擇90%序列相似度和最高5%長(zhǎng)度差異的部分從而保證保留完整的編碼框(有啟動(dòng)子和終止子)。 這些基因模型根據(jù)相互之間的相似度和重疊度進(jìn)行聚類,高度相似(>95)從聚類中剔除,保證非冗余訓(xùn)練集。為了訓(xùn)練gene finder, 它們選隨機(jī)選取了2000個(gè)位點(diǎn),20%是單個(gè)外顯子基因。從頭預(yù)測(cè)工具為 August , GlimmerHMM, Geneid 和 SNAP . 此外還用了Fgenesh+, 以雙子葉特異矩陣為參數(shù)進(jìn)行預(yù)測(cè)。
最后使用JIGSAW算法根據(jù)以上結(jié)果進(jìn)行訓(xùn)練,隨后再次用JIGSAW對(duì)每個(gè)基因模型計(jì)算統(tǒng)計(jì)學(xué)權(quán)重。
可變剪切模型則是基于苗、葉、花和果實(shí)的RNA-seq比對(duì)組裝結(jié)果。
GO注釋使用AHRD流程
小結(jié)
舉的2個(gè)例子都是植物,主要是植物基因組不僅是組裝,注釋都是一大難題。因?yàn)橹参锘蚪M有大量的重復(fù)區(qū),假基因,還有很多新的蛋白編碼基因和非編碼基因,比如說玉米基因組80%以上都是重復(fù)區(qū)域。然后當(dāng)我檢索這兩篇文章所用工具的時(shí)候,我不經(jīng)意或者說不可避免就遇到了這個(gè)網(wǎng)站 http://www.plantgdb.org/ , 一個(gè)整合植物基因組學(xué)工具和資源的網(wǎng)站,但是這個(gè)網(wǎng)站似乎2年沒有更新了。當(dāng)然這個(gè)網(wǎng)站也挺不錯(cuò),http://bioservices.usd.edu/gsap.html, 他給出了一套完整的注釋流程以及每一步的輸入和輸出情況。
此外,2017年在《Briefings in Bioinformatics》發(fā)表的"Plant genome and transcriptome annotations: from misconceptions to simple solution" 則是從五個(gè)角度對(duì)植物基因組注釋做了很完整的總結(jié)
- 植物科學(xué)的常見本體
- 功能注釋的常用數(shù)據(jù)庫(kù)和資源
- 已注釋的植物基因組意味著什么
- 一個(gè)自動(dòng)化注釋流程
- 一個(gè)參考流程圖,用來說明使用公用數(shù)據(jù)庫(kù)注釋植物基因組/轉(zhuǎn)錄組的常規(guī)步驟
以上,通過套路我們對(duì)整個(gè)基因組注釋有一個(gè)大概的了解,后續(xù)就需要通過實(shí)際操作來理解細(xì)節(jié)。
基因組注釋
當(dāng)我們談到基因注釋的時(shí)候,我們通常認(rèn)為注釋是指“對(duì)基因功能的描述”,比如說A基因在細(xì)胞的那個(gè)部分,通過招募B來調(diào)控C,從而引起病變。但是基因結(jié)構(gòu)也是注釋的一種形式,而且是先決條件,也就是在看似隨機(jī)的ATCG的堿基排列中找到特殊的部分,而這些特殊的區(qū)域有著不一樣的功能。
在正式啟動(dòng)基因組注釋項(xiàng)目之前,需要先檢查組裝是否合格,比如contig N50的長(zhǎng)度是否大于基因的平均長(zhǎng)度,使用BUSCO/CEGMA檢查基因的完整性,如果不滿足要求,可能輸出結(jié)果中大部分的contig中都不存在一個(gè)完整的基因結(jié)構(gòu)。當(dāng)組裝得到的contig符合要求時(shí),就可以開始基因組注釋環(huán)節(jié),這一步分為三步:基因結(jié)構(gòu)預(yù)測(cè),基因功能注釋,可視化和質(zhì)控。
基因組結(jié)構(gòu)注釋
基因結(jié)構(gòu)注釋應(yīng)是功能注釋的先決條件,完整的真核生物基因組注釋流程需要如下步驟:
- 必要的基因組重復(fù)序列屏蔽
- 從頭尋找基因, 可用工具為: GeneMarkHMM, FGENESH, Augustus, SNAP, GlimmerHMM, Genscan
- 同源蛋白預(yù)測(cè), 內(nèi)含子分析: GeneWIse, Exonerate, GenomeThreader
- 將EST序列,全長(zhǎng)cDNA序列和Trinity/Cufflinks/Stringtie組裝的轉(zhuǎn)錄組和基因組聯(lián)配
- 如果第4步用到了多個(gè)數(shù)據(jù)來源,使用PASA基于重疊情況進(jìn)行聯(lián)配
- 使用EvidenceModler根據(jù)上述結(jié)果進(jìn)行整合
- 使用PASA更新EVM的一致性預(yù)測(cè),增加UTR注釋和可變剪切注釋
- 必要的人工檢查
基本上是套路化的分析流程,也就有一些工具通過整合幾步開發(fā)了流程管理工具,比如說BRAKER結(jié)合了GeneMark和Augustus,MAKER2整合了SNAP,Exonerate,雖然BRAKER說自己的效果比MAKER2好,但是用的人似乎不多,根據(jù)web of knowledge統(tǒng)計(jì),兩者的引用率分別是44,283, 當(dāng)然BRAKER是2016,MAKER2是2011,后者在時(shí)間上有優(yōu)勢(shì)。
這里準(zhǔn)備先按部就班的按照流程進(jìn)行注釋,所用的數(shù)據(jù)是 Cardamine hirsuta , 數(shù)據(jù)下載方式如下
# Cardamine hirsutat基因組數(shù)據(jù)
mkdir chi_annotation && cd chi_annotation
wget http://chi.mpipz.mpg.de/download/sequences/chi_v1.fa
cat chi_v1.fa | tr 'atcg' 'ATCG' > chi_unmasked.fa
# 注釋結(jié)果
wget http://chi.mpipz.mpg.de/download/annotations/carhr38.gff
# Cardamine hirsutat轉(zhuǎn)錄組數(shù)據(jù)
mkdir rna-seq && cd rna-seq
wget -4 -q -A '*.fastq.gz' -np -nd -r 2 http://chi.mpipz.mpg.de/download/fruit_rnaseq/cardamine_hirsuta/ &
wget -4 -q -A '*.fastq.gz' -np -nd -r 2 http://chi.mpipz.mpg.de/download/leaf_rnaseq/cardamine_hirsuta/ &
軟件安裝不在正文中出現(xiàn),會(huì)放在附錄中,除了某些特別復(fù)雜的軟件。
01-重復(fù)序列屏蔽
重復(fù)屏蔽:真核生物的基因組存在大量的重復(fù)序列,植物基因組的重復(fù)序列甚至可以高達(dá)80%。盡管重復(fù)序列對(duì)維持染色體的空間結(jié)構(gòu)、基因的表達(dá)調(diào)控、遺傳重組等都具有重要作用,但是卻會(huì)導(dǎo)致BLAST的結(jié)果出現(xiàn)大量假陽(yáng)性,增加基因結(jié)構(gòu)的預(yù)測(cè)的計(jì)算壓力甚至影響注釋正確性。基因組中的重復(fù)按照序列特征可以分為兩類:串聯(lián)重復(fù)(tandem repeats)和散在重復(fù)(interspersed repeats).
鑒定基因組重復(fù)區(qū)域的方法有兩種:一種基于文庫(kù)(library)的同源(homology)方法,該文庫(kù)收集了其他物種的某一種重復(fù)的一致性序列,通過相似性來鑒定重復(fù);另一種是從頭預(yù)測(cè)(de novo),將序列和自己比較或者是高頻K-mer來鑒定重復(fù)。
目前重復(fù)序列注釋主要軟件就是RepeatMasker和RepeatModel。這里要注意分析的fasta的ID不能過長(zhǎng),不然會(huì)報(bào)錯(cuò)。如果序列ID過長(zhǎng)可以使用bioawk進(jìn)行轉(zhuǎn)換,后續(xù)用到RepatModel不支持多行存放序列的fasta格式。
直接使用同源注釋工具RepeatMasker尋找重復(fù)序列:
mkdir 00-RepeatMask
~/opt/biosoft/RepeatMasker/RepeatMasker -e ncbi -species arabidopsis -pa 40 -gff -dir 00-RepeatMask/ chi_unmasked.fa
# -e ncbi
# -species 選擇物種 用~/opt/biosoft/RepeatMasker/util/queryRepeatDatabase.pl -tree 了解
# -lib 增加額外數(shù)據(jù)庫(kù),
# -pa 并行計(jì)算
# -gff 輸出gff注釋
# -dir 輸出路徑
# annotation with the library produced by RepeatModel
輸出結(jié)果中主要關(guān)注如下三個(gè)(其中xxx表示一類文件名)
- xxx.fa.masked, 將重復(fù)序列用N代替
- xxx.fa.out.gff, 以gff2形式存放重復(fù)序列出現(xiàn)的位置
- xxx.fa.tbl, 該文件記錄著分類信息
cat 00-RepeatMask/chi_unmasked.fa.tbl
==================================================
file name: chi_unmasked.fa
sequences: 624
total length: 198654690 bp (191241357 bp excl N/X-runs)
GC level: 35.24 %
bases masked: 35410625 bp ( 17.83 %)
==================================================
也就是說該物種198M中有將近18%的重復(fù)序列,作為參考,擬南芥125Mb 14%重復(fù)序列, 水稻389M,36%重復(fù),人類基因組是3G,50%左右的重復(fù)序列。
使用最后的chi_unmasked.fa.masked
用于下一步的基因結(jié)構(gòu)預(yù)測(cè)。
注:當(dāng)然也可以用RepeatModel進(jìn)行從頭預(yù)測(cè),得到的預(yù)測(cè)結(jié)果后續(xù)可以整合到RepeatMasker
# de novo predict
~/opt/biosoft/RepeatModeler-open-1.0.11/BuildDatabase -name test -engine ncbi output.fa
~/opt/biosoft/RepeatModeler-open-1.0.11/RepeatModeler -database test
這一步速度極其慢,由于我們的目的只是獲取屏蔽后序列降低后續(xù)從頭預(yù)測(cè)的壓力,所以可以先不做這一步。在后續(xù)分析重復(fù)序列在基因組進(jìn)化上的作用時(shí)可以做這一步。下
如果從頭預(yù)測(cè)的結(jié)果與同源預(yù)測(cè)的結(jié)果有30%以上的overlap,并且分類不一致,會(huì)把從頭預(yù)測(cè)的結(jié)果過濾掉。從頭預(yù)測(cè)與同源預(yù)測(cè)結(jié)果有overlap,但是分類一致的,都會(huì)保留。但是統(tǒng)計(jì)的時(shí)候不會(huì)重復(fù)統(tǒng)計(jì)。
02-從頭(ab initio)預(yù)測(cè)基因
基于已有模型或無(wú)監(jiān)督訓(xùn)練
目前的從頭預(yù)測(cè)軟件大多是基于HMM(隱馬爾科夫鏈)和貝葉斯理論,通過已有物種的注釋信息對(duì)軟件進(jìn)行訓(xùn)練,從訓(xùn)練結(jié)果中去推斷一段基因序列中可能的結(jié)構(gòu),在這方面做的最好的工具是AUGUSTUS 它可以僅使用序列信息進(jìn)行預(yù)測(cè),也可以整合EST, cDNA, RNA-seq數(shù)據(jù)作為先驗(yàn)?zāi)P瓦M(jìn)行預(yù)測(cè)。
AUGUSTUS的無(wú)root安裝比較麻煩,我折騰了好幾天最后卒,不過辛虧有bioconda,conda create -n annotation augustus=3.3
.
它的使用看起來很簡(jiǎn)單,我們可以嘗試使用一段擬南芥已知的基因序列讓其預(yù)測(cè),比如前8k序列
seqkit faidx TAIR10.fa Chr1:1-8000 > test.fa
augustus --speices=arabidopsis test.fa > test.gff
如果僅僅看兩者的CDS區(qū),結(jié)果完全一致,相當(dāng)于看過一遍參考答案去做題目,題目都做對(duì)了。
注:已經(jīng)被訓(xùn)練的物種信息可以用
augustus --species=help
查看。
在不使用RNA-seq數(shù)據(jù)的情況下,可以基于擬南芥的訓(xùn)練模型進(jìn)行預(yù)測(cè),采用下面的方式多條染色體并行augustus
mkdir 01-augustsus && cd 01-augustsus
ln ../00-RepeatMask/chi_unmasked.fa.masked genome.fa
seqkit split genome.fa #結(jié)果文件在genome.fa.split
find genome.fa.split/ -type f -name "*.fa" | parallel -j 30 augustus --species=arabidopsis --gff3=on >> temp.gff #并行處理
join_aug_pred.pl < temp.gff | grep -v '^#' > temp.joined.gff
bedtools sort -i temp.joined.gff > augustsus.gff
AUGUSTUS依賴于已有的模型,而GeneMark-ES/ET則是唯一一款支持無(wú)監(jiān)督訓(xùn)練模型,之后再識(shí)別真核基因組蛋白編碼區(qū)的工具。
gmes_petap.pl --ES --sequence genome.fa --cores 50
最后得到的是genemark.gtf,是標(biāo)準(zhǔn)的GTF格式,可以使用Sequence Ontology Project提供的gtf2gff3.pl進(jìn)行轉(zhuǎn)換
wget http://genes.mit.edu/burgelab/miso/scripts/gtf2gff3.pl
chmod 755 gtf2gff3.pl
gtf2gff3.pl genemark.gtf | bedtools sort -i - > genemark.gff
不同從頭預(yù)測(cè)軟件的實(shí)際效果可以通過在IGV中加載文章提供的gff文件和預(yù)測(cè)后的gff文件進(jìn)行比較,一般會(huì)存在如下幾個(gè)問題:
- 基因多了,或者少了,也就是假陽(yáng)性和假陰性現(xiàn)象
- UTR區(qū)域難以預(yù)測(cè),這個(gè)比較正常
- 未正確識(shí)別可變剪切位點(diǎn),導(dǎo)致前后幾個(gè)基因識(shí)別成一個(gè)基因
考慮到轉(zhuǎn)錄組測(cè)序已經(jīng)非常便宜,可以通過該物種的RNA-seq提供覆蓋度信息進(jìn)行預(yù)測(cè)。
基于轉(zhuǎn)錄組數(shù)據(jù)預(yù)測(cè)
根據(jù)已有的模型或者自訓(xùn)練可以正確預(yù)測(cè)很大一部分的基因,但如果需要提高預(yù)測(cè)的正確性,還需要額外的信息。在過去就需要提供物種本身的cDNA, EST,而現(xiàn)在更多的是基于轉(zhuǎn)錄組序列進(jìn)行訓(xùn)練。盡管RNA-seq數(shù)據(jù)在基因組上的比對(duì)情況能夠推測(cè)出內(nèi)含子位置,根據(jù)覆蓋度可以推測(cè)出外顯子和非編碼區(qū)的邊界,但是僅僅依賴于RNA-seq的覆蓋不能可信地推測(cè)出蛋白編碼區(qū)(Hoff K.J. Stanke M. 2015).
AUGUSTUS可以利用轉(zhuǎn)錄組比對(duì)數(shù)據(jù)中的位置信息來訓(xùn)練模型,GeneMark-ET可以利用RNA-seq得到的內(nèi)含子位點(diǎn)信息自我訓(xùn)練HMM參數(shù),進(jìn)行基因預(yù)測(cè)。BRAKER2將兩者進(jìn)行整合,使用GeneMark-ET根據(jù)RNA-seq無(wú)監(jiān)督訓(xùn)練模型尋找基因,然后用AUGUSTUS進(jìn)行模型訓(xùn)練,最后完成基因預(yù)測(cè)
首先使用hisat2根據(jù)屏蔽后的參考序列建立索引,進(jìn)行比對(duì)。
# 項(xiàng)目根目錄
mkdir index
hisat2-build 01-augustus/genome.fa index/chi_masked
hisat2 -p 20 -x index/chi_masked -1 rna-seq/leaf_ox_r1_1.fastq.gz -2 rna-seq/leaf_ox_r1_2.fastq.gz | samtools sort -@ 10 > 02-barker/leaf_ox_r1.bam &
isat2 -p 20 -x index/chi_masked -1 rna-seq/ox_flower9_rep1_1.fastq.gz -2 rna-seq/ox_flower9_rep1_2.fastq.gz | samtools sort -@ 10 > 02-barker/ox_flower9.bam &
hisat2 -p 20 -x index/chi_masked -1 rna-seq/ox_flower16_rep1_1.fastq.gz -2 rna-seq/ox_flower16_rep1_2.fastq.gz | samtools sort -@ 10 > 02-barker/ox_flower16.bam &
然后,以未屏蔽重復(fù)序列的參考序列和BAM文件作為輸入,讓BRAKER2(安裝會(huì)稍顯麻煩,因?yàn)橐蕾囋S多軟件)進(jìn)行預(yù)測(cè)。
braker.pl --gff3 --cores 50 --species=carhr --genome=chi_unmasked.fa --bam=02-barker/leaf_ox_r1.bam,02-barker/ox_flower16.bam,02-barker/ox_flower9.bam
# --gff3: 輸出GFF3格式
# --genome: 基因組序列
# --bam: 比對(duì)后的BAM文件,允許多個(gè)
# --cores: 處理核心數(shù)
最后會(huì)得到如下輸出文件
- hintsfile.gff: 從RNA-seq比對(duì)結(jié)果的BAM文件中提取,其中內(nèi)含子用于訓(xùn)練GeneMark-EX, 使用所有特征訓(xùn)練AUGUSTUS
- GeneMark-ET/genemark.gtf: GeneMark-EX根據(jù)RNA-seq數(shù)據(jù)訓(xùn)練后預(yù)測(cè)的基因
- augustus.hints.gff: AUGUSTUS輸出文件
將augustus.hints.gff3和文章的注釋文件(carhr38.gtf)比較,見下圖:
其實(shí)不難發(fā)現(xiàn),在不考慮UTR區(qū)域情況下,兩者的差別其實(shí)更多表現(xiàn)是基因數(shù)目上,其實(shí)也就是利用轉(zhuǎn)錄組數(shù)據(jù)推測(cè)結(jié)構(gòu)的問題所在,沒有覆蓋的區(qū)域到底是真的沒有基因,還是有基因結(jié)構(gòu)只不過所用組織沒有表達(dá),或者說那個(gè)區(qū)域其實(shí)是假基因?此外,如果基因間隔區(qū)域很短,有時(shí)候還會(huì)錯(cuò)誤地把兩個(gè)不同的基因預(yù)測(cè)為一個(gè)基因。因此,應(yīng)該注重RNA-seq數(shù)據(jù)在剪切位點(diǎn)識(shí)別和外顯子邊界確定的優(yōu)勢(shì)。
03-同源預(yù)測(cè)基因結(jié)構(gòu)
同源預(yù)測(cè)(homology prediction)利用近緣物種已知基因進(jìn)行序列比對(duì),找到同源序列。然后在同源序列的基礎(chǔ)上,根據(jù)基因信號(hào)如剪切信號(hào)、基因起始和終止密碼子對(duì)基因結(jié)構(gòu)進(jìn)行預(yù)測(cè),如下示意圖:
相對(duì)于從頭預(yù)測(cè)的“大海撈針”,同源預(yù)測(cè)相當(dāng)于先用一塊磁鐵在基因組大海中縮小了可能區(qū)域,然后從可能區(qū)域中鑒定基因結(jié)構(gòu)。在10年之前,當(dāng)時(shí)RNA-seq還沒有普及, 只有少部分物種才有EST序列和cDNA序列的情況下,這的確是一個(gè)比較好的策略,那么問題來了,現(xiàn)在還需要進(jìn)行這一步嗎,如果需要是出于那種角度考慮呢?
在同源預(yù)測(cè)上,目前看到的大部分基因組文章都是基于TBLASTN + GeneWise,這可能是因?yàn)榇蟛糠只蚪M文章都是國(guó)內(nèi)做的,這些注釋自然而言用的就是公司的流程,然后目前國(guó)內(nèi)的公司大多數(shù)又和某一家公司有一些關(guān)系。不過最近的3010水稻泛基因組用的是MAKER, 感謝部分提到這部分工作是由M. Roa(Philippine Genome Center Core Facilities for Bioinformatics, Department of Science)做的,算是一股清流吧。當(dāng)然我在看Cardamine hirsuta基因組注釋文章,發(fā)現(xiàn)它們同源注釋部分用的是GenomeThreader, 該工具在本篇文章成文時(shí)的3月之前又更新了。
GeneWise的網(wǎng)站說它目前由Ewan Birney維護(hù),只不過不繼續(xù)開發(fā)了,因?yàn)镚uy Slater開發(fā)Exonerate解決了GeneWise存在的很多問題,并且速度快了1000倍。考慮到目前只有GeneWise能利用HMM根據(jù)蛋白找DNA,而且ENSEMBL的注釋流程也有一些核心模塊用到了它,所以作者依舊在緩慢的開發(fā)這個(gè)工具(自2.4.1已經(jīng)10多年沒有更新了),當(dāng)然這個(gè)工具也是非常的慢。盡管這一步不會(huì)用到GeneWise作為我們的同源注釋選項(xiàng),但是我們可以嘗試用GeneWise手工注釋一個(gè)基因,主要步驟如下
- 第一步: 使用BLASTX,根據(jù)dna序列搜索到蛋白序列,只需要第一個(gè)最佳比對(duì)結(jié)果
- 第二步: 選擇最佳比對(duì)的氨基酸序列
- 第三步: 將dna序列前后延長(zhǎng)2kb,與氨基酸序列一并傳入給genewise進(jìn)行同源預(yù)測(cè)
提取前5K序列,然后選擇在TAIR上用BLASTX進(jìn)行比對(duì)
seqkit faidx chi_unmasked.fa Chr1:1-5000 > chr1_5k.fa
選擇第一個(gè)比對(duì)結(jié)果中的氨基酸序列,和前5k的DNA序列一并作為GeneWise的輸入
最后的結(jié)果出乎了我的意料
讓我們跳過這個(gè)尷尬的環(huán)節(jié),畢竟很可能是我不太熟練使用工作所致。這里說點(diǎn)我的看法,除非你真的沒有轉(zhuǎn)錄組數(shù)據(jù),必須要用到同源物種的蛋白進(jìn)行預(yù)測(cè),或者你手動(dòng)處理幾個(gè)基因,否則不建議使用這個(gè)工具,因?yàn)槟憧赡苓B安裝都搞不定。
讓我們用GenomeThreader基于上面的DNA序列和氨基酸序列進(jìn)行同源基因結(jié)構(gòu)預(yù)測(cè)吧
gth -genomic chr1_5k.fa -protein cer.fa -intermediate -gff3out
# 其中cer.fa就是AT1G02205.2的氨基酸序列
結(jié)果一致,并且從RNA-seq的覆蓋情況也符合預(yù)期
Chr1 gth exon 1027 1197 Parent=gene1 Chr1 MIPS_CARH_v3.8 exon 1027 1197
Chr1 gth exon 1275 1448 Parent=gene1 Chr1 MIPS_CARH_v3.8 exon 1275 1448
Chr1 gth exon 1541 1662 Parent=gene1 Chr1 MIPS_CARH_v3.8 exon 1555 1662
Chr1 gth exon 1807 2007 Parent=gene1 Chr1 MIPS_CARH_v3.8 exon 1807 2007
Chr1 gth exon 2085 2192 Parent=gene1 Chr1 MIPS_CARH_v3.8 exon 2085 2192
Chr1 gth exon 2294 2669 Parent=gene1 Chr1 MIPS_CARH_v3.8 exon 2294 2669
Chr1 gth exon 3636 3855 Parent=gene1 Chr1 MIPS_CARH_v3.8 exon 3636 3855
Chr1 gth exon 3971 4203 Parent=gene1 Chr1 MIPS_CARH_v3.8 exon 3971 4203
Chr1 gth exon 4325 4548 Parent=gene1 Chr1 MIPS_CARH_v3.8 exon 4325 4548
Chr1 gth exon 4676 4735 Parent=gene1 Chr1 MIPS_CARH_v3.8 exon 4676 4735
全基因組范圍預(yù)測(cè)流程如下:
準(zhǔn)備cDNA和或protein序列:在https://phytozome.jgi.doe.gov/p下載靠譜的物種的蛋白質(zhì)序列,如 Arabidopsis thaliana, Oryza sativa, Brassica rapa, 查找文獻(xiàn)尋找目前該物種的已有EST/cDNA序列,或者RNA-seq從頭組裝轉(zhuǎn)錄組。這里僅考慮用同源物種的蛋白序列進(jìn)行比對(duì)分析,轉(zhuǎn)錄組從頭組裝數(shù)據(jù)用于PASA整體比對(duì)到參考基因組和更新已有的基因解雇。
分別測(cè)試下不同物種的同源注釋結(jié)果
#run seperately
gth -species arabidopsis -translationtable 1 -gff3 -intermediate -protein ~/db/protein_db/Athaliana_167_TAIR10.protein.fa.gz -genomic chi_unmasked.fa -o 03-genomethreader/Athaliana.gff3 &
gth -species arabidopsis -translationtable 1 -gff3 -intermediate -protein ~/db/protein_db/BrapaFPsc_277_v1.3.protein.fa.gz -genomic chi_unmasked.fa -o 03-genomethreader/Brapa.gff3 &
gth -species arabidopsis -translationtable 1 -gff3 -intermediate -protein ~/db/protein_db/Osativa_323_v7.0.protein.fa.gz -genomic chi_unmasked.fa -o 03-genomethreader/Osativa.gff3 &
在定性角度上來看,同源注釋的結(jié)果和從頭預(yù)測(cè)的沒啥差別, 其中B. rapa和A. thaliana和C. hirsuta都屬于十字花科,而O. sativa是禾本科, 所以前兩者預(yù)測(cè)的效果好。
當(dāng)然實(shí)際的同源注釋流程中不能是單個(gè)物種分別預(yù)測(cè),應(yīng)該是將所有的蛋白序列進(jìn)行合并,然后用BLASTX找到最優(yōu)的聯(lián)配,之后用GenomeThreader進(jìn)行預(yù)測(cè)。PASA流程提到的UniRef90作為同源注釋的搜索數(shù)據(jù)庫(kù)可能是更好的選擇,由于UniRef優(yōu)先選擇哪些人工審查、注釋質(zhì)量高、來源于模式動(dòng)植物的蛋白,所以可靠性相對(duì)于直接使用同源物中可能更高。
BLASTX + GenomeThreader的代碼探索中
04-RNA-seq的兩種使用策略
對(duì)于RNA-seq數(shù)據(jù),有兩種使用策略,一種是使用HISAT2 + StringTie先比對(duì)再組裝, 一種是從頭組裝,然后使用PASA將轉(zhuǎn)錄本比對(duì)到基因組上。
基于HISAT2 + StringTie
首先,使用HISAT2將RNA-seq數(shù)據(jù)比對(duì)到參考基因組, 這一步和之前相似,但是要增加一個(gè)參數(shù)--dta
,使得StingTie能更好的利用雙端信息
hisat2-build 01-augustus/genome.fa index/chi_masked
hisat2 --dta -p 20 -x index/chi_masked -1 rna-seq/leaf_ox_r1_1.fastq.gz -2 rna-seq/leaf_ox_r1_2.fastq.gz | samtools sort -@ 10 > rna-seq/leaf_ox_r1.bam &
hisat2 --dta -p 20 -x index/chi_masked -1 rna-seq/ox_flower9_rep1_1.fastq.gz -2 rna-seq/ox_flower9_rep1_2.fastq.gz | samtools sort -@ 10 > rna-seq/ox_flower9.bam &
hisat2 --dta -p 20 -x index/chi_masked -1 rna-seq/ox_flower16_rep1_1.fastq.gz -2 rna-seq/ox_flower16_rep1_2.fastq.gz | samtools sort -@ 10 > rna-seq/ox_flower16.bam &
samtools merge -@ 10 rna-seq/merged.bam rna-seq/leaf_ox_r1.bam rna-seq/ox_flower9.bam rna-seq/ox_flower16.bam
然后用StringTie進(jìn)行轉(zhuǎn)錄本預(yù)測(cè)
stringtie -p 10 -o rna-seq/merged.gtf rna-seq/merged.bam
對(duì)于后續(xù)的EvidenceModeler而言,它不需要UTR信息,只需要編碼區(qū)CDS,需要用TransDecoder進(jìn)行編碼區(qū)預(yù)測(cè)
util/cufflinks_gtf_genome_to_cdna_fasta.pl merged.gtf input/chi_masked.fa > transcripts.fasta
util/cufflinks_gtf_to_alignment_gff3.pl merged.gtf > transcripts.gff3
TransDecoder.LongOrfs -t transcripts.fasta
TransDecoder.Predict -t transcripts.fasta
util/cdna_alignment_orf_to_genome_orf.pl \
transcripts.fasta.transdecoder.gff3 \
transcripts.gff3 \
transcripts.fasta > transcripts.fasta.transdecoder.genome.gff3
最后結(jié)果transcripts.fasta.transdecoder.gff3
用于提供給EvidenceModeler
基于PASA
在多年以前,那個(gè)基因組組裝還沒有白菜價(jià),只有幾個(gè)模式物種基因組的時(shí)代,對(duì)于一個(gè)未測(cè)序的基因組,研究者如果要研究某一個(gè)基因的功能,大多會(huì)通過同源物種相似基因設(shè)計(jì)PCR引物,然后去擴(kuò)增cDNA. 如果是一個(gè)已知基因組的物種,如果要大規(guī)模識(shí)別基因, 研究者通常會(huì)使用EST(expressed sequence tags)序列。
相對(duì)于基于算法的從頭預(yù)測(cè),cDNA和EST序列更能夠真實(shí)的反應(yīng)出一個(gè)基因的真實(shí)結(jié)構(gòu),如可變剪切、UTR和Poly-A位點(diǎn)。PASA(Progam to Assemble Spliced Alignments)流程最早用于擬南芥基因組注釋,最初的設(shè)計(jì)是通過將全長(zhǎng)(full-length)cDNA和EST比對(duì)到參考基因組上,去發(fā)現(xiàn)和更新基因組注釋。其中FL-cDNA和EST序列對(duì)最后結(jié)果的權(quán)重不同。
這是以前的故事,現(xiàn)在的故事是二代轉(zhuǎn)錄組以及一些三代轉(zhuǎn)錄組數(shù)據(jù),那么如何處理這些數(shù)據(jù)呢?我認(rèn)為三代轉(zhuǎn)錄組相對(duì)于過去的FL-cDNA,而二代轉(zhuǎn)錄組數(shù)據(jù)經(jīng)過拼接后可以看作是更長(zhǎng)的EST序列。由于目前最普及的還是普通的mRNA-seq, 也就只介紹這部分流程。
考慮到我還沒有研究過三代的全長(zhǎng)轉(zhuǎn)錄組,分析過數(shù)據(jù),這里的思考極有可能出錯(cuò),后續(xù)可能會(huì)修改這一部分思考。
轉(zhuǎn)錄組組裝使用Trinity(conda安裝)
cd rna-seq
Trinity --seqType fq --CPU 50 --max_memory 64G --left leaf_ox_r1_1.fastq.gz,ox_flower16_rep1_1.fastq.gz,ox_flower9_rep1_1.fastq.gz --right leaf_ox_r1_2.fastq.gz,ox_flower16_rep1_2.fastq.gz,ox_flower9_rep1_2.fastq.gz &
PASA是由30多個(gè)命令組成的流程,相關(guān)命令位于PASApipeline/scripts
,為了適應(yīng)不同的分析,有些參數(shù)需要通過修改配置文件更改,
cp ~/opt/biosoft/PASApipeline/pasa_conf/pasa.alignAssembly.Template.txt alignAssembly.config
# 修改如下內(nèi)容
DATABASE=database.sqlite
validate_alignments_in_db.dbi:--MIN_PERCENT_ALIGNED=80
validate_alignments_in_db.dbi:--MIN_AVG_PER_ID=80
上述幾行配置文件表明SQLite3數(shù)據(jù)庫(kù)的名字,設(shè)置了scripts/validate_alignments_in_db.dbi
的幾個(gè)參數(shù), 表示聯(lián)配程度和相似程度。后續(xù)以Trinity組裝結(jié)果和參考基因組作為輸入,運(yùn)行程序:
~/opt/biosoft/PASApipeline/scripts/Launch_PASA_pipeline.pl -c alignAssembly.config -C -R -g ../chi_unmasked.fa -t ../rna-seq/trinity_out_dir/Trinity.fasta --ALIGNERS blat,gmap
最后結(jié)果如下:
- database.sqlite.pasa_assemblies_described.txt
- database.sqlite.pasa_assemblies.gff3
- database.sqlite.pasa_assemblies.gtf
- database.sqlite.pasa_assemblies.bed
其中g(shù)ff3格式用于后續(xù)的分析。
目前的一些想法, 將從頭組裝的轉(zhuǎn)錄本比對(duì)到參考基因組上很大依賴組裝結(jié)果,所以和EST序列和cDNA相比,質(zhì)量上還有一點(diǎn)差距。
05-整合預(yù)測(cè)結(jié)果
從頭預(yù)測(cè),同源注釋和轉(zhuǎn)錄組整合都會(huì)得到一個(gè)預(yù)測(cè)結(jié)果,相當(dāng)于收集了大量證據(jù),下一步就是通過這些證據(jù)定義出更加可靠的基因結(jié)構(gòu),這一步可以通過人工排查,也可以使用EVidenceModeler(EVM). EVM只接受三類輸入文件:
-
gene_prediction.gff3
: 標(biāo)準(zhǔn)的GFF3格式,必須要有g(shù)ene, mRNA, exon, CDS這些特征,用EVidenceModeler-1.1.1/EvmUtils/gff3_gene_prediction_file_validator.pl
驗(yàn)證 -
protein_alignments.gff3
: 標(biāo)準(zhǔn)的GFF3格式,第9列要有ID信和和target信息, 標(biāo)明是比對(duì)結(jié)果 -
transcript_alignments.gff3
:標(biāo)準(zhǔn)的GFF3格式,第9列要有ID信和和target信息,標(biāo)明是比對(duì)結(jié)果
EVM對(duì)gene_prediction.gff3
有特殊的要求,就是GFF文件需要反映出一個(gè)基因的結(jié)構(gòu),gene->(mRNA -> (exon->cds(?))(+))(+), 表示一個(gè)基因可以有多個(gè)mRNA,即基因的可變剪接, 一個(gè)mRNA都可以由一個(gè)或者多個(gè)exon(外顯子), 外顯子可以是非翻譯區(qū)(UTR),也可以是編碼區(qū)(CDS). 而GlimmerHMM, SNAP等
這三類根據(jù)人為經(jīng)驗(yàn)來確定其可信度,從直覺上就是用PASA根據(jù)mRNA得到的結(jié)果高于從頭預(yù)測(cè)。
第一步:創(chuàng)建權(quán)重文件,第一列是來源類型(ABINITIO_PREDICTION, PROTEIN, TRANSCRIPT), 第二列對(duì)應(yīng)著GFF3文件的第二列,第三列則是權(quán)重.我這里用了三個(gè)來源的數(shù)據(jù)。
mkdir 05-EVM && cd 05-EVM
#vim weights.txt
ABINITIO_PREDICTION augustus 4
TRANSCRIPT assembler-database.sqlite 7
OTHER_PREDICTION transdecoder 8
我覺得根據(jù)基因組引導(dǎo)組裝的ORF的可信度高于組裝后比對(duì),所以得分和PASA差不多一樣高。從頭預(yù)測(cè)權(quán)重一般都是1,但是BRAKER可信度稍微高一點(diǎn),可以在2~5之間。
第二步:分割原始數(shù)據(jù), 用于后續(xù)并行. 為了降低內(nèi)存消耗,--segmentsSize設(shè)置的大小需要少于1Mb(這里是100k), --overlapSize的不能太小,如果數(shù)學(xué)好,可用設(shè)置成基因平均長(zhǎng)度加上2個(gè)標(biāo)準(zhǔn)差,數(shù)學(xué)不好,就設(shè)置成10K吧
cat transcripts.fasta.transdecoder.genome.gff3 ../braker/carhr/augustus.hints.gff3 > gene_predictions.gff3
ln ../04-align-transcript/database.sqlite.pasa_assemblies.gff3 transcript_alignments.gff3
~/opt/biosoft/EVidenceModeler-1.1.1/EvmUtils/partition_EVM_inputs.pl --genome ../chi_unmasked.fa --gene_predictions gene_predictions.gff3 --transcript_alignments transcript_alignments.gff3 --segmentSize 100000 --overlapSize 10000 --partition_listing partitions_list.out
第三步:創(chuàng)建并行運(yùn)算命令并且執(zhí)行
~/opt/biosoft/EVidenceModeler-1.1.1/EvmUtils/write_EVM_commands.pl --genome ../chi_unmasked.fa --weights `pwd`/weights.txt \
--gene_predictions gene_predictions.gff3 \
--transcript_alignments transcript_alignments.gff3 \
--output_file_name evm.out --partitions partitions_list.out > commands.list
parallel --jobs 10 < commands.list
第四步:合并并行結(jié)果
~/opt/biosoft/EVidenceModeler-1.1.1/EvmUtils/recombine_EVM_partial_outputs.pl --partitions partitions_list.out --output_file_name evm.out
第五步:結(jié)果轉(zhuǎn)換成GFF3
~/opt/biosoft/EVidenceModeler-1.1.1/EvmUtils/convert_EVM_outputs_to_GFF3.pl --partitions partitions_list.out --output evm.out --genome ../chi_unmasked.fa
find . -regex ".*evm.out.gff3" -exec cat {} \; | bedtools sort -i - > EVM.all.gff
當(dāng)前權(quán)重設(shè)置下,EVM的結(jié)果更加嚴(yán)格,需要按照實(shí)際情況調(diào)整,增加其他證據(jù)。
06-可選步驟
注釋過濾:對(duì)于初步預(yù)測(cè)得到的基因,還可以稍微優(yōu)化一下,例如剔除編碼少于50個(gè)AA的預(yù)測(cè)結(jié)果,將轉(zhuǎn)座子單獨(dú)放到一個(gè)文件中(軟件有TransposonPSI)。
這里基于gffread
先根據(jù)注釋信息提取所有的CDS序列,過濾出長(zhǎng)度不足50AA的序列,基于這些序列過濾原來的的注釋
gffread EVM.all.gff -g input/genome.fa -y tr_cds.fa
bioawk -c fastx '$seq < 50 {print $comment}' tr_cds.fa | cut -d '=' -f 2 > short_aa_gene_list.txt
grep -v -w -f short_aa_gene_list.txt EvM.all.gff > filter.gff
使用PASA更新EVM結(jié)果:EVM結(jié)果不包括UTR區(qū)域和可變剪切的注釋信息,可以使用PASA進(jìn)行更新。然而這部分已經(jīng)無(wú)法逃避MySQL, 服務(wù)器上并沒有MySQL的權(quán)限,我需要學(xué)習(xí)Perl腳本進(jìn)行修改。因此基因結(jié)構(gòu)注釋到此先放一放。
07-基因編號(hào)
對(duì)每個(gè)基因?qū)崿F(xiàn)編號(hào),形如ABCD000010的效果,方便后續(xù)分析。如下代碼是基于EVM.all.gff,使用方法為python gffrename.py EVM_output.gff prefix > renamed.gff
.
#!/usr/bin/env python3
import re
import sys
if len(sys.argv) < 3:
sys.exit()
gff = open(sys.argv[1])
prf = sys.argv[2]
count = 0
mRNA = 0
cds = 0
exon = 0
print("##gff-version 3.2.1")
for line in gff:
if not line.startswith("\n"):
records = line.split("\t")
records[1] = "."
if re.search(r"\tgene\t", line):
count = count + 10
mRNA = 0
gene_id = prf + str(count).zfill(6)
records[8] = "ID={}".format(gene_id)
elif re.search(r"\tmRNA\t", line):
cds = 0
exon = 0
mRNA = mRNA + 1
mRNA_id = gene_id + "." + str(mRNA)
records[8] = "ID={};Parent={}".format(mRNA_id, gene_id)
elif re.search(r"\texon\t", line):
exon = exon + 1
exon_id = mRNA_id + "_exon_" + str(exon)
records[8] = "ID={};Parent={}".format(exon_id, mRNA_id)
elif re.search(r"\tCDS\t", line):
cds = cds + 1
cds_id = mRNA_id + "_cds_" + str(cds)
records[8] = "ID={};Parent={}".format(cds_id, mRNA_id)
else:
continue
print("\t".join(records))
gff.close()
一些經(jīng)驗(yàn)
如果有轉(zhuǎn)錄組數(shù)據(jù),沒必須要使用太多的從頭預(yù)測(cè)工具,braker2 加 GlimmerHMM可能就夠用了, 更多是使用PASA和StringTie利用好轉(zhuǎn)錄組數(shù)據(jù)進(jìn)行注釋。
基因功能注釋
基因功能的注釋依賴于上一步的基因結(jié)構(gòu)預(yù)測(cè),根據(jù)預(yù)測(cè)結(jié)果從基因組上提取翻譯后的 蛋白序列 和主流的數(shù)據(jù)庫(kù)進(jìn)行比對(duì),完成功能注釋。常用數(shù)據(jù)庫(kù)一共有以幾種:
- Nr:NCBI官方非冗余蛋白數(shù)據(jù)庫(kù),包括PDB, Swiss-Prot, PIR, PRF; 如果要用DNA序列,就是nt庫(kù)
- Pfam: 蛋白結(jié)構(gòu)域注釋的分類系統(tǒng)
- Swiss-Prot: 高質(zhì)量的蛋白數(shù)據(jù)庫(kù),蛋白序列得到實(shí)驗(yàn)的驗(yàn)證
- KEGG: 代謝通路注釋數(shù)據(jù)庫(kù).
- GO: 基因本體論注釋數(shù)據(jù)庫(kù)
除了以上幾個(gè)比較通用的數(shù)據(jù)庫(kù)外,其實(shí)還有很多小眾數(shù)據(jù)庫(kù),應(yīng)該根據(jù)課題研究和背景進(jìn)行選擇。注意,數(shù)據(jù)庫(kù)本身并不能進(jìn)行注釋,你只是通過序列相似性進(jìn)行搜索,而返回的結(jié)果你稱之為注釋。因此數(shù)據(jù)庫(kù)和搜索工具要進(jìn)行區(qū)分,所以你需要單獨(dú)下載數(shù)據(jù)庫(kù)和搜索工具,或者是同時(shí)下載包含數(shù)據(jù)庫(kù)和搜索工具的安裝包。
注意,后續(xù)分析中一定要保證你的蛋白序列中不能有代表氨基酸字符以外的字符,比如說有些軟件會(huì)把最后一個(gè)終止密碼子翻譯成"."或者"*"
BLASTP
這一部分用到的數(shù)據(jù)庫(kù)都是用BLASTP進(jìn)行檢索,基本都是四步發(fā):下載數(shù)據(jù)庫(kù),構(gòu)建BLASTP索引,數(shù)據(jù)庫(kù)檢索,結(jié)果整理。其中結(jié)果整理需要根據(jù)BLASTP的輸出格式調(diào)整。
Nr的NCBI收集的最全的蛋白序列數(shù)據(jù)庫(kù),但是無(wú)論是用NCBI的BLAST還是用速度比較快DIAMOND對(duì)nr進(jìn)行搜索,其實(shí)都沒有利用好物種本身的信息。因此在RefSeq上下載對(duì)應(yīng)物種的蛋白序列, 用BLASTP進(jìn)行注釋即可。
# download
wget -4 -nd -np -r 1 -A *.faa.gz ftp://ftp.ncbi.nlm.nih.gov/refseq/release/plant/
mkdir -p ~/db/RefSeq
zcat *.gz > ~/db/RefSeq/plant.protein.faa
# build index
~/opt/biosoft/ncbi-blast-2.7.1+/bin/makeblastdb -in plant.protein.faa -dbtype prot -parse_seqids -title RefSeq_plant -out plant
# search
~/opt/biosoft/ncbi-blast-2.7.1+/bin/blastp -query protein.fa -out RefSeq_plant_blastp.xml -db ~/db/RefSeq/uniprot_sprot.fasta -evalue 1e-5 -outfmt 5 -num_threads 50 &
Swiss-Prot里收集了目前可信度最高的蛋白序列,一共有55w條記錄,數(shù)據(jù)量比較小,
# download
wget -4 -q ftp://ftp.uniprot.org/pub/databases/uniprot/current_release/knowledgebase/complete/uniprot_sprot.fasta.gz
gzip -d uniprot_sprot.fasta.gz
# builid index
~/opt/biosoft/ncbi-blast-2.7.1+/bin/makeblastdb -in uniprot_sprot.fasta -dbtype prot -title swiss_prot -parse_seqids
# search
~/opt/biosoft/ncbi-blast-2.7.1+/bin/blastp -query protein.fa -out swiss_prot.xml -db ~/db/swiss_prot/uniprot_sprot.fasta -evalue 1e-5 -outfmt 5 -num_threads 50 &
關(guān)于結(jié)果整理,已經(jīng)有很多人寫了腳本,比如說我搜索BLAST XML CSV,就找到了https://github.com/Sunhh/NGS_data_processing/blob/master/annot_tools/blast_xml_parse.py, 所以就不過多介紹。
InterProScan
下面介紹的工具是InterProScan, 從它的9G的體量就可以感受它的強(qiáng)大之處,一次運(yùn)行同時(shí)實(shí)現(xiàn)多個(gè)信息注釋。
- InterPro注釋
- Pfam數(shù)據(jù)庫(kù)注釋(可以通過hmmscan搜索pfam數(shù)據(jù)庫(kù)完成)
- GO注釋(可以基于NR和Pfam等數(shù)據(jù)庫(kù),然后BLAST2GO完成,)
- Reactome通路注釋,不同于KEGG
命令如下
./interproscan-5.29-68.0/interproscan.sh -appl Pfam -f TSV -i sample.fa -cpu 50 -b sample -goterms -iprlookup -pa
-appl
告訴軟件要執(zhí)行哪些數(shù)據(jù)分析,勾選的越多,分析速度越慢,Pfam就行。
KEGG
KEGG數(shù)據(jù)庫(kù)目前本地版收費(fèi),在線版收費(fèi),所以只能將蛋白序列在KEGG服務(wù)器上運(yùn)行。因此你需要在http://www.genome.jp/tools/kaas/選擇合適的工具進(jìn)行后續(xù)的分析。我上傳的50M大小蛋白序列,在KEGG服務(wù)器上只需要運(yùn)行8個(gè)小時(shí),也就是晚上提交任務(wù),白天回來干活。
到此,基因組序列注釋的總體框架我就走完了,后續(xù)就是研究其中的細(xì)節(jié)
附錄
基因組注釋的常用軟件:
- 重復(fù)區(qū)域
- RepeatMasker:識(shí)別基因組中的可能重復(fù)
- RepeatModeler: 識(shí)別新的重復(fù)序列
- LTR-FINDER: http://tlife.fudan.edu.cn/ltr_finder/
- 從頭預(yù)測(cè)
- Augustus
- Fgenesh
- 同源預(yù)測(cè)
- GeneWise
- Exonerate
- Trinity
- GenomeThreader
- 注釋合并
- GLEAN:已經(jīng)落伍于時(shí)代了
- EvidenceModeler: 與時(shí)俱進(jìn)
- 流程
- PASA:真核生物基因的轉(zhuǎn)錄本可變剪切自動(dòng)化注釋項(xiàng)目,需要提供物種的EST或RNA-seq數(shù)據(jù)
- MAKER
- BRAKER1: 使用GeneMark-ET和AUGUSTUS基于RNA-Seq注釋基因結(jié)構(gòu)
- EuGene
- 可視化
- IGV
- JBrowse/GBrowse
參考文獻(xiàn)和推薦閱讀:
- NCBI真核生物基因組注釋流程https://www.ncbi.nlm.nih.gov/genome/annotation_euk/process/
- 真核基因組注釋入門: "A beginner’s guide to eukaryotic genome annotation"
- 二代測(cè)序注釋流程:Comparative Gene Finding: "Annotation Pipelines for Next-Generation Sequencing Projects"
- 基因組轉(zhuǎn)錄組注釋策略: "Plant genome and transcriptome annotations: from misconceptions to simple solution"
- 重復(fù)序列綜述: "Repetitive DNA and next-generation sequencing: computational challenges and solutions"
- MAKER2教程: http://weatherby.genetics.utah.edu/MAKER/wiki/index.php/MAKER_Tutorial_for_WGS_Assembly_and_Annotation_Winter_School_2018
- 《生物信息學(xué)》 樊龍江: 第1-5章: 基因預(yù)測(cè)與功能注釋
- 《NGS生物信息分析》 陳連福: 真核生物基因組基因注釋
- JGS流程: https://genome.jgi.doe.gov/programs/fungi/FungalGenomeAnnotationSOP.pdf
環(huán)境準(zhǔn)備
數(shù)據(jù)下載
# Cardamine hirsutat基因組數(shù)據(jù)
mkdir chi_annotation && cd chi_annotation
wget http://chi.mpipz.mpg.de/download/sequences/chi_v1.fa
cat chi_v1.fa | tr 'atcg' 'ATCG' > chi_unmasked.fa
# Cardamine hirsutat轉(zhuǎn)錄組數(shù)據(jù)
wget -4 -q -A '*.fastq.gz' -np -nd -r 2 http://chi.mpipz.mpg.de/download/fruit_rnaseq/cardamine_hirsuta/ &
wget -4 -q -A '*.fastq.gz' -np -nd -r 2 http://chi.mpipz.mpg.de/download/leaf_rnaseq/cardamine_hirsuta/ &
軟件安裝
RepeatMasker: 用于注釋基因組的重復(fù)區(qū),需要安裝RMBlast, TRF,以及在http://www.girinst.org注冊(cè)以下載Repbase
安裝RepeatMasker
cd ~/src
wget http://tandem.bu.edu/trf/downloadstrf409.linux64
mv trf409.linux64 ~/opt/bin/trf
chmod a+x ~/opt/bin/trf
# RMBlast
cd ~/src
wget ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/2.6.0/ncbi-blast-2.6.0+-src.tar.gz
wget http://www.repeatmasker.org/isb-2.6.0+-changes-vers2.patch.gz
tar xf ncbi-blast-2.6.0+-src
gunzip isb-2.6.0+-changes-vers2.patch.gz
cd ncbi-blast-2.6.0+-src
patch -p1 < ../isb-2.6.0+-changes-vers2.patch
cd c++
./configure --with-mt --prefix=~/opt/biosoft/rmblast --without-debug && make && make install
# RepeatMasker
cd ~/src
wget http://repeatmasker.org/RepeatMasker-open-4-0-7.tar.gz
tar xf RepeatMasker-open-4-0-7.tar.gz
mv RepeatMasker ~/opt/biosoft/
cd ~/opt/biosoft/RepeatMasker
## 解壓repbase數(shù)據(jù)到Libraries下
## 配置RepatMasker
perl ./configure
在上面的基礎(chǔ)上安裝RepeatModel
# RECON
cd ~/src
wget -4 http://repeatmasker.org/RepeatModeler/RECON-1.08.tar.gz
tar xf RECON-1.08.tar.gz
cd RECON-1.08/src
make && make install
cd ~/src
mv RECON-1.08 ~/opt/biosoft
# nesg
cd ~/src
mkdir nesg && cd nesg
wget -4 ftp://ftp.ncbi.nih.gov/pub/seg/nseg/*
make
mv nmerge nseg ~/opt/bin/
# RepeatScout
http://www.repeatmasker.org/RepeatScout-1.0.5.tar.gz
# RepeatModel
wget -4 http://repeatmasker.org/RepeatModeler/RepeatModeler-open-1.0.11.tar.gz
tar xf RepeatModeler-open-1.0.11.tar.gz
mv RepeatModeler-open-1.0.11 ~/opt/biosoft/
cd ~/opt/biosoft/RepeatModeler-open-1.0.11
# 配置
perl ./configure
export PATH=~/opt/biosoft/maker:$PATH
BLAST,BLAST有兩個(gè)版本可供選擇, WuBLAST或者NCBI-BLAST,我個(gè)人傾向于NCBI-BLAST,并且推薦使用編譯后二進(jìn)制版本,因?yàn)榫幾g實(shí)在是太花時(shí)間了
cd ~/src
wget ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/ncbi-blast-2.7.1+-x64-linux.tar.gz
tar xf ncbi-blast-2.7.1+-x64-linux.tar.gz -C ~/opt/biosoft
# 環(huán)境變量
export PATH=~/opt/biosoft/ncbi-blast-2.7.1+/bin:$PATH
# 用于后續(xù)的BRAKER2
conda create -n annotation blast=2.2.31
AUGUSTUS: 可以說是最好的預(yù)測(cè)軟件,使用conda安裝
source activate annotation
conda install augustus=3.3
GeneMark-ES/ET則是唯一一款支持無(wú)監(jiān)督訓(xùn)練模型, 軟件下載需要登記
cd ~/src
wget http://topaz.gatech.edu/GeneMark/tmp/GMtool_Qg87n/gm_et_linux_64.tar.gz
tar xf gm_et_linux_64.tar.gz
mv gm_et_linux_64/gmes_petap/ ~/opt/biosoft
wget http://topaz.gatech.edu/GeneMark/tmp/GMtool_Qg87n/gm_key_64.gz
gzip -dc gm_key_64.gz > ~/.gm_key
cpan YAML Hash::Merge Logger::Simple Parallel::ForkManager
echo "export PATH=$PATH:~/opt/biosoft/gmes_petap/" >> ~/.bashrc
GlimmerHMM:
cd ~/src
wget -4 ftp://ccb.jhu.edu/pub/software/glimmerhmm/GlimmerHMM-3.0.4.tar.gz
tar xf GlimmerHMM-3.0.4.tar.gz -C ~/opt/biosoft
SNAP: 基因從頭預(yù)測(cè)工具,在處理含有長(zhǎng)內(nèi)含子上的基因組上表現(xiàn)欠佳
# 安裝
cd ~/src
git clone https://github.com/KorfLab/SNAP.git
cd SNP
make
cd ..
mv SNAP ~/opt/biosoft
# 環(huán)境變量
export Zoe=~/opt/biosoft/SNAP/Zoe
export PATH=~/opt/biosoft/SNAP:$PATH
Exnerate 2.2: 配對(duì)序列比對(duì)工具,提供二進(jìn)制版本, 功能類似于GeneWise,能夠?qū)DNA或蛋白以gao align的方式和基因組序列聯(lián)配。
cd ~/src
wget http://ftp.ebi.ac.uk/pub/software/vertebrategenomics/exonerate/exonerate-2.2.0-x86_64.tar.gz
tar xf exonerate-2.2.0-x86_64.tar.gz
mv exonerate-2.2.0-x86_64 ~/opt/biosoft/exonerate-2.2.0
# .bashrc添加環(huán)境變量
export PATH=~/opt/biosoft/exonerate-2.2.0:$PATH
# 或
conda install -c bioconda exonerate
GenomeThreader 1.70: 同源預(yù)測(cè)軟件,1.7.0版本更新于2018年2月
wget -4 http://genomethreader.org/distributions/gth-1.7.0-Linux_x86_64-64bit.tar.gz
tar xf gth-1.7.0-Linux_x86_64-64bit.tar.gz -C ~/opt/biosoft
# 修改.bashrc增加如下行
export PATH=$PATH:$HOME/opt/biosoft/gth-1.7.0-Linux_x86_64-64bit/bin
export BSSMDIR="$HOME/opt/biosoft/gth-1.7.0-Linux_x86_64-64bit/bin/bssm"
export GTHATADIR="$HOME/opt/biosoft/gth-1.7.0-Linux_x86_64-64bit/bin/gthdata"
BRAKER2: 依賴AUGUSTUS 3.3, GeneMark-EX 4.33, BAMTOOLS 2.5.1, NCBI BLAST+ 2.2.31+(可選 SAMTOOLS 1.74+, GenomeThreader 1.70)
cpan File::Spec::Functions Module::Load::Conditional POSIX Scalar::Util::Numeric YAML File::Which Logger::Simple Parallel::ForkManager
cd ~/src
wget -4 http://exon.biology.gatech.edu/GeneMark/Braker/BRAKER2.tar.gz
tar xf BRAKER2.tar.gz -C ~/opt/biosoft
echo "export PATH=$PATH:$HOME/opt/biosoft/BRAKER_v2.1.0/" >> ~/.bashrc
# 在~/.bashrc設(shè)置如下軟件所在環(huán)境變量
export AUGUSTUS_CONFIG_PATH=$HOME/miniconda3/envs/annotation/config/
export AUGUSTUS_SCRIPTS_PATH=$HOME/miniconda3/envs/annotation/bin/
export BAMTOOLS_PATH=$HOME/miniconda3/envs/annotation/bin/
export GENEMARK_PATH=$HOME/opt/biosoft/gmes_petap/
export SAMTOOLS_PATH=$HOME/miniconda3/envs/annotation/bin/
export ALIGNMENT_TOOL_PATH=$HOME/opt/biosoft/gth-1.7.0-Linux_x86_64-64bit/bin/
TransDecoder 編碼區(qū)域預(yù)測(cè)工具,需要預(yù)先安裝NCBI-BLAST
cpan URI::Escape
cd ~/src
wget -4 https://github.com/TransDecoder/TransDecoder/archive/TransDecoder-v5.3.0.zip
unzip TransDecoder-v5.3.0.zip
cd TransDecoder-v5.3.0
make test
MARKER: 使用conda安裝會(huì)特別的方便,最好新建環(huán)境
conda create -n marker marker
PASA: 依賴于一個(gè)數(shù)據(jù)庫(kù)(MySQL或SQLite), Perl模塊(DBD::mysql或DBD::SQLite), GMAP, BLAT, Fasta3。由于MySQL在HPC集群中的表現(xiàn)不如SQLite,以及安裝MySQL還需要各種管理員權(quán)限,于是就有人進(jìn)行了修改,增加了feature/sqlite分支, 見Add support for SQLite
cpan DB_File URI::Escape DBI DBD::SQLite
# GMAP
wget http://research-pub.gene.com/gmap/src/gmap-gsnap-2017-11-15.tar.gz
tar xf gmap-gsnap-2017-11-15.tar.gz
cd gmap-2017-11-15
./configure --prefix=$HOME/opt/gmap
make && make install
# BLAT
cd ~/opt/bin
wget http://hgdownload.soe.ucsc.edu/admin/exe/linux.x86_64/blat/blat && chmod 755 ./blat
# Fasta3
wget -4 http://faculty.virginia.edu/wrpearson/fasta/fasta36/fasta-36.3.8g.tar.gz && \
tar zxvf fasta-36.3.8g.tar.gz && \
cd ./fasta-36.3.8g/src && \
make -f ../make/Makefile.linux_sse2 all && \
cp ../bin/fasta36 ~/opt/bin
# 以上程序需添加到環(huán)境變量中
# PASApipeline
cd ~/opt/biosoft
git clone https://github.com/PASApipeline/PASApipeline.git
cd PASApipeline && \
git checkout feature/sqlite && \
git submodule init && git submodule update && \
make
EVidenceModeler: 整合不同來源的注釋結(jié)果,找到可靠的基因結(jié)構(gòu)
cd ~/src
wget -4 https://github.com/EVidenceModeler/EVidenceModeler/archive/v1.1.1.tar.gz
tar xf v1.1.1.tar.gz
mv EVidenceModeler-1.1.1 ~/opt/biosoft/