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
相关产品推荐
相关产品推荐

