![](/img/trans.png)
[英]Snakemake - Wildcards in input files cannot be determined from output files
[英]Snakemake unknown number of output files / defining wildcards based on intermediate files
為了加快我的工作流程,我想做一些類似於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 文件,從黑名單中排除有問題的區域,按染色體拆分 filtered.bed 文件,然后模擬這些區域的讀取(為簡單起見,我不向您介紹細節),生成 .bam 文件。 最終這些.bam 文件應該再次組合成一個 output 文件。
主要問題是如何事先解決未知數目的染色體。 如果我使用 input.bed 文件,我會得到一些錯誤,因為有些文件是空的。 我考慮過在排除黑名單區域后使用輸入 function(此處為 get_chroms())從 output.bed 文件(“results/{sample}_blacklist-excluded.bed”)恢復染色體,但這會導致錯誤由於文件不存在而創建 DAG。
有沒有人有任何建議如何解決這些問題:
任何幫助將不勝感激!
Snakemake 的動態文件功能可能是你所需要的:
只要有一條規則在執行規則之前不知道 output 個文件的數量,就可以使用動態文件。
您應該在輸入和 output 對應項中使用dynamic()
修飾符包裝"results/{sample}_{chrom}.bed"
:
rule target_regions_by_chrom:
output:
dynamic("results/{sample}_{chrom}.bed")
rule simulate_reads:
input:
dynamic("results/{sample}_{chrom}.bed")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.