对于给定规则,snakemake中具有资源使用永久性的最佳方法是什么?这意味着给定规则的resources
会继承以下规则。一个示例是在随后的规则使用分区时,一次限制一个输入bam文件在分区(例如/dev/shm
)中的大小:
samples = ["sample1", "sample2", "sample3"]
motifs = ["motif_1", ... , "motif_n"]
rule all:
input: expand("output/{sample}.{motif}.out", sample=samples, motif=motifs)
rule copy_bam_to_shm:
input: "{sample}.bam"
output: temporary("/dev/shm/{sample}.bam")
resources: shm_usage = 1
shell: "cp {input} {output}"
rule process_motif:
input:
bam = rules.copy_bam_to_shm.output,
motif = "{motif}.bed"
output: "output/{sample}.{motif}.out"
shell: "run_bed_bam_and_beyond.py {input.bam} {input.bed} > {output}"
我想要的是,shm_usage
中声明的copy_bam_to_shm
资源约束在我为当前样本运行所有后续的process_motif
步骤时仍保持不变-使用以下命令执行后一个规则尽可能多的并发作业。仅在完成 sample1.bam 后,才会将 sample2.bam 复制到/dev/shm
并进行处理,依此类推。如果不清楚,请参阅下面的伪代码以了解我需要的行为:
# Pseudocode
for sample in samples
copy sample.bam to /dev/shm
for motif in motifs
process motif (in parallel with as many motifs as possible)
remove sample.bam from /dev/shm
done