因此,当我在snakemake管道中运行flye之后,我在运行其他程序时遇到问题。这是因为flye的输出是一个目录。我的规则如下:
samples, = glob_wildcards("data/samples/{sample}.fastq")
rule all:
input:
[f"assembled/" for sample in samples],
[f"nanopolish/draft.fa" for sample in samples],
[f"nanopolish/reads.sorted.bam" for sample in samples],
[f"nanopolish/reads.indexed.sorted.bam" for sample in samples]
rule fly:
input:
"unzipped/read.fastq"
output:
directory("assembled/")
conda:
"envs/flye.yaml"
shell:
"flye --nano-corr {input} --genome-size 5m --out-dir {output}"
rule bwa:
input:
"assembled/assembly.fasta"
output:
"nanopolish/draft.fa"
conda:
"nanopolish.yaml"
shell:
"bwa index {input} {output}"
rule nanopolish:
input:
"nanopolish/draft.fa",
"zipped/zipped.gz"
output:
"nanopolish/reads.sorted.bam"
conda:
"nanopolish.yaml"
shell:
"bwa mem -x ont2d -t 8 {input} | samtools sort -o {output}"
在此之前有几个步骤,但是它们工作正常。当我运行它时,它给出以下错误:
ChildIOException:
File/directory is a child to another output:
/home/fronglesquad/snakemake_poging_1/assembled
/home/fronglesquad/snakemake_poging_1/assembled/assembly.fasta
我已经搜索了该错误。我在那里只能找到它,因为snakemake在输出目录中无法很好地工作。但是此工具需要一个输出目录才能工作。有人知道如何绕过这个吗?
答案 0 :(得分:0)
(我认为)问题出在代码的其他地方。
您已经定义了两个规则,第一个规则输出目录assembled
,第二个规则输出assembled/assembly.fasta
。由于第二条规则的输出始终至少是目录assembled
,因此Snakemake抱怨。您可以通过使用目录作为输入来解决它:
rule second:
input:
"assembled"
output:
...
shell:
cat {input}/assembly.fasta > {output}