Nextflow如何实现多个样本fq.gz测序数据的批量处理?
问题排查
- 硬编码参数限制单样本处理:代码固定
params.sampleName为单个样本值,fastq路径仅匹配单个样本目录下的文件,无法自动扫描所有样本目录的测序数据 - 合并进程逻辑错误:使用
bamFiles_ch.collect()会收集所有样本的所有比对BAM文件,合并为同一个固定名称的文件,没有按样本维度做分组,不符合多样本各自合并的需求
修复后完整代码
// 去掉固定sampleName参数,改为匹配所有样本目录下的fq文件 params.fastq_path = "data/*/*{1,2}.fq.gz" params.ref = "ab.fa" ref = file(params.ref) // 构建通道时自动提取样本ID(即fastq所在二级目录名) fastq_files = Channel.fromFilePairs(params.fastq_path) .map { laneId, reads -> def sampleId = reads[0].toRealPath().getParent().baseName return tuple(sampleId, laneId, reads) } process foo { input: set sampleId, laneId, file(reads) from fastq_files output: tuple(sampleId, file("${laneId}.bam")) into bamFiles_ch script: """ bwa-mem2 mem -t 8 ${ref} ${reads[0]} ${reads[1]} | samtools sort -@8 -o ${laneId}.bam samtools index -@8 ${laneId}.bam """ } process samToolsMerge { publishDir "./aligned_minimap/", mode: 'copy', overwrite: 'false' input: // 按样本ID分组,每个样本对应一组所属的lane BAM文件 set sampleId, file(bamFiles) from bamFiles_ch.groupTuple() output: file("${sampleId}.bam") file("${sampleId}.bam.bai") script: """ samtools merge ${sampleId}.bam ${bamFiles} samtools index -@ 8 ${sampleId}.bam """ }
主要修改说明
- 删除了固定的单样本
sampleName参数,调整fastq路径匹配规则为扫描data下所有子目录的fq.gz文件 - 通道构造阶段提取每个测序文件所属的样本ID,为后续按样本分组做准备
- 调整
foo进程输出携带样本ID,方便后续分组 - 合并进程替换
collect()为groupTuple()按样本ID分组,每个样本单独生成对应的合并BAM和索引文件
使用方法
直接执行以下命令即可自动处理所有样本:
nextflow run main.nf
如需自定义参考基因组路径,可添加参数:
nextflow run main.nf --ref /path/to/your/reference.fa
内容的提问来源于stack exchange,提问作者Arijit Panda
相关产品推荐
相关产品推荐

