Подстановочный знак змеиной маки может быть чем угодно. В основном это просто строка.
Есть некоторые проблемы с тем, как вы пытаетесь достичь того, чего хотите.
Хорошо, вот как бы я это сделал. Пояснения следуют:
import os
#collect data sets
# Beware no other directories or files (than those containing fastqs) should be in that folder
SAMPLES=os.listdir("data/rnaseq/")
def getFastqFilesForTissu(wildcards):
fastqs = list()
# Beware no other files than fastqs should be there
for s in os.listdir("data/rnaseq/"+wildcards.sample):
fastqs.append(os.path.join("data/rnaseq",wildcards.sample,s))
return fastqs
rule all:
input:
expand("results/{sample}/TEtools.{sample}.output.csv", sample=SAMPLES)
rule run_TEtools:
input:
TEcount='scripts/TEtools/TEcount.py',
rosette='data/prepared_data/rosette/rosette',
te_references='data/prepared_data/references/all_TE_instances.fa',
fastq_files = getFastqFilesForTissu
output:
'results/{sample}/TEtools.{sample}.output.csv'
shell:
'python {input.TEcount} -rosette {input.rosette} -TE {input.te_references} -count {output} -RNA {input.fastq_files}'
Прежде всего, ваш файл fastq должен быть определен как входные данные, чтобы snakemake знал, что это файлы и что если они изменены, правила должны быть перезапущены. Это очень плохая практика - определять входные файлы как params
. params
сделаны для параметров, обычно не для файлов.
Во-вторых, ваш файл сценария определяется как входной. Вы должны знать, что каждый раз, когда вы изменяете его, правила будут перезапущены. Может быть, это то, что вы хотите.
Я бы использовал определенную функцию, чтобы получить файл fastq в каждом каталоге. Если вы хотите использовать функцию (например, os.listdir()
), вы не можете использовать свои шаблоны напрямую. Вы должны вставить его в функцию как объект Python. Вы можете либо определить функцию, которая будет принимать один аргумент, подстановочный объект, содержащий все ваши подстановочные знаки, либо использовать ключевое слово lambda (например: input = lamdba wildcards: myFuntion(wildcards.sample)
).
Другая проблема, с которой вы столкнулись, заключается в том, что os.listdir()
возвращает список файлов без относительного пути. Также помните, что порядок, в котором os.listdir()
вернет вам файл fastq, неизвестен. Может быть, это не имеет значения для вашей команды.