У меня проблема с выяснением того, как заставить директиву 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...)
в директиве shell?