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

Nextflow流程跳过DBcreation进程致下游MM进程失败求助

Nextflow流程中DBcreation进程被跳过导致MM进程失败的问题排查与解决

问题描述

基于Nextflow和GATK搭建的分析流程里,panelnormalsone进程之前的所有步骤均正常执行,但流程会直接跳过DBcreation进程,转而运行tumorsamplenamerun进程,最终导致依赖DBcreation输出的MM进程执行失败。单独运行到DBcreation进程时可正常执行,但全流程运行时该进程会被跳过。

相关代码片段

process normalsamplenamerun {
  
  publishDir params.trim, mode : 'copy' 

  input:
  tuple val(pair_id), file(recal_readsbamfile)

  output:
  tuple val(pair_id),file(normal_samplefile), emit : SM_normalbam
  tuple val(pair_id),file(normal_samplefile_bai), emit : SM_normal_bai


  script:
  normal_samplefile = pair_id + '_recal_reads_SM.bam'
  normal_samplefile_bai = pair_id + '_recal_reads_SM.bai'

  """
    
  ./gatk --java-options "-Xmx24G" AddOrReplaceReadGroups --INPUT $recal_readsbamfile    --OUTPUT $normal_samplefile --RGLB lib1 --RGPL illumina --RGPU NONE --RGSM NORMAL_$pair_id
  ./gatk --java-options "-Xmx24G" BuildBamIndex --INPUT $normal_samplefile
  """

}

process panelnormalsone {

publishDir params.trim, mode : 'copy'

input:
tuple val(pair_id), file(normal_samplefile)
tuple val(pair_id), file(normal_samplefile_bai)

output:
tuple val(pair_id),file(panelvcfnormal_samplefile) emit : vcf_normal
tuple val(pair_id),file(panelvcfnormal_samplefile_stats) emit : vcf_stats
tuple val(pair_id),file(panelvcfnormal_samplefile_tbi)  emit : vcf_tbi


script:
panelvcfnormal_samplefile = pair_id + '_recal_somatic.vcf.gz'
panelvcfnormal_samplefile_stats = pair_id + '_recal_somatic.vcf.gz.stats'
panelvcfnormal_samplefile_tbi  =   pair_id + '_recal_somatic.vcf.gz.tbi'

"""

./gatk --java-options "-Xmx24G" Mutect2 -R ${params.reference} -I $normal_samplefile --max-mnp-distance 0 -O $panelvcfnormal_samplefile
"""

}

process DBcreation {

publishDir params.trim, mode : 'copy'

input:
file(panelvcfnormal_samplefile)
file(panelvcfnormal_samplefile_stats)
file(panelvcfnormal_samplefile_tbi)

output:
//path "${params.pondb}"
   
script:
sampleOpts = panelvcfnormal_samplefile.collect { p -> ("-V ${p.name}") } .join(' ')

""" 

./gatk --java-options "-Xmx24G" GenomicsDBImport -R ${params.reference} -L  ${params.intervalfile} --genomicsdb-workspace-path ${params.pondb} ${sampleOpts} --merge-input-intervals true --reader-threads 10 
./gatk --java-options "-Xmx24G" CreateSomaticPanelOfNormals -R ${params.reference} --germline-resource ${params.germlineresource} -V gendb://${params.pondb} -O ${params.ponsfile}
"""
}

process tumorsamplenamerun {
  
  publishDir params.trim, mode : 'copy' 

  input:
  tuple val(pair_id), file(recal_readsbamfile)

  output:
  tuple val(pair_id),file(tumor_samplefile), emit : SM_tumorbam
  tuple val(pair_id),file(tumor_samplefile_bai), emit : SM_tumorbam_bai


  script:
  tumor_samplefile = pair_id + '_recal_reads_SM.bam'
  tumor_samplefile_bai = pair_id + '_recal_reads_SM.bai'

  """
    
  ./gatk --java-options "-Xmx24G" AddOrReplaceReadGroups --INPUT $recal_readsbamfile --OUTPUT $tumor_samplefile --RGLB lib1 --RGPL illumina --RGPU NONE --RGSM TUMOR_$pair_id
  ./gatk --java-options "-Xmx24G" BuildBamIndex --INPUT $tumor_samplefile
  """
}

