美文网首页基因组组装基因组
De novo组装#07 | 染色体挂载 (allhic,3d-

De novo组装#07 | 染色体挂载 (allhic,3d-

作者: WIIT | 来源:发表于2023-09-13 18:00 被阅读0次

    写在前面

    初始组装经过基因组纠错(polish)以及去冗余(purge)之后,就可以将其挂载到染色体上,使其由contig/scaffold级别的基因组提升到chromosome级别的基因组。染色体挂载的方法有多种,我这里主要介绍基于HiC测序数据进行染色体挂载,用到了2套软件:allhic和3d-dna pipeline。

    数据准备

    • HiC双端二代测序数据:R1,R2
    • 用于挂载的contig/scaffold级别基因组

    allhic + juicebox

    allhic为了组装多倍体甘蔗而开发的软件,适用于多倍体,基因组复杂,组装指标一般,序列条数较多的情况基因组,操作相对简单,把所有contig自动分组挂载到预设的30条染色体上。但挂载本身这个步骤相对其他步骤感觉还是要复杂一些,另外一般还需要用 juicebox手动调整一下自动挂载中的一些错误。
    1.软件安装
    allhic主页:https://github.com/tangerzhang/ALLHiC
    Windows/Mac版juicebox下载地址:https://github.com/aidenlab/Juicebox/wiki/Download

    ## allhic安装
    git clone https://github.com/tangerzhang/ALLHiC
    cd ALLHiC
    chmod +x bin/*
    chmod +x scripts/*
    export PATH=/your/path/to/ALLHiC/scripts/:/your/path/to/ALLHiC/bin/:$PATH  ## 临时将这两个文件夹的脚本或程序添加环境变量
    

    此外这软件还依赖其他软件:samtools v1.9+,bedtools,matplotlib v2.0+, 还有一些juicebox_scripts脚本用于格式转换

    ## samtools和bedtools用的比较多,应该都装了,这里装下matlock
    ## 自动安装
    conda install -c bioconda matlock
    
    ## 手动安装
    git clone --recursive https://github.com/phasegenomics/matlock.git
    cd matlock
    make
    
    ## juicebox_scripts下载即可使用,我们这里后续手动用juicebox调整时,会用到里面的agp2assembly.py脚本进行格式转换
    git clone https://github.com/phasegenomics/juicebox_scripts.git
    

    2.运行使用
    allhic如果用于挂载多倍体基因组一般分为五步:pruning, partition, rescue, optimization, building。我这边用来挂二倍体基因组pruning和rescue步骤可不进行。

    此外,allhic还有一个可选步骤:基于 hic 数据的比对情况,对基因组中潜在的组装错误进行打断,但该操作会明显降低基因组的连续性,可以先不做这步骤。如果最好挂载结果看到contig内部由有明显的hic信号错误,可以再来执行这一步骤。

    0# 基因组打断(可选步骤

    ## 把基因组和hic测序数据链接过来
    ln -s  /....../....../polished.purged.fasta     seq.fasta
    ln -s  /....../....../clean.HiC_R1.fastq.gz  HiC_R1.fastq.gz
    ln -s  /....../....../clean.HiC_R2.fastq.gz  HiC_R2.fastq.gz
    
    ### 建立基因组index 
    bwa index seq.fasta
    samtools faidx seq.fasta
    
    ### bwa将二代的hic数据比对到基因组上
    bwa mem -SP5M -t 24 seq.fasta  HiC_R1.fastq.gz  HiC_R2.fastq.gz \
    | samtools view -hF 256 - \
    | samtools sort -@ 24 -o sorted.bam -T tmp.ali
    samtools index sorted.bam
    
    ### 对contig的潜在组装错误进行打断
    ALLHiC_corrector \
    -m sorted.bam \
    -r seq.fasta \
    -o corrected.fasta \  ## 拿到一个打断纠错过的fasta
    -t 24
    

    如果不进行打断可从这步开始进行染色体挂载步骤,我是没有打算就直接开始的

    1# index reference genome:建立基因组index

    ## 首先设置allhic的全局变量,重连服务器或者后台脚本运行需要重新运行一下这个
    export PATH=/newlustre/home/jfgui/Wangtao/software/ALLHiC/scripts/:/newlustre/home/jfgui/Wangtao/software/ALLHiC/bin:$PATH
    # 建立索引
    ln -s ../../PacBio/polish/flye_polish/pilon.out/pilon3.out/racon3.pilon3.fasta  assembly.fasta  ## 还是把基因组链接过来
    /newlustre/home/jfgui/Wangtao/software/bwa/bwa index assembly.fasta  ## 建立基因组bwa比对的index
    samtools faidx assembly.fasta  ## 建立基因组序列提取的index,fai后缀
    

    2# mapping:将二代的hic数据用bwa比对到基因组,并对并对文件过滤并排序

    /newlustre/home/jfgui/Wangtao/software/bwa/bwa mem \  ## bwa mem比对
             -SP5M -t 24 assembly.fasta  ../Liver.clean.R1.fq.gz  ../Liver.clean.R2.fq.gz  \
         | samtools view -hF 256 - \  ## 对比对文件bam过滤掉次比对数据
         | samtools sort -@ 24 -o sorted.bam  ## 对比对文件bam进行排序
    

    3# filter bam:基于比对质量对bam文件进行过滤

    samtools view -b  -q 40 sorted.bam \   ## 过滤阈值为40
        | samtools view -b  -t assembly.fasta.fai > unique.bam  ## -t 用上一步的fai索引文件生成header文件防止报错。
    PreprocessSAMs.pl unique.bam assembly.fasta MboI  ## 还是一个过滤过程,即对上一步bam再进行处理,保留酶切位点MboI 附近的比对数据。最后生成的bam文件:unique.REduced.paired_only.bam
    

    4# partition:基于处理过后的bam文件,根据Hi-C建议的链接对链接的contigs进行聚类分组

    ALLHiC_partition \
        -r assembly.fasta \  ## reference genome
        -e GATC \ # 酶切类型MboI
        -k 30 \  ## 分组数,即染色体个数
        -b unique.REduced.paired_only.bam  ## 输入的bam文件,即上面几步处理过的
    

    5# optimize:对组内的contigs进行定性排序

    ## for循环生成30个allhic optimize命令文件放在cmd.list里
    rm cmd.list
    for((K=1;K<=30;K++));do echo "allhic optimize unique.REduced.paired_only.counts_GATC.30g${K}.txt unique.REduced.paired_only.clm" >> cmd.list;done
    ## 用ParaFly对cmd.list里的30个命令进行并行运算,用conda安装ParaFly就行: conda install -c bioconda parafly
    ParaFly -c cmd.list -CPU 24
    

    6# build:最后连接contigs生成染色体级别的assembly(groups.asm.fasta )

    ALLHiC_build assembly.fasta 
    

    7# polt:画hic热图

    samtools faidx groups.asm.fasta   ## 对最终的fasta建立序列读取index,groups.asm.fasta.fai
    cut -f1,2 groups.asm.fasta.fai > chrn.list   ## 读取 groups.asm.fasta.fai里的第1/2列
    ALLHiC_plot -b sorted.bam -a groups.agp -l chrn.list -s 50k -o heatmap-pdf  ## 绘图
    

    8# juicebox手动重新调整
    因为第7步自动生成的hic热图很少能画得很完美,肯定多少会有点信号错误,这时需要手动调整,再导出图hic热图,这里用 juicebox。juicebox直接在windows系统里操作,需要两个输入文件:groups.assemblygroups.hic

    以下步骤用于生成这两个juicebox的输入文件:

    ## 基于read name 重新对bam排序
    samtools sort -n -@ 24 -o aligned.sort_name.bam ../sorted.bam
    ## 用matlock将bam转换成merged_nodups.txt文件,即juicer软件产生的一种文件
    matlock bam2  juicer aligned.sort_name.bam merged_nodups.txt
    ## 用agp2assembly.py脚本将agp 格式转为3d-dna的assembly 格式,即groups.assembly
    /newlustre/home/jfgui/Wangtao/software/juicebox_scripts/juicebox_scripts/agp2assembly.py ../groups.agp  groups.assembly
    ## 基于前两步生成的merged_nodups.txt和groups.assembly,生成用于juicebox输入的二进制hic文件,即groups.hic
    bash  /newlustre/home/jfgui/Wangtao/software/3d-dna/visualize/run-assembly-visualizer.sh -q 1 -p true groups.assembly merged_nodups.txt
    

    用window版的juicebox输入groups.assemblygroups.hic,手动调整信号不对的地方,以下是我的简单调整过后的:

    hic热图-简单调整即可划分出明显的30条染色体
    该结果简单调整了下没有细调,也不准备调了,因为发现contig内部出现了明显的信号错误,这是刚开始用的基因组组装得就有问题,然后我又没有进行基因组打断步骤,所有后面准备用3d-dna执行打断这一步骤。
    红色箭头的contig内部可以发现信号有问题(绿色框为contig,蓝色框为染色体)

    juicer+ 3d-dna + juicebox

    用3d-dna挂载这一套流程个人感觉与allhic差不多,可能还简单一点。大致就是把对hic数据的比对以及处理用另一个软件juicer来代替了, 3d-dna只用来挂载。最后也是用 juicebox手动再调整一下。


    3d-dna挂载流程图

    1.软件安装
    juicer主页:https://github.com/aidenlab/juicer/
    3d-dna主页:https://github.com/aidenlab/3d-dna
    Windows/Mac版juicebox下载地址:https://github.com/aidenlab/Juicebox/wiki/Download

    ## juicer安装
    git clone https://github.com/theaidenlab/juicer.git
    
    ## 后续要用这个软件需要将CPU目录下的程序拷到运行juicer的目录,<myJuicerDir> 为想要运行juicer的目录
    ## 这个步骤后面再用的时候也还会再讲
    cp juicer/CPU/*  <myJuicerDir>/scripts
    cd scripts/common
    wget https://github.com/aidenlab/Juicebox/releases/download/v2.20.00/juicer_tools.2.20.00.jar 
    ln -s juicer_tools.2.20.00.jar juicer_tools.jar
    
    ## 3d-dna安装
    git clone https://github.com/aidenlab/3d-dna.git
    3d-dna/run-asm-pipeline.sh –h
    

    2.使用运行
    如上面的流程图主要分三大步:juicer分析hic数据,3d-dna挂载染色体,juicebox手动调整&重新生成final文件。

    • juicer分析hic数据
    1# 构建基因组index,以及基因组内各contig长度文件
    ln -s ../../../PacBio/polish/flye_polish/pilon.out/pilon3.out/racon3.pilon3.fasta  genome.fa  # 将polish  过的基因组链接过来
    /newlustre/home/jfgui/Wangtao/software/bwa/bwa index genome.fa  # 建立基因组index
    seqkit fx2tab -l -n -i genome.fa > chr.size  #  使用seqkit fx2tab -l -n -i 统计各contig的长度
    
    2# 准备基因组内可能的酶切位点文件,用到的脚本为:juicer/misc/generate_site_positions.py
    /newlustre/home/jfgui/Wangtao/software/juicer/misc/generate_site_positions.py MboI genome genome.fa # 后接酶的类型,输出前缀,以及基因组文件
    
    3# 准备juicer script目录,上面安装的时候提到了,后面运行juicer就是调用这里面的程序。
    mkdir scripts
    cp -r /newlustre/home/jfgui/Wangtao/software/juicer/CPU/*  ./scripts
    cd scripts/common/
    wget https://github.com/aidenlab/Juicebox/releases/download/v2.20.00/juicer_tools.2.20.00.jar  #注意这一步要手动运行,后台运行可能由于网络问题而下载不了
    ln -s juicer_tools.2.20.00.jar  juicer_tools.jar
    cd ../../
    
    4# 准备HiC数据文件目录
    mkdir fastq
    cd fastq
    ln -s /newlustre/home/jfgui/Wangtao/XX_assembly/HiC/Liver.clean.R1.fq.gz    HiC_R1.fastq.gz
    ln -s /newlustre/home/jfgui/Wangtao/XX_assembly/HiC/Liver.clean.R2.fq.gz    HiC_R2.fastq.gz
    cd ..
    
    5#上面所有的文件都准备好了之后,开始用运行juicer。
    export PATH=/newlustre/home/jfgui/Wangtao/software/bwa: \ # juicer会调用bwa对hic测序reads进行比对,这里添加bwa的全局环境变量
    /newlustre/home/jfgui/Wangtao/XX_assembly/HiC/3d-dna/juicer1/scripts: \
    /newlustre/home/jfgui/Wangtao/XX_assembly/HiC/3d-dna/juicer1/scripts/common:$PATH
    # 运行juicer
    bash ./scripts/juicer.sh \
        -y genome_MboI.txt \  # 酶切位点文件
        -z genome.fa \  # 基因组文件
        -s MboI \   # hic测序酶的类型
        -p chr.size \  # contig长度信息文件
        -D ./  \  #  scripts 和 fastq文件所在目录
        -t 24 \  # 线程数
        --assembly \  # 不是很理解,可能就是生成merged_nodups.txt文件,帮助文档里为: For use before 3D-DNA;  early exit and create old style merged_nodups
        &> juicer.log  # 运行时间长就还是加一个日志信息,之前因为bwa不在全局变量里导致没出结果,后面看日志文件才发现了问题。
    

    最后会在aligned目录下生成merged_nodups.txt,用于后续3d-dna的输入。

    • 3d-dna挂载染色体
    ## 同样地,先把基因组链接过来
    ln -s ../../../PacBio/polish/flye_polish/pilon.out/pilon3.out/racon3.pilon3.fasta  genome.fa
    ## 由于本人运行3d-dna时报错,提示存储临时文件的空间不够了,可能服务器用的人当时比较多,系统默认的存储临时文件目录满了,这里的命令把临时文夹放到当前目录。
    export TMPDIR=/newlustre/home/jfgui/Wangtao/XX_assembly/HiC/3d-dna/3d-dna/
    ## 运行3d-dna挂载程序
    /newlustre/home/jfgui/Wangtao/software/3d-dna/run-asm-pipeline.sh \   # 用3d-dna目录的run-asm-pipeline.sh脚本
         -r 2 \  # 纠错次数,0表示不纠错,默认为2。对组装结果自信先用-r 0 试一下。
         ./genome.fa  \  # 基因组文件
         ../juicer/aligned/merged_nodups.txt  \   # juicer运行结果文件
         &> 3d-dna.log  #追加日志信息
    

    输出的文件较多,其中genome.final.assemblygenome.final.hic 这两个final文件用于juicebox 输入。而genome.FINAL.fasta 为3d-dna 的自动挂载的基因组序列文件,这个文件后续在用juicebox手动调整后可以重新生成覆盖。

    • juicebox手动调整&重新生成final文件

    1# juicebox手动调整
    genome.final.assemblygenome.final.hic下载到本地,输入到juicebox进行手动简单调整了下,大致结果如下

    3d-dna自动挂载后的结果,这里没加contig和scaffold边框线
    图上没加contig和scaffold边框线,但我自己仔细看了下contig内部确实没有什么冲突的地方,因为我在运行3d-dna的时候设置了-r 2参数进行了2轮纠错打断,所以把第一种策略allhic发现冲突的那个contig给修正回来了,代价是基因组更碎了更不连续😂。
    3d-dna自动挂载后的结果,这里没加contig和scaffold边框线
    此外,我们在右下角看到特别多没有挂载到染色体上的一些contig或者说scaffold,其出现这么多进行2轮基因组纠错打断是一个原因,更多的是因为用来的挂载的这个基因组../../../PacBio/polish/flye_polish/pilon.out/pilon3.out/racon3.pilon3.fasta是没有用purge_dups软件去过冗余的版本,这些序列大部分应该都是一些重复冗余序列。因此在进行染色体挂载之前还是先进行基因组去冗余操作。

    2# 重新生成final文件
    juicebox 手动调整后,重新生成assemby文件review.assembly ,上传到服务器使用run-asm-pipeline-post-review.sh程序生成最终的 fasta 文件和hic 文件。注意,最终的genome.FINAL.fasta文件是按大到小排序过,且用500N填充过gap的fasta文件。

    /newlustre/home/jfgui/Wangtao/software/3d-dna/run-asm-pipeline-post-review.sh \  
         -i  # 去掉15k以下的scaffold
         --build-gapped-map \  # 建一个互作图?这个map是用500个N填充完gap的
         --sort-output \  # 按大小降序排列挂载好的染色体级别的scaffold
         -r review.assembly \ # juicebox输出的assembly文件
         ../../data/genome.fa  merged_nodups.txt  # 后面接原始的基因组文件以及jucer输出的merged_nodups.txt文件
    

    3.查看结果
    用assembly-stats软件查看了下最终的挂载结果:

    其他相关推荐

    使用ALLHiC基于HiC数据辅助基因组组装 - 简书 (jianshu.com)
    基于3D-DNA,ALLHiC挂载二倍体基因组 - 简书 (jianshu.com)
    利用3D-DNA挂载基因组 - 简书 (jianshu.com)
    3d-DNA的使用及juicebox调整挂载到染色体水平 | HiC辅助基因组组装(二) | 生信技术 (lxz9.com)

    相关文章

      网友评论

        本文标题:De novo组装#07 | 染色体挂载 (allhic,3d-

        本文链接:https://www.haomeiwen.com/subject/luapmdtx.html