Я использую конвейер snakemake
для запуска команды GATK MarkDuplicate
с несколькими входными файлами bam из разных групп чтения.
rule mark_duplicates:
input:
get_dedup_input
output:
bam=temp("bams/{patient}.{sample_type}.markdups.bam"),
md5=temp("bams/{patient}.{sample_type}.markdups.bam.md5"),
metrics="qc/gatk/{patient}_{sample_type}_dup_metrics.txt"
conda:
"../envs/gatk.yml"
shell:
"""
gatk MarkDuplicates -I {input} -O {output.bam} -M {output.metrics} \
--CREATE_MD5_FILE true --ASSUME_SORT_ORDER "queryname"
"""
get_dedup_input
возвращает список файлов ввода bam. MarkDuplicates
требует, чтобы каждый входной файл был указан с флагом -I
. Если бы у меня был только один файл bam, я мог бы просто написать -I {input}
, но это не удалось, потому что это указывает -I file1.bam file2.bam
, это должно быть -I file1.bam -I file2.bam
. Каков наилучший способ отформатировать ввод, чтобы каждый входной файл указывался как -I [input file]
?
Вот два сценария ios ниже, чтобы уточнить, как будут выглядеть команды ввода, вывода и оболочки, если я должны были запустить команду вручную. Для краткости я опустил некоторые несущественные MarkDuplicate
флаги:
Одна группа чтения
Inputs: patient101.normal.rg1.bam
Output: patient101.normal.markdups.bam
Shell:
gatk MarkDuplicates -I patient101.normal.rg1.bam \
-O patient101.normal.markdups.bam \
-M metrics.txt
Две группы чтения
Inputs: patient101.normal.rg1.bam, patient101.normal.rg2.bam
Output: patient101.normal.markdups.bam
Shell:
gatk MarkDuplicates -I patient101.normal.rg1.bam \
-I patient101.normal.rg2.bam \
-O patient101.normal.markdups.bam \
-M metrics.txt