WGDI - 推断祖先核型

0.仅作个人笔记使用
意思就是只考虑我能不能看懂
具体每个参数的含义参照官方文档, 这里全部用默认参数
https://wgdi.readthedocs.io/en/latest/Introduction.html

我的研究物种是A, B, C, D
其系统发生关系是:


正好是两个姐妹物种

1.挑选参考基因组 - 要求是组装质量过关/对于研究物种来说是外群
(按照我问到的是, 不同科的物种; 但是我在我的研究类群中发现是不同属的更好; 也就是物种E, F, G; 比如我选了sppE)

2.输入文件的准备
A, B, C, D以及参考基因组/外群 sppE的基因注释文件: .gff, 并提取最长转录本: .cds/.pep
iTools_Code/iTools Fatools getCdsPep -Ref A.genome.fa -Gff A.gff -OutPut 取个名

用到的脚本是软件开发者提供的
https://github.com/SunPengChuan/wgdi-example/tree/main/code

#4个物种+1个外群都是相同的处理
python 01.getgff.py A.gff A.gff2
python 02.gff_lens.py A.gff2 A A.gff3 A.length

#A.gff3和A.length是软件要求的输入文件, 见下图, 这里我们修改第一列
#确保每个物种的染色体名是独一无二的,
awk 'BEGIN{ FS="\t";OFS="\t" }{print "A"$1,$2,$3,$4,$5,$6,$7}'  A.gff3 > A.gff4
awk 'BEGIN{ FS="\t";OFS="\t" }{print "A"$1,$2,$3}'   A.length > A.length2

#对最长转录本进行重命名
python 03.seq_newname.py A.gff4 A.cds A.rename.cds
python 03.seq_newname.py A.gff4 A.pep A.rename.pep

#
A.gff4,  A.length2,   A.rename.pep,    A.rename.cds就是后面用到的输出文件
A.gff2

A.gff4

A.length2

A.rename.pep/稍微注意一下标注的地方
  1. A, B, C, D分别和sppE做共线性点图以及拿到共线性块
    实际证明不同程度亲缘关系远近的都做一下; 按照我的例子是sppE/sppF/sppG都要做
    总共12个共线性点图
    另外sppE/sppF/sppG, 三者之间也要做, 共计3个共线性点图, 外群可以酌情增加或者减少

以上15个共线性点图就是祖先核型推断所用到的全部

以物种A(fonta)和sppE为例:

#后续配置文件中具体参数说明参加https://wgdi.readthedocs.io/en/latest/dotplot.html

makeblastdb -in sppE.rename.pep -dbtype prot -out sppE.pep
blastp -query A.rename.pep -out A.sppE.blastp -db sppE.pep -evalue 1e-5 -num_threads 30 -outfmt 6
#输出的A.sppE.blastp即后续文件

3.1 共线性点图的获取(只做这一步就有图了, 没有特殊要求不用往下做了)
vim A.sppE.dot.conf
#输入以下内容
[dotplot]
blast = A.sppE.blastp  #Blast的输出结果
blast_reverse = false
gff1 = A.gff4    #前面准备好的输入文件
gff2 = sppE.gff4    #前面准备好的输入文件
lens1 = A.length2     #前面准备好的输入文件
lens2 = sppE.length2     #前面准备好的输入文件
genome1_name =  A    #共线性点图的名字(纵坐标对应的物种)
genome2_name =  sppE   #共线性点图的名字(横坐标对应的物种)
multiple  = 1
score = 100
evalue = 1e-5
repeat_number = 10
position = order
ancestor_left = none
ancestor_top = none
markersize = 0.5
figsize = 10,10
savefig = A_sppE.dot.pdf   #输出文件

wgdi -d A.sppE.dot.conf
#A_sppE.dot.pdf即最后的结果
#单从画共线性点图来看, 比jcvi繁琐太多了

3.2 extracting collinearity
vim A.sppE.collinearity.conf
#输入以下内容
[collinearity]
gff1 = A.gff4    #前面准备好的输入文件
gff2 = sppE.gff4    #前面准备好的输入文件
lens1 = A.length2     #前面准备好的输入文件
lens2 = sppE.length2     #前面准备好的输入文件
blast = A.sppE.blastp  #Blast的输出结果
blast_reverse = false
multiple  = 1
process = 8
evalue = 1e-5
score = 100
grading = 50,40,25
mg = 40,40
pvalue = 0.2
repeat_number = 10
positon = order
savefile = A.sppE.collinearity  #输出文件


wgdi -icl A.sppE.collinearity.conf


