小马的生信笔记

1. 前言

接了一个基因组组装的项目,但是测序的时候是混样测得,导致组装的基因组把两个样品的基因组都组装出来了,只能用Purge_dups去冗余了。

2. 安装

				
					git clone https://github.com/dfguan/purge_dups.git
cd purge_dups/src
make
				
			

3. 运行

				
					 # 整个流程可以分为以下几个主要步骤:
   1. PacBio HiFi 测序数据回比对:将长读长(PacBio)测序数据比对回初步组装的基因组上,用于计算测序深度。
   2. 计算测序深度和覆盖度:使用 pbcstat 工具分析比对结果,生成覆盖度统计信息。
   3. 确定深度阈值:使用 calcuts 工具根据深度分布,自动计算用于区分正常序列、重复序列和垃圾序列的深度阈值。
   4. 基因组自身比对:将组装好的基因组序列自己和自己比对,以识别结构上相似的区域(即潜在的重复区)。
   5. 识别并筛选重复序列:结合深度阈值和自身比对结果,使用 purge_dups 主程序识别出哪些是冗余序列。
   6. 提取最终序列:根据上一步的识别结果,从原始组装文件中移除冗余序列,保留主序列,生成最终的纯净版基因组。

1. PacBio HiFi 数据回比对



   1 minimap2 -t 60 -x map-pb final_asm.bp.p_ctg.fa out.fasta.gz | gzip -c - > pb_aln.paf.gz



   * 命令: minimap2
   * 目的: 将 PacBio HiFi 测序数据(out.fasta.gz)比对到初步组装好的基因组(final_asm.bp.p_ctg.fa)上。这是为了后续计算每个contig(拼接序列)的测序深度。
   * 参数:
       * -t 60: 使用 60 个线程进行计算,以加快速度。
       * -x map-pb: 使用 minimap2 预设的参数集,专门用于将 PacBio 测序数据比对到参考基因组。
   * 输入文件:
       * final_asm.bp.p_ctg.fa: 参考序列,即初步组装好的基因组文件。
       * out.fasta.gz: 查询序列,即 PacBio HiFi 测序的 reads 文件(FASTQ 或 FASTA 格式,此处为 .gz 压缩格式)。
   * 输出文件:
       * pb_aln.paf.gz: 比对结果文件,格式为 PAF (Pairwise mApping Format)。通过管道(|)和 gzip 命令进行压缩,节省存储空间。

  2. 计算覆盖度统计



   1 ~/Software/purge_dups/bin/pbcstat pb_aln.paf.gz



   * 命令: pbcstat
   * 目的: 分析上一步生成的 PAF 比对文件,计算基因组中每个位置的测序深度和覆盖度统计信息。
   * 输入文件:
       * pb_aln.paf.gz: minimap2 生成的比对文件。
   * 输出文件:
       * PB.stat: 默认输出文件,包含了每个 contig 的覆盖度统计信息。
       * PB.base.cov: 默认输出文件,包含了基因组每个碱基的覆盖深度。

  3. 计算深度阈值



   1 ~/Software/purge_dups/bin/calcuts PB.stat > cutoffs 2> calcults.log



   * 命令: calcuts
   * 目的: 基于 pbcstat
     生成的统计文件,自动计算和设定测序深度的分界点(cutoffs)。它会根据深度分布图,估算出正常单倍型序列的平均深度,并以此为依据设定一个上限和下限,用于区分正常序列和重复序列(通常深度更高)。
   * 输入文件:
       * PB.stat: pbcstat 生成的统计文件。
   * 输出文件:
       * cutoffs: 包含了计算出的深度阈值。这个文件会被后续的 purge_dups 命令使用。
       * calcults.log: 记录 calcuts 运行过程中的日志信息(通过 2> 重定向标准错误流)。

  4. 基因组自身比对



   1 ~/Software/purge_dups/bin/split_fa final_asm.bp.p_ctg.fa > asm.split
   2 minimap2 -t 60 -xasm5 -DP asm.split asm.split | pigz -c > asm.split.self.paf.gz



   * 第一部分: split_fa
       * 目的: 将原始的基因组 FASTA 文件进行切分或格式化,使其适合后续的自身比对。
       * 输入: final_asm.bp.p_ctg.fa
       * 输出: asm.split (格式化后的 FASTA 文件)
   * 第二部分: minimap2
       * 目的: 将基因组与自身进行比对,以找出所有相似度高的区域。这些区域是潜在的重复序列或单倍型序列。
       * 参数:
           * -t 60: 使用 60 个线程。
           * -x asm5: 使用预设参数集,适用于高质量基因组(错误率 <5%)之间的比对。
           * -DP: -D 标记主链(primary chain),-P 保留次要链(secondary chains),有助于识别所有可能的重叠。
       * 输入文件:
           * asm.split: 两次作为输入,表示将这个文件与它自身进行比对。
       * 输出文件:
           * asm.split.self.paf.gz: 自身比对的结果,以 PAF 格式存储,并用 pigz(一个并行的 gzip 工具)进行压缩。


  5. 识别冗余序列



   1 ~/Software/purge_dups/bin/purge_dups -2 -T cutoffs -c PB.base.cov asm.split.self.paf.gz > dups.bed 2> purge_dups.log



   * 命令: purge_dups
   * 目的: 这是核心步骤。它整合了测序深度信息和自身比对结果,来最终判断哪些序列是冗余的。
   * 参数:
       * -2: 表示使用 purge_dups 的第二版算法(通常是默认或推荐的)。
       * -T cutoffs: 指定包含深度阈值的文件,即 calcuts 命令生成的 cutoffs 文件。
       * -c PB.base.cov: 指定每个碱基的覆盖度文件,即 pbcstat 生成的 PB.base.cov 文件。
   * 输入文件:
       * asm.split.self.paf.gz: 基因组自身比对的结果。
       * cutoffs: 深度阈值文件。
       * PB.base.cov: 碱基覆盖度文件。
   * 输出文件:
       * dups.bed: 一个 BED 格式的文件,列出了所有被识别为冗余(duplication)的序列的坐标。
       * purge_dups.log: 记录 purge_dups 运行过程的日志。

  6. 提取最终的非冗余序列


   * 命令: purge_dups
   * 目的: 这是核心步骤。它整合了测序深度信息和自身比对结果,来最终判断哪些序列是冗余的。
   * 参数:

   1 ~/Software/purge_dups/bin/get_seqs dups.bed final_asm.bp.p_ctg.fa



   * 命令: get_seqs
   * 目的: 根据 purge_dups 生成的 dups.bed 文件,从原始的组装基因组中移除这些被标记为冗余的序列,并输出一个纯净版的基因组。
   * 输入文件:
       * dups.bed: 包含冗余序列坐标的 BED 文件。
       * final_asm.bp.p_ctg.fa: 原始的、未经过滤的组装基因组。
   * 输出文件:
       * 默认情况下,它会生成两个文件:
           * purged.fa: 最终的、去除了冗余序列的基因组文件。这是整个流程最重要的产出文件。
           * hap.fa: 被识别为冗余或单倍型(haplotigs)的序列文件。
				
			

