В настоящее время я сталкиваюсь с некоторыми проблемами со змеиным созданием промежуточных правил, необходимых для контрольной точки. После попытки решить эту проблему, я считаю, что проблема заключается в команде расширения в функции aggregate_input
, но не могу понять, почему она ведет себя так, как она есть.
Вот текущая документация по контрольным точкам от snakemake, которую я смоделировал после https://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#data-dependent-conditional-execution
rule all:
input:
¦ expand("string_tie_assembly/{sample}.gtf", sample=sample),
¦ expand("combined_fasta/{sample}.fa", sample=sample),
¦ "aggregated_fasta/all_fastas_combined.fa"
checkpoint clustering:
input:
¦ "string_tie_assembly_merged/merged_{sample}.gtf"
output:
¦ clusters = directory("split_gtf_file/{sample}")
shell:
¦ """
¦ mkdir -p split_gtf_file/{wildcards.sample} ;
collapse_gtf_file.py -gtf {input} -o split_gtf_file/{wildcards.sample}/{wildcards.sample}
¦ """
rule gtf_to_fasta:
input:
¦ "split_gtf_file/{sample}/{sample}_{i}.gtf"
output:
¦ "lncRNA_fasta/{sample}/canidate_{sample}_{i}.fa"
shell:
¦ "gffread -w {output} -g {reference} {input}"
rule rename_fasta_files:
input:
¦ "lncRNA_fasta/{sample}/canidate_{sample}_{i}.fa"
output:
¦ "lncRNA_fasta_renamed/{sample}/{sample}_{i}.fa"
shell:
¦ "seqtk rename {input} {wildcards.sample}_{i} > {output}"
#Gather N number of output files from the GTF split
def aggregate_input(wildcards):
checkpoint_output = checkpoints.clustering.get(**wildcards).output[0]
x = expand("lncRNA_fasta_renamed/{sample}/{sample}_{i}.fa",
¦ sample=sample,
¦ i=glob_wildcards(os.path.join(checkpoint_output, "{i}.fa")).i)
print(x)
return x
#Aggregate fasta from split GTF files together
rule combine_fasta_file:
input:
¦ aggregate_input
output:
¦ "combined_fasta/{sample}.fa"
shell:
"cat {input} > {output}"
¦ aggregate_input
output:
¦ "combined_fasta/{sample}.fa"
shell:
¦ "cat {input} > {output}"
#Aggegate aggregated fasta files
def gather_files(wildcards):
files = expand("combined_fasta/{sample}.fa", sample=sample)
return(files)
rule aggregate_fasta_files:
input:
¦ gather_files
output:
¦ "aggregated_fasta/all_fastas_combined.fa"
shell:
¦ "cat {input} > {output}"
Проблема, с которой я продолжаю сталкиваться, заключается в том, что после запуска этого файла змеиного правила правило combine_fasta_file
не запускается. Проведя больше времени с этой ошибкой, я понял, что проблема в том, что функция aggregate_input
не расширяется, и возвращает пустой список []
вместо того, что я ожидаю, это список всех файлов в расширенном каталоге, т.е. : lncRNA_fasta_renamed/{sample}/{sample}_{i}.fa
.
Это странно, особенно если учесть, что checkpoint clustering
работает правильно, а выходные файлы находятся в rule all
Кто-нибудь знает, почему это так? Или причина в том, что это может быть так.
Команда, используемая для запуска snakemake: snakemake -rs Assemble_regions.snake --configfile snake_config_files / annotated_group_config.yaml