Выходное имя файла RGI не совпадает с выходным именем файла snakefile

#bioinformatics #snakemake

Вопрос:

Проблема в том, что:

Программное обеспечение под названием «RGI» автоматически добавит .txt в качестве суффикса к выходному файлу. Так что, если мой sampleID 7 . Тогда фактический выходной файл RGI будет 7.txt , который отличается от выходного файла ( 7 ), определенного в правиле snakefile. И snakemake сообщит об ошибках, таких как Job Missing files after 20 seconds . Однако RGI по-прежнему добавляется .txt в качестве суффикса, даже если вы предварительно задали суффикс (и фактический выходной файл будет выглядеть так 7.txt.txt ).

Как я могу решить эту проблему? Следующее является частью моего кода:

 rule rgi:
output:
    cardTxt = "{sampleId}/annotation/rgi/{sampleId}"
input:
    faa = rules.prokka.output.faa,
    cardDb = config['rgi']['cardDb']
shell:
    """
    rgi load -i {input.cardDb}
    rgi main -i {input.faa} -t protein -o {output.cardTxt} --include_loose --clean
    """
 

Ответ №1:

Удалите .txt префикс из выходного имени файла, прежде чем передавать его rgi . Я делаю это здесь, используя манипуляцию строками bash, но вы можете сделать это другими способами:

 rule rgi:
    input:
        faa = rules.prokka.output.faa,
        cardDb = config['rgi']['cardDb'],
    output:
        cardTxt = "{sampleID}/annotation/rgi/{sampleID}.txt",
    shell:
        """
        card=${{{output.cardTxt}%.txt}}

        rgi load -i {input.cardDb}
        rgi main -i {input.faa} -t protein -o $card --include_loose --clean
        """
 

(Я предполагаю, что вы хотите .txt быть частью выходного имени файла. Т. е. с вами все в порядке 7.txt )

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

1. Ваш ответ дал мне подсказку, и я попробовал этот способ для ковенанта: shell: """ rgi load -i {input.cardDb} rgi main -i {input.faa} -t protein -o {wildcards.sampleId}/annotation/rgi/{wildcards.sampleId} --include_loose --clean """ хотя это может быть не лучшим решением.