祖先染色体重构软件-Agora

1.介绍

AGORA是“Algorithm for Gene Order Reconstruction in Ancestors”的简称,该软件能够以物种树、每个物种的基因集以及基因树(或者每个祖先节点的正交组)作为输入,推断物种树中任意节点的祖先线性染色体基因顺序(包括基因方向),但不能推断祖先节点的核苷酸和蛋白质序列,也不能推断祖先环状染色体基因顺序(一般原核生物祖先染色体为环状)

2.安装

2.1 依赖项
#系统中已有python3.8+环境,激活环境并安装psutil
pip install psutil
#系统中没有python3.8+环境,使用conda配置环境
conda env create --file conda_env.yml
2.2 安装包
#下载软件并解压
wget -c https://github.com/DyogenIBENS/Agora/archive/refs/heads/master.zip
unzip master.zip
2.3 测试
#运行下面命令测试
cd Agora-master/
./checkAgoraIntegrity.sh
#运行成功会有绿色字眼
The ancestral genomes are available in tmp/ancGenomes/vertebrates-workflow/
Everything seems OK! Enjoy AGORA

3. 输入文件

3.1 物种树
#树文件是Newick格式,A0、A1等内部节点的名字必须唯一(Orthofinder中Species_Tree/SpeciesTree_rooted_node_labels.txt文件可以使用,其它情况可自行生成)
(((M1:10,M2:10)A3:0,M3:10)A1:0,(M4:10,M5:10)A2:0)A0;
image.png
3.2 基因树(或者祖先节点的正交组)
3.2.1 基因树
#基因树文件是NHX格式,S表示物种树中叶节点的名字,D表示节点类型(D=N表示物种形成节点,D=Y表示复制节点,当不确定是否复制事件时,可额外标记为DD=Y,但程序处理时会将其处理为物种形成节点)
(((MG50000005375[&&NHX:S=M5:D=N],((MG20000017309[&&NHX:S=M2:D=N],MG10000161649[&&NHX:S=M1:D=N])A3AG00000.A[&&NHX:S=A3:D=N],MG30000025450[&&NHX:S=M3:D=N])A1AG00000.A[&&NHX:S=A1:D=N])A0AG00000.A[&&NHX:S=A0:D=N],(MG40000007718[&&NHX:S=M4:D=N],(((MG30000006834[&&NHX:S=M3:D=N],(((MG20000034641[&&NHX:S=M2:D=N],(MG20000089753[&&NHX:S=M2:D=N],((MG20000069609[&&NHX:S=M2:D=N],MG20000069607[&&NHX:S=M2:D=N])M2AG00000.B.a.a.a.b.b.a[&&NHX:S=M2:D=Y],MG20000089722[&&NHX:S=M2:D=N])M2AG00000.B.a.a.a.b.b[&&NHX:S=M2:D=Y])M2AG00000.B.a.a.a.b[&&NHX:S=M2:D=Y])M2AG00000.B.a.a.a[&&NHX:S=M2:D=Y],MG20000047798[&&NHX:S=M2:D=N])M2AG00000.B.a.a[&&NHX:S=M2:D=Y],(MG10000186074[&&NHX:S=M1:D=N],MG10000204345[&&NHX:S=M1:D=N])M1AG00000.B.a.a[&&NHX:S=M1:D=Y])A3AG00000.B.a.a[&&NHX:S=A3:D=N])A1AG00000.B.a.a[&&NHX:S=A1:D=N],(MG20000063193[&&NHX:S=M2:D=N],MG10000178789[&&NHX:S=M1:D=N])A3AG00000.B.a.b[&&NHX:S=A3:D=N])A1AG00000.B.a[&&NHX:S=A1:D=Y],((MG20000048498[&&NHX:S=M2:D=N],MG10000186407[&&NHX:S=M1:D=N])A3AG00000.B.b.a[&&NHX:S=A3:D=N],((MG20000034652[&&NHX:S=M2:D=N],(MG20000044811[&&NHX:S=M2:D=N],MG20000058728[&&NHX:S=M2:D=N])M2AG00000.B.b.b.b[&&NHX:S=M2:D=Y])M2AG00000.B.b.b[&&NHX:S=M2:D=Y],(MG10000167850[&&NHX:S=M1:D=N],MG10000167851[&&NHX:S=M1:D=N])M1AG00000.B.b.b[&&NHX:S=M1:D=Y])A3AG00000.B.b.b[&&NHX:S=A3:D=N])A3AG00000.B.b[&&NHX:S=A3:D=Y])A1AG00000.B[&&NHX:S=A1:D=Y])A0AG00000.B[&&NHX:S=A0:D=N])A0AG00000.a[&&NHX:S=A0:D=Y],((MG50000021973[&&NHX:S=M5:D=N],MG50000005370[&&NHX:S=M5:D=N])M5AG00000.C[&&NHX:S=M5:D=Y],(MG40000019755[&&NHX:S=M4:D=N],(MG40000023268[&&NHX:S=M4:D=N],MG40000007713[&&NHX:S=M4:D=N])M4AG00000.C.d[&&NHX:S=M4:D=Y])M4AG00000.C[&&NHX:S=M4:D=Y])A2AG00000.C[&&NHX:S=A2:D=N])A0AG00000[&&NHX:S=A0:D=Y];
3.2.2 正交组
#orthofinder2.4.0版本之后会在结果目录下生成Phylogenetic_Hierarchical_Orthogroups的文件夹
#处理完后,将其存放到orthologyGroups文件夹
for i in {0..11};do less N$i.tsv | sed -E 's/^([^ \t]+[ \t]+){3}//; s/,/ /g; s/[ \t]+/ /g; 1d; /^[[:space:]]*$/d; s/^[ \t]+//; s/ $//g' > $i.list;done
3.3 基因列表
#建立genes文件夹,每个物种的基因文件命名规则是prefix.物种树中的名字.suffix;比如物种树中是HUMAN,则基因列表名字可以为genes.HUMAN.list;物种树中是Homo.sapiens,则基因列表名字可以为genes.Homo.sapiens.list
#每个物种一个基因文件,文件每行按照tab分割,前5列是必须(染色体名字、基因起始位置、基因结束位置、基因方向[+为1,-为-1]、基因名字、转录本名字[可选])
#Agora软件仅关注每条染色体上基因的顺序,所以基因座标是基于1-based或0-based都可以
#基因文件可以是非压缩版本,程序运行过程中会自动生成.bz2文件
#head -n 3 Agora/example/data/genes/genes.M5.list.bz2
Chr1    0      1      1      MG50000017598
Chr1    1      2      -1      MG50000015459
Chr1    2      3      -1      MG50000011246