3.3 block的提取 #因为我是动物, 没有ks分析的需求所以跳过
vim A.sppE.blockinfo.conf
#输入以下内容
[blockinfo]
blast = A.sppE.blastp  #Blast的输出结果
gff1 = A.gff4    #前面准备好的输入文件
gff2 = sppE.gff4    #前面准备好的输入文件
lens1 = A.length2     #前面准备好的输入文件
lens2 = sppE.length2     #前面准备好的输入文件
collinearity = A.sppE.collinearity   #3.2的输出结果
score = 100
evalue = 1e-5
repeat_number = 10
position = order
ks = none   #没有跑ks, 所以是none
ks_col = ks_NG86
savefile = A.sppE.blockinfo.csv  #输出文件


wgdi -bi A.sppE.blockinfo.conf


3.4 Correspondence
vim A.sppE.correspondence.conf
#输入以下内容
[correspondence]
blockinfo = A.sppE.blockinfo.csv
lens1 = A.length2     #前面准备好的输入文件
lens2 = sppE.length2     #前面准备好的输入文件
tandem = true
tandem_length = 200
pvalue = 0.2
block_length = 5
multiple  = 1
homo = 0,1
savefile = A.sppE.blockinfo.corre.csv  #输出文件


wgdi -c A.sppE.correspondence.conf

4.祖先核型文件ancestor file的准备 - 最重要最耗时的一步
ref: https://github.com/SunPengChuan/wgdi-example/blob/main/Karyotype_Evolution.md

大体思路是分别用A, B, C, D 和 参考基因组/外群sppE作共线性点图, 找到4个物种共有的核型变化
比如ABCD的1号染色体和sppE的1号染色体共线性都特别好特别完整
那么可以断定这就是祖先核型的Anc1号染色体

几个要点:
基于共线性点图推导出核型变化
研究物种共有的变化, 即其共同祖先的变化
祖先核型数量已知;
如果未知, 并不能像ANGEs/Agora等等祖先核型软件一样自动帮你推一个核型数量; 这个时候需要自己根据共线性情况判断一个核型数量, 原则就是可以解释的通你从共线性点图中看到的所有核型变化

比如我发现共线性最好的是A物种的1号染色体(当然这里是fonta)
那么就在祖先核型文件中写下:
A1 1 1316 red 1
第一列是A物种的1号染色体, 第二列第三列是基因编号/顺序
第四列是颜色(祖先核型的Anc1画成红色), 第五列我没看懂
表示A物种的1号染色体即A1的第一个基因到第1316个基因属于祖先核型的1号染色体
祖先核型有几条染色体, ancestor file就有多少种颜色

软件开发者的例子

这里我做了很多共线性以及其他的分析确定了祖先核型的数量, 文件的写法和过程略去
(其实个人觉得wgdi只是用来做可视化的工具; 祖先核型的推断要求的输入文件是根据我们自己看共线性点图写出来的, 换句话我自己看共线性图的时候就已经推断出祖先核型了)


作者示例文件给的是用一个物种, 但实操之后这里用多个物种更为合理
我的文件第四列有30种颜色表示我的物种的祖先核型总共有30条染色体
每一个祖先染色体在现存的研究物种中共线性最好的染色体即第一列, 这里共线性最好是通过和多个外群做共线性分析确定的。
第一列是不同物种的不同染色体, 第二列第三列是这条染色体有多少基因, 第四列是祖先核型的颜色, 第五列不管

这里可以多提一点其他写法:
如果我推断出来一条祖先染色体在C物种断裂成了C1和C2两条染色体 (C物种有一次specific的断裂), 如果我想用C物种的信息构建祖先核型
写法是:
C1 1 1400 red 1
C2 1 1200 red 1

allspp.ancient.input.txt
把所有物种的 .gff4 和 .length2 和 .rename.pep    cat到一起
得到allspp.gff4、allspp.rename.pep、allspp.length2
再加上上文写出来的allspp.ancient.input.txt
就是所有的输入文件

#4.1 得到初步的祖先核型
vim 1.anc.kary.conf
#输入以下内容
[ancestral_karyotype]
gff = allspp.gff4
pep_file = allspp.rename.pep
ancestor = allspp.ancient.input.txt
mark = allspp.ANC
ancestor_gff =  allspp.ancestor.gff     #输出文件
ancestor_lens =  allspp.ancestor.lens   #输出文件
ancestor_pep =  allspp.ancestor.pep    #输出文件
ancestor_file =  allspp.ancestor.txt     #输出文件


wgdi -ak 1.4spalax.anc.kary.conf