《Purge_dups 基因组中冗余的序列》有1条评论

  1. git clone https://github.com/dfguan/purge_dups.git
    cd purge_dups/src
    make 请问在安装的时候会出现warning信息,直接忽略不计吗?卡在这个步骤好几天了,运行命令行:$purge_dups/pbcstat “${BAM_DIR}/HY25_${hap}_sorted.bam” 2>> “${pbcstat_log}/${hap}.pbcstat.log”,显示报错信息:/var/spool/slurm/d/job9152396/slurm_script: line 49: 59113 Aborted (core dumped) $purge_dups/pbcstat “${BAM_DIR}/HY25_${hap}_sorted.bam” 2>> “${pbcstat_log}/${hap}.pbcstat.log”
    /var/spool/slurm/d/job9152396/slurm_script: line 49: 229856 Segmentation fault (core dumped) $purge_dups/purge_dups -2 -T “${BAM_DIR}/HY25_${hap}.cutoffs” -c “${BAM_DIR}/HY25_${hap}.PB.stat” “${self_align}/HY25_${hap}.split.self.paf.gz” > “${dups_bed}/HY25_${hap}.dups.bed” 2>> “${dups_bed}/${hap}.purge_dups.log”
    ,应该怎么解决呢?

    回复

发表评论

基因组专栏