我有一个规则,该规则基于上一个使用通配符的作业的结果在多个文件上运行trimGalore。因此,输出也必须具有通配符,这会在尝试使用此规则的输出全部调用规则时引起问题,因为它无法从输出确定输入文件中的通配符。
我正在尝试使用检查点解决问题并拉出通配符,但出现一条错误消息,指出通配符不具有文件名FileName。
基本上,我需要能够将由parse_sampleFile规则创建的文件接收到newTrimGalore规则中,在每个文件上运行trimGalore,并让all规则将输出作为其输入(最终将添加更多步骤,以便它们接受newTrimGalore的输出作为输入)。
我可以使用检查点吗?或者有没有办法让我的newTrimGalore规则的输出成为没有{fileName}通配符的目录?
checkpoint newTrimGalore:
input:
projectDir+"/trimFiles/{fileName}.txt"
output:
projectDir+"/trimmed_reads/{fileName}_trimming_report.txt"
run:
with open({input}, 'rU') as f:
for line in f:
split=line.split(",")
R1 = split[0]
R2 = split[1]
if R2 is not None:
shell(" /home/apps/TrimGalore-0.5.0/trim_galore {params.p} --paired --gzip -o {projectDir}/trimmed_reads "+R1+" "+R2)
else:
shell("/home/apps/TrimGalore-0.5.0/trim_galore {params.p} --gzip -o {projectDir}/trimmed_reads "+R1)
def get_input(wildcards):
list = checkpoints.newTrimGalore.get(fileName=wildcards.fileName).output
return expand(projectDir+"/trimmed_reads/{fileName}_trimming_report.txt")
rule all:
input: get_input
trimFiles文件夹中的{fileName} .txt文件是在上一步中创建的,因此我必须在此处使用通配符。我只是希望能够在newTrimGalore之后使用其输出作为输入来执行下一步,而不会在通配符上出现错误。