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

使用Snakemake 7.32.4运行process_radtags遇输出文件缺失错误求排查

Snakemake脚本输出文件缺失问题排查与修正

你的脚本存在几个关键问题,导致Snakemake无法正确追踪输出文件:

问题分析

  1. 输入文件匹配错误:规则demultiplex的输入用expand直接生成了所有runpool和pool的组合文件,这会导致每个{runpool}对应的规则尝试处理所有池的fastq,而不是当前runpool下的文件,进而导致输出文件生成路径或内容不符合预期。
  2. 输出语法错误:输出部分的缩进混乱,directory定义后后续输出没有正确缩进,属于语法错误,Snakemake无法正确解析输出列表。
  3. 日志重复定义:同时在output和log字段中定义了日志文件,会导致Snakemake重复校验该文件,且process_radtags的重定向已经会生成日志,无需在output中额外声明。
  4. 通配符关联错误:glob_wildcards获取的RUNPOOLS和POOLS是一一对应的,但原脚本的expand会生成全量组合,破坏了这种对应关系。

修正后的脚本

# 正确获取每个runpool对应的pool,确保一一对应
RUNPOOLS, POOLS = glob_wildcards('/mnt/lz01/mel/cld1061/AScott_Data/raw_data/{runpool}/{pool}_R1_001.fastq.gz')

# 创建runpool到pool的映射,确保每个runpool只处理自己的pool
runpool_to_pool = dict(zip(RUNPOOLS, POOLS))

rule all:
    input:
        expand('02demulti_output/{runpool}/{runpool}.1.fq.gz', runpool=RUNPOOLS),
        expand('02demulti_output/{runpool}/{runpool}.2.fq.gz', runpool=RUNPOOLS),
        expand('10-logs/process_radtags/{runpool}.log', runpool=RUNPOOLS)

### demultiplexing
rule demultiplex:
    input:
        fastq_r1='/mnt/lz01/mel/cld1061/AScott_Data/raw_data/{runpool}/{pool}_R1_001.fastq.gz',
        fastq_r2='/mnt/lz01/mel/cld1061/AScott_Data/raw_data/{runpool}/{pool}_R2_001.fastq.gz',
        # 使用映射获取当前runpool对应的pool
        pool=lambda wildcards: runpool_to_pool[wildcards.runpool]
    output:
        directory('02demulti_output/{runpool}'),
        '02demulti_output/{runpool}/{runpool}.1.fq.gz',
        '02demulti_output/{runpool}/{runpool}.2.fq.gz'
    log:
        '10-logs/process_radtags/{runpool}.log'
    shell:
        '''mkdir -p {output[0]}
module load anaconda/colsa
conda activate stacks-2.5
process_radtags -P -i gzfastq -1 {input.fastq_r1} -2 {input.fastq_r2} -o {output[0]} -b ../01-info_files/barcodes.txt -r -D --index_null --disable_rad_check --retain_header --barcode_dist_1 1 2> {log}'''

关键修正点说明

  • 输入匹配:去掉expand,改用通配符{runpool}和{pool},通过lambda函数从映射中获取当前runpool对应的pool,确保每个规则实例只处理对应runpool下的fastq文件。
  • 输出语法:统一输出列表的缩进,确保所有输出项都在output字段的列表中,directory用于声明输出目录,Snakemake会自动检查目录是否存在且包含预期文件。
  • 日志处理:仅保留log字段定义日志文件,shell命令中通过2> {log}将错误输出重定向到日志,符合Snakemake的日志追踪逻辑。
  • 映射关联:创建runpool_to_pool字典,确保每个runpool对应正确的pool,避免全量组合的错误。

内容的提问来源于stack exchange,提问作者cdietz97

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:43:10