InputFunctionException - подстановочный знак не разрешен функцией расширения и ввода - PullRequest
0 голосов
/ 26 мая 2020

Я создаю конвейер snakemake, который загружает набор (3) парных файлов fastq для каждого образца, объединяет соответствующие чтения вместе, а затем выравнивает и вызывает варианты.

Я получаю доступ к доступу к запуску и путям ftp для каждого образца в файле config.yaml (хотя у меня также есть текстовые файлы). Первоначальная проблемная часть кода выглядит следующим образом:

configfile:"config.yaml"
import pandas as pd
sampleseq = pd.read_csv("data/sample_seq_headers.csv")
ox_codes = sampleseq.ox_code

rule all:
    input:
        expand("data/variants/{ox_code}/results/variants/variants.vcf.gz", ox_code=ox_codes)


ruleorder: download_fastqs > cat_fastqs
wildcard_constraints: ERR="ERR\d+"

rule download_fastqs:
    output:
        "data/reads/{ox_code}/{ERR}_{n}.fastq.gz"
    log:
        "logs/download_ENA/{ox_code}_{ERR}_{n}.log"
    params:
        ftp=lambda wildcards:config['eachrun'][wildcards.ox_code][wildcards.ERR]['ftp_path']
    shell:
        """
        curl {params.ftp}{wildcards.n}.fastq.gz -s -S --retry 10 --retry-delay 10 > data/reads/{wildcards.ox_code}/{wildcards.ERR}_{wildcards.n}.fastq.gz.tmp 2> {log} \
        && mv data/reads/{wildcards.ox_code}/{wildcards.ERR}_{wildcards.n}.fastq.gz.tmp {output} 2> {log}
        """

rule cat_fastqs:
    input:
        expand("data/reads/{{ox_code}}/{ERR}_{{n}}.fastq.gz", ERR=lambda wildcards: config['allruns'][wildcards.ox_code]['ERR'])
    output:
        "data/reads/{ox_code}/merged_{ox_code}_{n}.fastq.gz"
    log:
        "logs/cat_fastqs/{ox_code}_{n}.log"
    shell:
        """
        zcat {input} > {output}
        """

Конфигурационный файл состоит из двух частей - «allruns» и «eachrun» - и вложен следующим образом (3 записи для каждого запуска ERR) :

allruns:
  WA-0001:
    country:
    - Ghana
    - Ghana
    - Ghana
    location:
    - XXXX
    - XXXX
    - XXXX
    ERS:
    - ERSXXXXXXX
    - ERSXXXXXXX
    - ERSXXXXXXX
    ERR:
    - ERR1234567
    - ERRXXXXXXX
    - ERRXXXXXXX
    ftp_path:
    - ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR333/002/ERR1234567/ERR1234567_
    - ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERXXXX...........
    - ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERXXXX...........
 WA-XXXX
eachrun:
  WA-0001:
    ERR1234567:
      country: Ghana
      location: XXXXX
      ERS: ERSXXXXXX
      ftp_path: ftp://ftp.sra.ebi.ac.uk/vol1/fastq/ERR333/002/ERR1234567/ERR1234567_
    ERR2XXXXX:

Однако я получаю ошибку InputFunctionException, поскольку лямбда-функция в правиле cat_fastqs, похоже, не работает. Это или по какой-либо другой причине snakemake не разрешает подстановочный знак ERR должным образом. Я повозился с именами входных и выходных файлов, так как это может помочь, но в данном случае это не так.

Я либо получаю эту ошибку ...

InputFunctionException in line 43 of /home/sanj/projects/XXXX/Snakefile:
KeyError: 'WA-0075'
Wildcards:
ox_code=WA-0075
ERR=WA-0075
n=1

, либо использую ограничение подстановочного знака (в котором я не уверен на 100%) ..

MissingInputException in line 56 of /home/sanj/projects/XXXX/Snakefile:
Missing input files for rule cat_fastqs:
data/reads/WA-0073/ function lambda at 0x7f4b8f0f7170_1 .fastq.gz

Если бы у кого-нибудь были идеи, я был бы очень благодарен.

...