-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathdudes_db_custom.sm
executable file
·69 lines (65 loc) · 4.03 KB
/
dudes_db_custom.sm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
rule dudes_db_custom_1:
output: config['dbdir'] + "{database}/dudes_db/dudes_db.1.bt2l",
config['dbdir'] + "{database}/dudes_db/dudes_db.2.bt2l",
config['dbdir'] + "{database}/dudes_db/dudes_db.3.bt2l",
config['dbdir'] + "{database}/dudes_db/dudes_db.4.bt2l",
config['dbdir'] + "{database}/dudes_db/dudes_db.rev.1.bt2l",
config['dbdir'] + "{database}/dudes_db/dudes_db.rev.2.bt2l"
params: seq_folder = lambda wildcards: customdbs[wildcards.database]["dudes"] if wildcards.database in customdbs and "dudes" in customdbs[wildcards.database] else ""
threads: config["threads"]
log: config['dbdir'] + "{database}/log/dudes_db_custom_1.log"
benchmark: config['dbdir'] + "{database}/log/dudes_db_custom_1.time"
conda: srcdir("../envs/dudes.yaml")
shell:
"""
if [ -d "{params.seq_folder}" ]; then
csfiles=`ls -dm {params.seq_folder}/*.fna | sed -e 's/, /,/g' | tr -d '\\n'`
{config[tool_alt_path][bowtie2]}bowtie2-build ${{csfiles}} {config[dbdir]}{wildcards.database}/dudes_db/dudes_db --threads {threads} --large-index > {log} 2>&1
else
echo "Custom database ({wildcards.database}) -> '{params.seq_folder}': No such file or directory" > {log}
fi
"""
rule dudes_db_custom_2:
input: taxdump = ancient(config['dbdir'] + "taxonomy/taxdump.tar.gz"),
output: nodes = temp(config['dbdir'] + "{database}/dudes_db/nodes.dmp"),
names = temp(config['dbdir'] + "{database}/dudes_db/names.dmp")
log: config['dbdir'] + "{database}/log/dudes_db_custom_2.log"
benchmark: config['dbdir'] + "{database}/log/dudes_db_custom_2.time"
shell: "tar -zxvf {input.taxdump} -C {config[dbdir]}{wildcards.database}/dudes_db/ nodes.dmp names.dmp > {log} 2>&1"
rule dudes_db_custom_3:
input: names = config['dbdir'] + "{database}/dudes_db/names.dmp",
nodes = config['dbdir'] + "{database}/dudes_db/nodes.dmp",
nucl_gb = ancient(config['dbdir'] + "taxonomy/nucl_gb.accession2taxid.gz"),
nucl_wgs = ancient(config['dbdir'] + "taxonomy/nucl_wgs.accession2taxid.gz")
output: npz = config['dbdir'] + "{database}/dudes_db/dudes_db.npz"
log: config['dbdir'] + "{database}/log/dudes_db_custom_3.log"
benchmark: config['dbdir'] + "{database}/log/dudes_db_custom_3.time"
threads: config["threads"]
conda: srcdir("../envs/dudes.yaml")
params: seq_folder = lambda wildcards: customdbs[wildcards.database]["dudes"] if wildcards.database in customdbs and "dudes" in customdbs[wildcards.database] else ""
shell:
"""
if [ -d "{params.seq_folder}" ]; then
{config[tool_alt_path][dudes]}DUDesDB.py -m 'av' -f {params.seq_folder}/*.fna -n {input.nodes} -a {input.names} -g {input.nucl_gb} {input.nucl_wgs} -t {threads} -o {config[dbdir]}{wildcards.database}/dudes_db/dudes_db >> {log} 2>&1
else
echo "Custom database ({wildcards.database}) -> '{params.seq_folder}': No such file or directory" > {log}
fi
"""
rule dudes_db_custom_profile:
input: npz = config['dbdir'] + "{database}/dudes_db/dudes_db.npz"
output: temp(config['dbdir'] + "{database}/dudes.dbaccession.out")
log: config['dbdir'] + "{database}/log/dudes_db_custom_profile.log"
benchmark: config['dbdir'] + "{database}/log/dudes_db_custom_profile.time"
shell: """python3 -c 'import numpy as np; npzfile = np.load("{input.npz}"); print("\\n".join(npzfile["refids_lookup"].item().keys()))' | sed 's/>//g' > {output} 2> {log}"""
rule dudes_db_custom_check:
input: ancient(config['dbdir'] + "{database}/dudes.dbprofile.out"),
ancient(config['dbdir'] + "{database}/dudes_db/dudes_db.npz"),
ancient(config['dbdir'] + "{database}/dudes_db/dudes_db.1.bt2l"),
ancient(config['dbdir'] + "{database}/dudes_db/dudes_db.2.bt2l"),
ancient(config['dbdir'] + "{database}/dudes_db/dudes_db.3.bt2l"),
ancient(config['dbdir'] + "{database}/dudes_db/dudes_db.4.bt2l"),
ancient(config['dbdir'] + "{database}/dudes_db/dudes_db.rev.1.bt2l"),
ancient(config['dbdir'] + "{database}/dudes_db/dudes_db.rev.2.bt2l")
output: db_check = touch(config['dbdir'] + "{database}/dudes_db_check.done")
log: config['dbdir'] + "{database}/log/dudes_db_custom_check.log"
benchmark: config['dbdir'] + "{database}/log/dudes_db_custom_check.time"