nextflow - 将 `publishDir` 的路径传递给 NextFlow 进程

标签 nextflow

我使用 NextFlowDSL2 语法。我想将最终结果路径定义为命令行参数。然而,据我所知,NextFlow 进程无法识别 directive 范围内的 input 变量(请参阅下面的最小示例)。

最终问题:如何将“基本目录”传递给可以附加到该路径的进程(例如,publishDir("${results_dir}/MY_PROC_RESULTS/",模式=“复制”))?如果这不是最佳方法,也欢迎其他建议。

非常感谢任何帮助!

这是一个最小的示例:

MY_WORKFLOW.nf

/*
 * Make this pipeline a nextflow 2 implementation
 */
nextflow.enable.dsl=2

include {SUB_WORKFLOW_WF} from './SUB_WORKFLOW_WF_PROCS.nf'

/*
 * Define the directory to publish final results in.
 */
params.results_dir = "${projectDir}/results"

results_dir = params.results_dir

workflow{
    SUB_WORKFLOW_WF(results_dir)
}

SUB_WORKFLOW_WF_PROCS.nf

workflow SUB_WORKFLOW_WF {
    take:
        results_dir

    main:
        println results_dir // This works
        MY_PROC(results_dir)
}

process MY_PROC {
    /*
     * Workflow fails with ERROR 1 if the following line is included. Fails
     * with ERROR 2 if the following line is excluded.
     */
    println $results_dir
    publishDir("${results_dir}/MY_PROC_RESULTS/", mode = "copy")

    input:
        path(results_dir)

    script:
        """
        echo "Hello"
        """
}

结果

错误 1

No such variable: $results_dir

 -- Check script './SUB_WORKFLOW_WF_PROCS.nf' at line: 11 or see '.nextflow.log' file for more details

错误 2

Error executing process > 'SUB_WORKFLOW_WF:MY_PROC'

Caused by:
  Not a valid PublishDir entry [org.codehaus.groovy.runtime.GStringImpl] null/MY_PROC_RESULTS

最佳答案

您收到第一个错误,因为全局范围内没有“$results_dir”变量。第二个错误有点神秘,但实际上只是一个语法错误。 “模式”声明只需要一个冒号,就像 Groovy Map 一样来分隔键和值:

publishDir("${results_dir}/MY_PROC_RESULTS/", mode: "copy")

因此,不要传递变量,而是首先在脚本开头的任何“include”声明之前定义管道参数。这些参数将从包含上下文继承。例如:

MY_WORKFLOW.nf

nextflow.enable.dsl=2

params.publish_dir = './results'

include { SUB_WORKFLOW_WF } from './SUB_WORKFLOW_WF_PROCS.nf'


workflow{
    
    SUB_WORKFLOW_WF()
}

SUB_WORKFLOW_WF_PROCS.nf

workflow SUB_WORKFLOW_WF {

    MY_PROC()
}

process MY_PROC {
    
    publishDir(
        path: "${params.publish_dir}/MY_PROC_RESULTS",
        mode: 'copy',
    )

    output:
    path "proc_results.txt"

    """
    touch "proc_results.txt"
    """
}

结果:

$ nextflow run ./MY_WORKFLOW.nf 
N E X T F L O W  ~  version 21.04.3
Launching `./MY_WORKFLOW.nf` [shrivelled_montalcini] - revision: d31b4930b9
executor >  local (1)
[2b/08e223] process > SUB_WORKFLOW_WF:MY_PROC [100%] 1 of 1 ✔
$ find ./results/MY_PROC_RESULTS/proc_results.txt 
./results/MY_PROC_RESULTS/proc_results.txt

关于nextflow - 将 `publishDir` 的路径传递给 NextFlow 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70689180/

相关文章:

pipeline - Nextflow 中的条件管道

linux - 1 个进程中的 Nextflow 错误停止所有其他进程

Nextflow DSL2 : how to combine outputs (channels) from multiple processes into input of another process by part of filename?

bioinformatics - 如何使用 `FastQ` 函数下载 `Nextflow` 中的 `fromSRA` 文件列表?

下一个流 : Is it possible to tranform a queue channel to a value channel?

groovy - 将以前的 bash 调度程序提交脚本合并到 NextFlow 工作流中的最类似于 NextFlow (DSL2) 的方式

nextflow - nextflow 进程之一将无法一致地运行/完成

bash - 2 个进程,但在 nextflow 管道中不相关

directed-acyclic-graphs - 你能让 Nextflow DAG 可视化变得漂亮吗?

nextflow - 如何根据映射到染色体的读取将bam文件拆分为单独的bams