Броски контрольной точки Snakemake (выход с ненулевым кодом выхода) даже после правильного завершения - PullRequest
1 голос
/ 01 октября 2019

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

Цель приведенного нижеСкрипт предназначен для анализа файла координат bed_file, извлечения всех областей из файла bam rna_file и в конечном итоге для сборки этих областей. Код ниже, и моя версия змеиной версии 5.6.0.

#Pull coordinates from a BAM file, and use the command samtools view to extract the corresponding #data, naming the output as the coordinate file, here named "6:25274434-25278245.bam". There are #an unknown number of output files

checkpoint pull_reads_for_BAM:
    input:
    ¦   bed_file = get_lncRNA_file,
    ¦   rna_file = get_RNA_file
    conda:
    ¦   "envs/pydev_1.yml"
    params:
    ¦   "01.pulled_reads"
    output:
    ¦   directory("01.pulled_reads/{tissue}")
    shell:"""

    mkdir 01.pulled_reads/{wildcards.tissue}

    store_regions=$(cat {input.bed_file} | awk -F'\t' '{{ print $1 ":" $2 "-" $3 }}')

    for i in $store_regions ; do
    ¦   samtools view -b -h {input.rna_file} ${{i}} > 01.pulled_reads/{wildcards.tissue}/${{i}}.bam ;
    done

    echo "This completed fine"

    """

rule samtools_sort:
    input:
    ¦   "01.pulled_reads/{tissue}/{i}.bam"
    params:
    ¦   "{i}"
    output:
    ¦   "01.pulled_reads/{tissue}/{i}.sorted.bam"
    shell:
    ¦   "samtools sort -T sorted_reads/{params}.tmp {input} > {output}"

rule samtools_index:
    input:
    ¦   "01.pulled_reads/{tissue}/{i}.sorted.bam"
    output:
    ¦   "01.pulled_reads/{tissue}/{i}.sorted.bam.bai"
    shell:
        "samtools index {input}"

rule string_tie_assembly:
    input:
    ¦   "01.pulled_reads/{tissue}/{i}.sorted.bam"
    output:
    ¦   "02.string_tie_assembly/{tissue}/{i}_assembly.gtf"
    shell:
        "stringtie {input} -f 0.0 -a 0 -m 50 -c 3.0 -f 0.0 -o {output}"


def trigger_aggregate(wildcards):
    checkpoint_output = checkpoints.pull_reads_for_BAM.get(**wildcards).output[0]

    x = expand("02.string_tie_assembly/{tissue}/{i}_assembly.merged.gtf",
    ¦   tissue = wildcards.tissue,
    ¦   i=glob_wildcards(os.path.join(checkpoint_output, "{i}.bam")).i)
    return x


#Aggregate function that triggers rule 
rule combine_all_gtf_things:
    input:
    ¦   trigger_aggregate
    output:
    ¦   "03.final_stuff/{tissue}.merged.gtf"
    shell:"""
    cat {input} > {output}
    """

После выполнения команды snakemake возвращает (exited with non-zero exit code) по какой-то загадочной причине. Я могу наблюдать, как вывод генерируется в файле, и он кажется правильным, поэтому я не уверен, почему он выдает эту ошибку.

Сгенерированная мной контрольная точка смоделирована после этого: https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html

Смежные вопросы, которые остались без ответа: Контрольная точка Snakemake (выход с ненулевым кодом выхода)

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Похоже, что эта проблема была каким-то образом вызвана подстановочными знаками в {tissue}, установленными в качестве каталога. Что касается того, почему это бросает ненулевой статус выхода, я не уверен. Это было исправлено простым добавлением {tissue}_dir к указанному выше пути.

Подробнее о проблеме можно узнать здесь: https://bitbucket.org/snakemake/snakemake/issues/1303/snakemake-checkpoint-throws-exited-with

0 голосов
/ 02 октября 2019

Не уверен, что это проблема, но mkdir 01.pulled_reads/{wildcards.tissue} завершится ошибкой, если каталог существует или 01.pulled_reads не существует до выполнения mkdir.

Попробуйте добавить параметр -p в mkidr, т.е. mkdir -p 01.pulled_reads/{wildcards.tissue}

...