Skip to content

统计分析 API

命名空间:fq::statistic


StatisticCalculatorInterface

统计计算任务的抽象接口,通过工厂函数创建实例。

工厂创建

cpp
fq::statistic::StatisticOptions options;
options.inputFastqPath = "input.fastq.gz";
options.outputStatPath = "output.stat.txt";
options.signatureReportPath = "output.signatures.tsv";
options.threadCount = 4;

auto calculator = fq::statistic::createStatisticCalculator(options);
calculator->run();

接口定义

cpp
class StatisticCalculatorInterface {
public:
    virtual ~StatisticCalculatorInterface() = default;
    virtual void run() = 0;
};

StatisticOptions

统计任务配置。

字段类型说明
inputFastqPathstd::string输入 FASTQ 文件路径
outputStatPathstd::string输出统计文件路径
signatureReportPathstd::string可选的 signature sidecar 路径
batchSizeuint32_t每批次处理的记录数
signatureKmerSizesize_tsidecar 头部 k-mer 长度
maxReportedSignaturessize_tsidecar 最多输出的 signature 数
duplicateEstimateSampleModulosize_tduplicate estimate 的采样模数
threadCountuint32_t线程数
executionBackendExecutionBackend当前支持 OneTbb
memoryResourcePolicyMemoryResourcePolicy当前支持 ObjectPool
allocationTelemetryEnabledbool是否在文本报告中输出内存遥测头部
readChunkBytessize_tReader chunk 大小
zlibBufferBytessize_tzlib 内部缓冲区大小
batchCapacityBytessize_t单批缓冲区容量
memoryLimitBytessize_t用于推导 in-flight 上限的内存预算
maxInFlightBatchessize_t显式 in-flight 批次上限(0 为自动)
qualityEncodingint质量编码偏移量(通常为 33

StatisticInterface

统计计算的底层抽象接口,支持自定义统计逻辑扩展。

cpp
class StatisticInterface {
public:
    using Batch = fq::io::FastqBatch;
    using Result = FqStatisticResult;

    virtual ~StatisticInterface() = default;
    virtual auto calculateStats(const Batch& batch) -> Result = 0;
};

FqStatisticResult

公共头文件只前向声明 FqStatisticResult;下表描述的是当前实现暴露给统计器/聚合流程的主要结果语义,而不是稳定 ABI 布局。

字段类型说明
readCountuint64_t读段总数
totalBasesuint64_t碱基总数
maxReadLengthuint32_t最大读长
duplicateSampledReadsuint64_t采样命中的 duplicate reads 数
posQualityDistvector<uint64_t>扁平化位置质量分布
posBaseDistvector<uint64_t>扁平化位置碱基分布
headKmerCountsmap<string, uint64_t>bounded head-kmer signature 计数

支持 operator+= 合并多个批次的统计结果。


并行处理架构

统计分析使用 TBB 并行管道:

输入文件 → FastqReader → [Source] → [Processing] → [Aggregation] → 输出文件
                          串行读取    并行统计计算    串行合并结果
  1. Source(serial_in_order):串行读取 FastqBatch
  2. Processing(parallel):并行计算每个 batch 的统计信息
  3. Aggregation(serial_in_order):合并所有统计结果

输出格式

统计结果默认输出文本报告,并可选输出一个 TSV sidecar,包含:

  • 读段总数、最大读长、总碱基数
  • 碱基组成(A/T/C/G/N 比例)
  • GC 含量
  • 位置质量分布(Q20/Q30 百分比)
  • 逐位置碱基计数、平均质量与估计错误率
  • duplicate estimate(基于采样)
  • bounded head-kmer signatures(通过 --signature-report 启用)

当启用 --signature-report 时,sidecar 采用以下 TSV 结构:

text
metric	key	count
summary	total_reads	<count>
summary	duplicate_estimate	<count>
head_kmer	<kmer>	<count>

MIT License © LessUp