Я создаю конвейер 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
Если бы у кого-нибудь были идеи, я был бы очень благодарен.