做基因组组装的朋友这两年应该躲不开两个词单倍型、T2T基因组。从最初拼出一个粗略的draft genome就很满足到后来要求染色体级别、gap越少越好再到现在直接奔着“单倍型T2T”去这个领域的变化比我预想中快得多。这篇内容适合正在做基因组项目、准备上手组装或者已经被老板/合作方要求“上单倍型T2T”但还没理清思路的人。我会把概念、技术路线、实操要点和踩过的坑一次讲清楚。1. 先从“单倍型”说起为什么基因组研究绕不开它1.1 一个基因组不够其实是两个基因组很多做科研的同学第一次听到“单倍型组装”会有点绕以前不是一直在拼一个基因组吗怎么突然要拼两个这里要回到一个最基本的生物学事实对于二倍体生物每个个体身上其实带着两套不完全一样的基因组一套来自父本一套来自母本。我们平时说的“人类基因组参考序列”本质上是把很多人的序列拼在一起、做了一个共识consensus不等于任何一个真实个体。这个共识序列掩盖了一个关键信息两套单倍型之间的差异。以人为例两个单倍型之间的差异大约在0.1%左右也就是大概300万个碱基级别的差异。单个碱基看起来不多但有些区域的差异是结构性的比如一段序列在父本来源的染色体上有在母本来源的染色体上完全缺失或者拷贝数不一样。如果你只拼出一个“合并版”基因组这些差异全部糊在一起后续做变异检测、等位基因特异性表达、甲基化分析、系统发育推断都会埋下隐患。单倍型组装就是想尽办法把这两套基因组分开分别给出完整的序列。这不是锦上添花而是现在做精细化基因组研究的基本功。1.2 以前为什么不这么做现在为什么能做了早几年大家也想做单倍型但做不出来原因是技术跟不上。二代测序读长太短大约150bp两套单倍型之间的差异位点可能隔几千甚至几万碱基才出现一个。你想把一段序列准确无误地归类到父本或母本中间的跨度太长根本连不起来组装出来的结果只会是两条单倍型序列嵌合在一起也就是俗称的“塌缩”或者“嵌合”。后来三代测序成熟了情况立刻变得不一样。以PacBio HiFi为例单条reads长度大约15-25kb准确度在Q20以上99%以上这个长度已经足够跨越很多杂合位点区间配合算法可以很好地区分单倍型。再加上Ultra-long测序ONT平台动不动就100kb以上甚至能测到Mb级别这类超长reads在跨越重复区域、解决单倍型间结构差异上有天然优势。技术条件变了算法也跟着升级。以hifiasm为代表的组装工具把“分型”从组装后的附加步骤变成了组装过程中的一个内置环节拼出来的结果直接就是两个单倍型基因组。这是近五年基因组组装领域最大的变化之一。1.3 单倍型组装的三种典型路线做了几个项目之后我习惯把单倍型获取的路线分成三类大家可以根据自己手头的材料来选择trio binning家系辅助分型如果手头有父母本或子代的测序数据可以先用父母本reads的k-mer特征把子代reads分成两个来源然后分别组装。这种方式分型最干净、错误率最低特别适合有明确家系材料的物种。缺点是要求材料齐备没有亲本信息的物种用不了。Hi-C辅助分型利用Hi-C数据的染色质空间互作信息把contig挂到具体染色体同时辅助区分单倍型。这种方法不需要亲本适用面广但分型质量受Hi-C数据质量和基因组杂合率影响。基于HiFi数据的单倍型感知组装phased assembly直接用hifiasm这类工具从HiFi reads中的杂合位点出发在两个单倍型差异较大的区域直接区分开。这种方式对材料要求最低但需要有一定水平的杂合率如果物种近交严重、杂合率极低组装工具依然会倾向拼成consensus。三个路线不是互斥关系实际项目中我经常把trio binning和HiFi phased assembly同时跑最后评估哪个结果更好再决定用哪条。千万不要一条路走到黑。2. T2T基因组从端粒到端粒把缺失的“洞”补上2.1 T2T到底在解决什么问题聊完单倍型再来看另一个关键词T2T全称是Telomere-to-Telomere端粒到端粒。意思是每条染色体的组装序列从一端的端粒到另一端的端粒中间没有任何gap是真正意义上的完整。如果你没有亲自拼过基因组可能意识不到这有多难。以人类基因组为例早年的GRCh38参考基因组虽然已经是“黄金标准”但依然有gap尤其是在着丝粒、rDNA簇、片段重复这些区域。这些区域不是不重要而是太复杂短读长测序拿它们没办法。着丝粒区域动辄几Mb的satellite重复序列rDNA又是几百个拷贝串联在一起常规组装到这里就直接“断线”留下一串N。T2T组装的本质就是把这些最顽固的区域用超长读长逐一穿过把每一个gap都补上做到每条染色体从头到尾没有未知碱基。2022年人类T2T联盟发布的CHM13完整基因组补上了大约2亿个此前完全未知的碱基这个量级相当于一整套人类基因组的6%以上里面包含大量与疾病和进化相关的结构变异热点。2.2 这些区域为什么这么难拼要理解T2T为什么近年来才成为可能得先知道那些区域到底难在哪儿。一是重复单位的长度与拷贝数。着丝粒的α卫星序列核心重复单元大约171bp成百上千次串联排列总长可达2-5Mb。短读长测序对这种串珠结构的组装非常无力因为每个HORHigher-order Repeat高阶重复单元之间的序列相似度太高你根本不知道reads该接到哪里。二是异染色质区域的极端构成。T2T要跨越的这些区域通常处于异染色质状态重组被抑制序列在进化上高度一致几乎没有可供算法“锚定”的差异位点。常规的de Bruijn graph和OLGOverlap-Layout-Consensus遇到这种区域都会昏头。三是rDNA多拷贝结构。人类每条端着丝粒染色体上都有rDNA簇每个簇包含几十到几百个拷贝的重复单元。常规组装会把它们拼成一个高度塌缩的unit完全丢失拷贝数和排列顺序信息。T2T组装需要用到专门的tools比如Riboseq流程来把这些串联重复解析出来。2.3 从“染色体级别”到“T2T”是两个时代这里有件事必须说清楚很多人把“染色体级别组装”chromosome-level assembly和“T2T基因组”混为一谈实际差距非常大。染色体级别组装指的是把contig挂载到染色体上用的是Hi-C或者遗传图的距离信息能看出每条染色体的框架。但框架之间可以有大量gap常见的情况是每条染色体上有几百个N。有些人汇报的时候会说“我们组装到了染色体级别”但去看序列一条染色体上七零八落全是未知片段这种结果的完整度其实比较有限。T2T则是把这些gap全部消灭每一条染色体从一头到另一头都是真实确定的碱基序列。两者之间的关系可以理解成你拿到了一份城市地图一个版本只标出了主干道和街区轮廓另一个版本连每一条小巷、每一栋楼、每一个门牌号都画出来了。做精细研究后面这个版本才有底气。从实际体验来说目前完整拿到一个物种的T2T仍然不是“跑一条命令”就能解决的事尤其是基因组大、重复区域多、杂合率复杂的物种。但对模式物种、重要经济物种、以及有明确科学问题的物种来说T2T已经不是科研奢侈品而是行业基建设施。3. 单倍型T2T基因组两条线怎么拧成一股绳3.1 测序策略想让结果好先让数据强单倍型和T2T是两个目标但实际操作中必须同时考虑。为了兼顾分型和补洞我目前的测序策略大概是这样的HiFi数据作为主力ULUltra-long数据作为攻坚Hi-C或者亲本资料作为辅助。HiFi是整个流程的底座。它的长度足以覆盖很多杂合位点准确度又高是分型组装的主料。建议覆盖度不低于30x对于基因组含高重复序列的物种40x以上比较稳妥。UL数据用来跨越那些HiFi读长覆盖不了的超长重复区比如着丝粒、rDNA簇这类reads越长越好很多平台能出100kb到200kb以上的reads建议覆盖度在20x左右。Hi-C则用来做染色体挂载和辅助验证单倍型的染色体级别结构。有个细节很多人容易忽略UL数据必须用原始的长reads不能是那些短片段拼接出来的嵌合体reads。因为嵌合reads会引入虚假的连接直接导致组装出来的contig在重复区域出错。3.2 组装工具选型hifiasm、verkko和其他工具方面目前主流选择集中在hifiasm和verkko。我个人的习惯是两者都跑然后对比结果因为不同物种的基因组特征会导致工具表现的差异非常大。hifiasm的优势在于成熟的单倍型感知组装算法能够直接输出两个单倍型基因组而且对HiFi数据的利用率非常高。新版hifiasm还整合了UL数据可以设置参数让UL reads参与搭桥对跨越重复区有明显帮助。处理人和动植物基因组的项目hifiasm是默认首选。verkko是Canu团队开发的工具专门为T2T设计主打利用UL数据构建更长的contig。它在处理超长重复和rDNA区域时有自己的一套逻辑但消耗计算资源更大而且某些物种的参数调节比较敏感。如果团队里有熟悉它的成员非常值得尝试。还有一个小建议对于需要做trio binning的项目建议先用hifiasm的双模式或者专门的trio模式跑一次喂入两个亲本的reads做分型。如果亲本数据不可用就用hic模式。不同模式的输出质量差异很大值得花时间逐一对比而不是默认设置跑完就直接用。3.3 分型的核心步骤与质量控制不管用哪种路线单倍型T2T组装出来的结果都需要做一轮严格的质量评估。第一件事是看完整性用BUSCO评估基因组的基因覆盖度这个数值能直观反映组装有没有把核心基因丢掉。第二件事是看连续性用QUAST统计contig N50、scaffold N50等指标连续性和N50太低说明contig断得厉害后续分析会很痛苦。但是N50高并不能完全说明问题第三个关键步骤是检查分型是否干净。简单粗暴的统计方法是看组装出的单倍型数量是否接近2n比如人类应该是2套常染色体XY/XX同时把两套单倍型比对看它们的整体相似度分布正常情况应该呈现明显的双峰模式。如果两套之间杂合度极低或者有一个单倍型明显是另一个的“残缺版”那大概率是分型出了问题需要回看测序深度和杂合位点密度。补一个我踩过的坑Hi-C辅助分型时如果Hi-C数据里混入了过多线粒体或者叶绿体序列会干扰挂载。组装前一定要做清理否则后期要花大量时间重新调整。4. 实操过程与核心环节实现4.1 数据预处理组装前一定要做的三件事拿到测序数据直接跑组装是新手最容易犯的错误我一开始也这么干过结果浪费了好几天计算资源。现在我的流程是先做三个预处理步骤。第一用FastQC和multiQC全面检查reads质量看长度分布、质量值、接头污染情况。这一步会暴露很多问题比如HiFi reads的平均长度低于15kb说明建库或者测序过程有问题比如reads里混入了大量Adapter序列不清理会影响后续的overlap检测。第二用GenomeScope或者类似的k-mer分析工具估计基因组的实际大小、杂合率、重复率。这个环节非常关键因为你的目标物种的基因组可能跟NCBI数据库里的参考基因组差别很大参考基因组本身可能来自不同亚种或品系直接套用参考值会出大问题。举个例子我做过一个蕨类植物基因组预估大小接近11Gb实际上是数据库中参考值的两倍多如果按参考值安排测序量后面肯定不够。第三如果有亲本材料一定要做一次trio样本的性别/亲缘关系确认。亲本搞反或者样本污染是trio binning路线里最隐蔽的坑。我曾经因为一个样本的标签写错导致整个分型结果一团糟排查了两天才发现是样本问题。4.2 组装参数选择的经验心得组装参数没有“万能最优解”但有几条我越用越觉得重要的经验hifiasm的-t线程数建议按CPU核心数设置但并不是越大越好。线程太多会产生大量中间文件磁盘IO会成为瓶颈有时候反而更慢。我通常先设为核心数的一半跑完一轮再优化。UL数据参与组装时要留意UL reads的质量过滤。太短的UL reads反倒是噪音我一般会过滤掉低于50kb的这样能大幅减少计算量且不影响最终的gap填补效果。Hi-C辅助挂载时--min-avg-sine等参数会影响挂载的严格度。对于基因组结构复杂的物种调松一点可能把更多contig挂到染色体上但也容易引入错误的连接。我倾向于先用默认参数跑看挂载率再针对性调整。组装完成后用purge_dups或者hifiasm自带的--ul模式输出的primary contig做一遍冗余序列清理。这一步可以解决两个单倍型之间由于高度相似导致的“假重复”问题让最终结果更干净。另外有个通用建议组装流程建议用流程管理工具比如snakemake或nextflow串起来每一步都记录日志和版本。基因组组装是很重的计算任务中间任何一个环节失败都需要定位有完整的日志记录能把你从泥潭里拉出来。4.3 实操案例一个植物基因组从数据到T2T的完整流程拿我最近做的一个植物基因组来举例这个物种基因组大小约800Mb杂合率1.2%重复序列占比约60%算是比较典型的中等复杂基因组。数据方面HiFi数据测了45xUL数据测了25xHi-C数据测了60x。拿到数据后先做质量管理确认HiFi读长中位值在17kb左右UL reads中位值在85kb左右。随后用GenomeScope预估基因组大小确认与流式细胞术结果基本一致。组装直接用hifiasm的hi-c模式喂入HiFi数据、UL数据和Hi-C数据。这一步跑了大概3天128核服务器输出的primary contig N50大约是68MbBUSCO完整度97.2%。这个连续性在植物基因组里算很漂亮了。接着用purge_dups清理冗余再用3D-DNA或SALSA做第二轮Hi-C挂载最终得到12条染色体级别的单倍型组装。之后我又专门跑了一轮T2T补充针对前期遗留的几个gap区域用UL数据做局部组装和手动闭合。最终12条染色体中有10条做到了端粒到端粒无gap剩下的两条在rDNA区域还有少量未知碱基需要高深度的ONT ultra-long数据才能补上。整个过程从拿到数据到最终整理出干净的结果大概花了三周时间其中手动gap closing占了将近一半。5. 常见问题与排查技巧实录5.1 单倍型区分度不足怎么办这是单倍型组装中最常见的问题。如果你发现两套单倍型之间的差异非常小甚至序列完全相同最可能的原因是物种的杂合率太低比如小于0.3%hifiasm的phased组装在这种情况下容易退化回consensus组装。这种情况下可以考虑两条路一是改用trio binning用亲本数据进行强制分型二是降低k-mer或者调整分型的敏感度参数但这通常效果有限。如果项目允许更推荐增加样本数把不同个体的基因组一起做群体分型这个问题会自然缓解。5.2 组装结果里大量冗余怎么办很多时候组装完的结果里会发现大量近重复的contig序列这种情况通常来自两种原因一种是单倍型之间的相似区域没有被正确分开另一种是纯合重复区域被过度拼装。处理方法是先跑一遍purge_dups它会根据reads覆盖度差异识别并去除冗余。如果效果不好再检查一下是不是测序深度不够导致覆盖度波动。purge_dups的核心假设是基于reads覆盖度的差异来区分“真实单拷贝”和“副本”深度太低会让这个假设失效。5.3 gap始终无法闭合如果目标区域是卫星DNA或者rDNA这种极端重复序列普通的UL数据可能还是不够长。此时最直接的解决办法是增加UL测序深度并且尽量让测序文库的DNA片段更大。有一个技巧是专门做一次“超长文库”用低电流、长时间运行的方式提高reads读长有时候能从100kb提升到250kb以上这一步往往能带来惊喜。另外可以尝试把多个组装工具的结果合起来看verkko拼出来的contig在某个区域可能比hifiasm还长手动挑出这些区域的contig合并进hifiasm结果里是T2T项目里非常常见的操作。5.4 计算资源吃紧怎么办基因组组装的计算消耗非常大对于10Gb以上的超大基因组128核、512GB内存的服务器是标配时间开销以星期计。如果资源有限建议优先保证HiFi数据质量和深度UL数据可以减少但不要太少因为这两个是组装质量的主要决定因素。还有一个非常实际的办法先在小基因组或者基因组的一条染色体上调好参数再全量跑。我曾经在测试阶段用一个小染色体区域反复调参省下来的时间和计算资源非常可观。6. 应用场景与后续扩展6.1 医学基因组从参考序列到个体化参考单倍型T2T基因组在医学领域的影响正在显现。传统的医学基因组分析是拿个体测序数据比对到一个统一的参考基因组上结构变异检测能力有限因为参考序列本身就有大量gap和错误。有了个体的单倍型T2T基因组可以直接以个体自身完整序列为参照做变异检测会把检测灵敏度大幅提升尤其是结构变异和重复区域相关的疾病位点。这个方向虽然还在起步但我预判很快会成为精准医学的基础设施。做医学基因组的朋友现在开始积累单倍型T2T组装的技能是值得的。6.2 农业育种与功能基因组在育种领域单倍型T2T的价值在于完整呈现等位基因多样性。农艺性状相关的基因往往是高度多态的两套亲本的单倍型可能在关键功能区有完全不同的结构。有了完整的单倍型T2T育种家可以直接定位那些影响品质、抗病性的等位基因结构差异甚至可以用于设计更精准的分子标记。对功能基因组研究者来说单倍型T2T还解决了一个长期痛点等位基因特异性表达分析。以前默认把两套等位基因的reads都比对到同一个参考上然后用SNP来区分来源但如果某个等位基因有大的结构变异reads根本比对不上分析就会失明。有了两套完整的单倍型序列这个问题迎刃而解。6.3 单倍型T2T之后还能做什么这一篇是系列的第一篇内容偏向概念、技术和基础的实操流程。后续我会继续更新几篇重点讲三个方向一是更加深入的T2T组装细节与手动闭合技巧这里有很多书本上没有的土办法二是单倍型T2T的下游分析比如基于单倍型的功能注释、甲基化分析、结构变异检测三是面向具体物种的实战案例从数据产生到最终论文图表制作的完整过程。我在多个项目里用这套思路做下来最大的体会是单倍型T2T不是一套遥远的“前沿技术”而是已经可以用现有数据和工具跑通的标准流程只是需要多试错、多积累经验。每个物种、每套数据都有自己的脾气跑通第一次之后后面的速度会快很多。如果你也在做类似的项目建议先从小目标开始——比如先拿到一个物种的染色体级单倍型再逐步奔着T2T去每一步都会踩出属于你自己的经验。下一篇我会重点讲手动gap closing的那些实战细节。