Как добавить в конфигурационный файл в конвейере snakemake и определить глобальные переменные?

#snakemake

#snakemake

Вопрос:

Я новичок в snakemake и пытаюсь создать конвейер, в конфигурации которого был бы файл образца. Правило проанализировало бы этот файл и извлекло бы определенную информацию, которая необходима конвейеру. Итак, я хотел бы добавить это в конфигурационный файл или создать глобальные переменные, возможно ли это?или заставить его ждать завершения действия правила, прежде чем определять конфигурационный файл или переменную?

Я попытался добавить в конфигурационный файл, используя правило с командой shell cat. Но он не пытается запуститься, поскольку результатом является конфигурационный файл. Также пробовал объявлять конфигурационный файл после правила, но это не имеет значения по порядку. Также пытался коснуться выходного файла как части правила

 include:"fastqc.snake"

IDS, = glob_wildcards("testdata/samples/{id}.fastq.gz")

rule all:
    input:  expand("fastqc_reports/{id}_fastqc.html", id=IDS)

rule add:
    input:
        "test_in.txt" 
    output:
        "config.yaml"
    shell:
       "cat {input} >> {output}"


configfile: "config.yaml"
  

Я хотел бы, чтобы содержимое входного файла было добавлено к конфигурационному файлу. На самом деле это будет ряд переменных, которые я нахожу во входном файле. ИЛИ я хотел бы иметь возможность создавать глобальные переменные на основе синтаксического анализа входного файла.

Комментарии:

1. Делая шаг назад, работает ли ваша piepline как ожидалось, если вы удаляете rule add и предоставляете config.yaml непосредственно snakemake? Возможно, вы захотите проверить onstart . Обратите внимание, что onstart не запускается для dryruns.

2. Еще одно предложение: вместо того, чтобы определять это как правило, вам, возможно, было бы лучше использовать типичную функцию python для того, что rule add делает.

3. да, это работает без правила добавления. Моя проблема в том, что я хочу иметь возможность добавлять в существующий конфигурационный файл. Или вместо этого иметь возможность запускать скрипт на python, который устанавливает глобальные переменные в моем скрипте snakemake из его входных данных. итак, что-то вроде правила add_vars: input: test_in.txt вывод: dummy_file оболочка: python parseFile.py —ввод test_in.txt с помощью parseFile.py настройка глобальных переменных

4. Я сомневаюсь, что run или shell позволит ли то, о чем вы просите. Поскольку snakemake допускает множество функций на python, как насчет этого: from parseFile import fn_get_variables; x,y,z=fn_get_variables() . Конечно, fn_get_variables это также может быть частью самого скрипта snakemake.

5. Спасибо. В итоге я изменил свой конфигурационный файл, а затем создал переменные непосредственно из него при запуске snakemake.