в строке output.tmp это закомментировано в моем текущем Snakefile, я просто забыл удалить его здесь.
я проблема с выяснением, как заставить директиву input выбирать только все{samples}
файлы в правиле ниже.
rule MarkDup:
input:
expand("Outputs/MergeBamAlignment/{samples}_{lanes}_{flowcells}.merged.bam", zip,
samples=samples['sample'],
lanes=samples['lane'],
flowcells=samples['flowcell']),
output:
bam = "Outputs/MarkDuplicates/{samples}_markedDuplicates.bam",
metrics = "Outputs/MarkDuplicates/{samples}_markedDuplicates.metrics",
shell:
"gatk --java-options -Djava.io.tempdir=`pwd`/tmp \
MarkDuplicates \
$(echo ' {input}' | sed 's/ / --INPUT /g') \
-O {output.bam} \
--VALIDATION_STRINGENCY LENIENT \
--METRICS_FILE {output.metrics} \
--MAX_FILE_HANDLES_FOR_READ_ENDS_MAP 200000 \
--CREATE_INDEX true \
--TMP_DIR Outputs/MarkDuplicates/tmp"
В настоящее время он создает правильно именованные выходные файлы, но выбирает все файлы, которые соответствуют шаблону, на основе всех подстановочных знаков. Так что я, наверное, на полпути. Я пытался изменить{samples}
в{{samples}}
во входной директиве как таковой:
expand("Outputs/MergeBamAlignment/{{samples}}_{lanes}_{flowcells}.merged.bam", zip,
lanes=samples['lane'],
flowcells=samples['flowcell']),`
но это как-то нарушило предыдущее правило. Таким образом, решение что-то вроде
input:
"{sample}_*.bam"
Но ясно, что это не работает. Можно ли собрать все файлы, которые соответствуют{sample}_*.bam
с функцией и использовать это в качестве ввода? И если да, будет ли функция по-прежнему работать с$(echo ' {input}' etc...)
в директиве оболочки?