Nextflow通道仅处理首个元组:如何让所有样本运行比对流程?
解决Nextflow ALIGN流程仅处理首个样本的问题
问题原因
你的index_ch是单元素通道(仅包含一套索引文件),而Nextflow中多通道输入默认采用**拉链(zip)**模式配对:即每个通道取对应位置的元素组合成任务。当index_ch只有1个元素、file_list_ch有2个元素时,只会生成1组配对,仅第一个样本被处理。
解决方法
有两种简单的方式实现索引通道的广播,让每个样本任务都能获取到索引文件:
方法1:在流程输入中添加broadcast修饰符
修改ALIGN流程的输入定义,给索引参数加上broadcast: true,指定该输入要广播到所有样本任务:
process ALIGN{ input: path index, stageAs: "bowtie_index/*", broadcast: true tuple val(sample_id), path(reads) }
方法2:提前将索引通道转为广播通道
在调用ALIGN流程前,对index_ch调用broadcast()方法,把它转换成广播通道:
index_ch = index_ch.broadcast() ALIGN(index_ch, file_list_ch)
验证效果
修改后重新运行流程,ALIGN流程应该会执行2次,对应你的两个样本,日志会显示:
[1a/11f063] process > INDEX (1) [100%] 1 of 1 ✔ [e7/89e2be] process > ALIGN (1) [100%] 2 of 2 ✔
内容的提问来源于stack exchange,提问作者raygozag
相关产品推荐
相关产品推荐

