如何在规则中确保输出文件夹已正确创建? 我应该添加每个预期结果文件吗?
以某种方式与snakemake define folder as output相关但在我的例子中,指定的“输出”是目录路径和所有结果文件的前缀的组合(它们将是多个)
以下命令创建文件夹路径 Analysis/MosDepth 并将文件添加到该路径:
gt0.mosdepth.global.dist.txt
gt0.mosdepth.region.dist.txt
gt0.per-base.bed.gz
gt0.per-base.bed.gz.csi
gt0.regions.bed.gz
gt0.regions.bed.gz.csi
rule MosDepth:
input:
bam = "Analysis/Minimap2/"+UnpackedRawFastq+".bam",
bed = "ReferenceData/"+UnpackedGenomeGFF+"_exons.bed"
output:
pfx = "Analysis/MosDepth/gt0"
threads: config["threads"]
shell:
"mosdepth -t {threads} -b {input.bed} {output.pfx} {input.bam}"
我目前只有规则 all: 中的一个文件,这是否足够,或者是否有更好的方法来确保最深度运行良好,并且不会在以后重新运行时重做?
rule all:
input:
"Analysis/MosDepth/gt0.regions.bed.gz"
最佳答案
我会推荐这样的东西:
mos_out = ['gt0.mosdepth.global.dist.txt', 'gt0.mosdepth.region.dist.txt', 'gt0.per-base.bed.gz', 'gt0.per-base.bed.gz.csi', 'gt0.regions.bed.gz', 'gt0.regions.bed.gz.csi']
rule MosDepth:
input:
bam = "Analysis/Minimap2/"+UnpackedRawFastq+".bam",
bed = "ReferenceData/"+UnpackedGenomeGFF+"_exons.bed"
output:
expand("Analysis/MosDepth/{mos_out}", mos_out=mos_out)
params:
pfx = "Analysis/MosDepth/gt0"
threads: config["threads"]
shell:
"mosdepth -t {threads} -b {input.bed} {params.pfx} {input.bam}"
如果规则未创建其中一个输出文件,snakemake 将为您删除所有输出文件,并抛出错误。
关于Snakemake,以前缀作为输出,包括路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57612042/