Проблема с модулем snakemake STAR и дополнительный вопрос

Я обнаружил, что модуль snakemake STAR выводит как ' БАМ Несортированный ».

Q1: есть ли способ изменить это на:

--outSAMtype BAM SortedByCoordinate

Когда я добавляю опцию в «дополнительные» опции, я получаю сообщение об ошибке о повторяющемся определении:

EXITING: FATAL INPUT ERROR: duplicate parameter "outSAMtype" in input "Command-Line"
SOLUTION: keep only one definition of input parameters in each input source

Nov 15 09:46:07 ...... FATAL ERROR, exiting
logs/star/se/UY2_S7.log (END)

Стоит ли вместо этого рассмотреть возможность добавления модуля сортировки за STAR?

Q2: Как я могу взять модуль из репозитория оболочки и сделать его локальным модулем, что позволит мне редактировать его?

код:

__author__ = "Johannes Köster"
__copyright__ = "Copyright 2016, Johannes Köster"
__email__ = "[email protected]"
__license__ = "MIT"

import os
from snakemake.shell import shell

extra = snakemake.params.get("extra", "")
log = snakemake.log_fmt_shell(stdout=True, stderr=True)

fq1 = snakemake.input.get("fq1")
assert fq1 is not None, "input-> fq1 is a required input parameter"
fq1 = [snakemake.input.fq1] if isinstance(snakemake.input.fq1, str) else snakemake.input.fq1
fq2 =  snakemake.input.get("fq2")
if fq2:
    fq2 = [snakemake.input.fq2] if isinstance(snakemake.input.fq2, str) else snakemake.input.fq2
    assert len(fq1) == len(fq2), "input-> equal number of files required for fq1 and fq2"
input_str_fq1 = ",".join(fq1)
input_str_fq2 = ",".join(fq2) if fq2 is not None else ""
input_str =  " ".join([input_str_fq1, input_str_fq2])

if fq1[0].endswith(".gz"):
    readcmd = "--readFilesCommand zcat"
else:
    readcmd = ""

outprefix = os.path.dirname(snakemake.output[0]) + "/"

shell(
    "STAR "
    "{extra} "
    "--runThreadN {snakemake.threads} "
    "--genomeDir {snakemake.params.index} "
    "--readFilesIn {input_str} "
    "{readcmd} "
    "--outSAMtype BAM Unsorted "
    "--outFileNamePrefix {outprefix} "
    "--outStd Log "
    "{log}")

person splaisan    schedule 15.11.2018    source источник


Ответы (1)


Q1: Есть ли способ изменить это на:

--outSAMtype BAM SortedByCoordinate

Я бы добавил еще одно правило сортировки после оболочки, так как это наиболее «стандартизованный» способ сделать это. Вы также можете использовать другую обертку для сортировки.

Автор snakemake объясняет причину, по которой значение по умолчанию не отсортировано и почему в оболочке нет опции для отсортированного вывода:

https://bitbucket.org/snakemake/snakemake/issues/440/pre-post-wrapper

Что касается проблемы SAM / BAM, я бы сказал, что любая оболочка всегда должна выводить оптимальный формат файла. Следовательно, всякий раз, когда я пишу оболочку для модуля чтения, я гарантирую, что вывод не будет SAM. Я думаю, что индексирование и сортировка не должны быть частью одной и той же оболочки, потому что такая задача имеет совершенно другое поведение в отношении распараллеливания. Кроме того, вы потеряете вывод сопоставления, если что-то пойдет не так во время сортировки или индексации.


Q2: Как я могу взять модуль из репозитория оболочки и сделать его локальным модулем, что позволит мне редактировать его?

Если вы захотите это сделать, можно будет загрузить локальную копию оболочки. Измените часть оболочки загруженной оболочки Unsorted на {snakemake.params.outsamtype}. В вашем Snakefile измените (wrapper на script, path/to/downloaded/wrapper и добавьте параметр outsamtype):

rule star_se:
    input:
        fq1 = "reads/{sample}_R1.1.fastq"
    output:
        # see STAR manual for additional output files
        "star/{sample}/Aligned.out.bam"
    log:
        "logs/star/{sample}.log"
    params:
        # path to STAR reference genome index
        index="index",
        # optional parameters
        extra="",
        outsamtype = "SortedByCoordinate"
    threads: 8
    script:
        "path/to/downloaded/wrapper"

Я думаю, что отдельное правило без обертки для сортировки или даже создания собственного звездного правила лучше. Изменение обертки сводит на нет всю ее цель.

person JohnnyBD    schedule 15.11.2018
comment
Спасибо за комментарии. Я добавил модуль picard. Что касается моего второго, я хотел спросить, могу ли я загрузить полные оболочки и установить их локально, отредактировав некоторые, чтобы вместо этого snakemake загружал их из локальной копии. Как местное репо, если хотите. Это возможно? - person splaisan; 16.11.2018