【比较基因组】基因家族扩张与收缩---CAFE篇

====环境和测试数据准备=====

需要先安装OrthoFinder,这个参考前面一个帖子。然后今天我们主要来测试CAFE。

 安装也比较简单:

下载安装包之后

https://github.com/hahnlab/CAFE/releases/download/v4.2.1/CAFE-4.2.1.tar.gz

cd CAFE

./configure

make

make install prefix=文件夹

注:在release文件夹中成功安装了cafe,可以把它加入自己的环境变量。

测试数据准备:一共下载了mouse, rat, cow, horse, cat, marmoset,macaque, gibbon, baboon, orangutan, chimpanzee, 和 human 12个物种的蛋白数据。(我是另外一个博主那里下载的:从https://share.weiyun.com/5ZIjBg8 (密码:3jzdpm)下载。)

//解压缩一下就可以了

tar xf twelve_spp_proteins.tar.gz

for i in `ls -1twelve_spp_proteins/*.tar.gz`; do tar xf $i -C twelve_spp_proteins; done

rm twelve_spp_proteins/*.tar.gz

===识别基因家族=====

识别物种内和物种间的基因家族分为如下四步:(当然也可以)

 

1、仅保留每个基因中有代表性的转录本,去除可变剪切和冗余基因

2、建立BLAST数据库,使用blastp进行 all-by-all 的比对

3、使用MCL基于blastp结果进行聚类,基因序列相似的通常是一个基因家族

4、解析MCL的输出结果,用作CAFE的输入

第一步:将所有最长的转录本合并成单个文件。提取每个基因中最长的转录本,然后合并成单个文件。

python python_scripts/cafetutorial_longest_iso.py -d twelve_spp_proteins/

cat twelve_spp_proteins/longest_*.fa | seqkit rmdup - > makeblastdb_input.fa

第二步:All-by-all BLAST

makeblastdb -in makeblastdb_input.fa-dbtype prot -out blastdb

blastp -num_threads 30 -db blastdb -query makeblastdb_input.fa -outfmt 7 -seg yes > blast_output.txt

注:-seg参数过滤低复杂度的序列(即氨基酸编码为X),-num_threads线程数,此处设置为30。

第三步:使用MCL进行序列聚类

根据BLAST输出中序列相似性信息寻找聚类。这些聚类将是后续用于CAFE分析的基因家族。聚类这一步将通过mcl处理。使用shell命令将BLAST转成MCL能够识别的ABC格式(其实就是挑选三列,两个ID和Evalue)。

grep -v "#"  blast_output.txt | cut -f 1,2,11 >blast_output.abc

然后,创建网络文件(.mci)和字典文件(.tab),然后进行聚类

mcxload -abc blast_output.abc --stream-mirror --stream-neg-log10 -stream-tf  'ceil(200)' -o blast_output.mci -write-tab blast_output.tab

其中:--stream-mirror: 为输入创建镜像,即每一个X-Y都有一个Y-X

          --stream-neg-log10: 对输入的数值做-log10转换

          -stream-tf: 对输入的数值进行一元函数转换,这里用到的是ceil(200)

根据mci文件进行聚类, 其中主要调整的参数是-I, 它决定了聚类的粒度,值越小那么聚类密度越大,这个值没有想象中的那么至关重要。一般设置为3,你也可以尝试用其他值,然后比较结果。最终的目的是正确分析物种间的直系同源基因。

mcl blast_output.mci -I 3

mcxdump -icl out.blast_output.mci.I30 -tabr blast_output.tab -o dump.blast_output.mci.I30

第四步:整理MCL的输出结果

上一步MCL的输出还不能直接用于CAFE,还需要对其进行解析并过滤。

 

第一步是将原来的mcl格式转成CAFE能用的格式。

pythonpython_scripts/cafetutorial_mcl2rawcafe.py  -i dump.blast_output.mci.I30 -o unfiltered_cafe_input.txt -sp "ENSG00 ENSPTR ENSPPY ENSPAN ENSNLE ENSMMUENSCJA ENSRNO ENSMUS ENSFCA ENSECA ENSBTA"

这里的"ENSG00" 是ENSEMBL编号中物种的标识符。

unfiltered_cafe_input.txt文件如下所示:

第二步,将那些基因拷贝数变异特别大的基因家族剔除掉,因为它会造成参数预测出错。下面的脚本是过滤掉一个或多个物种有超过100个基因拷贝的基因家族,虽然不是特别的严格,但效果和根据拷贝数变异过滤类似。

pythonpython_scripts/cafetutorial_clade_and_size_filter.py -iunfiltered_cafe_input.txt -o filtered_cafe_input.txt –s

然后把ID换成物种名字:

sed -i -e 's/ENSPAN/baboon/' -e 's/ENSFCA/cat/' -e 's/ENSBTA/cow/' -e's/ENSNLE/gibbon/' -e 's/ENSECA/horse/' -e 's/ENSG00/human/' -e's/ENSMMU/macaque/' -e 's/ENSCJA/marmoset/' -e 's/ENSMUS/mouse/' -e's/ENSPPY/orang/' -e 's/ENSRNO/rat/' -e 's/ENSPTR/chimp/' filtered_cafe_input.txt

sed -i -e 's/ENSPAN/baboon/' -e 's/ENSFCA/cat/' -e 's/ENSBTA/cow/' -e's/ENSNLE/gibbon/' -e 's/ENSECA/horse/' -e 's/ENSG00/human/' -e's/ENSMMU/macaque/' -e 's/ENSCJA/marmoset/' -e 's/ENSMUS/mouse/' -e's/ENSPPY/orang/' -e 's/ENSRNO/rat/' -e 's/ENSPTR/chimp/' large_filtered_cafe_input.txt

第五步:物种树推断

构建物种树主要分为多序列联配和系统发育树推测两步,之后在已有进化树的基础上构建超度量树用作CAFE输入。

 

多序列联配一般用的是单拷贝的直系同源基因(其实前面的OrthoFinder就生成的有),分别进行多序列联配之后然后合并成单个文件。接着用系统发育树推测软件进行建树,可选软件有

极大似然法: RAxML, PhyML, FastTree

贝叶斯法: MrBayes

推断超度量树

超度量树(ultrametric tree)也叫时间树,就是将系统发育树的标度改成时间,从根到所有物种的距离都相同。构建方法有很多,比较常用的就是r8s.

 

这里用cafetutorial_prep_r8s.py构建r8s的批量运行脚本,然后提取超度量树。

pythonpython_scripts/cafetutorial_prep_r8s.py -i twelve_spp_raxml_cat_tree_midpoint_rooted.txt -o r8s_ctl_file.txt -s 35157236 -p 'human,cat' -c '94'

/gpfs03/home/jingjing/software/r8s1.81/src/r8s -b -f r8s_ctl_file.txt > r8s_tmp.txt

tail -n 1 r8s_tmp.txt | cut -c 16- >twelve_spp_r8s_ultrametric.txt

运行CAFE

运行CAFE有两种模式,一种是CAFE的命令行模式,先执行cafe进行CAFE的shell, 然后在其中执行命令。另一种是脚本模式,也就是你先把命令编辑完成,然后用cafe script_to_run.sh运行。

CAFE的主要功能就是根据给定的进化树和基因家族数估计一个或多个 birth-death()参数。参数描述的是基因出现或者消失的概率。

 

编辑cafetutorial_run1.sh。CAFE的命令不能有额外的空格出现在 tree后面的()中,以及lambda 的 -t 后的()中,否则运行时会无法正确解析文件导致报错。

mkdir -p reports

cafe cafetutorial_run1.sh

这步运行结束后的报告文件在reports/reportrun1.cafe,可以用已有的脚本分析哪些基因家族发生了扩张或者搜索。

python  /gpfs03/home/jingjing/software/CAFE/script/Fulton_python_scripts/cafetutorial_report_analysis.py  -i reports/report_run1.cafe -o reports/summary_run1   (注意这些python程序要基于python2才行

在reports文件夹下会出现如下文件

 

summary_run1_node.txt: 统计每个节点中扩张,收缩的基因家族数

summary_run1_fams.txt: 具体发生变化的基因家族

看下CAFE的输出结果:

Lambda是整个进化树的预测值

 

# IDs of nodes表示不同节点的编号,这里cat为0,horse为2,cat和horse所在的节点是1.

 

最后是每个基因家族的结果。以最开始的表示行为例,第一列对应输入基因家族的编号;第二列是Newick的进化树,cat_61中的61表示该基因家族在cat里有61个基因;第三列是Family-wide P-value,用于表明该基因家族是否是显著性的扩张或是收缩,这里是0.124,说明变化不明显。在第三列的p值小于0.01时,第四列表明哪个分支的基因家族发生了变化,上图中只有ID 13的基因家族有变化。

cafe结果可视化

在网上搜cafe可视化发现并没有什么资料,都是说自己进行结果提取和画图。

这里有两种方法,一是使用cafe自带脚本计算出扩张和收缩数目后自行绘图,比如ggtree或者itol手动绘制等。

方法如下:

python cafetutorial_draw_tree.py -isummary_run1_node.txt -t '(((chimp:6,human:6):81,(mouse:17,rat:17):70):6,dog:93)' -d '(((chimp<3>,human<3>)<3>,(mouse<3>,rat<3>)<3>)<3>,dog<3>)' -o summary_run1_tree_rapid.png

其中cafetutorial_report_analysis.py生成结果文件中summary_run1_node.txt中包含每个节点扩张和收缩的数目。cafetutorial_draw_tree.py简单的对结果进行绘图,以上参数在resultfile.cafe中找。默认绘制扩张基因数目,可以添加-y Contractions来绘制收缩基因数目,然后根据这些使用其他工具绘制更美观的图片。

第二种方法是唯一一个工具直接对cafe结果进行可视化的工具,CAFE_fig(安装的时候也碰到很多问题)。

安装时其主页现实安装ete3 3.0.0b35版本,不用管它,安装最新版本。他提示安装低版本是英文有部分人会因为其ete3无法使用PyQt5的内容所以必须要降级。但是如果选择使用3.0.0b35版本代表必须将PyQt5降级到PyQt4,也比较麻烦。而且我自己测试时全部使用最新版并没有出现问题,所以安装时不需要降级。

 

但是运行的时候又报错了:

ERROR:qt.qpa.screen: QXcbConnection: Could not connect to display :0.0解决办法:

echo "exportQT_QPA_PLATFORM='offscreen'" >>~/.bashrc

source ~/.bashrc

python CAFE_fig.py example_result.cafe -pb 0.05 -pf 0.05 --dump test/ -g pdf --count_all_expansions  //CAFE_fig自带的例子

注意:CAFE_fig.py中对pixels_per_mya进行修正。源码中是1.0,如果想让长度变成5倍则更正为5.0即可。

其中一个家族的结果:

 

跑上面的例子的结果(然后由于未知原因,我画出的图片没有颜色,暂时还不清楚为什么):

本文使用 文章同步助手 同步

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

推荐阅读更多精彩内容