歡迎來到"bio生物信息"的世界
今天給大家帶來“批量計算kaks值”的技能。
關於kaks的背景知識我就不介紹了,感興趣的自行搜索,這里直接開始講怎么批量計算kaks值。
1 文件准備
首先准備兩個文件,一個是基因的cds序列,一個是蛋白質序列。
cds序列和蛋白質可以在ensembl網站找到:http://ftp.ensembl.org/pub/current_fasta/
這兩個文件的示例如下:
cds序列文件cds.fa
>gene1
ATGGAGGTTGCAATGGTGAGTGCGGAGAGCTCAGGATGCAACAGTCACATGCCTTACGGT
TATGCTGCCCAGGCCCGGGCCCGGGAGCGGGAGAGGCTTGCTCACTCCAGGGCAGCTGCG
GCAGCTGCCGTTGCAGCGGCCACAGCTGCCGTCGAAGGAAGTGGGGGTTCTGGTGGGGGG>gene2
ATGGAGGTTGCAATGGTGAGTGCGGAGAGCTCAGGGTGCAACAGTCACATGCCTTATGGT
TATGCTGCCCAGGCCCGGGCCCGGGAGCGGGAGAGGCTTGCTCACTCCAGGGCAGCTGCA
GCAGCTGCTGTTGCAGCGGCCACAGCTGCTGTCGAAGGTAGCGGGGGTTCTGGTGGGGGC
TCCCAC>gene3
ATGGAGGTGGCGATGGTGAGTGCGGAGAGCTCAGGGTGCAACAGTCACATGCCTTACGGG
TACGCGGCCCAGGCCCGGGCCCGGGAGCGGGAGAGGCTGGCTCACTCCCGGGCGGCGGCG
GCCGCCGCCGTCGCGGCTGCCACGGCTGCCGTGGAAGGCAGTGGGGGGCCTGG
蛋白質序列pep.fa
>gene1
MEVAMVSAESSGCNSHMPYGYAAQARARERERLAHSRAAAAAAVAAATAAVEGSGGSGGG>gene2
MEVAMVSAESSRCNSHMPYGYAAQARARERERLAHSRAAAAAAVAAATAAVEGSGSSGGGSH>gene3
MEVAMVSAESSGCNSHMPYGYAAQARARERERLAHSRAAAAAAVAAAKAAVEGSGGP
注意:cds.fa
和pep.fa
文件的序列ID號(gene1,2,3)要一致。
2 對蛋白質序列pep.fa進行比對
進行蛋白質序列比對前,需要先安裝mafft
軟件。
下載mafft
軟件:
wget https://mafft.cbrc.jp/alignment/software/mafft-7.453-with-extensions-src.tgz
tar -zxvf mafft-7.453-with-extensions-src.tgz
cd mafft-7.453-with-extensions/core
安裝:
1)有root權限用戶安裝法:
make clean
make
su
make install
2)無root權限用戶安裝法:
vi Makefile
進入makefile文件后,修改第一行和第三行,如下所示兩張圖,分別為修改前和修改后(請務必修改你有權限的路徑):
安裝成功后,輸入命令mafft --auto pep.fa > alig_pep.fa
生成的alig_pep.fa文件如下:
3 將比對好的蛋白質序列與cds序列比對
這一步需要下載pal2nal.pl
文件
wget http://www.bork.embl.de/pal2nal/distribution/pal2nal.v14.tar.gz
tar -zxvf pal2nal.v14.tar.gz
cd pal2nal.v14/
下載后就能看見pal2nal.pl
這個文件
隨后將蛋白質序列與cds序列比對
pal2nal.pl alig_pep.fa cds.fa -output fasta > cds_pep_aln.fa
比對好的cds_pep_aln.fa
文件如下所示:
4 生成計算kaks值時的基因對
計算kaks值前需要先將cds_pep_aln.fa
文件拆分:
csplit cds_pep_aln.fa /\>/ -n2 -s {*} -f gene -b "%1d.fa" ; rm gene0.fa
拆分后,會生成gene1.fa
、gene2.fa
、 gene3.fa
三個文件。
接下來,將生成的gene1.fa
、 gene2.fa
、 gene3.fa
組成新的基因對gene1-gene2
、gene1-gene3
、gene2-gene3
,見如下命令:
for i in $(seq 1 3)
do
cat gene1.fa gene${i}.fa > gene1_${i}.fa
done
cat gene2.fa gene3.fa > gene2_3.fa
生成如下幾個文件:
gene1_1.fa
gene1_2.fa
gene1_3.fa
gene2_3.fa
其中,gene1_2.fa
、gene1_3.fa
、gene2_3.fa
為我們所需的基因對。
這里將他們提取成基因對,而不是多條序列進行計算的原因是,
KaKs_Calculator
這個軟件在處理多序列的輸入文件時,會報錯:Error. The size of two sequences in 'gene1&gene2' is not equal。我嘗試了很多遍,發現只能提取成基因對才不會報這種錯誤。當然,偶爾運氣好的時候,KaKs_Calculator
是能處理多序列的kaks值的,為了防止出錯,我們還是將他們拆開計算好一點。
5 將gene1_2.fa、gene1_3.fa、gene2_3.fa文件轉化為axt文件
轉化為axt
文件需要下載parseFastaIntoAXT.pl文件,文件地址:https://gitee.com/liaochenlanruo/kaks_pupline/blob/master/parseFastaIntoAXT.pl
下載后,輸入如下命令:
for i in *.fa
do
echo $i
perl parseFastaIntoAXT.pl $i
done
生成三個文件:
gene1_2.fa.axt
gene1_3.fa.axt
gene2_3.fa.axt
6 計算kaks值
下載安裝kakscalculator
下載鏈接:https://sourceforge.net/projects/kakscalculator2/
輸入以下命令:
for i in *.fa.axt
do
echo $i
KaKs_Calculator -i $i -o ${i%%.*}.kaks
done
生成三個文件:gene1_2.kaks
、gene1_3.kaks
、gene2_3.kaks
到這一步,批量計算kaks值的工作就已經搞定。
這里附上安裝
kaks_calculator
軟件可能會遇到報錯:
g++ -O -o AXTConvertor AXTConvertor.cpp -lstdc++ -lm
AXTConvertor.cpp: In function ?.ool readPhylip()?.
AXTConvertor.cpp:210:22: error: ?.toi?.was not declared in this scope
if (atoi(num.c_str())!=sequence.size()){AXTConvertor.cpp: In function ?.ool readNexus()?.
AXTConvertor.cpp:338:39: error: ?.toi?.was not declared in this scope
if (sequence.size()!=atoi(num.c_str())) >{
make: *** [AXTConvertor] Error 1
解決方法在這里:
編輯KaKs.cpp文件,加上
include "string.h"
編輯AXTConvertor.cpp文件,加上
include "stdlib.h"
編輯GY94.cpp文件,加上
include "string.h"
如無報錯請忽略上述內容。