Open WangZhSi opened 4 months ago
感谢你的教程,博客一直没有更新的原因是实在太忙了。另外有些问题比起花功夫写博客解释原因和推荐参数,我现在可能更倾向于直接通过修改代码解决这些问题。
软件默认基于 python 10, 所以对 gcc 版本以及 glib 库版本有一定要求,较老的集群应该无法安装
我主要使用的服务器是2014年发布的CentOS7,搭配2015年发布的GCC 4.8.5,2012年发布的glibc 2.17,没有遇到过问题。相信绝大部分集群应该满足这些要求,只需要使用conda安装环境即可使用Python 3.10。此外,虽然没有提供相应的yml文件,但HapHiC最开始是在Python 3.8下开发的,所以可以兼容低版本的Python。对于更高版本的Python 3.11和3.12,HapHiC也做了支持。
bwa mem使用-5SP这个参数,是因为Hi-C reads属于long range data,比对的时候其假设和短片段的PE reads有所不同,可以参考一下Phase Genomics对这个参数的推荐和描述:
“We use bwa mem to align Hi-C data, with the -5, -S, and -P options. These options aren’t documented that well in the online bwa documentation, but they are documented in the usage of bwa mem. -5 is sometimes called “the Hi-C option” as it was designed to help the aligner handle the statistical properties of Hi-C libraries better, mainly by reducing the amount of secondary and alternate mappings the aligner makes as those cause Hi-C data to become ambiguous. The -S and -P options cause the aligner not to try to use assumptions about the reads that might be true for shotgun or mate pair libraries in an effort to rescue more reads. In fact, using these options to avoid those rescue efforts usually results in more of the Hi-C data having a useful alignment!”
对于简单二倍体植物基因组,HapHiC 相比我使用的 yahs 没有明显优势
HapHiC和YaHS相比,前者更容易获得染色体水平的scaffolds,挂载率通常较高,并且可以控制。后者的优势是无需知道染色体数,以及在染色体长度差异较大时更加稳健。HapHiC近期在contig排序上也做了一些改进,如果之前遇到过类似问题可以更新。
对于多倍体基因组或包含冗余的复杂基因组,软件的效果又没有达到我的预期
多倍体基因组的主要难点是组装质量差(chimeric、collapsed contigs、switch errors)。HapHiC引入了一些创新的算法,比如rank-sum同时识别chimeric和collapsed contigs,以及利用Hi-C信号的特征识别等位contig。这些方法在一定程度上能解决多倍体基因组中遇到的问题。但是如果错误太多,可能需要调参(比如:chimeric contigs很多的同源四倍体甘蔗Np-X,需要用--correct_nrounds纠错;collapsed contigs很多的AP85-441调整了--rank_sum_upper和--density_upper;存在大范围collapse的马铃薯C88基因组使用了--normalize_by_nlinks和--remove_concentrated_links)。不同的基因组特征、不同的数据类型、不同的组装方法都会导致基因组有不一样的错误类型和倾向。尤其是HiFi数据组装的基因组相比非HiFi数据组装,以及野生种相比栽培种,这种倾向的差异巨大。我们已经在这方面积累了大量经验,如果你使用中遇到了具体的问题,欢迎给我提issue。
在处理了大量真实项目后,我发现出现问题很多是因为错误的实验设计、低质量的组装、错误选择的组装版本、低质量的Hi-C文库、不合适的比对和过滤方法、错误的理念等原因造成的。只是scaffolding作为组装的下游,和可视化的第一步才把这些问题显现出来。
我个人非常喜欢 chromap 这个软件
这里需要说明的是,虽然chromap比较快,但是同样按照MAPQ>=1进行过滤的错误率明显高于bwa mem,且有效read pair更少(如果需要数据我可以提供)。这也是我为什么推荐bwa mem的原因。如果是做分型的scaffolding,首选bwa mem。如果非要用chromap,建议始终加上--remove_allelic_links参数防止不同haplotype聚类到一起。Juicer pipeline比对错误率比chromap还要高很多,且速度慢,所以任何时候都不推荐使用。
@zengxiaofei 感谢您的回复和纠正, 对我理解 HiC 问题十分有帮助, 非常感谢🙏其中由于我测试不深入或了解不准确带来的错误描述, 我会尽快修改正文, 并将您的意见和建议加入其中.
您提到 chromap 比对错误率的问题是我之前没有注意到的, 并忽略了这对于分型 scaffolding 的影响; 我测试过程中认为软件提示 --remove_allelic_links
参数是由于多倍体的影响, 这样看来更可能是由于 chromap 的比对结果. 这个软件 valid pairs 少的问题我有关注到, 我的个别数据甚至会全部识别为 dump pairs, 我给作者提过 issue, 尝试使用他们提供的 beta 版本后也没有解决, 遇到这种稀有事件只能转回使用 bwa; 之后对于复杂基因组或分型 scaffolding, 我会尝试您提供的 bwa mem 方案, 实际对比看看效果;
如果方便, 我想借此机会向您请教几个问题:
再次感谢您的回复与帮助!
上图是chromap和bwa mem的直观对比,一个较高杂合的同源四倍体的案例,juicer pipeline的情况比chromap还要严重很多。
同源染色体之间的互作其实本来和普通的染色体之间的信号没有什么区别,我们从热图上能观察到这种沿对角线分布的信号主要有两个来源,比对和组装错误。当使用bwa mem比对配合MAPQ>=1的过滤标准能很好地保证比对地准确性。组装错误可能来源于纠错过程或者read的分配过程,最终这些来源于不同haplotype的reads被collapse生成了consensus序列,造成了碱基水平的switch error。HapHiC --remove_allelic_links <ploidy>
这个参数就是根据这个对角线信号识别等位contig,并消除这些信号带来的不好影响。所以如果使用chromap做单倍体分型,建议加上这个参数。
我也经常遇到由于本身数据问题造成的挂载困难; 针对您提出识别组装错误的问题, 我们是否有办法在获得组装结果时就做出识别, 或调整组装结果
目前来说没有很好的办法,有些组装问题可能需要更好的数据才能解决,比如使用ONT ultra-long reads。用gfa文件绘制assembly graph可以一定程度上识别collapse,但比较难以统计,另外gfa文件中的rd tag可以看到contig的深度,高深度通常也是collapse导致的。
另外,在有限的数据的情况下,选对组装版本是很重要的。比如二倍体我们倾向于使用hifiasm的Hi-C模式组装,当杂合率足够的时候选择将hap1.p_ctg和hap2.p_ctg 合并,将Hi-C reads同时比对到合并的contigs上进行scaffolding。当杂合率很低时,分开对hap1和hap2 scaffolding,最后再合并比对进行验证。如果时多倍体,我们会选择p_utg进行scaffolding,因为unitigs是准确分型的。
scaffolding 过程中, 是否有些中间文件或提示, 让我知道挂载问题是由于 chimeric contigs 或 collapsed contigs, 以便针对性调整?
在01.cluster/HapHiC_cluster.log
文件中,我们会输出一些可能有助于发现这些问题的信息。里面会提示利用link density和rank-sum值分别过滤了多少fragments,如果这个比例比较高,比如超过10%,说明基因组可能存在较多的组装错误。当然这也不是绝对的,但是算作一种hint。因为我在自动过滤这些fragments时使用的策略是最常见的离群值检测方法,即Q3+1.5*IQR,如果错误占比太大,这个方法会失效,所以提供了手动设置比例的选项。这些错误通常可以安全地进行过滤,因为这些过滤只是暂时的,后面contigs还是会补回到合适的group。另外如果想知道具体是哪些contig被过滤了,可以在运行haphic pipeline
或haphic cluster
时加上--verbose
参数查看完整的日志。
对于可公开数据, 如您提到的马铃薯, 甘蔗, 是否方便 share 一些使用的参数? 我想尽量学习一下您是如何利用 HapHiC 解决问题的.
我在预印文章的附件中详细提供了所有用到的命令行,可以参考。另外最近文章也快正式发表了,到时可以再看新版的附件,做了一些补充和改动。比如针对发表的C88.v1版本,也做了测试。
感觉像是基于 ALLHiC 自己改了的软件
这里我也想讲一讲HapHiC和ALLHiC的关系。其实我本来只是ALLHiC的用户之一,但是在做自己的项目时遇到了一些问题,做过一些简单的外围开发( https://github.com/zengxiaofei/small-contig-reassignment )。在发现效果不错后,我决定自己从头设计一款工具,尝试解决ALLHiC依赖参考基因组的问题。因为总体上和ALLHiC的策略是一致的,都是先聚类后排序(相似的还有LACHESIS,有别于3D-DNA、SALSA2和YaHS),所以我对ALLHiC的文件格式做了兼容。实际上如果用得熟练的话,这两款工具可以混合使用。另外在排序的最后一步,我调用了一个自己修改过的allhic程序( https://github.com/zengxiaofei/allhic ),从fast sorting的初步排序结果进行优化。当然,用--skip_allhic
参数跳过allhic也是可以的。事实上fast sorting的结果其实非常稳健。最近的更新也是基于fast sorting和allhic的结果进行比较,从中择优。总的来说,这款工具和ALLHiC相比,区别还是很大的,无论是contig的纠错、过滤、等位contig的识别、聚类方法、reassignment的思想,排序都做了比较多的创新。
最后感谢您的教程,感到有人关注和使用非常荣幸: )
20240712更新:
软件作者看到了这篇教程, 指出其中错误, 并对分析挂载流程提出了相当多的宝贵意见, 具体内容已整合到一篇新的文章, 请移步查看.
以下原文:
HapHiC 是一款 reference free 的基因组 scaffolding 软件,论文预印本发表在 bioRxiv 上。论文一作 Xiaofei Zeng 在个人博客中做了一些 HapHiC 软件的系列教程以及使用技巧,虽然今年三月的时候还回复过评论,但是文章已经很久没更新了;
近期在尝试测试这个软件的时候发现找不到中文教程,不如自己写一篇,帮助有相同需求的朋友;
软件安装
推荐使用 conda 安装,不介绍手动安装的方式, 首先 clone 仓库到本地,我一般习惯 clone 到 conda/envs 目录下:
使用 clone 下来仓库中的 yml 文件构建 conda 环境:
安装完成后,可以 soure 环境,也可以将构建环境的 bin 目录 export 到环境变量中,要是用的频繁就写到 .bashrc 里:
软件自带检测工具,check 一下;注意,这个 haphic 主流程文件在 clone 下来的仓库目录下,不在 conda create 的环境下,我第一次就没找到:
check 通过,空运行软件弹出欢迎界面,使用
--help
查看参数即可;有几个点需要注意:
git clone
下来的仓库名称是 HapHiC, 而基于 yml 文件构建的环境名称是 haphic; 如果你像我一样将仓库 clone 到了 conda/envs 目录下,这样这个目录会有 HapHiC 和 haphic 两个文件夹;如果介意请手动修改 yml 文件;pip install
一下就可以了;软件使用
reads 比对
比对这里还是需要说一下:
基于 bwa 的比对
使用软件之前,需要事先准备比对好的结果文件,作者推荐使用 bwa 的比对方法:
我们拆解一下作者这里的意图:
-5SP
: 在质量值低于 5 的碱基末端增加剪辑标记 S;samblaster
: 一般用于去除 PCR dup;-F 3340
: 过滤 PCR dup 和次比对;filter_bam
做进一步过滤,根据说明默认处理的是MAPQ ≥ 1
和NM < 3
情况;基于 chromap 的比对
在 V 1.0.3 版本更新中,软件支持了 chromap 输出的 pairs 格式:
我个人非常喜欢 chromap 这个软件,单独说一下这里:
--remove-pcr-duplicates
去除 PCR dup;view
和sort
的时间消耗;从时间成本上非常理想;其他注意事项
这里有一点其他注意事项和建议:
sort -n
一下避免后续流程报错;HapHiC 分析
One-line command
软件分析本身分为四步,但支持 one-line command 一行命令出结果
如果有需要可以分步具体处理,这样还挺好的,针对性很强,异常中断也不需要从头再来了,这里仅介绍直出结果的模式:
比对结果,草图,预估染色体数量,三个参数就可以启动分析了,很方便;挑几个我测了的接口说一下:
GATC
(MboI/DpnII), 如果是其他酶可以使用--RE
接口调整;--remove_allelic_links
参数可以解决;--correct_nrounds
支持多轮自动纠错 contig, 可能会切割现有草图 (contig); 这里要注意,切割后的 fa 未必能接入你的现有流程;如果确实需要切割处理,不如自己在 juice box 里面切,结果接入下游分析更方便;结果说明
不考虑处理中间结果的情况下,结果输出在
04.build
目录下,包括以下内容:scaffolds.agp
和scaffolds.raw.agp
: 九列 agp, 主要是对于切割后的 contig 表现形式不同,这个看自己的后续分析需求吧;scaffolds.fa
: 聚类完成的基因组,如果热图效果好基本可以直接用了,contig 之间有 100 bp 的 N (可调);juicebox.sh
: juicer_tools 的脚本,用于生成.hic
文件和.assembly
文件,输入 juicer box 做后续分析或手动调整;Quick view mode
以下几种情况可以使用
--quick_view
处理:.hic
文件,后续希望自己调图处理总结
感觉像是基于 ALLHiC 自己改了的软件,本身在自动化水平以及流程设计上很不错了,够"傻瓜" (褒义); 也有很多的接口供用户深度使用。
碍于我手上都是未公开数据,不能具体展示效果,只能口头描述:对于聚类软件,简单基因组各有各的优势,复杂基因组各有各的问题;对于简单二倍体植物基因组,HapHiC 相比我使用的 yahs 没有明显优势;对于多倍体基因组或包含冗余的复杂基因组,软件的效果又没有达到我的预期;
当然这也可能是我对软件使用的比较浅,比如软件提供的基于 gfa 或
p_utg.gfa
的处理模式,限于手头数据和时间关系没有进一步测试;预印文章中提到他们做了同源四倍体马铃薯的测试,要是有时间我也想把这个数据搞下来测测看。Reference