У меня есть файл multifasta DE.faa
, содержащий неизвестное количество белковых последовательностей и заголовки fasta, например GB012883-PA
, GB009065-PA
, GB007275-PA
. Я разделил файл multifasta (используя правило gather_proteins_with_no_BL62_hits
) на отдельные файлы fasta с именами файлов: GB012883-PA.faa
, GB009065-PA.faa
, GB007275-PA.faa
, и теперь я sh выполняю BLASTp для каждого из них удаленно.
На выходе из BLASTp я sh должен иметь файлы tsv с соответствующими именами файлов GB012883-PA.tsv
, GB009065-PA.tsv
, GB007275-PA.tsv
и файлы стратегии поиска: GB012883-PA.asn
, GB009065-PA.asn
, GB007275-PA.asn
.
Вот как далеко я продвинулся:
rule gather_proteins_with_no_BL62_hits:
input:
all_found_prot_seqs = "DE.faa"
output:
directory("no_BL62_hits/"),
touch("fasta_expansion.done")
script:
"gather_proteins_with_no_BL62_hits.R"
checkpoint BLAST_missing_protein_seqs:
input:
flag = "fasta_expansion.done",
seqs = "no_BL62_hits/{seq_name}.faa"
output:
res = "BL45_headerless/{seq_name}.tsv",
s_t = "BL45_headerless/{seq_name}.asn"
shell:
r"""
blastp -remote \
-query {input.seqs} \
-evalue 0.01 \
-db nr \
-export_search_strategy {output.s_t} \
-word_size 2 \
-matrix "BLOSUM45"
-max_target_seqs 100 \
-outfmt '6 sseqid sacc qstart' > {output.res} 2> {log}
"""
def aggregate_input(wildcards):
with open(checkpoints.BLAST_missing_protein_seqs.get(**wildcards).output.res, 'r') as f:
return [seq_name.rstrip() + '.tsv' for seq_name in f]
rule aggregate:
input:
aggregate_input
output:
touch("BLAST45.done")
Однако, когда я запускаю это, я получаю InputFunctionException
с сообщением: WorkflowError: Missing wildcard values for seq_name
.
Мой вопрос:
Как мне сообщить Snakemake, что подстановочный знак seq_name
относится к идентификаторам последовательности GB012883-PA
, GB009065-PA
, GB007275-PA
(и исправить ошибку WorkflowError)?