4. 流程

4.1 讲在前面

AGORA可以使用两种模式运行,一种是使用现存物种基因组中发现的所有邻接关系去重构祖先线性染色体基因顺序;另一种是通过用户自定义的标准对现存物种基因组中发现的所有邻接关系过滤,再去重构祖先线性染色体基因顺序(主要是因为基因重复在系统发育解析过程中难以被准确解析)。两种模式均可以使用“一步到位”和“分步运行”两种形式去运行。
AGORA会自动创建必要的输出目录,输入输出可以是文件的压缩格式(gzip、bzip2、LZMA、xz,后两种需要额外安装pyliblzma包)

4.2 用所有邻接关系去重构
image.png
#输入文件是基因树则运行
/path/src/agora-basic.py /path/to/species-tree.nwk /path/to/gene-trees.nhx /path/to/genes.%s.list -nbThreads=10
#输入文件是正交组则运行
/path/src/agora-basic.py /path/to/species-tree.nwk /path/to/orthologyGroups.%s.list /path/to/genes.%s.list -nbThreads=10
#如果不指定-nbThreads,默认会使用机器上所有可用的内核
#如果不指定-target,默认计算所有节点的祖先染色体基因顺序,如果想计算A1及其之后节点,则-target=A1,如果只计算A1节点的,则-target==A1
4.3 用用户自定义的邻接关系去重构
image.png
#输入文件是基因树则运行
/path/src/agora-generic.py /path/to/species-tree.nwk /path/to/gene-trees.nhx /path/to/genes.%s.list -nbThreads=10 -minSize=1.0 -maxSize=1.0
#输入文件是正交组则运行
/path/src/agora-generic.py /path/to/species-tree.nwk /path/to/orthologyGroups.%s.list /path/to/genes.%s.list -nbThreads=10 -minSize=1.0 -maxSize=1.0
#可以使用-minSize和-maxSize去控制基因集

