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

Nextflow tuple输入不匹配问题:如何同时获取sample_id与BAM路径?

问题

使用Nextflow构建多流程管线时,想把前一流程输出的样本ID和排序后BAM文件作为gatk_markduplicates流程的输入,但使用tuple val(sample_id), path(x)作为输入时触发错误:

WARN: Input tuple does not match input set cardinality declared by process `gatk_markduplicates` -- offending value: /Users/username/.../tiny_t_L007.sorted.bam
ERROR ~ Error executing process > 'gatk_markduplicates (1)'
Caused by:
  Not a valid path value type: org.codehaus.groovy.runtime.NullObject (null)

单独用val(sample_id)或path(x)时流程可正常运行,但无法同时获取样本ID和BAM文件路径。相关代码如下:

main.nf

params.outdir_fastp="./trimmed"
params.outdir_index="./bwa_index" 
params.rawFiles = "/Users/username/Downloads/tiny/tumor/*_R{1,2}_xxx.fastq.gz"
params.outdir_bwa_mem="./bwamem"
params.hg38genome ="/Users/username/Downloads/NM.fasta"
params.gatk_mark_duplicates="./gatk_mark_duplicates"

include { FASTP} from './fastp_process.nf'
include {bwa_index} from './index_process.nf'
include { align_bwa_mem} from './bwamem_process.nf'
include { gatk_markduplicates} from './gatk_markduplicates_process.nf'

workflow {
    read_pairs_ch = Channel.fromFilePairs( params.rawFiles )
    FASTP(read_pairs_ch) 
    bwa_index(params.hg38genome)
    align_bwa_mem(FASTP.out.reads,bwa_index.out) 

    gatk_markduplicates(align_bwa_mem.out.sorted_bams)
}

align_bwa_mem 流程代码

process align_bwa_mem {

    tag {sample_id}
    debug true

    publishDir params.outdir_bwa_mem , mode: "copy"

    input :
    tuple val(sample_id), path(reads)
    tuple val(idxbase), path("bwa_index/*")

    output: 
    path("${sample_id}.sorted.bam"), emit : sorted_bams 

    script:
    def (fq1,fq2)=reads

    rg="'@RG\tID:${sample_id}\tSM:${sample_id}\tPL:illumina'"
    
    """
    bwa mem -M -R $rg -v 1 "bwa_index/${idxbase}" $fq1 $fq2 | samtools sort -O bam -T - > ${sample_id}.sorted.bam  > ${sample_id}.bam
    """
}

gatk_markduplicates 流程代码

process gatk_markduplicates {

    tag {sample_id}
    debug true

    publishDir params.gatk_mark_duplicates , mode:"copy"

    input:
    tuple val(sample_id), path(x) // works fine with only `val(sample_id)`

    output:
    stdout

    script:
    """
        echo "$x\n"
        echo "$sample_id\n"
    """
}

原因分析

核心问题出在align_bwa_mem的输出定义:当前仅输出单个BAM文件路径,未将sample_id与BAM路径打包为tuple。下游gatk_markduplicates期望接收包含两个元素的tuple(样本ID+文件路径),但实际收到的是单个路径值,导致tuple匹配失败,sample_id被解析为null,触发错误。

另外,align_bwa_mem脚本中的> ${sample_id}.bam是冗余重定向,会覆盖前面生成的sorted.bam文件,需要删除。

解决方案

  1. 修改align_bwa_mem的输出,将sample_id与BAM路径打包为tuple发射:
output: 
tuple val(sample_id), path("${sample_id}.sorted.bam"), emit : sorted_bams 
  1. 删除脚本中的冗余重定向,修正后的命令行:
bwa mem -M -R $rg -v 1 "bwa_index/${idxbase}" $fq1 $fq2 | samtools sort -O bam -T - > ${sample_id}.sorted.bam

修改后,align_bwa_mem.out.sorted_bams会输出包含样本ID和对应BAM路径的tuple,下游gatk_markduplicates的tuple val(sample_id), path(x)输入即可正确匹配,同时获取到样本ID和文件路径。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:37:01