共识与差分表示
当重排把相似 reads 拉近之后,fq-compressor 会把短读长序列压缩成“一个共识 + 多条差分”的形式。 这一步是把重复的生物学信号真正转成紧凑归档结构的关键。
在 fq-compressor 中的角色
在每个 block 内,序列压缩器会从相邻 reads 构建 contig。 每个 contig 保存一条共识序列,以及一组指向该共识的 delta read 记录。 这种表示在 block 作用域内自洽,因此解压时不需要依赖前后 block。
核心机制
- contig 起始: 从一个尚未分配的 read 开始,初始化新的共识。
- 对齐: 在有限局部窗口内,把后续 reads 与不断更新的共识比较,并支持有界 shift 与反向互补。
- 更新共识: 被接受的 reads 会更新各位置碱基计数,多数碱基成为新的共识符号。
- 输出差分: 每条 read 只记录对齐偏移、方向标志、长度、错配位置和错配符号;替换符号还可以相对共识碱基重新编码,最后再交给 Zstd 压缩。
对压缩与访问的影响
共识吸收了多条 reads 共享的碱基,因此归档空间主要花在分歧处,而不是每个碱基副本上。 当 reads 聚类足够好时,错配位置会很稀疏,偏移也通常较小,序列化后的 delta 流会明显小于原始序列文本。 因为共识与差分一起存储,这种表示仍然是完全无损的。
当前边界
当前 contig 构建器只在有限前视窗口内扫描,并依赖前面的重排步骤把相关 reads 保持在局部范围内。 这保证了实现足够实际且保持 block 局部性,但也意味着它最擅长的是那些能被局部顺序显露出冗余的短读长数据集。