1
1
rule get_rgi_bwt_db :
2
2
output :
3
- card_db_bwt = os .path .join (config ["params" ]["db_dir" ], "card_bwt" , "card.json" )
3
+ card_db_bwt = os .path .join (config ["params" ]["db_dir" ], "card_bwt" , "card.json" )
4
4
params :
5
- db_version = config ['params' ]['rgi' ]['db_version' ],
6
5
db_dir = os .path .join (config ["params" ]["db_dir" ], "card_bwt" )
7
6
log :
8
- "logs/rgi_db .log"
7
+ "logs/rgi_bwt_db .log"
9
8
shell :
10
- """
9
+ """{{
11
10
mkdir -p {params.db_dir}
12
- curl https://card.mcmaster.ca/latest/data --output {params.db_dir}/card.tar.bz2
11
+ wget -c -q -O {params.db_dir}/card.tar.bz2 'https://card.mcmaster.ca/latest/data'
13
12
tar -C {params.db_dir} -xvf {params.db_dir}/card.tar.bz2
13
+ rm -f {params.db_dir}/card.tar.bz2
14
+ }} >{log} 2>&1
14
15
"""
15
16
16
17
rule run_rgi_bwt :
17
18
input :
18
19
read1 = get_read1 ,
19
20
read2 = get_read2 ,
20
- card_db_bwt = os .path .join (config ["params" ]["db_dir" ], "card_bwt" , "card.json" )
21
+ card_db = os .path .join (config ["params" ]["db_dir" ], "card_bwt" , "card.json" )
21
22
output :
22
23
report = "results/{sample}/rgibwt/rgibwt.gene_mapping_data.txt" ,
23
24
metadata = "results/{sample}/rgibwt/metadata.txt"
24
25
message : "Running rule run_rgi_bwt on {wildcards.sample} with reads"
25
26
log :
26
- "logs/rgi_bwt_{sample}.log"
27
+ "logs/rgi_bwt_{sample}.log"
27
28
conda :
28
- "../envs/rgi.yaml"
29
+ "../envs/rgi.yaml"
29
30
threads :
30
- config ["params" ]["threads" ]
31
+ config ["params" ]["threads" ]
31
32
params :
32
- output_prefix = "results/{sample}/rgibwt /rgibwt"
33
+ out_dir = "results/{sample}/rgibwt"
33
34
shell :
34
- """
35
- rgi card_annotation --input {input.card_db_bwt} > {log} 2>&1
36
- rgi load --card_json {input.card_db_bwt} --card_annotation card_database_v*.fasta >> {log} 2>&1
37
- rm card_database_v*.fasta
38
- rgi bwt --read_one {input.read1} --read_two {input.read2} --output_file {params.output_prefix} --aligner bwa --threads {threads} >>{log} 2>&1
35
+ """{{
36
+ # We need to change directory to the output directory because we can't
37
+ # control where rgi writes its annotations or "loads" its database;
38
+ # and so before this we need to make all paths we use relative to PWD
39
+ FQ1="$(realpath '{input.read1}')"
40
+ FQ2="$(realpath '{input.read2}')"
41
+ CARD="$(realpath '{input.card_db}')"
42
+ META="$(realpath '{output.metadata}')"
43
+ mkdir -p {params.out_dir}
44
+ cd {params.out_dir}
45
+
46
+ # Figure out the database version as 'rgi database -v' gives "NA"
47
+ DB_VER="$(jq -r '._version' "$CARD")"
39
48
40
- echo "--analysis_software_version $(rgi main --version)" > {output.metadata}
41
- echo "--reference_database_version $(rgi database --version)" >> {output.metadata}
42
- """
49
+ # Create the annotation files (will be written in PWD)
50
+ rgi card_annotation --input "$CARD"
51
+ F1="card_database_v${{DB_VER}}.fasta"
52
+ F2="card_database_v${{DB_VER}}_all.fasta"
53
+
54
+ # Now "load" (= create) the database locally and run the tool
55
+ rgi load --local -i "$CARD" --card_annotation "$F1" --card_annotation_all_models "$F2"
56
+ rm -f "$F1" "$F2"
57
+ rgi bwt --local --clean --read_one "$FQ1" --read_two "$FQ2" --output_file "rgibwt" --threads {threads}
58
+
59
+ echo "--analysis_software_version $(rgi main --version) --reference_database_version $DB_VER" >"$META"
60
+ }} >{log} 2>&1
61
+ """
43
62
44
63
rule hamronize_rgi_bwt :
45
64
input :
@@ -52,5 +71,5 @@ rule hamronize_rgi_bwt:
52
71
"../envs/hamronization.yaml"
53
72
shell :
54
73
"""
55
- hamronize rgi $(paste - - < {input.metadata}) --input_file_name {input.read1} {input.report} > {output}
74
+ hamronize rgi $(cat {input.metadata}) --input_file_name {input.read1} {input.report} > {output}
56
75
"""
0 commit comments