首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Nextflow:缺少进程所期望的输出文件

Nextflow:缺少进程所期望的输出文件
EN

Stack Overflow用户
提问于 2022-03-07 11:25:50
回答 2查看 641关注 0票数 1

我目前正在开始使用Nextflow开发生物信息学管道。下面,我创建了一个包含FASTQ文件的params.files变量,然后将其输入到fasta_files通道中。流程trimming及其脚本将此通道作为输入,然后理想情况下,我将将所有$sample".trimmed.fq.gz输出到输出通道trimmed_channel中。然而,当我运行这个脚本时,我会得到以下错误:

Missing output file(s) `trimmed_files` expected by process `trimming` (1)

我试图运行的nextflow脚本是:

代码语言:javascript
运行
复制
#! /usr/bin/env nextflow

params.files = files("$baseDir/FASTQ/*.fastq.gz")
println "fastq files for trimming:$params.files"
 
fasta_files = Channel.fromPath(params.files)
println "files in the fasta channel: $fasta_files"

process trimming {

input: 
file fasta_file from fasta_files

output: 
path trimmed_files into trimmed_channel

// the shell script to be run: 
"""
#!/usr/bin/env bash
mkdir trimming_report
cd /home/usr/Nextflow

#Finding and renaming my FASTQ files
for file in FASTQ/*.fastq.gz; do
    [ -f "\$file" ] || continue 
    name=\$(echo "\$file" | awk -F'[/]' '{ print \$2 }') #renaming fastq files. 
    sample=\$(echo "\$name" | awk -F'[.]' '{ print \$1 }') #renaming fastq files.
    echo "Found" "\$name" "from:" "\$sample"
    if [ ! -e FASTQ/"\$sample"_trimmed.fq.gz ]; then
        trim_galore -j 8 "\$file" -o FASTQ #trim the files
        mv "\$file"_trimming_report.txt trimming_report #moves to the directory trimming report 
    else
      echo ""\$sample".trimmed.fq.gz exists skipping trim galore"
    fi
done

trimmed_files="FASTQ/*_trimmed.fq.gz"
echo \$trimmed_files
"""
}

过程中的script运行良好。然而,我想知道我是误解了,还是错过了一些显而易见的东西。如果我忘了包括一些东西,请告诉我,任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-07 14:28:51

Nextflow不会将变量trimmed_files导出到它自己的作用域,除非您告诉它使用输出限定符这样做,但是这样做并不是非常惯用的。

由于您知道输出文件("FASTQ/*_trimmed.fq.gz")的模式,只需将该模式作为输出传递:

path "FASTQ/*_trimmed.fq.gz" into trimmed_channel

有些事情你做过,但可能想要避免:

  • 在NF中更改目录,不要这样做,它完全破坏了nextflow的/work文件夹设置的整个概念。
  • 在NF进程中编写bash循环,如果您正确地设置了通道,那么每个生成的进程只应该有一个任务。
票数 3
EN

Stack Overflow用户

发布于 2022-03-09 05:45:04

巴利已经提供了一些合理的建议,当然,正确的答案是:必须使用限定符声明环境变量。

但是,考虑到您的脚本定义,我认为对于如何最好地跳过以前生成的结果的执行可能存在一些误解。默认情况下启用缓存指令,当使用-resume选项启动管道时,使用相同输入集执行进程的附加尝试将导致跳过流程执行,并将生成与实际结果相同的存储数据。

为了方便起见,本例使用了Nextflow DSL 2,但不是严格要求的:

代码语言:javascript
运行
复制
nextflow.enable.dsl=2

params.fastq_files = "${baseDir}/FASTQ/*.fastq.gz"
params.publish_dir = "./results"


process trim_galore {

    tag { "${sample}:${fastq_file}" }

    publishDir "${params.publish_dir}/TrimGalore", saveAs: { fn ->
        fn.endsWith('.txt') ? "trimming_reports/${fn}" : fn
    }

    cpus 8

    input:
    tuple val(sample), path(fastq_file)

    output:
    tuple val(sample), path('*_trimmed.fq.gz'), emit: trimmed_fastq_files
    path "${fastq_file}_trimming_report.txt", emit: trimming_report

    """
    trim_galore \\
        -j ${task.cpus} \\
        "${fastq_file}"
    """
}

workflow {

    Channel.fromPath( params.fastq_files )
        | map { tuple( it.getSimpleName(), it ) }
        | set { sample_fastq_files }

    results = trim_galore( sample_fastq_files )

    results.trimmed_fastq_files.view()
}

使用以下方法运行:

代码语言:javascript
运行
复制
nextflow run script.nf \
    -ansi-log false \
    --fastq_files '/home/usr/Nextflow/FASTQ/*.fastq.gz'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71380347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档