Snakemake: неизвестные файлы вывода / ввода после расщепления по хромосоме
Чтобы ускорить определенный шаг змеиного мастерства, я бы хотел:
- разделить мой bamfile на хромосому, используя
bamtools split -in sample.bam --reference
это приводит к файлам с именемsample.REF_{chromosome}.bam
- выполнить вариант вызова на каждом в результате, например,
sample.REF_{chromosome}.vcf
- рекомбинировать полученные файлы vcf, используя vcf-concat (VCFtools), используя
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
анонимный {образец} идентификатора)
Запуск с --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
Что показывает, что подстановочный знак неверно истолкован?
Ура, Ваутер
1 ответ
Вы можете искать имена хромосом из заголовка BAM или соответствующего .fai
файл для использованной ссылки. Это можно сделать в начале вашего Snakefile. Затем вы можете использовать expand("alignment/{{sample}}.REF_{chromosome}.bam", chromosome=chromosomes)
определить выходные файлы этого правила. Не нужно использовать динамический.