Snakemake运行svaba时如何为多个bam输入分别添加-t参数前缀
Snakemake中为多输入文件自动添加重复参数标记的实现方法
Svaba要求每个输入bam文件前必须加-t标记,直接传入Snakemake生成的文件列表时会默认用空格拼接所有路径,仅第一个文件能匹配到前置的-t,可通过以下两种方式修正,同时已修复原代码中output块的缩进语法错误:
方法1:最小改动,shell块内直接拼接(推荐)
利用Python字符串的join方法处理bam文件列表,仅需修改shell行的写法即可,规则逻辑清晰改动量小:
SAMPLES = ['1', '2', '3', '4'] rule svaba_run: input: ref="references/hg19.fa", bam=expand("sample{sample}.bam", sample=SAMPLES) output: indels="test.svaba.indel.vcf", sv="test.svaba.sv.vcf" shell: "svaba run -g {input.ref} -t " + " -t ".join(input.bam)
该写法最终生成的shell命令完全符合svaba的格式要求:
svaba run -g references/hg19.fa -t sample1.bam -t sample2.bam -t sample3.bam -t sample4.bam
后续修改SAMPLES列表增减样本时,无需调整shell部分代码,会自动适配。
方法2:params块预构造参数(适合复杂场景)
如果后续需要给bam输入添加更多附加参数,可以把参数拼接逻辑放在params块中,shell块只负责调用,可读性和可维护性更强,兼容所有Snakemake版本:
SAMPLES = ['1', '2', '3', '4'] rule svaba_run: input: ref="references/hg19.fa", bam=expand("sample{sample}.bam", sample=SAMPLES) output: indels="test.svaba.indel.vcf", sv="test.svaba.sv.vcf" params: # 提前生成所有带-t标记的bam参数字符串 bam_input = " ".join([f"-t {bam_path}" for bam_path in expand("sample{sample}.bam", sample=SAMPLES)]) shell: "svaba run -g {input.ref} {params.bam_input}"
注意:原示例代码中
sv="test.svaba.sv.vcf"一行缩进错误,未归到output块下,运行时会触发Snakemake语法报错,上述两种修正写法都已修复该问题。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

