Nextflow:如何将输出(多个文件)从publishdir传递到下一个进程?

Per*_*ika 2 process nextflow publishdir

我有一个进程生成两个我感兴趣的文件,hitsort.cls 和 contigs.fasta。我使用publishdir输出这些:

process RUN_RE {
    publishDir "$baseDir/RE_output", mode: 'copy'
  
    input:
    file 'interleaved.fq'

    output:
    file "${params.RE_run}/seqclust/clustering/hitsort.cls"
    file "${params.RE_run}/contigs.fasta"

    script:
    """
    some_code

    """

  }
Run Code Online (Sandbox Code Playgroud)

现在,我需要这两个文件作为另一个进程的输入,但我不知道该怎么做。

我尝试过调用这个过程

NEXT_PROCESS(params.hitsort, params.contigs)
Run Code Online (Sandbox Code Playgroud)

同时将输入指定为:

process NEXT_PROCESS {
  
    input:
    path hitsort
    path contigs
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为只使用基本名称而不是完整路径。基本上我想要的是等待 RUN_RE 完成,然后使用它输出的两个文件进行下一个进程。

Ste*_*eve 6

最好避免访问publishDir中的文件,因为:

文件以异步方式复制到指定目录中,因此在流程执行结束时它们可能无法立即在发布的目录中可用。因此,进程发布的文件不得其他下游进程访问。

因此,建议确保您的进程仅访问工作目录(即./work)中的文件。这意味着:最好避免输入和输出声明中使用绝对路径之类的内容。这也将有助于确保您的工作流程是可移植的。

nextflow.enable.dsl=2

params.interleaved_fq = './path/to/interleaved.fq'
params.publish_dir = './results'
Run Code Online (Sandbox Code Playgroud)
process RUN_RE {

    publishDir "${params.publish_dir}/RE_output", mode: 'copy'

    input:
    path interleaved

    output:
    path "./seqclust/clustering/hitsort.cls", emit: hitsort_cls
    path "./contigs.fasta", emit: contigs_fasta

    """
    # do something with ${interleaved}...
    ls -l "${interleaved}"

    # create some outputs...
    mkdir -p ./seqclust/clustering
    touch ./seqclust/clustering/hitsort.cls
    touch ./contigs.fasta
    """
}
Run Code Online (Sandbox Code Playgroud)
process NEXT_PROCESS {

    input:
    path hitsort
    path contigs

    """
    ls -l
    """
}
Run Code Online (Sandbox Code Playgroud)
workflow {

    interleaved_fq = file( params.interleaved_fq )

    NEXT_PROCESS( RUN_RE( interleaved_fq ) )
}
Run Code Online (Sandbox Code Playgroud)

上述工作流程块实际上与以下相同:

workflow {

    interleaved_fq = file( params.interleaved_fq )

    RUN_RE( interleaved_fq )

    NEXT_PROCESS( RUN_RE.out.hitsort_cls, RUN_RE.out.contigs_fasta )
}
Run Code Online (Sandbox Code Playgroud)