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

Snakemake使用checkpoint条件执行规则时报IndexError列表越界问题

问题根因

  • multiqc规则的输入通过expand硬编码了所有初始样本的fastqc预处理结果作为必须输入,导致Snakemake强制为每个样本调度fastqc_pretrim任务,完全不考虑样本是否通过basecall质控生成了有效fastq文件。
  • 对于未通过质控的样本,aggregate_input函数会返回空列表,而fastqc的wrapper会默认尝试提取输入列表的第一个元素作为输入文件,空列表取值直接触发IndexError: list index out of range报错。
  • 你日志中提示的The flag 'directory' used in rule guppy_basecall_persample is only valid for outputs, not inputs.属于额外的配置告警,因为directory()装饰器仅对output字段生效,不能用来修饰input。

修改方案

第一步:修复guppy_basecall_persample规则的输入告警

去掉input字段多余的directory()装饰器:

checkpoint guppy_basecall_persample:                                                                                                                                                                          
    input:                                                                                                                                        
        directory=inputdirectory,                                                                                                                                                                      
        samplelist="lists/{sample}.txt",
    # 其余配置保持不变

第二步:新增动态收集有效fastqc输入的函数

等所有basecall任务执行完成后,仅收集有合格fastq的样本对应的fastqc结果路径:

import os
import glob

def get_valid_fastqc_zips(wildcards):
    valid_outputs = []
    for sample in SAMPLES:
        # 获取该样本basecall后的输出目录
        bc_output_dir = checkpoints.guppy_basecall_persample.get(sample=sample).output[1]
        # 检查pass目录下是否有生成的fastq.gz文件
        if glob.glob(os.path.join(bc_output_dir, "pass", "*.fastq.gz")):
            valid_outputs.append(f"qc/fastqc_pretrim/{sample}_fastqc.zip")
    return valid_outputs

第三步:修改multiqc规则的输入

把原来硬展开所有样本的expand语句替换为上面的动态函数:

rule multiqc:
    input:
        get_valid_fastqc_zips
    output:
        "qc/multiqc.html"
    params:
        ""
    log:
        "logs/multiqc.log"
    wrapper:
        "0.77.0/bio/multiqc"

修改后逻辑说明

Snakemake会先跑完所有样本的basecall任务,再根据basecall的结果动态判断哪些样本需要执行fastqc预处理,仅合格样本会触发对应任务,不会再为空样本调度fastqc任务,自然不会出现空列表索引报错的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:27:03