【发布时间】: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