MCScanX

MCScanX 使用方法:


首先需要得到物种的蛋白序列以及基因组注释文件:fasta 与 gff

然后通过本地blast建库:

$makeblastdb -in at_final.pep.fasta -dbtype prot -parse_seqids -out at #建库
$blastp -query at_final.pep.fasta -db at -out at.blast -evalue 1e-10 -num_threads 12 -outfmt 6 -num_alignments 5 #blastp

得到 *.blast 的结果后,还需要编辑gff文件,方法如下(可以通过awk或者perl脚本处理):


AWK方法:

在gff3中以第三行为条件提取1,3,4,5,9 行 (awk)

cat at.gff |awk '$3 == "gene" {print $1 "\t" $3 "\t" $4 "\t" $5 "\t" $9 }' >tmp.gff3 #提取需要的列数据

使用vim对上述提取的序列处理: 提取geneid

$vim tmp.gff3
$:1,$s/\//g #通过正则表达式替换数据

$vim tmp.gff3
$:%s/\//g

“\<” 匹配首字符 ;

“\>” 匹配末尾字符;

“.*” 匹配任意字符;

awk重新输出5,4

$awk '{print $1,$5,$3,$4 > "id.gff"}' tmp.gff3  #重新安排列的排布

发现gff3文件有些问题blast中的 .1 与gff 中gene 名不一样导致无法正常运行:

$vim tmp.gff3 
$:%s /.1\t/\t/g   #替换gff文件中名称

得到我们需要的gff3格式


Perl-oneliner方法:

$ perl -F'\t' -lane 'next unless $F[2] eq "mRNA";print join qq{\t},$F[0],$F[-1]=~s/ID=([^;]+).Parent=.*$/$1/r,$F[3],$F[4]' at_final.gff3> at.gff
-F: 定义分割文件的符号
-l:输出新行
-a:以分隔符方式处理
-n:以行的方式处理,但不输出$_
-e:这是one-liner
条件筛选mRNA行,打印第一列ID: $F[0];右数第一列:$F[-1];star,end列:$F[3],$F[4]
$F[-1]需要筛选准确的ID, 故使用正则表达式/ID=([^;]+).Parent=.*$/ 匹配需要输出的字符 

准备好.blast & gff 后运行:

$./MCScanX data/at  #MCScanX 主程序
$./duplicate_gene_classifier data/at  #数据聚类

画circle图:

先配置 circle.ctl:

$awk '{print $1 > "id.gff"}' at.gff  #提取gff第一列
$perl -ne 'print unless $a{$_}++' id.gff >id.list  #删除重复行
$sed ':t;N;s/\n/,/;b t' id.list >id    #换行符转逗号

使用Java 画图:

java circle_plotter -g ../at.gff -s ../at.collinearity -c circle.ctl -o circle.PNG  

安装的时候的bug:

Eorrer 127 : $sudo apt install gcc g++
Eorrer 1:
$sed -i '1i#include ' msa.h
$sed -i '1i#include ' dissect_multiple_alignment.h
$sed -i '1i#include ' detect_collinear_tandem_arrays.h
$make
Eorror 2 :
$sudo  apt-get install default-jdk
$javac  downstream_analyses/*.java

你可能感兴趣的:(MCScanX)