Сделайте Snakemake предложения по дизайну рабочего процесса, чтобы преодолеть неоднозначные правила

У меня есть два правила, которые могут выдавать один и тот же результат в зависимости от значения подстановочного знака, и это вызывает неоднозначное исключение правила.
Я прочитал документацию по http://snakemake.readthedocs.io/en/latest/snakefiles/rules.html?highlight=ruleorder#handling-ambiguous-rules об обработке исключений из неоднозначных правил.
Кажется, что использование порядка правил могло бы быть решением. Однако ввод моего правила preprocess_zheng17 зависит от вывода правила simulate_data. Следовательно, если я использую ruleorder: simulate_data > preprocess_zheng17, то правило preprocess_zheng17 никогда не запускается.
Я хотел бы сначала запустить simulate_data, а затем запустить правило preprocess_zheng17 для каждой пары подстановочных знаков. Мне интересно, что может быть хорошей практикой проектирования рабочего процесса, чтобы справиться с этой проблемой. Правила представлены ниже.

rule preprocess_zheng17:
    input:
        loom_file = SIMULATED_DATA_OUTPUT+'/{sample}_sim_loc{loc}.loom'
    params:
        transpose = False
    output:
        SIMULATED_DATA_OUTPUT+'/{sample}_sim_loc{loc}_zheng17.loom'
    script: 
        "scripts/preprocess_zheng17.py"

rule simulate_data:
    input:
        sample_loom = HDF5_OUTPUT+'/{sample}.loom'
    params:
        group_prob = config['splat_simulate']['group_prob'],
        dropout_present = config['splat_simulate']['dropout_present']
    output:
        SIMULATED_DATA_OUTPUT+'/{sample}_sim_loc{loc}.loom'
    script:
        "scripts/data_simulation.R"

Заранее спасибо.


person anilbey    schedule 01.02.2018    source источник
comment
Помогает ли, если вы сначала объявите simulate_data и используете rules.simulate_data.output как input для preprocess_zheng17? Еще можно попробовать объявить wildcard_constraints вместо loc, если сможете.   -  person bli    schedule 02.02.2018
comment
Большое спасибо! Я не знал о wildcard_constraints. Наличие регулярного выражения для значений подстановочных знаков решило мою проблему. Я также изменил многие другие правила в моем конвейере с помощью ограничений с подстановочными знаками. В целом, я считаю, что использование ограничений с использованием подстановочных знаков является хорошей практикой.   -  person anilbey    schedule 03.02.2018


Ответы (1)


Ваша проблема связана не с дизайном, а с тем фактом, что выходные данные ваших двух правил и используемых подстановочных знаков не могут быть различимы. И SIMULATED_DATA_OUTPUT+'/{sample}_sim_loc{loc}_zheng17.loom', и SIMULATED_DATA_OUTPUT+'/{sample}_sim_loc{loc}.loom'
начинаются и заканчиваются одним и тем же шаблоном, и snakemake не может определить, является ли _zheng17 частью подстановочного знака {loc} или нет.

Вы можете использовать то, что bli описал в его комментарии, или немного изменить вывод любого правила. Например:

rule preprocess_zheng17:
    input:
        loom_file = SIMULATED_DATA_OUTPUT+'/{sample}_sim_loc{loc}.loom'
    params:
        transpose = False
    output:
        SIMULATED_DATA_OUTPUT+'/{sample}_sim_zheng17_loc{loc}.loom'
    script: 
        "scripts/preprocess_zheng17.py"

rule simulate_data:
    input:
        sample_loom = HDF5_OUTPUT+'/{sample}.loom'
    params:
        group_prob = config['splat_simulate']['group_prob'],
        dropout_present = config['splat_simulate']['dropout_present']
    output:
        SIMULATED_DATA_OUTPUT+'/{sample}_sim_loc{loc}.loom'
    script:
        "scripts/data_simulation.R"
person Eric C.    schedule 02.02.2018