2

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

  • 使用此结果将我的 bamfile 每个染色体拆分
    bamtools split -in sample.bam --reference
    为名为的文件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 文件。但这感觉就像一个非常尴尬的黑客,我很感激你的建议。


编辑 20180409

正如@jeeyem 所建议的,我尝试了这些dynamic()功能,但我无法弄清楚。

我完整的蛇文件在GitHub 上,动态部分在第 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

这表明通配符被误解了?


干杯,沃特

4

1 回答 1

0

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

于 2018-04-10T09:55:35.510 回答