处理流水线 API¶
命名空间:fq::processing
ProcessingPipelineInterface¶
处理流水线的抽象接口,隐藏具体实现(工厂模式)。
工厂创建¶
接口方法¶
class ProcessingPipelineInterface {
public:
virtual void setInputPath(const std::string& path) = 0;
virtual void setOutputPath(const std::string& path) = 0;
virtual void setProcessingConfig(const ProcessingConfig& config) = 0;
virtual void addReadPredicate(std::unique_ptr<ReadPredicateInterface> predicate) = 0;
virtual void addReadMutator(std::unique_ptr<ReadMutatorInterface> mutator) = 0;
virtual auto run() -> ProcessingStats = 0;
};
ProcessingConfig¶
流水线配置参数。
| 参数 | 类型 | 说明 |
|---|---|---|
batchSize |
size_t |
每批 reads 数量 |
threadCount |
size_t |
并行线程数 |
readChunkBytes |
size_t |
读取块大小 |
zlibBufferBytes |
size_t |
zlib 缓冲区 |
writerBufferBytes |
size_t |
写入缓冲区 |
batchCapacityBytes |
size_t |
批次内存限制 |
memoryLimitBytes |
size_t |
总内存限制 |
maxInFlightBatches |
size_t |
并发批次数 |
ProcessingStats¶
处理结果统计。
| 字段 | 类型 | 说明 |
|---|---|---|
totalReads |
uint64_t |
输入读段总数 |
passedReads |
uint64_t |
通过过滤的读段数 |
filteredReads |
uint64_t |
被过滤的读段数 |
errorReads |
uint64_t |
错误读段数 |
inputBytes |
uint64_t |
输入字节数 |
outputBytes |
uint64_t |
输出字节数 |
elapsedMs |
uint64_t |
总耗时(毫秒) |
throughputMbps |
double |
吞吐量(MB/s) |
auto getPassRate() const -> double;
auto getFilterRate() const -> double;
auto toString() const -> std::string;
并行处理机制¶
当 threadCount > 1 时,使用 tbb::parallel_pipeline:
内置背压机制,通过 maxInFlightBatches 控制内存使用。
ReadPredicateInterface — 过滤谓词¶
class ReadPredicateInterface {
public:
virtual auto evaluate(const fq::io::FastqRecord& read) const -> bool = 0;
};
内置实现¶
| 类 | 说明 |
|---|---|
MinQualityPredicate |
最小平均质量过滤 |
MinLengthPredicate |
最小读长过滤 |
MaxLengthPredicate |
最大读长过滤 |
MaxNRatioPredicate |
最大 N 碱基比例过滤 |
pipeline->addReadPredicate(
std::make_unique<MinQualityPredicate>(20.0, 33));
pipeline->addReadPredicate(
std::make_unique<MinLengthPredicate>(50));
ReadMutatorInterface — 读段修饰器¶
内置实现¶
| 类 | 说明 |
|---|---|
QualityTrimmer |
质量修剪(支持 Both/FivePrime/ThreePrime 模式) |
LengthTrimmer |
长度修剪(FixedLength/MaxLength/FromStart/FromEnd) |
AdapterTrimmer |
接头修剪 |
pipeline->addReadMutator(
std::make_unique<QualityTrimmer>(
20.0, 50,
QualityTrimmer::TrimMode::Both, 33));
完整示例¶
#include <fqtools/fq.h>
auto pipeline = fq::processing::createProcessingPipeline();
pipeline->setInputPath("input.fastq");
pipeline->setOutputPath("output.fastq");
fq::processing::ProcessingConfig config;
config.batchSize = 10000;
config.threadCount = 4;
pipeline->setProcessingConfig(config);
pipeline->addReadPredicate(
std::make_unique<fq::processing::MinQualityPredicate>(20.0, 33));
pipeline->addReadPredicate(
std::make_unique<fq::processing::MinLengthPredicate>(50));
pipeline->addReadMutator(
std::make_unique<fq::processing::QualityTrimmer>(
20.0, 50, fq::processing::QualityTrimmer::TrimMode::Both, 33));
auto stats = pipeline->run();
std::cout << stats.toString() << std::endl;