в строке 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...) в директиве оболочки?

Ответы на вопрос(1)

Ваш ответ на вопрос