I am a beginner user of snakemake. I want to index the reference genome by using bowtie2-build.
I found this post How to write the output in snakefile (snakemake) for bowtie2-build as they used this cose
rule bowtie2Build:
input: "/home/bnextgen/refgenome/infected_consensus.fasta"
params:
basename: "/home/s1104230/output/reference"
output:
output1="output/reference.1.bt2",
output2="output/reference.2.bt2",
output3="output/reference.3.bt2",
output4="output/reference.4.bt2",
outputrev1="output/reference.rev1.bt2",
outputrev2="output/reference.rev2.bt2"
shell: "bowtie2-build {input} {params.basename}"
I do not completely understand (what is params. basename means or indication )
and tried to use it as it is with change to expand function instead of mention path to 6 files of indexing
this my code:
f_ext = [".1.bt2",".2.bt2",".3.bt2",".4.bt2",".rev.1.bt2",".rev.2.bt2"]
bt_idx_folder ="bt_idx"
rule bowtie2_index:
input:
data/reference.fa"
params:
basename= "result/bt_idx_folder/reference"
output:
expand(result/ bt_idx_folder + "reference{ext}" , ext = f_ext)
shell:
"bowtie2-build {input} {params.basename}"
`
It gives me an error :
MissingOutputException in line 13 of Snakefile
Job Missing files after 5 seconds:
/homel/result/bt_idx/reference.1.bt2
/home/result/bt_idx/reference.2.bt2
/home/result/bt_idx/reference.3.bt2 , etc (all 6 files)
This might be due to filesystem latency. If that is the case, consider to increase the wait time with --latency-wait.
Job id: 0 completed successfully, but some output files are missing. 0
File "/home/ahmed/anaconda3/envs/snakemake/lib/python3.9/site-packages/snakemake/executors/__init__.py", line 584, in handle_job_success
File "/home/ahmed/anaconda3/envs/snakemake/lib/python3.9/site-packages/snakemake/executors/__init__.py", line 252, in handle_job_success
what is the problem in my code and the meaning of params. basename?
1 answer
The error you get is due to your variable bt_idx_folder. In the definition of your parameter basename
basename= "result/bt_idx_folder/reference"
it is actually defined as the string itself, if you would want the index to go into " "result/bt_idx/reference" it should be
basename= "result/" + bt_idx_folder + "/reference"
This is exactly what the MissingOutputException tells you, the files are actually written into result/bt_idx_folder/reference, but are expected to go into result/bt_idx/reference which causes your workflow to crash.
In general, the basename flag tells bowtie2 the directory and prefix for the index files. So in order to run this rule the basename parameter and the output files minus their extension should match.
Log in to answer this question.
snakemake-wrapper is always a good place to get inspiration from:
https://snakemake-wrappers.readthedocs.io/en/stable/wrappers/bowtie2/build.html