為什么要寫這篇文章:
最近因為需要用到MCScanX畫兩個物種的共線性點圖,但是發(fā)現(xiàn)搜到的blog中所提供的安裝方法都不太相同巍实,且在都會出現(xiàn)或多或少的問題轿钠,另外搜到的所有blog安裝鏈接http://chibba.pgml.uga.edu/mcscan2/MCScanX.zip
其實都已經(jīng)不維護了剪芍。總體安裝的很艱難剪菱,所以想把自己的經(jīng)歷和大家分享一下摩瞎,以便其他人少走彎路。
下載安裝包以及需要的環(huán)境
需要我們自行下載并解壓安裝的主要有三個文件 Zlib庫文件孝常、libpng文件旗们、MCScanX以及一些依賴環(huán)境。
-
依賴環(huán)境:
以下依賴環(huán)境有的話就不用再裝了构灸,不知道有沒有的話可以試著輸入以下上渴,有的話會彈出用法。
例如:(base) ght@DESKTOP-TU3M5B7:~$ makeblastdb # 如果沒有的話會彈出安裝方法 Command 'makeblastdb' not found, but can be installed with: sudo apt install ncbi-blast+
(base) ght@DESKTOP-TU3M5B7:~$ makeblastdb # 如果安裝了的話會彈出用法 USAGE makeblastdb [-h] [-help] [-in input_file] [-input_type type] -dbtype molecule_type [-title database_title] [-parse_seqids] [-hash_index] [-mask_data mask_data_files] [-mask_id mask_algo_ids] [-mask_desc mask_algo_descriptions] [-gi_mask] [-gi_mask_name gi_based_mask_names] [-out database_name] [-blastdb_version version] [-max_file_sz number_of_bytes] [-logfile File_Name] [-taxid TaxID] [-taxid_map TaxIDMapFile] [-version]
安裝以下環(huán)境:java喜颁、javac稠氮、blast、make半开。命令如下隔披,根據(jù)自己系統(tǒng)的情況選擇安裝哪一個:
sudo apt update sudo apt upgrade # 這兩步比較玄學,但是還是建議升級一下 sudo apt install openjdk-11-jre-headless # java sudo apt install openjdk-11-jdk-headless # javac sudo apt install ncbi-blast+ # blast sudo apt install make # make
-
Zlib庫:
建議先去官網(wǎng)看看現(xiàn)在的版本是什么稿茉,然后以官網(wǎng)的下載鏈接為準锹锰,這里代碼只做參考- 下載并解壓:
wget http://www.zlib.net/zlib-1.2.12.tar.gz # 下載Zlib tar -zxvf zlib-1.2.12.tar.gz # 解壓 cd zlib-1.2.12/
- 安裝:
./configure make make install
-
libpng庫
與Zlib類似,但是libpng依賴于Zlib漓库,所以需要先下載安裝Zlib恃慧。- 下載并解壓:
wget https://cfhcable.dl.sourceforge.net/project/libpng/libpng16/1.6.37/libpng-1.6.37.tar.gz tar -zxvf libpng-1.6.37.tar.gz cd libpng-1.6.37/
- 安裝:
./configure make make install
下載并安裝MCScanX
如上所述,MCScanX官網(wǎng)已經(jīng)不維護了渺蒿,但是可以從github上下載痢士。
- 下載:
wget https://codeload.github.com/wyp1125/MCScanX/zip/refs/heads/master unzip master cd MCScanX-master # master解壓出來文件名是MCScanX-master
- 安裝:
由于現(xiàn)在大都是64位系統(tǒng),所以需要給以下三個文件msa.h
,dissect_multiple_alignment.h
,and detect_collinear_tandem_arrays.h
添加庫文件:#include <unistd.h>
茂装。我用的是vim
:vim msa.h #然后把這三個頭問題就修改了 make #然后安裝
- 將MCScanX以及他的下游分析添加到環(huán)境變量:
- MCScanX
echo 'PATH=$PATH:~/yourPath/MCScanX-master/ ' >> ~/.bashrc #此處的yourPath指你裝MCScanX的路徑 MCScanX # 這樣就可以直接命令行調用MCScanX了
- 下游分析程序
export CLASSPATH='.:/yourPath/MCScanX-master/downstream_analyses' # 將繪圖等需要的類添加至java的類路徑 java dot_plotter -g os_sb.gff -s os_sb.collinearity -c dot.ctl -o dot.PNG # 這樣就可以直接調用下游java分析程序了
舉例說明
我主要用MCScanX做共線分析并畫圖怠蹂,這里用我自己的流程作為示例。其他的我也不太會哈哈
-
處理輸入文件:
下載兩個物種的
se.pep.fa
和so.pep.fa
文件少态,以及其se.gff3
和so.gff3
文件城侧。但是MCScanX需要的gff
文件與標準版的gff3
文件有所區(qū)別,只有四列彼妻,分別是染色體名稱嫌佑、基因名、基因起始坐標侨歉、基因結束坐標屋摇,所以需要先進行處理。注意:染色體格式為sp_name1幽邓。
sp_name gene_name starting_position ending_position # gff文件的格式
這是我處理
gff3
文件的python
代碼炮温,大家可以參考:import os import pandas as pd def main(path): gff3_files = [] files = os.listdir(path) for file in files: if file.split('.')[-1] == 'gff3': gff3_files.append(file) x = path for gff3_file in gff3_files: with open(x+gff3_file, "r") as file: temp = pd.read_csv(file, sep='\t',comment='#', header=None) # 只保留基因 temp = temp.drop(temp[temp[2] != 'gene'].index) temp = temp[[0,8,3,4]] temp[8] = temp[8].map(lambda x: x.split(';')[0].split('=')[1]) # 丟掉ups temp = temp.drop(temp[temp[0].str.contains('ups')].index) dataFrame = temp.drop(temp[temp[0].str.contains('unplaced-scaffold')].index) dataFrame = dataFrame.reset_index(drop = True) # 排序并輸出 name = dataFrame.at[0, 0] number_index = 0 for j in range(len(name) - 1, -1, -1): if name[j].isdigit(): continue else: number_index = j + 1 break dataFrame[0] = dataFrame[0].map(lambda x: int(x[number_index:])) dataFrame = dataFrame.sort_values(by=[0, 3], ascending=[True, True]) dataFrame[0] = dataFrame[0].map(lambda x: name[:number_index] + str(x)) dataFrame.to_csv(x+gff3_file[:-1], header=None, index=None, sep='\t') # 最終有幾個gff3文件,就會生成幾個gff文件 # 按間距中的綠色按鈕以運行腳本牵舵。 if __name__ == '__main__': path = 'C/gff_file_path/' main(path)
-
blastp 比對
makeblastdb -in se.pep.fa -dbtype prot -parse_seqids -out se.pep.db # 因為我畫的是se和so之間的共線性點圖柒啤,所以使用se建庫倦挂,再和so進行比對。 blastp -query so.pep.fa -db se.pep.db -out se_so.blast -evalue 1e-10 -num_threads 12 -outfmt 6 -num_alignments 5
-
運行MCScanX
運行MCScanX之前白修,我們需要將gff
文件妒峦、blast
文件放入同一個文件夾,且gff
文件是兩個物種gff
文件合并的gff
兵睛。另外兩個文件的名字需要相同肯骇,我這里是se_so.gff
和se_so.blast
。MCScanX se_so
得到三個文件:
se_so.html
祖很、se_so.collinearity
笛丙、se_so.tandem
。 -
繪制共線性點圖
- 控制文件
繪制共線性點圖需要dot.ctl
文件假颇。文件格式為:
800 800 so1,so2,so3,so4,so5,so6,so7,so8,so9,so10,so11 se22,se21,se20,se19,se18,se17,se16,se15,se14,se13,se12,se11,se10,se9,se8,se7,se6,se5,se4,se3,se2,se1 # 從上往下分別為X軸胚鸯、Y軸的像素大小,X軸笨鸡、Y軸染色體順序(染色體格式需要為物種名+條數(shù)姜钳,eg:so1 )
- 繪圖命令:
java dot_plotter -g se_so.gff -s se_so.collinearity -c dot.ctl -o dot.PNG
- 控制文件
參考過的blog
基因組共線性工具MCScanX使用說明
生物信息學共線性分析軟件MCScanX的小白安裝教程
MCScanX ‖ 安裝、報錯解決方法及簡單使用
基因組共線性工具MCScanX使用說明