如何解决Snakemake 未知数量的输出文件/基于中间文件定义通配符
为了加快我的工作流程,我想做一些类似于 snakemake-unknown-output-input-files-after-splitting-by-chromosome
SAMPLE = "sample_a"
rule all:
expand("results/{sample}-final-combined.bam",sample=SAMPLE)
rule exclude_blacklist:
input:
region_file = "data/{sample}.bed",blacklist = "data/blacklists/universal_blacklist.bed"
output:
"results/{sample}_blacklist-excluded.bed"
shell:
"""
bedtools intersect -v -a {input.region_file} -b {input.blacklist} > {output}
"""
rule target_regions_by_chrom:
input:
region_file ="results/{sample}_blacklist-excluded.bed",output:
temp("results/{sample}_{chrom}.bed")
script:
"scripts/split_region_by_chrom.py"
rule simulate_reads:
input:
"results/{sample}_{chrom}.bed"
output:
"results/{sample}_{chrom}.bam"
script:
"scripts/simulate_reads.py"
rule combine_regions_again:
input:
files = expand("results/{sample}_{chrom}.bam",sample=SAMPLE,chrom=get_chroms())
output:
"results/{sample}-final-combined.bam"
script:
"scripts/combine_bams.py"
工作流程应该采用带有未过滤区域的 .bed 文件,从黑名单中排除有问题的区域,按染色体拆分过滤后的 .bed 文件,然后模拟这些区域的读取(为简单起见,我不赘述细节),生成 .bam文件。最终这些 .bam 文件应该再次组合成一个输出文件。
主要问题是如何事先解决未知数量的染色体。如果我输入 .bed 文件,我会收到一些错误,因为有些文件是空的。在排除黑名单区域后,我考虑使用输入函数(此处为 get_chroms())从输出 .bed 文件(“results/{sample}_blacklist-excluded.bed”)中恢复染色体,但这会导致错误由于文件不存在而创建 DAG。
是否有人对如何解决这些问题有任何建议:
- 在不知道当前染色体的情况下,按染色体拆分 .bed 文件
- 根据工作流中的中间文件定义通配符
任何帮助将不胜感激!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。