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
相关产品推荐
相关产品推荐

