MCScanX使用小记

本文详细介绍了使用MCScanX进行物种间共线性分析的过程,包括软件下载安装、文件准备、数据库构建、BLAST比对及MCScanX运行步骤,并提供了下游分析和绘图方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一篇不知道拖了多久的笔记……欠下的债早晚还是要还的……

0.软件下载及安装

官网:

http://chibba.pgml.uga.edu/mcscan2/

参考教程:
其实之前已经有两位前辈写过教程了的,我这只是再给需要的朋友举个例子打个样。详情请戳下面两个链接

http://blog.biochen.com/archives/878

https://www.jianshu.com/p/740cb9eccf2b

下载软件:

wget http://chibba.pgml.uga.edu/mcscan2/MCScanX.zip

解压:

unzip MCScanX.zip

cd到MCScanX后,按照

http://www.genek.tv/article/45

介绍的方法,给

  • msa.h

  • dissect_multiple_alignment.h

  • detect_collinear_tandem_arrays.h

这三个文件前面添加上#include <unistd.h>

即,用vim将文件打开后在开头加上上述的参数段。这个错误的原因是,MCScanX 不支持64位系统。
然后make一下就安装好了

1.文件准备

从TAIR上下载TAIR10的pep和gff3数据,要先用notepad++的正则替换功能(vim的批量替换如果会用的话也是可以的)将蛋白质的基因ID后面的注释信息给删掉,否则会影响后续的工作。接下来处理gff3文件。
先看一眼原始的数据长啥样:


img_74abd6cae77d940b99a93cdb3de5aacc.png
TAIR上下载的拟南芥的gff3数据

我们需要的是第1、4、5列和第9列的ID部分
用awk、grep和vim的全局替换功能可以得到所需要的简化版gff3文件:

 cat TAIR10.gff3 |awk '/gene/ {print $1  "\t" $3 "\t"  $4 "\t" $5 "\t" $9 }'> tmp.gff3
$3是用来标记用的,我们只取含有gene的列
img_58839230b2665a2ae1af0d332c5e0384.png
得到的结果

但是会有一些问题,比如:


img_a5ca79accc7b8c9944f1a436ca13943c.png
搜索gene时的副产物

在搜索gene的时候只要包含gene的词就会被检索到,于是有以下三个混进来的:

  • pseudogene

  • transposable_element_gene

  • mRNA_TE_gene
    于是我就:

grep -v 'mRNA_TE_gene' tmp2.gff3 > tmp3.gff3
grep -v 'pseudogene' tmp3.gff3 > tmp4.gff3 
grep -v 'transposable_element_gene' tmp4.gff3 > tmp5.gff3

由于当时学艺不精比较菜就只能先暂时这样用一下了……


img_8637deffd29b0482fd4f33da4377af46.jpe
就是!又不是不能用

现在想想好像在上一步awk的时候可以:

 cat TAIR10.gff3 |awk '/^gene/ {print $2 "\t" $0}' > tmp.gff3

加上一个“^”表示以gene开头,应该就可以免去上面那繁琐的几步了,最后生成的时候再倒一下回来就好了。
可以用

grep -v "^gene" tmp3.gff3

来检测是否还包含有非gene的行。
经过一系列的awk操作之后获得最终的结果:


img_c13af3b7dea853f0e3f07c392c5eb80e.png
AT.gff3

另一个物种如法炮制即可。
updates:也可以这么写,三步搞定:

awk '$3 == "gene" {print $1 "\t" $3 "\t" $4 "\t" $5 "\t" $9}' TAIR10.gff3 > new.gff3
用vim全局替换处理ID列的冗余信息
用awk将信息位置调换正确

2.建库

makeblastdb -in AT.pep -dbtype prot -parse_seqids -out ATdb

因为我需要做的是maca对拟南芥的共线性比较,所以只需要对拟南芥建库即可。(如果需要物种内也进行共线性比较的话这里需要把两个物种的蛋白质文件cat到一起来建库)

3.比对

nohup blastp -query maca.pep -db ATdb -out AT_maca.blast -evalue 1e-10 -num_threads 30 -outfmt 6 -num_alignments 5 &

参数稍微解释一下。

-query 被比对的物种的蛋白质文件
-db 上一步建的库
-out 输出结果
-evalue 设置输出结果的e-value值,值越小相似度越高。
-num_threads 比对所用的线程数
-outfmt 输出的格式
-num_alignments 输出比对上的序列的最大值条目数

这一步还是要点时间的。记得挂nohup。

4.运行MCScanX

将之前的两个物种的gff3文件cat成一个文件后命名为AT_maca.gff
将上一步生成的AT_maca.blast和AT_maca.gff放到新建的AT_maca文件夹内

MCScanX ./AT_maca

之后就会生成一个叫AT_maca.collinearity的文件和一个AT_maca.html文件夹。


img_0f70136a2e003e716e6e704a374de701.png
AT_maca.collinearity

AT_maca.html里面是这样滴:


img_373217ed3ccb544ab7e582a1a47ea567.png
AT和maca的对应关系

5.下游分析

java circle_plotter -g AT_maca.gff -s AT_maca.collinearity -c circle.ctl -o AT_maca_circle.png

这一步需要修改修改circle.ctl文件


img_e04740d57c2b9296a3b4ab5e9e094e0e.png
ctl文件

只要把你希望画出来的序列的ID给写进去就好了
可以画dot图,bar图和circle图,个人觉得circle图最好看了~


img_c0e55ead20bc1f24522fceb7e97b7441.png
结果展示

大概就是这样了。如果有什么错误的地方欢迎讨论指出哟。
Protobuf是一种高效的序列化协议,可以用于数据交换和数据存储。它的主要优势是大小小,速度快,可扩展性强。下面是使用Protobuf的一些小记: 1. 定义消息格式 首先,需要定义消息格式,以便Protobuf可以将数据序列化和反序列化。消息格式定义在.proto文件中,使用protobuf语言编写。例如,下面是一个简单的消息格式定义: ``` syntax = "proto3"; message Person { string name = 1; int32 age = 2; } ``` 这个消息格式定义了一个名为Person的消息,包含两个字段:name和age。 2. 生成代码 一旦消息格式定义好,就可以使用Protobuf编译器生成代码。编译器将根据消息格式定义生成相应的代码,包括消息类、序列化和反序列化方法等。可以使用以下命令生成代码: ``` protoc --java_out=. message.proto ``` 这将生成一个名为message.pb.java的Java类,该类包含Person消息的定义以及相关方法。 3. 序列化和反序列化 一旦生成了代码,就可以使用Protobuf序列化和反序列化数据。例如,下面是一个示例代码,将一个Person对象序列化为字节数组,并将其反序列化为另一个Person对象: ``` Person person = Person.newBuilder() .setName("Alice") .setAge(25) .build(); byte[] bytes = person.toByteArray(); Person deserializedPerson = Person.parseFrom(bytes); ``` 这个示例代码创建了一个Person对象,将其序列化为字节数组,然后将其反序列化为另一个Person对象。在这个过程中,Protobuf使用生成的代码执行序列化和反序列化操作。 以上是使用Protobuf的一些基本步骤和注意事项,希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值