簡體   English   中英

Snakemake未知數量output個文件/根據中間文件定義通配符

[英]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。

有沒有人有任何建議如何解決這些問題:

  1. 按染色體拆分 a.bed 文件,同時不知道當前的染色體
  2. 根據工作流中的中間文件定義通配符

任何幫助將不勝感激!

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM