如何串联Nextflow脚本:让TRIM输出作为BWA的配对输入
合并后的Nextflow脚本
以下是将两个脚本合并后的完整代码,实现TRIM输出直接作为BWA输入,且保证每个样本的BWA流程在其配对修剪文件生成后才启动:
#!/usr/bin/env nextflow nextflow.enable.dsl=2 process TRIM { debug true publishDir 'trimmed/', mode: 'copy', overwrite: false, pattern: "*" input: tuple val(sampleId), file(reads) output: # 仅输出Trim Galore生成的配对修剪reads文件,保留样本ID关联 tuple val(sampleId), path("*_val_{1,2}.fq.gz") script: """ trim_galore --paired -q 30 --length 30 --fastqc --phred33 $reads """ } process BWA { debug true publishDir 'bwa_aligned/', mode: 'copy', overwrite: false, pattern: "*" input: # 接收TRIM输出的样本ID和配对修剪文件 tuple val(sampleId), file(reads) output: path "*" script: """ bwa mem /exports/eddie/scratch/pdewari/hamour/genome/fEpiCoi_cnag1_curated_primary.no_mt.fa $reads -t 2 > ${sampleId}.sam """ } workflow { # 从原始配对测序文件生成通道,串联TRIM和BWA流程 Channel.fromFilePairs("$baseDir/subset_fq/*_{1,2}.fq.gz", checkIfExists:true) \ | TRIM \ | BWA }
关键修改说明
- TRIM输出优化:将原
path "*"改为tuple val(sampleId), path("*_val_{1,2}.fq.gz"),仅捕获Trim Galore生成的配对修剪reads文件,同时保留样本ID的关联,确保传递给BWA的是每个样本对应的一对有效文件。 - 直接流程串联:通过管道
|将TRIM的输出通道直接连接到BWA的输入,替代原脚本从trimmed/目录重新读取文件的方式。这种方式更高效,且Nextflow会自动保证:只有当某样本的TRIM流程完成、配对修剪文件生成后,该样本的BWA流程才会启动,完全满足你的依赖要求。 - 输入输出格式匹配:TRIM的输出格式与BWA的输入格式完全一致(均为
tuple val(sampleId), file(reads)),确保配对文件能正确传递并被BWA识别。
额外注意事项
- Trim Galore的输出文件名规则:若输入文件为
sample_1.fq.gz和sample_2.fq.gz,则输出的修剪文件为sample_1_val_1.fq.gz和sample_2_val_2.fq.gz,因此path("*_val_{1,2}.fq.gz")能精准捕获这两个文件。如果你的输入文件名格式不同,可根据实际输出调整该匹配模式。 - TRIM生成的其他文件(如FastQC报告)会通过
publishDir同步到trimmed/目录,不影响核心流程的文件传递。
内容的提问来源于stack exchange,提问作者PSD
相关产品推荐
相关产品推荐

