You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:36:03