【比較基因組】McScan jcvi比較兩個基因組共線性細節記錄
軟體的安裝
Python版McScan(jcvi工具包):https://github.com/tanghaibao/jcvi
以前只有python2,現在已有python3版本,建議用py3。安裝可用pip:
pip install jcvi
##或開發版
pip install git+git://github.com/tanghaibao/jcvi.git
pip可能會安裝很慢。建議還是用conda,要快很多,最好新建環境。
conda install -c bioconda jcvi
這時,你已經能使用命令,表面上安裝成功了,實際上可能還缺少很多依賴。比如last,latex,dvipng等。否則在後面執行過程,可能遇到如下錯誤:
##未安裝last
/bin/bash: lastdb: command not found
##未安裝latex、dvipng
RuntimeError: Failed to process string with tex because latex could not be found
只有一個個解決,有的可以直接conda(如last),有些則需要編譯,若有root許可權,倒也好辦。
conda install -c bioconda last sudo yum install -y texlive texlive-latex texlive-xetex texlive-collection-latexrecommended sudo yum install dvipng
基因組的準備
若是已知物種,直接可從公共資料庫中下載gff和cds序列,jcvi提供了下載方式:
$ python -m jcvi.apps.fetch Usage: python -m jcvi.apps.fetch ACTION Available ACTIONs: bisect | Determine the version of the accession by querying entrez ensembl | Retrieve genomes and annotations from ensembl entrez | Fetch records from entrez using a list of GenBank accessions phytozome | Retrieve genomes and annotations from phytozome phytozome9 | Retrieve genomes and annotations from phytozome version 9.0 (legacy) sra | Retrieve files from SRA via the sra-instant FTP
比如從Phytozome下載,要提前註冊好,如下命令提示輸入賬號密碼。
python -m jcvi.apps.fetch phytozome Vvinifera,Ppersica
下載後無需解壓。
自己準備的基因組資料也只需gff3和cds.fa(蛋白序列也可)。
gff3只保留染色體水平的ID,如:
grep '^chr' Vvinifera_145_Genoscope.12X.gene.gff3 > apricot.filter.gff3
gff3檔案轉化bed檔案時注意type和key型別對應gff中第三列和第九列資訊。type一般為mRNA,但是key注意你的gff檔案是取Name還是ID。如:
python -m jcvi.formats.gff bed --type=mRNA --key=Name Vvinifera_145_Genoscope.12X.gene.gff3 -o grape.bed
python -m jcvi.formats.gff bed --type=mRNA --key=ID Ppersica_298_v2.1.gene.gff3 -o peach.bed
若後續作圖仍報錯,可嘗試去除fasta ID中多餘的描述資訊(我自己不用也可跑通)。如:
# clean headers to remove description fiedls from Phytozome FASTA files.
python -m jcvi.formats.fasta format --sep="|" Vvinifera_145_cds.fa.gz grape.cds
python -m jcvi.formats.fasta format --sep="|" Ppersica_139_cds.fa.gz peach.cds
一些細節
-
結果檔案
last比對結果,last.filtered比對過濾串聯重複和低分比對結果,anchors: 高質量的共線性塊,lifted.anchors增加額外錨點的最終共線性區塊,simple簡化的anchors檔案。anchors檔案中每個共線性區塊以###分隔, 第一和第二列分別是兩基因組的基因ID,第三列BLAST的bit score,越大可靠性越高。 -
調圖細節
兩個配置檔案seqid(展示染色體),layout(序列位置)。
seqid檔案中,基因組的染色體編號與其gff3檔案一致(按大小順序寫,而非gff檔案染色體順序,轉化bed時軟體會排序)。如:
chr1,chr2,chr3,chr4,chr5,chr6,chr7,chr8,chr9,chr10,chr11,chr12,chr13,chr14,chr15,chr16,chr17,chr18,chr19
Pp01,Pp02,Pp03,Pp04,Pp05,Pp06,Pp07,Pp08
layout檔案繪製一些選項,若要個性化,多多修改嘗試(尤其時三個物種比較時)。如:
# y, xstart, xend, rotation, color, label, va, bed
.6, .1, .8, 0, red, Grape, top, grape.bed
.4, .1, .8, 0, blue, Peach, bottom, peach.bed
# edges
e, 0, 1, grape.peach.anchors.simple
若要突出顯示某一共線性區塊,可以在anchors.simple檔案對應的區塊前新增g*(g代表綠色,也可以改成其他顏色,如紅色r)。
建議和示例
建議先用示例資料跑一遍,也很快。再換自己的資料,報錯對照著尋找原因,總能解決。
示例程式碼:
# 準備資料(輸入帳號密碼)
python -m jcvi.apps.fetch phytozome Vvinifera,Ppersica
#去掉chr以外的序列
grep '^chr' Vvinifera_145_Genoscope.12X.gene.gff3 > apricot.filter.gff3
#gff convert to bed
python -m jcvi.formats.gff bed --type=mRNA --key=Name Vvinifera_145_Genoscope.12X.gene.gff3 -o grape.bed
python -m jcvi.formats.gff bed --type=mRNA --key=Name Ppersica_298_v2.1.gene.gff3 -o peach.bed
#reformat fasta
python -m jcvi.formats.fasta format Vvinifera_145_Genoscope.12X.cds.fa.gz grape.cds
python -m jcvi.formats.fasta format Ppersica_298_v2.1.cds.fa.gz peach.cds
#identify blocks
python -m jcvi.compara.catalog ortholog grape peach --no_strip_names
#plot dotplot
python -m jcvi.graphics.dotplot grape.peach.anchors
# get synteny
python -m jcvi.compara.synteny screen --minspan=30 --simple grape.peach.anchors grape.peach.anchors.new
##prepare for seqid and layout file
# plot synteny
python -m jcvi.graphics.karyotype seqid layout
Ref:
https://www.jianshu.com/p/a748d3a5421d
https://www.cnblogs.com/zhanmaomao/p/12525411.html
https://sr-c.github.io/2019/01/11/jcvi-MCscan/