我目前正在开始使用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脚本是:
#! /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
运行良好。然而,我想知道我是误解了,还是错过了一些显而易见的东西。如果我忘了包括一些东西,请告诉我,任何帮助都是非常感谢的!
发布于 2022-03-07 14:28:51
Nextflow不会将变量trimmed_files
导出到它自己的作用域,除非您告诉它使用输出限定符这样做,但是这样做并不是非常惯用的。
由于您知道输出文件("FASTQ/*_trimmed.fq.gz"
)的模式,只需将该模式作为输出传递:
path "FASTQ/*_trimmed.fq.gz" into trimmed_channel
有些事情你做过,但可能想要避免:
/work
文件夹设置的整个概念。发布于 2022-03-09 05:45:04
巴利已经提供了一些合理的建议,当然,正确的答案是:必须使用限定符声明环境变量。
但是,考虑到您的脚本定义,我认为对于如何最好地跳过以前生成的结果的执行可能存在一些误解。默认情况下启用缓存指令,当使用-resume
选项启动管道时,使用相同输入集执行进程的附加尝试将导致跳过流程执行,并将生成与实际结果相同的存储数据。
为了方便起见,本例使用了Nextflow DSL 2,但不是严格要求的:
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()
}
使用以下方法运行:
nextflow run script.nf \
-ansi-log false \
--fastq_files '/home/usr/Nextflow/FASTQ/*.fastq.gz'
https://stackoverflow.com/questions/71380347
复制相似问题