Snakemake规则合并问题:如何关联自动生成的{sample}_unmapped.bam
解决方法
1. 提取library_params.txt中的样本列表
首先需要从library_params.txt中获取所有样本名称,让Snakemake明确要生成的{sample}_unmapped.bam文件范围。假设文件为制表符分隔、第一列是样本名,可在Snakefile开头添加以下代码:
import pandas as pd # 根据实际文件格式调整读取逻辑,这里假设第一列是样本名 library_df = pd.read_csv("library_params.txt", sep="\t") samples = library_df.iloc[:, 0].tolist()
2. 修改rule1,显式声明输出文件
问题核心是Snakemake无法追踪{sample}_unmapped.bam——因为你没把它声明为rule1的输出。必须显式添加该文件到output,让Snakemake将其视为rule1的产物:
rule rule1: input: basecalls_dir="/RUN1/Data/Intensities/BaseCalls/", barcodes_dir=directory("barcodes"), library_params="library_params.txt", metrics_file="metrics_output.txt" output: log="barcodes.log", # 声明所有样本的unmapped.bam为规则产物 unmapped_bams=expand("{sample}_unmapped.bam", sample=samples) shell: """ java -Djava.io.tmpdir=/path/to/tmp -Xmx2g -jar picard.jar IlluminaBasecallsToSam BASECALLS_DIR={input.basecalls_dir} BARCODES_DIR={input.barcodes_dir} LANE=1 READ_STRUCTURE=151T8B9M8B151T RUN_BARCODE=run1 LIBRARY_PARAMS={input.library_params} MOLECULAR_INDEX_TAG=RX ADAPTERs_TO_CHECK=INDEXED READ_GROUP_ID=BO NUM_PROCESSORS=2 IGNORE_UNEXPECTED_BARCODES=true > {output.log} """
3. 调整rule2的依赖逻辑
去掉rule2对barcodes.log的依赖(日志文件写入完成不代表bam文件生成完毕),直接依赖对应样本的{sample}_unmapped.bam,这样Snakemake会自动确保rule1生成该文件后再运行rule2:
rule rule2: input: infile="{sample}_unmapped.bam" params: ref="ref.fasta" output: outfile="{sample}.mapped.bam" shell: """ java -Djava.io.tmpdir=/path/to/tmp -Xmx2g -jar picard.jar SamToFastq I={input.infile} F=/dev/stdout INTERLEAVE=true | bwa mem -p -t 7 {params.ref} /dev/stdin | java -Djava.io.tmpdir=/path/to/tmp -Xmx4g -jar picard.jar MergeBamAlignment UNMAPPED={input.infile} ALIGNED=/dev/stdin O={output.outfile} R={params.ref} SORT_ORDER=coordinate MAX_GAPS=-1 ORIENTATIONS=FR """
4. 添加全局目标(可选)
如果需要一次性生成所有样本的{sample}.mapped.bam,可在Snakefile末尾添加:
rule all: input: expand("{sample}.mapped.bam", sample=samples)
关键说明
- Snakemake完全依赖规则的输入输出建立调度关系,只有显式声明为output的文件,才会被视为规则产物,后续规则才能等待其生成。
- 使用
expand函数可以根据样本列表批量生成文件路径,确保规则覆盖所有样本。 - 直接依赖产物文件而非日志,是保证依赖关系可靠的核心。
内容的提问来源于stack exchange,提问作者user3224522
相关产品推荐
相关产品推荐

