0.部分參考https://doi.org/10.1093/molbev/msae239
用了Agora,再把Agora的輸出結果喂給ANGEs
Agora和ANGEs都是構建祖先核型的軟件
個人實測是Agora構建的結果太碎了, ANGEs運行速度又太慢(大于半個月)
所以用Agora將同源基因初步聚類, 以這些blocks喂給ANGEs能大幅提高運行速度
軟件的安裝參考官方文檔
Agora: https://github.com/DyogenIBENS/Agora
ANGEs: https://cchauve.github.io/ANGES/index.html
這里僅作一個流程的記錄, 所有疑問最好去官方的manual中尋找答案
1.Orthofinder (這里也可以用序列比對的結果而不是基因的結果, 但是親測用基因的結果gap會比較少)
輸入文件是各個物種的 .pep文件,以運行orthofinder。
需要給各個物種的基因/序列重新命名,以便區分不同物種。
圖方便物種樹也用orthofinder的結果。當然自己重新構建物種樹也可以
可以參考http://www.lxweimin.com/p/336b65ca1b67
物種樹的枝長不會影響Agora,ANGEs不清楚
這一步驟略
2.將OrthoFinder的結果處理為Agora要求的輸入格式
Agora的輸入文件有三類:
2.1 第一個是物種樹
并對進化樹的每個節點進行命名, 由于我的物種數量比較少, 所以命名是我手動加的
如圖:
同理對應的進化樹的文本格式就是:
((sppA:0.1, sppB:0.2)A1:0.2, (sppC:0.3, sppD:0.4)A2:0.2)A0;
((sppA, sppB)A1, (sppC, sppD)A2)A0; 將枝長省略更為直觀
2.2 第二個是每個末端節點(每個物種)對應的blocks的位置信息, 這里我們用的是每個同源基因的bed文件
前三列是位置信息, 第四列是正負鏈(1是正鏈/-1是負鏈), 第五列是基因名
文件命名為 gene.sppA.list
這個文件很容易通過gff文件獲取
比如對應我手里的這個gff文件:
grep -w 'mRNA' sppA.gff > tmp1
awk 'BEGIN{ FS="\t";OFS="\t" }{print $1,$4,$5,$7,$9}' | awk -F ";" '{print $1}' | sed 's/ID=//g' > tmp2
sed 's/-/-1/g' tmp2 | sed 's/+/1/g' > gene.sppA.list
#對每個物種重復此操作
#為了方便管理, 把這類輸入文件都專門放到一個GeneList的文件夾中
2.3 第三個是每個節點包括祖先節點對應的blocks, 這里我們用的是每個節點的同源基因
文件內容也很簡單, 每一行都是一個基因家族(OG)所包含的基因,空格分隔符, 如下圖:
獲取方法有兩種
2.3.1 OrthoFinder的運行結果Phylogenetic_Hierarchical_Orthogroups文件夾中有按照節點劃分的基因家族, 我在前文中命名為A1的節點, 被OrthoFinder命名為了N1節點. 也可以在前面命名節點的時候就按照OrthoFinder的來, 這樣省去一些文本處理的工作
這個文件已經符合要求了, 只需要把無關的列刪除, 并把分隔符轉為空格分隔符即可
PS: 不知道 豎線 "|" 會不會產生影響, 這里 "物種名" + "|" + "基因名" 的命名格式是做其他分析用到的, 真實運行的時候是沒有這個格式
PS: 只要確保不同物種的基因名獨一無二即可
sed 's/^\([^ \t]\+[ \t]\+\)\{3\}//' N1.tsv | sed 's/,/ /g' > tmp1 #去除文件的前三列并刪除多余的逗號
sed 's/[ \t]\+/ /g' tmp1 | sed '1d' > orthologyGroups.A1.list #將多個tab/空格轉換為一個空格, 并去除第一行
rm tmp1
sed -i '/^[[:space:]]*$/d' orthologyGroups.A1.list #刪除空白行
sed -i 's/^[\t ]\+//' orthologyGroups.A1.list #刪除行首多余的空格/tab
#對每個節點重復這個操作
#為了方便管理, 把這類輸入文件都專門放到一個orthologyGroup的文件夾中
2.3.2 自己手動提一下(不建議用這個方法)
A1節點是sppA和sppB的祖先節點, 所以我們只需要把這兩個物種的同源基因的信息放在一起即可
用到的是Orthofinder輸出的Orthogroups/Orthogroups.tsv
這個文件內容其實差不多, 每一行都是一個基因家族(OG)以及這個基因家族對應的基因名
sppA和sppB在文件的第四列和第五列
awk 'BEGIN{ FS="\t";OFS="\t" }{print $4,$5}' Orthogroups.tsv | sed 's/,/ /g' > tmp1 #提取sppA和sppB所在的列并刪除多余的逗號
sed 's/[ \t]\+/ /g' tmp1 | sed '1d' > orthologyGroups.A1.list #將多個tab/空格轉換為一個空格, 并去除第一行
rm tmp1
sed -i '/^[[:space:]]*$/d' orthologyGroups.A1.list #刪除空白行
sed -i 's/^[\t ]\+//' orthologyGroups.A1.list #刪除行首多余的空格/tab
#對每個節點重復這個操作
#同理如果是前文提到的A0節點也就是所有物種的共同祖先節點
#那就提取4個物種的信息
awk 'BEGIN{ FS="\t";OFS="\t" }{print $2,$3,$4,$5}' Orthogroups.tsv | sed 's/,/ /g' > tmp1 #提取四個物種的信息
#為了方便管理, 把這類輸入文件都專門放到一個orthologyGroup的文件夾中
3.Agora
./software/Agora-master/src/agora-vertebrates.py \ #因為我的物種是脊椎動物, 所以用這個腳本
SpeciesTree_rerooted.txt \ #輸入文件1
orthologyGroup/orthologyGroups.%s.list \ #輸入文件3
GeneList/genes.%s.list \ #輸入文件2
-workingDir=Agora.result #輸出的文件夾
-target=A0 \ #目標節點也就是想看哪個節點的祖先核型
2> all.log #日志文件
雖然命令行指定了想看哪個節點的祖先核型, 但是Agora仍然會輸出每個節點的祖先核型
可以先檢查Agora的結果是否符合預期,如果符合預期就不用再往下做了
Agora也自帶了結果的繪制與解讀,詳情請參閱官方文檔
我使用Agora的效果并不好, 所以并沒有過多的閱讀相關部分
Agora.result/ancGenomes/vertebrates-workflow這個文件夾就是最后的結果
或者說可以用作ANGEs的輸入文件
輸出文件長這樣:
第一列就是構建的祖先核型,CAR_1表示這是祖先核型中最長的那一條染色體
第二列/第三列是祖先染色體上基因的順序; 第四列是正負鏈
第六列即祖先染色體上的這個基因在現存物種中的同源基因
這個文件繼續往下翻閱
會看到我的結果已經到了CAR_316, 祖先核型當然不可能有300條染色體
也沒有說祖先染色體上才個位數的基因數量
所以這個軟件在我的數據集上的結果并不理想
需要進一步使用ANGEs
2025.4.11更新感謝八橋的提醒,
運行ANGEs的時候, 需要把染色體號/contig號中的字母去掉,只允許純數字。
去掉字母,保留純數字。
但是Agora不用