MCScanX安装与使用 (2022)

为什么要写这篇文章:
最近因为需要用到MCScanX画两个物种的共线性点图,但是发现搜到的blog中所提供的安装方法都不太相同,且在都会出现或多或少的问题,另外搜到的所有blog安装链接http://chibba.pgml.uga.edu/mcscan2/MCScanX.zip其实都已经不维护了。总体安装的很艰难,所以想把自己的经历和大家分享一下,以便其他人少走弯路。

下载安装包以及需要的环境

需要我们自行下载并解压安装的主要有三个文件 Zlib库文件libpng文件MCScanX以及一些依赖环境。

  • 依赖环境:
    以下依赖环境有的话就不用再装了,不知道有没有的话可以试着输入以下,有的话会弹出用法。
    例如:

    (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]
    

    安装以下环境:java、javac、blast、make。命令如下,根据自己系统的情况选择安装哪一个:

    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库:
    建议先去官网看看现在的版本是什么,然后以官网的下载链接为准,这里代码只做参考

    • 下载并解压:
    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官网已经不维护了,但是可以从github上下载。

  • 下载:
    wget https://codeload.github.com/wyp1125/MCScanX/zip/refs/heads/master
    unzip master 
    cd MCScanX-master # master解压出来文件名是MCScanX-master
    
  • 安装:
    由于现在大都是64位系统,所以需要给以下三个文件msa.h,dissect_multiple_alignment.h, and detect_collinear_tandem_arrays.h添加库文件:#include <unistd.h>。我用的是vim
    vim msa.h  #然后把这三个头问题就修改了
    
    make #然后安装
    
  • 将MCScanX以及他的下游分析添加到环境变量:
    • 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.faso.pep.fa文件,以及其se.gff3so.gff3文件。但是MCScanX需要的gff文件与标准版的gff3文件有所区别,只有四列,分别是染色体名称、基因名、基因起始坐标、基因结束坐标,所以需要先进行处理。

    注意:染色体格式为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.gffse_so.blast

    MCScanX se_so
    

    得到三个文件:se_so.htmlse_so.collinearityse_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轴染色体顺序(染色体格式需要为物种名+条数,eg:so1 )
    
    • 绘图命令:
    java dot_plotter -g se_so.gff -s se_so.collinearity -c dot.ctl -o dot.PNG
    
    dot.PNG

参考过的blog

基因组共线性工具MCScanX使用说明
生物信息学共线性分析软件MCScanX的小白安装教程
MCScanX ‖ 安装、报错解决方法及简单使用
基因组共线性工具MCScanX使用说明

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容