#这个时候每个研究物种都要重复相同的流程
#我这里举一个物种的例子
#第一步是blastp比对
makeblastdb -in allspp.ancestor.pep -dbtype prot -out  allspp.ancestor
blastp  -query sppA.rename.pep -out sppA.ANC.blastp -db allspp.ancestor  -evalue 1e-5 -num_threads 60 -outfmt 6

#4.2  collinearity
vim 2.gol.ANC.collinearity.conf
#输入以下内容
[collinearity]
gff1 = sppA.gff4      #最开始准备的输入文件
gff2 = allspp.ancestor.gff  #4.1的输出文件
lens1 = sppA.length2      #最开始准备的输入文件
lens2 = allspp.ancestor.lens    #4.1的输出文件
blast = sppA.ANC.blastp    #刚刚blast的比对结果
blast_reverse = false
multiple  = 1
process = 8
evalue = 1e-5
score = 100
grading = 50,40,25
mg = 40,40
pvalue = 0.2
repeat_number = 10
positon = order
savefile = sppA.ANC.collinearity   #输出文件


wgdi -icl 2.jud.ANC.collinearity.conf


#4.3 Blockinfo
vim 3.sppA.ANC.blockinfo.conf
#输入以下内容
[blockinfo]
gff1 = sppA.gff4      #最开始准备的输入文件
gff2 = allspp.ancestor.gff  #4.1的输出文件
lens1 = sppA.length2      #最开始准备的输入文件
lens2 = allspp.ancestor.lens    #4.1的输出文件
blast = sppA.ANC.blastp    #刚刚blast的比对结果
collinearity = sppA.ANC.collinearity   #4.2的输出结果
score = 100
evalue = 1e-5
repeat_number = 10
position = order
ks = none
ks_col = ks_NG86
savefile =  sppA.ANC.block.csv   #输出文件


wgdi -bi 3.sppA.ANC.blockinfo.conf


#4.4 Correspondence
vim 4.car.ANC.correspondence.conf
#输入以下内容
[correspondence]
blockinfo =  sppA.ANC.block.csv   #4.3的输出文件
lens1 = sppA.length2      #最开始准备的输入文件
lens2 = allspp.ancestor.lens    #4.1的输出文件
tandem = (true/false)
tandem_length = 200
pvalue = 0.2
block_length = 5
multiple  = 1
homo = 0,1
savefile = sppA.ANC.block.correspondence.csv    #输出文件


wgdi -c 4.jud.ANC.correspondence.conf


#4.5存疑, 询问得知这一步不是必需的, 如果只关注核型的演化, 这一步可以略过
#4.5 ancestral_karyotype_repertoire
vim 5.sppA.ANC.akr.conf
#输入以下内容
[ancestral_karyotype_repertoire]
blockinfo =  sppA.ANC.block.correspondence.csv  #4.4的输出文件
blockinfo_reverse = False
gff1 = sppA.gff4      #最开始准备的输入文件
gff2 = allspp.ancestor.gff  #4.1的输出文件
gap = 5
mark = ANC.on.car
ancestor = allspp.ancestor.txt     #4.1的输出文件
ancestor_new =  allspp.ancestor.on.sppA.txt   #sppA的核型结果
ancestor_pep =  allspp.ancestor.on.sppA.pep    #sppA的输出文件
ancestor_pep_new =  allspp.ancestor.on.sppA.pep_new    #sppA的输出文件
ancestor_gff =  allspp.ancestor.on.sppA.gff      #sppA的输出文件
ancestor_lens =  allspp.ancestor.on.sppA.lens     #sppA的输出文件


wgdi -akr 5.sppA.ANC.akr.conf


#4.6 因为是动物, 所以不需要运行Polyploid classification

#4.7 karyotype_mapping
vim 7.sppA.ANC.KaryMap.conf
#输入以下内容
[karyotype_mapping]
blast = sppA.ANC.blastp    #刚刚blast的比对结果
blast_reverse = false
gff1 = sppA.gff4      #最开始准备的输入文件
gff2 = allspp.ancestor.gff  #4.1的输出文件
score = 100
evalue = 1e-5
repeat_number = 5
#ancestor_left = ancestor location file (Only one of ('left', 'top') can be reserved)
ancestor_top = allspp.ancestor.on.sppA.txt  #4.6的输出文件
the_other_lens = sppA.length2   #最开始准备的输入文件
blockinfo = sppA.ANC.block.correspondence.csv  #4.4的输出文件
blockinfo_reverse = false
limit_length = 5
the_other_ancestor_file =  ANC.on.sppA.km.txt   #输出文件


wgdi -km 7.sppA.ANC.KaryMap.conf


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

推荐阅读更多精彩内容