5. 结果

5.1 blocks file

每个节点的祖先共线块可以在输出结果/path/ancBlocks/blocks*bz2找到,文件以tab分隔,每一列分别代表:
1-祖先节点共线块名字
2-共线块内基因数目
3-祖先基因的ID,对应于 ancGenes/all/ancGenes.*bz2
4-共线块内基因顺序及方向
5-每个共线块的相对置信度指数
括号中的值表示初始块的大小,非括号中的值表示两个相邻的共线块在现存物种中也邻接的次数

5.2 ancGenome file

每个节点的祖先基因顺序可以在输出结果/path/ancGenomes/ancGenome.*.list.bz2找到,文件以tab分隔,坐标是基于0-based的bed文件格式,每一列分别代表:
1-祖先节点CARs名字
2-祖先基因的相对起始位置
3-祖先基因的相对结束位置
4-祖先基因的方向
5-第一个是祖先基因的名字,后面是在现存物种中的拷贝列表,用空格分隔

5.3 可视化

1.plot A1 to draw the reference colors (1 bloc / 1 colour):

./misc.compareGenomes.py ../example/results/ancGenomes/basic-workflow/ancGenome.A1.list.bz2 ../example/results/ancGenomes/basic-workflow/ancGenome.A1.list.bz2 ../example/results/ancGenes/all/ancGenes.A1.list.bz2 -mode=drawKaryotype -minChrSize=200 +sortBySize > A1.ps

2.plot M1 according to A1 colors of blocs:

#minChrSize的值200对于A1和M1同时生效,如果想生成A1>300且M1>200,需要自己修改脚本或者共用200生成图片之后利用adobe illustrator修改
./misc.compareGenomes.py ../example/data/genes/genes.M1.list.bz2 ../example/results/ancGenomes/basic-workflow/ancGenome.A1.list.bz2 ../example/results/ancGenes/all/ancGenes.A1.list.bz2 -mode=drawKaryotype -minChrSize=200> M1.ps
#转为pdf
ps2pdf M1.ps M1.pdf

3.If you want to represent how it evolves from A1 to A3 to M1, you have to draw A3 according to A1 colours:

./misc.compareGenomes.py ../example/results/ancGenomes/basic-workflow/ancGenome.A3.list.bz2 ../example/results/ancGenomes/basic-workflow/ancGenome.A1.list.bz2 ../example/results/ancGenes/all/ancGenes.A1.list.bz2 -mode=drawKaryotype -minChrSize=200> A3.ps

4.occurrence of fusion and fission events for each ancestral node

#显示CARs是有现存物种的哪些染色体形成的
src/misc.compareGenomes.py ./example/results/ancGenomes/vertebrates-workflow/ancGenome.A1.list.bz2 example/data/genes/genes.M1.list.bz2 example/results/ancGenes/all/ancGenes.A1.list.bz2 -mode=printOrthologousChrom +sortBySize -minChrSize=200
#显示现存物种中染色体是由哪些祖先CARs形成的
src/misc.compareGenomes.py ./example/results/ancGenomes/vertebrates-workflow/ancGenome.A1.list.bz2 example/data/genes/genes.M1.list.bz2 example/results/ancGenes/all/ancGenes.A1.list.bz2 -mode=printOrthologousChrom +sortBySize -minChrSize=200 +reverse

5.how many genes from which blocs composed the target genome chromosomes

src/misc.compareGenomes.py ./example/results/ancGenomes/vertebrates-workflow/ancGenome.A1.list.bz2 example/data/genes/genes.M1.list.bz2 example/results/ancGenes/all/ancGenes.A1.list.bz2 -mode=printOrthologuesList +sortBySize -minChrSize=200 +reverse

6. Tips

实测--minSize和maxSize去调节输入物种的基因集正交组,输出的CARs不会有太大的变化;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容