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

使用Snakemake Checkpoint分块处理后合并文件的通配符缺失问题

解决方案

核心问题是合并规则仅持有library通配符,无法直接匹配需要library/run/side的checkpoint输出。解决方式是从已知的library-run-side映射中遍历所有对应组合,逐个获取每个组合的chunk结果,再汇总为合并规则的输入。

步骤1:添加辅助函数获取library对应的run和side

假设你的LIBRARY_RUN_FASTQS结构为{library: {run: [R1_fastq, R2_fastq]}},先写一个函数提取指定library下的所有run和side组合:

def get_library_runs_sides(library):
    # 从全局变量中提取当前library的所有run,每个run对应side 1和2
    runs = LIBRARY_RUN_FASTQS[library].keys()
    return [(run, side) for run in runs for side in ["1", "2"]]

步骤2:修改分块文件收集函数

更新get_pair_chunks,遍历当前library的所有run+side组合,逐个调用checkpoint获取chunk_id,再生成对应的已处理分块路径:

def get_pair_chunks(wildcards):
    library = wildcards.library
    all_parsed_chunks = []
    
    # 遍历当前library下的所有run和side
    for run, side in get_library_runs_sides(library):
        # 调用checkpoint获取该run+side组合的输出目录
        checkpoint_dir = checkpoints.chunk_fastq.get(
            library=library, run=run, side=side
        ).output[0]
        # 提取目录下的所有chunk_id
        chunk_ids = glob_wildcards(f"{checkpoint_dir}/{{chunk_id}}.fastq.gz").chunk_id
        # 生成对应的parsed chunks路径
        run_side_chunks = expand(
            "outputs/parsed_chunks/{library}.{run}.{chunk_id}.{custom_genome_name}.pairs.gz",
            library=library,
            run=run,
            chunk_id=chunk_ids,
            custom_genome_name=custom_genome_name,
        )
        all_parsed_chunks.extend(run_side_chunks)
    
    return all_parsed_chunks

步骤3:验证中间规则的通配符匹配

确保parse_sort_chunks的输出通配符{chunk_id,[0-9]+}与checkpoint生成的数字型chunk_id(split -d生成的00、01等)匹配,避免路径匹配失败。

关键说明

  • 利用已知的library-run映射关系,绕开合并规则缺少run/side通配符的限制,通过遍历组合补全checkpoint所需的完整参数
  • 每个run+side组合的chunk结果会被单独收集,最终汇总为整个library的所有分块文件,满足合并需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:03:20