workflow {

  panelnormalsone(normalsamplenamerun.out)
  samples = panelnormalsone.out.vcf_normal | map {  t -> t[1] }  
  stats = panelnormalsone.out.vcf_stats | map {  t -> t[1] } 
  tbi = panelnormalsone.out.vcf_tbi | map {  t -> t[1] } 
  DBcreation(samples.collect(),stats.collect(),tbi.collect()) 
  gatkrun.out.recal_readsbamfile
  | filter { pair_id, recal_readsbamfile -> !pair_id.contains("N") }
  | tumorsamplenamerun
}

(注:已修正脚本中./gatk./gatk的笔误为./gatk)

运行日志

[97/f6890e] process > trimming (trim on {CaGB17_T}) [100%] 10 of 10 ✔
 [c7/6f21fd] process > BWAMEM (10)                   [100%] 10 of 10 ✔
 [ed/20534d] process > gatkrun (10)                  [100%] 6 of 6
 [77/5513b3] process > normalsamplenamerun (5)       [100%] 5 of 5
 [80/c3035e] process > panelnormalsone (5)           [100%] 5 of 5
 [-        ] process > DBcreation            -
 [6a/9657cf] process > tumorsamplenamerun (1)        [100%] 1 of 1
 [d3/5b9f35] process > MM (1)                        [100%] 1 of 1, failed: 1

问题原因与修复方案

核心原因

  1. 输入通道处理错误:使用.collect()将Nextflow通道转换为静态列表,而Nextflow进程只能接收通道作为输入,无法识别静态列表作为依赖,导致DBcreation被判定为无输入依赖,直接跳过。
  2. 输出未定义:DBcreation的输出被注释,Nextflow无法追踪其产物,也无法识别下游进程对它的依赖,进一步导致调度时忽略该进程。

修复步骤

1. 修复DBcreation的输入通道传递

将三个分散的通道合并为一个元组通道,去掉.collect(),保留通道类型传递给进程:

workflow {
  panelnormalsone(normalsamplenamerun.out)
  // 合并三个输出通道为一个包含所有文件的元组通道
  db_input = panelnormalsone.out.vcf_normal
             | combine(panelnormalsone.out.vcf_stats, by: 0)
             | combine(panelnormalsone.out.vcf_tbi, by: 0)
             | map { pair_id, vcf, stats, tbi -> [vcf, stats, tbi] }
  DBcreation(db_input)

  gatkrun.out.recal_readsbamfile
  | filter { pair_id, recal_readsbamfile -> !pair_id.contains("N") }
  | tumorsamplenamerun
}

同时修改DBcreation的输入定义为元组接收:

process DBcreation {
  // ... 其他配置不变
  input:
  tuple file(panelvcfnormal_samplefile), file(panelvcfnormal_samplefile_stats), file(panelvcfnormal_samplefile_tbi)
  // ... 其他配置不变
}

2. 正确定义DBcreation的输出

取消注释输出,并明确指定产物路径,确保Nextflow能追踪输出,同时让下游MM进程可以依赖:

process DBcreation {
  publishDir params.trim, mode : 'copy'

  input:
  tuple file(panelvcfnormal_samplefile), file(panelvcfnormal_samplefile_stats), file(panelvcfnormal_samplefile_tbi)

  output:
  path "${params.pondb}/**", emit: pondb_dir
  path "${params.ponsfile}", emit: pons_file

  script:
  sampleOpts = panelvcfnormal_samplefile.collect { p -> ("-V ${p.name}") } .join(' ')

  """ 
  ./gatk --java-options "-Xmx24G" GenomicsDBImport -R ${params.reference} -L ${params.intervalfile} --genomicsdb-workspace-path ${params.pondb} ${sampleOpts} --merge-input-intervals true --reader-threads 10 
  ./gatk --java-options "-Xmx24G" CreateSomaticPanelOfNormals -R ${params.reference} --germline-resource ${params.germlineresource} -V gendb://${params.pondb} -O ${params.ponsfile}
  """
}

3. 显式关联MM进程与DBcreation的输出

在workflow中确保MM进程接收DBcreation的输出,示例:

MM(tumorsamplenamerun.out, DBcreation.out.pons_file)

验证

修改完成后重新运行流程,检查DBcreation是否被正常调度执行,同时确认MM进程能获取到所需的输入文件并成功运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:54:56