У меня быстрый вопрос по поводу использования динамических подстановочных знаков. Я искал документацию и форумы, но не нашел простого ответа на свой запрос.
Вот правила, которые доставляют мне неприятности:
rule all:
input: dynamic("carvemeOut/{species}.xml")
shell:"snakemake --dag | dot -Tpng > pipemap.png"
rule speciesProt:
input:"evaluation-output/clustering_gt1000_scg.tab"
output: dynamic("carvemeOut/{species}.txt")
shell:
"""
cd {config[paths][concoct_run]}
mkdir -p {config[speciesProt_params][dir]}
cp {input} {config[paths][concoct_run]}/{config[speciesProt_params][dir]}
cd {config[speciesProt_params][dir]}
sed -i '1d' {config[speciesProt_params][infile]} #removes first row
awk '{{print $2}}' {config[speciesProt_params][infile]} > allspecies.txt #extracts node information
sed '/^>/ s/ .*//' {config[speciesProt_params][metaFASTA]} > {config[speciesProt_params][metaFASTAcleanID]} #removes annotation to protein ID
Rscript {config[speciesProt_params][scriptdir]}multiFASTA2speciesFASTA.R
sed -i 's/"//g' species*
sed -i '/k99/s/^/>/' species*
sed -i 's/{config[speciesProt_params][tab]}/{config[speciesProt_params][newline]}/' species*
cd {config[paths][concoct_run]}
mkdir -p {config[carveme_params][dir]}
cp {config[paths][concoct_run]}/{config[speciesProt_params][dir]}/species* {config[carveme_params][dir]}
cd {config[carveme_params][dir]}
find . -name "species*" -size -{config[carveme_params][cutoff]} -delete #delete files with little information, these cause trouble
"""
rule carveme:
input: dynamic("carvemeOut/{species}.txt")
output: dynamic("carvemeOut/{species}.xml")
shell:
"""
set +u;source activate concoct_env;set -u
cd {config[carveme_params][dir]}
echo {input}
echo {output}
carve $(basename {input})
"""
Ранее я использовал две разные карты виджета для ввода и вывода правила carveme:
input: dynamic("carvemeOut/{species}.txt")
output: dynamic("carvemeOut/{gem}.xml")
Я хочу, чтобы snakemake запускал правило carveme несколько раз, чтобы создать выходной файл .xml для каждого входного файла .txt. Однако вместо этого snakemake запускает правило один раз, используя список входов для создания одного вывода, как показано ниже:
rule carveme:
input: carvemeOut/species2.txt, carvemeOut/species5.txt, carvemeOut/species1.txt, carvemeOut/species10.txt, carvemeOut/species4.txt, carvemeOut/species17.txt, carvemeOut/species13.txt, carvemeOut/species8.txt, carvemeOut/species14.txt
output: {*}.xml (dynamic)
jobid: 28
После изменения моих правил для использования того же подстановочного знака, как предложено @stovfl и показано в первом поле кода, я получаю следующее сообщение об ошибке:
$ snakemake all
Building DAG of jobs...
WildcardError in line 174 of /c3se/NOBACKUP/groups/c3-c3se605-17-8/projects_francisco/binning/snakemake-concot/Snakefile:
Wildcards in input files cannot be determined from output files:
species
Есть предложения о том, как решить эту проблему?
Заранее спасибо,
ФЗ