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

Snakemake规则中命名不一致的输入样本配对及分析实现问询

解决Snakemake中样本配对与多目录输出的问题

我之前处理过类似的样本配对分析场景,核心思路是先明确样本的配对关系,再通过Snakemake的wildcards和规则依赖来实现自动配对与目录管理。下面是针对你需求的具体实现方案:

1. 先定义样本配对关系

在Snakefile开头用Python字典明确所有配对,这样后续规则可以直接调用,后续新增/修改配对也只需要改这一处:

# 定义样本配对:键是输出文件夹名,值是对应的两个样本
sample_pairs = {
    "PT1vsT5": ("PT1", "T5"),
    "S6vsT7": ("S6", "T7"),
    "S1vsT20": ("S1", "T20")
}

# 生成所有需要处理的配对目录列表,方便后续批量生成目标文件
pair_dirs = list(sample_pairs.keys())

2. 创建配对结果文件夹

Snakemake需要可追踪的目标,所以我们可以给每个配对目录生成一个空标记文件,确保目录存在:

rule create_pair_dirs:
    output:
        directory("{pair_dir}/.dir_created")  # 用空文件标记目录已创建
    shell:
        "mkdir -p {pair_dir} && touch {output}"

3. Manta分析核心规则

接下来是Manta分析的规则,通过wildcard关联配对目录,动态获取对应两个样本的输入文件,结果直接输出到对应目录:

rule run_manta:
    input:
        # 根据配对目录动态获取两个样本的输入文件(假设输入是bam,可根据实际修改)
        sample1 = lambda wildcards: f"input_data/{sample_pairs[wildcards.pair_dir][0]}.bam",
        sample2 = lambda wildcards: f"input_data/{sample_pairs[wildcards.pair_dir][1]}.bam",
        # 依赖目录创建完成
        dir_marker = "{pair_dir}/.dir_created"
    output:
        # 假设Manta的核心结果是这个压缩vcf,可根据实际调整路径
        "{pair_dir}/manta/results/variants/somatic.vcf.gz"
    shell:
        """
        # 配置Manta流程,参数根据你的参考基因组、样本类型调整
        configManta.py \
            --normal {input.sample1} \
            --tumor {input.sample2} \
            --referenceFasta ref_genome.fa \
            --runDir {pair_dir}/manta
        
        # 启动Manta分析,-j指定线程数
        python {pair_dir}/manta/runWorkflow.py -m local -j 4
        """

4. GERM相关任务规则

GERM任务可以直接依赖Manta的结果,继续在对应配对目录下处理:

rule run_germ_analysis:
    input:
        manta_vcf = "{pair_dir}/manta/results/variants/somatic.vcf.gz"
    output:
        "{pair_dir}/germ_results/germ_filtered.vcf"
    shell:
        """
        # 替换成你的GERM处理命令,比如过滤 germline 变异、注释等
        mkdir -p {pair_dir}/germ_results
        germ_process_tool -i {input.manta_vcf} -o {output} --filter-germ
        """

5. 设置流程最终目标

在Snakefile末尾定义最终要生成的所有文件,让Snakemake自动触发整个流程:

rule all:
    input:
        expand("{pair_dir}/germ_results/germ_filtered.vcf", pair_dir=pair_dirs)

关键说明

  • 配对关系集中管理,后续调整样本配对只需要修改sample_pairs字典,无需改动规则逻辑;
  • 用lambda wildcards动态映射样本与配对目录,完美解决输入数据命名不一致的问题;
  • 每个配对的结果都隔离在独立文件夹,既避免文件混乱,也方便后续单独复盘某组样本的分析结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:25:02