使用ALLHiC基于HiC數據輔助基因組組裝
基因組組裝大致可以分為三步(1)根據序列之間的重疊情況構建出contig,(2)基于二代的mate pair文庫或光學圖譜將contig搭建成scaffold,(3)對scaffold進行排序和調整方向得到最終的準染色體級別的基因組。
目前的三代測序組裝能夠搞定第一步和第二步。而在將contig/scaffold提升至準染色體水平上,有4種方案可選。一種是基于遺傳圖譜,一種是利用BioNano DLS光學圖譜,一種是利用近緣物種的染色體同源性,還有一種就是HiC。其中HiC技術是三者中較為簡單的一個,不需要高質量的DNA文庫,也不需要一個很大的群體,結果也比較準確可信。
HiC的文庫構建示意圖如下,我們所需要的就是最終雙端測序的兩端序列之間的距離關系。
目前利用HiC數據進行組裝軟件有 LACHESIS, HiRise, SALSA1, 3D-DNA等,這些軟件在動物基因組上和簡單植物基因組上表現都不錯,但是不太適合直接用于多倍體物種和高雜合物種的組裝上。主要原因就是等位基因序列的相似性,使得不同套染色體之間的contig出現了假信號,最終錯誤地將不同套染色體的contig連在了一起。最近在Nature Plants發表的ALLHiC流程就是用來解決多倍體物種和高雜合度基因組的HiC組裝難題。
ALLHiC流程一覽
ALLHiC一共分為五步(見下圖,Zhang et al., 2019),pruning, partition, rescue, optimization, building,要求的輸入文件為HiC數據比對后的BAM和一個Allele.ctg.table。
其中pruning步驟是ALLHiC區別于其他軟件的關鍵一步。因此我專門將其挑選出來進行介紹,紅色實線是潛在的坍縮區域(組裝時因為序列高度相似而沒有拆分),而其他顏色實線則是不同的單倍型(我用淺灰色橢圓進行區分)。粉紅色虛線指的是等位基因間的HiC信號,而黑色虛線則是坍縮區域和未坍縮區域的HiC信號。
ALLHiC在這一步會根據提供的Allele.ctg.table過濾BAM文件中等位基因間的HiC信號,同時篩選出坍縮區域和未坍縮區域的HiC信號。這些信號會用于Rescue步驟,將未錨定contig分配到已分組的contigs群。
軟件安裝
ALLHiC的安裝非常簡單,按照習慣,我將軟件安裝在~/opt/biosoft
下
mkdir -p ~/opt/biosoft && cd ~/opt/biosoft
git clone https://github.com/tangerzhang/ALLHiC
cd ALLHiC
mv allhic.v0.9.8 bin/allhic
chmod +x bin/*
chmod +x scripts/*
# 添加到環境變量
PATH=$HOME/opt/biosoft/ALLHiC/scripts/:$HOME/opt/biosoft/ALLHiC/bin/:$PATH
export PATH
此外ALLHiC還依賴于samtools(v1.9), bedtools 和 Python 3環境的matplotlib(v2.0+),這些可以通過conda一步搞定。
conda create -y -n allhic python=3.7 samtools bedtools matplotlib
之后檢查下是否成功安裝
$ conda activate allhic
$ allhic -v
$ ALLHiC_prune
你可能會遇到如下的報錯
ALLHiC_prune: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ALLHiC_prune)
這是GLIBC過低導致,但是不要嘗試動手去升級GLIBC(你承擔不起后果的),conda提供了一個比較新的動態庫,因此可以通過如下方法來解決問題
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/opt/miniconda3/lib
ALLHiC分析實戰
感謝張興坦老師提供的測試數據,我將其中的BAM轉成了原始FastQ格式,以便從頭講解。數據在百度網盤,可以在我的博客 對應的位置找到鏈接。
輸入文件需要有4個,contig序列,等位contig信息和兩個雙端測序數據
$ ls -1
Allele.ctg.table
draft.asm.fasta
reads_R1.fastq.gz
reads_R2.fastq.gz
第一步: 建立索引
samtools faidx draft.asm.fasta
bwa index -a bwtsw draft.asm.fasta
第二步: 序列回貼。這一步的限速步驟是bwa sampe
,因為它沒有多線程參數。如果數據量很大,可以先將原始的fastq數據進行拆分,分別比對后分別執行bwa sampe
,最后合并成單個文件。
bwa aln -t 24 draft.asm.fasta reads_R1.fastq.gz > reads_R1.sai
bwa aln -t 24 draft.asm.fasta reads_R2.fastq.gz > reads_R2.sai
bwa sampe draft.asm.fasta reads_R1.sai reads_R2.sai reads_R1.fastq.gz reads_R2.fastq.gz > sample.bwa_aln.sam
第三步: SAM預處理,移除冗余和低質量信號,提高處理效率
PreprocessSAMs.pl sample.bwa_aln.sam draft.asm.fasta MBOI
# 如果已有BAM文件
# PreprocessSAMs.pl sample.bwa_aln.bam draft.asm.fasta MBOI
filterBAM_forHiC.pl sample.bwa_aln.REduced.paired_only.bam sample.clean.sam
samtools view -bt draft.asm.fasta.fai sample.clean.sam > sample.clean.bam
其中filterBAM_forHiC.pl
的過濾標準是比對質量高于30(MQ), 只保留唯一比對(XT:A:U), 編輯距離(NM)低于5, 錯誤匹配低于(XM)4, 不能有超過2個的gap(XO,XG)
第四步(可選): 對于多倍體或者是高雜合的基因組,因為等位基因的序列相似性高,那么很有可能會在不同套基因組間出現假信號,因此需要構建Allele.ctg.table, 用于過濾這種假信號。
ALLHiC_prune -i Allele.ctg.table -b sample.clean.bam -r draft.asm.fasta
這一步生成prunning.bam
用于后續分析
第五步: 這一步是根據HiC信號將不同的contig進行分組,分組數目由-k
控制。如果跳過了第四步,那么可以直接用第三步的結果sample.clean.bam
ALLHiC_partition -b prunning.bam -r draft.asm.fasta -e AAGCTT -k 16
這一步會生成一系列以prunning
開頭的文件
- 分組信息: prunning.clusters.txt
- 每個分組對應的contig: prunning.counts_AAGCTT.XXgYY.txt:
- 每個contig長度和count數: prunning.counts_AAGCTT.txt
第六步: 將未錨定的contig分配已有的分組中。
ALLHiC_rescue -b sample.clean.bam -r draft.asm.fasta \
-c prunning.clusters.txt \
-i prunning.counts_AAGCTT.txt
這一步根據之前prunning.counts_AAGCTT.XXgYY.txt對應的groupYY.txt
第七步: 優化每一組中的contig的排序和方向
# 生成.clm文件
allhic extract sample.clean.bam draft.asm.fasta --RE AAGCTT
# 優化
for i in group*.txt; do
allhic optimize $i sample.clean.clm
done
這一步會基于groupYY.txt生成對應的groupYY.tour
第八步: 將tour格式轉成fasta格式,并生成對應的agp。
ALLHiC_build draft.asm.fasta
這一步生成兩個文件,groups.asm.fasta和groups.agp。其中groups.asm.fasta就是我們需要的結果。
第九步: 構建染色質交互矩陣,根據熱圖評估結果
samtools faidx groups.asm.fasta
cut -f 1,2 groups.asm.fasta.fai > chrn.list
ALLHiC_plot sample.clean.bam groups.agp chrn.list 500k pdf
使用ALLHiC的幾個注意事項:
- ALLHiC依賴于初始的contig,如果嵌合序列和坍縮序列比例過高,那么ALLHiC結果也會不準確。根據文章,ALLHiC能夠處理
~10%
的嵌合比例,~20%
的坍縮比例。因此最好是用類似于Canu這種能夠區分單倍型的組裝軟件。 - 單倍型之間序列相似度不能太高,否則會出現大量非唯一比對,降低可用的HiC信號
- 構建Allele.ctg.table需要一個比較近緣的高質量基因組
- 不要用過短的contig,因為短的contig信號少,很容易放到錯誤的區域
- K值的設置要根據實際的基因組數目設置,如果你發現輸出結果中某些group過大,可以適當增大k值
參考資料
- https://github.com/tanghaibao/allhic
- https://github.com/tangerzhang/ALLHiC/wiki
- Zhang, X., Zhang, S., Zhao, Q., Ming, R., and Tang, H. (2019). Assembly of allele-aware, chromosomal-scale autopolyploid genomes based on Hi-C data. Nat. Plants 5, 833–845.
- Zhang, J., Zhang, X., Tang, H., Zhang, Q., Hua, X., Ma, X., Zhu, F., Jones, T., Zhu, X., Bowers, J., et al. (2018). Allele-defined genome of the autopolyploid sugarcane Saccharum spontaneum L. Nature Genetics 50, 1565.
版權聲明:本博客所有文章除特別聲明外,均采用 知識共享署名-非商業性使用-禁止演繹 4.0 國際許可協議 (CC BY-NC-ND 4.0) 進行許可。