1. 程式人生 > 其它 >【比較基因組】McScan jcvi比較兩個基因組共線性細節記錄

【比較基因組】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/