MCscan踩坑记录
最近在帮忙做一个大文章,用到这个神奇的软件,做个踩坑记录。
软件是由大拿唐海宝老师写的。
ps: 见过唐老师本人,高高帅帅的,说话又好听,要被迷倒了(/ω\)
咳咳,言归正传。
参考教程:
https://github.com/tanghaibao/jcvi/wiki/MCscan-(Python-version)
以上两个链接,一个是官网wiki一个是我华华钟师姐的使用笔记,大家可以参考一下。
安装:
讲真,论有管理员权限的好处!
sudo apt install last-align
pip install jcvi
没有权限的旁友请自行通过wiki中的链接进行安装。记得把lastal
和lastdb
还有scip
加入你的环境变量啊~
还有就是jcvi是用python2写的,记得用python2.7去运行,包括pip也调用python2的pip。记得用which查看一下python和pip的路径。
因为我的环境默认是用python3,此时我就想到要不用conda来创建一个python2的环境好了,这样比较方便管理。回头一想,万一jcvi可以用conda一键安装呢。
于是就用https://bioconda.github.io/recipes
搜了一下conda的仓库,发现居然conda仓库里真的有jcvi!conda牛批!haibaotang牛批!
conda create -n jcvi jcvi
上面这条是说创建一个叫jcvi的软件并安装jcvi。
安装好软件并激活进入jcvi的环境之后就可以按照wiki的指示用示例物种文件试个水。
python -m jcvi.apps.fetch phytozome
jcvi可以直接从phytozome上下载物种的cds和gff3文件,可以说是很方便了。不过是用的v9.0版本的phytozome了。。有点古老。
phytozome v9.0示例里是下载的葡萄和梨,我下面就贴一下文件准备的每一步的流程,就不详细写了。
#下载葡萄和梨的cds&gff3
python -m jcvi.apps.fetch phytozome Vvinifera,Ppersica
#将gff压缩文件直接转换成bed格式(解不解压结果都一样。根据物种的不同,有的时候type可以选择gene)
python -m jcvi.formats.gff bed --type=mRNA --key=Name Vvinifera_145_gene.gff3.gz -o grape.bed
python -m jcvi.formats.gff bed --type=mRNA --key=Name Ppersica_139_gene.gff3.gz -o peach.bed
#将id行的描述信息删除。也可手动用vim进行替换。
python -m jcvi.formats.fasta format --sep="|" Vvinifera_145_cds.fa.gz grape.cds
python -m jcvi.formats.fasta format --sep="|" Ppersica_139_cds.fa.gz peach.cds
结果查看:
$ ls *.???
grape.cds peach.cds grape.bed peach.bed
ps: *
是代表匹配任意个数的任意字符,?
是代表匹配一个任意字符。
好了,经过这几步的准备,可以开始做Pairwise synteny search了。
$ python -m jcvi.compara.catalog ortholog grape peach
这一步,如果是用的pip安装很有可能会报错,虽然好像conda安装也会有点问题。
- 报错一:缺少numpy模块
一开始也很懵,咋就缺模块了呢。行叭,你说缺就缺,安装就完事儿了。
pip install numpy
- 报错二:缺少scipy模块
报错信息如下:
ImportError: No module named scipy.spatial
行叭,如法炮制。
- 报错三: 找不到叫kpsewhich的文件或者目录
[dviread] find_tex_file(phvr7t.vf): ['kpsewhich', u'phvr7t.vf']
No such file or directory called 'kpsewhich'
大概是这么一句话,已经找不到原来的报错信息了。我特意去查了这个找不到的kpsewhich
是个啥。用apt,不行,找不到这个包;用conda搜,不行,没有这个东西,用pip安装,也没有。。没办法走投无路只能去看mcsan的issue了。翻到issue39找到了想要的东西:这玩意。。好像是因为字体找不到才报错的。。?这什么鬼啊。。才注意到刚才那句报错信息的上面是:
12:15:02 [texmanager] serif font is not compatible with usetex.
12:15:02 [texmanager] serif font is not compatible with usetex.
12:15:02 [texmanager] family: serif, font: Computer Modern Roman, info: ('cmr', '')
12:15:02 [texmanager] family: sans-serif, font: Helvetica, info: ('phv', '\\usepackage{helvet}')
12:15:02 [texmanager] cursive font is not compatible with usetex.
12:15:02 [texmanager] cursive font is not compatible with usetex.
12:15:02 [texmanager] family: cursive, font: Zapf Chancery, info: ('pzc', '\\usepackage{chancery}')
12:15:02 [texmanager] monospace font is not compatible with usetex.
12:15:02 [texmanager] monospace font is not compatible with usetex.
12:15:02 [texmanager] family: monospace, font: Computer Modern Typewriter, info: ('cmtt', '')
大意是草书字体与usetex不兼容云云。。还有这种操作??
解决这个问题的办法是:
sudo apt-get install -y texlive texlive-latex-extra texlive-latex-recommended
没有管理员权限的参考下面的命令:
$ docker pull tanghaibao/jcvi
$ docker run -it --rm -v `pwd`:/w -w /w tanghaibao/jcvi python -m jcvi.graphics.dotplot Ath.Aly.anchors
至此所有的报错都解决了,后面就按照wiki操作就可以了。偷个懒就不写了。
这是我用的layout
# y, xstart, xend, rotation, color, label, va, bed
.4, .2, .9, 0, , waterlily, top, nym.bed
.2, .2, .9, 0, , shuilian, botton, nym.bed
# edges
e, 0, 1, nym.nym.anchors.simple
我发现haibaotang给的layout有点bug。如果xstart设置为.1
的话你设置的label只能显示半个。所以调成了.2
;这里的y值我的理解是纵向的位置,如果你把上下两个值填一样的(比如都是.4
)上下两条会重叠在一起;xend不能调比.9
大的值,否则会变得特别特别小,变成面条;
下面的edges不能瞎改,0和1的意思是把第一个和第二个连线,如果有三个物种一起做共线性的话,下面这行可以写成
# edges
e, 0, 1, file1.file2.anchors.simple
e, 1, 2, file2.file3.anchors.simple
原文:
Section # edges says that we should connect track 0 (grape) with 1 (peach), track 1 (peach) with 2 (cacao).
如果要强调颜色的话,编辑xx.xx.anchors.simple
这个文件,在需要强调的block前面添加上g*
或者r*
g=green r=red b=blue
……
我也不知道一共有多少种颜色可以用,反正可以搞得花花绿绿的特别高级
放一张半成品图
还挺好看的!
大概就是这样啦有问题的欢迎留言讨论