You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nextflow DSL2中如何将多肿瘤样本元组与单个正常样本元组配对?

Nextflow DSL2 肿瘤-正常样本对并行处理解决方案

问题背景

现有GATK_PREPROCESS流程处理包含1个正常样本和多个肿瘤样本的BAM文件,输出格式为元组(sample_name, sample_bam, sample_bam_index)。需要为每个肿瘤样本并行运行PROCESS_TUMOR_NORMAL_PAIR流程,且每个任务都需要传入对应的正常样本数据。直接拆分通道后传入流程时,仅第一个肿瘤样本会被处理,其余样本因通道配对逻辑被丢弃。

原代码片段:

params.normal_sample = 'N1' // 硬编码正常样本名

// GATK_PREPROCESS输出所有肿瘤和正常样本的元组通道
gatk_output = GATK_PREPROCESS(...)

// 过滤得到所有肿瘤样本的通道
tumor_input_ch = gatk_output.filter { sample, bam, bai -> sample != params.normal_sample }

// 过滤得到单个正常样本的通道
normal_input_ch = gatk_output.filter { sample, bam, bai -> sample == params.normal_sample }

// 仅第一个肿瘤样本会被处理
PROCESS_TUMOR_NORMAL_PAIR(tumor_input_ch, normal_input_ch)

问题原因

Nextflow通道默认采用一对一位置配对逻辑:当两个通道元素数量不一致时,仅会按位置配对到较短通道的最后一个元素,剩余元素会被丢弃。这里正常通道只有1个元素,因此仅第一个肿瘤样本能完成配对。

解决方案

方法1:广播正常样本通道

对单元素的正常通道使用broadcast()方法,将其转换为广播通道,使其能与肿瘤通道的每个元素重复配对:

params.normal_sample = 'N1'

gatk_output = GATK_PREPROCESS(...)

tumor_input_ch = gatk_output.filter { sample, bam, bai -> sample != params.normal_sample }
// 对正常通道执行广播操作
normal_input_ch = gatk_output.filter { sample, bam, bai -> sample == params.normal_sample }.broadcast()

// 每个肿瘤样本都会与正常样本配对执行流程
PROCESS_TUMOR_NORMAL_PAIR(tumor_input_ch, normal_input_ch)

方法2:预先合并肿瘤-正常样本对

使用combine操作符将肿瘤通道与正常通道合并,生成包含所有配对组合的通道,再传入流程(需注意调整流程的输入定义):

params.normal_sample = 'N1'

gatk_output = GATK_PREPROCESS(...)

tumor_input_ch = gatk_output.filter { sample, bam, bai -> sample != params.normal_sample }
normal_input_ch = gatk_output.filter { sample, bam, bai -> sample == params.normal_sample }

// 合并通道,生成每个肿瘤样本+正常样本的配对元组
tumor_normal_pair_ch = tumor_input_ch.combine(normal_input_ch)

// 需调整PROCESS_TUMOR_NORMAL_PAIR的输入定义以接收合并后的元组
// 示例流程输入定义:
// process PROCESS_TUMOR_NORMAL_PAIR {
//     input:
//         tuple val(tumor_sample), path(tumor_bam), path(tumor_bai),
//               val(normal_sample), path(normal_bam), path(normal_bai)
//     ...
// }
PROCESS_TUMOR_NORMAL_PAIR(tumor_normal_pair_ch)

说明

  • 方法1无需修改PROCESS_TUMOR_NORMAL_PAIR的输入定义,更简洁直接,适合流程原本就接收两个独立样本元组的场景。
  • 方法2需要调整流程输入以接收合并后的完整元组,适合需要统一管理配对数据的场景。

内容的提问来源于stack exchange,提问作者user15744

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:03:22