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/\<Name.*locus_tag\>//g #通过正则表达式替换数据
或
$vim tmp.gff3
$:%s/\<Name.*locus_tag\>//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 <unistd.h>' msa.h
$sed -i '1i#include <unistd.h>' dissect_multiple_alignment.h
$sed -i '1i#include <unistd.h>' detect_collinear_tandem_arrays.h
$make
Eorror 2 :
$sudo apt-get install default-jdk
$javac downstream_analyses/*.java