snakemake. Как передать цель из командной строки при создании нескольких целей - PullRequest
0 голосов
/ 11 апреля 2020

С помощью следующего вопроса этот код создает цели (копии файла с названием "Practice_phased_reversed.vcf" в каждом из двух каталогов.

dirs=['k_1','k2_10']
rule all:
        input:
                expand("{f}/practice_phased_reversed.vcf",f=dirs)
rule r1:
        input:
                "practice_phased_reversed.vcf"
        output:
                "{f}/{input}"
        shell:
               "cp {input} {output}"

Однако я хотел бы передать целевой файл в командной строке snakemake.
Я попробовал это (ниже) с помощью команды "snakemake practice_phased_reversed.vcf", но он выдал ошибку: "MissingRuleException: нет правил для создания practice_phased_reversed.vcf"

dirs=['k_1','k2_10']
rule all:
        input:
                expand("{f}/{{base}}_phased_reversed.vcf",f=dirs)
rule r1:
        input:
                "{base}_phased_reversed.vcf"
        output:
                "{f}/{input}"
        shell:
               "cp {input} {output}"

Спасибо за любую помощь

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

Ваш целевой файл practice_phased_reversed.vcf не удовлетворяет output требованиям rule r1. Отсутствует групповое значение для {f}.

Вместо этого следующий пример, snakemake data/practice_phased_reversed.vcf, где data соответствует шаблону f, будет работать как положено.

Код:

rule r1:
        input:
                "{base}_phased_reversed.vcf"
        output:
                "{f}/{base}_phased_reversed.vcf"
        shell:
               "cp {input} {output}"

0 голосов
/ 12 апреля 2020

Я думаю, что вы должны передать имя целевого файла в качестве параметра конфигурации в командной строке и использовать этот параметр для создания имен файлов в Snakefile:

target = config['target']

dirs = ['k_1','k2_10']

rule all:
    input:
        expand("{f}/%s" % target, f=dirs),

rule r1:
    input:
        target,
    output:
        "{f}/%s" % target,
    shell:
       "cp {input} {output}"

Для выполнения в виде:

snakemake -C target=practice_phased_reversed.vcf
...