【问题标题】:Snakemake: unknown output/input files after splitting by chromosomeSnakemake:染色体拆分后的未知输出/输入文件
【发布时间】:2018-09-09 12:39:10
【问题描述】:

为了加快某个蛇形步骤,我想:

  • 使用
    bamtools split -in sample.bam --reference
    将我的 bamfile 拆分为每个染色体 这导致文件名为 sample.REF_{chromosome}.bam
  • 对每个结果执行变体调用,例如sample.REF_{chromosome}.vcf
  • 使用 vcf-concat (VCFtools) 重新组合获得的 vcf 文件
    vcf-concat file1.vcf file2.vcf file3.vcf > sample.vcf

问题是我不知道哪些染色体可能在我的 bam 文件中。所以我无法准确指定bamtools split 的输出。此外,我不确定如何输入vcf-concat 来获取所有vcf 文件。

我想过使用 samples.fofn 并做类似的事情

rule split_bam:
    input:
        bam = "alignment/{sample}.bam",
        pattern = "alignment/{sample}.REF_"
    output:
        alignment/anon.splitbams.fofn
    log:
        "logs/bamtools_split/{sample}.log"
    shell:
        "bamtools split -in {input.bam} -reference && \
         ls alignment/{input.pattern}*.bam | sed 's/.bam/.vcf/' > {output}"

并使用相同的fofn 连接获得的vcf 文件。但这感觉像是一个非常尴尬的 hack,非常感谢您的建议。


编辑 20180409

正如@jeeyem 所建议的,我尝试了dynamic() 函数,但我无法弄清楚。

我完整的蛇文件在GitHub,动态部分在lines 99-133

我得到的错误是: InputFunctionException in line 44 of /home/wdecoster/DR34/SV-nanopore.smk: KeyError: 'anon___snakemake_dynamic' Wildcards: sample=anon___snakemake_dynamic anon 是匿名的 {sample} 标识符)

使用 --debug-dag 运行会给出(出错前的最后部分): candidate job cat_vcfs wildcards: sample=anon candidate job nanosv wildcards: sample=anon___snakemake_dynamic, chromosome=_ candidate job samtools_index wildcards: aligner=split_ngmlr, sample=anon___snakemake_dynamic.REF__ candidate job split_bam wildcards: sample=anon___snakemake_dynamic, chromosome=_ InputFunctionException in line 44 of /home/wdecoster/DR34/SV-nanopore.smk: KeyError: 'anon___snakemake_dynamic' Wildcards: sample=anon___snakemake_dynamic

这表明通配符被误解了?


干杯, 沃特

【问题讨论】:

  • 你有没有研究过 dynamic 的蛇形 offers 的功能?
  • @JeeYem 看起来这可能会奏效,我会试试的。感谢您的建议!
  • @JeeYem(经过一周的假期)我尝试了您的建议,但我无法弄清楚。我已经更新了我的问题。

标签: bioinformatics snakemake vpython vcf-variant-call-format vcftools


【解决方案1】:

您可以从 bam 标头或相应的 .fai 文件中查找染色体名称以供参考。这可以在 Snakefile 的开头完成。然后,您可以使用expand("alignment/{{sample}}.REF_{chromosome}.bam", chromosome=chromosomes) 定义该规则的输出文件。无需使用动态。

【讨论】:

  • 假设我想为任何 BAM 文件自动执行此过程。我当前的解决方案使用检查点(很酷的功能,顺便说一句!),我根据拆分后出现的每染色体 BAM 文件进行变体调用 - 就像在集群示例中一样。只是,在这种情况下,我知道在拆分之前(尽管不是在 DAG 的初始评估时)会有多少 BAM 文件出现,例如,来自.fai 文件。所以我知道有一个更简单的解决方案,但我知道的不够多,无法确定。提前致谢!
猜你喜欢
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 2022-07-29
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多