Nextflow报错:MULTIMETRICS进程声明3个输入通道却传入5个
Nextflow流程报错修复:MARK_DUPLICATES输出无法传入MULTIMETRICS
错误原因
报错Process MULTIMETRICS declares 3 input channels but 5 were specified的核心问题:
- MARK_DUPLICATES的输出是3个独立文件,因此它的输出channel是包含3个元素的tuple
- 工作流调用
MULTIMETRICS(picard_ch, params.genomefile, params.genomeid)时,相当于把picard_ch的3个元素加上后面2个参数,总共5个输入传给MULTIMETRICS,但该进程只声明了3个输入,导致输入数量不匹配
修复步骤
1. 修正MARK_DUPLICATES进程的输出
将样本ID与输出文件绑定成tuple,确保后续进程能正确关联样本和对应文件:
process MARK_DUPLICATES { cpus 10 publishDir params.outdir, mode:'move' container 'broadinstitute/gatk:latest' input: tuple val(sample_id), path(reads) output: tuple val(sample_id), path("${sample_id}_MarkedDup.bam"), path("${sample_id}_MarkedDuplicates.txt"), path("${sample_id}_MarkedDup.bai") script: """ gatk MarkDuplicates I=${reads[0]} O=${sample_id}_MarkedDup.bam M=${sample_id}_MarkedDuplicates.txt CREATE_INDEX=true """ }
2. 修正MULTIMETRICS进程的输入与脚本变量
- 调整输入声明,正确接收MARK_DUPLICATES的输出tuple、基因组文件和基因组ID
- 修复脚本中错误的变量引用(原脚本误用
${reads},实际应使用传入的去重BAM文件):
process MULTIMETRICS { container 'broadinstitute/gatk:latest' input: tuple val(sample_id), path(marked_dup_bam), path(marked_dup_metrics), path(marked_dup_bai) path(genome) val(genomeid) output: tuple val(sample_id), path("${sample_id}_multimetrics*") script: """ gatk CollectMultipleMetrics I=${marked_dup_bam} O=${sample_id}_multimetrics R=${genome}/${genomeid} """ }
3. 修正工作流调用逻辑
确保MARK_DUPLICATES的输出tuple被正确传入MULTIMETRICS:
picard_ch = MARK_DUPLICATES(addreadgroups_ch) multimetrics_ch = MULTIMETRICS(picard_ch, params.genomefile, params.genomeid)
额外说明
- 若不需要将MARK_DUPLICATES生成的metrics和bai文件传入MULTIMETRICS,可简化MARK_DUPLICATES的输出,仅保留
val(sample_id)和path("${sample_id}_MarkedDup.bam") CollectMultipleMetrics会生成多个输出文件(如.multimetrics、.pdf等),使用${sample_id}_multimetrics*可捕获所有相关结果文件
内容的提问来源于stack exchange,提问作者LG907
相关产品推荐
相关产品推荐

