0
|
1 #!/bin/bash
|
|
2 ## use #!/bin/bash -x for debugging
|
|
3
|
|
4 ## Galaxy wrapper for MUMmer (nucmer/promer)
|
|
5 ## Alex Bossers, CVI of Wageningen UR, NL
|
|
6 ## alex_dot_bossers_at_wur_dot_nl
|
|
7 ##
|
|
8 ## Sep 2010
|
|
9 ##
|
|
10 ## Wrapper runs MUMmer nucmer/promer and additional args
|
|
11 ## Calculates the comparison scores (delta and optional coords file)
|
|
12 ## Generates the optional STATIC comparison mummerplot to png (from delta file)
|
|
13 ##
|
|
14 ## finally the script renames (optional) output files to outfiles expected by Galaxy
|
|
15 ##
|
|
16 ##
|
|
17 ## INPUT args:
|
|
18 ## nucmer_tool.sh $input_ref $input_query $out_delta $out_coords $out_png $logfile
|
|
19 ## @0 @1 @2 @3 @4 @5
|
|
20 ## $algorithm $keep_delta $make_coords $keep_log $make_image $cmd_extra
|
|
21 ## @6 @7 @8 @9 @10 @11
|
|
22 ##
|
|
23
|
|
24 # Function to send error messages.
|
|
25 log_err() { echo "$@" 1>&2; }
|
|
26 # path to where mummer suite is installed
|
|
27 # adjust this for your machine
|
|
28 # If mummer is available in system path, leave empty
|
|
29 # when using different path make sure the trailing slash is added.
|
|
30 # mum_path = /opt/Mummer23/Mummer/
|
|
31 mum_path=""
|
|
32 tmp_path="/tmp/mummertmp/"
|
|
33
|
|
34 if [ $num_path"$(which mummer)" == "" ] && [ "$num_path" == "" ]; then
|
|
35 log_err "mummer is not available in system path and not declarated in mum_path. Please install mummer."
|
|
36 exit 127
|
|
37 fi
|
|
38
|
|
39 # since we have more than 9 arguments we need to shift the sections or use own array
|
|
40 args=("$@")
|
|
41 # to keep things readible assign vars
|
|
42 input_ref="${args[0]}"
|
|
43 input_query="${args[1]}"
|
|
44 out_delta="${args[2]}"
|
|
45 out_coords="${args[3]}"
|
|
46 out_png="${args[4]}"
|
|
47 logfile="${args[5]}"
|
|
48 algorithm="${args[6]}"
|
|
49 keep_delta="${args[7]}"
|
|
50 make_coords="${args[8]}"
|
|
51 keep_log="${args[9]}"
|
|
52 make_image="${args[10]}"
|
|
53 cmd_extra="${args[11]}"
|
|
54
|
|
55 [ -d $tmp_path ] || mkdir $tmp_path
|
|
56 cd $tmp_path
|
|
57
|
|
58 # enable/disable the STDOUT log file
|
|
59 if [ "$keep_log" == "yes" ]; then
|
|
60 logfile_c="2>$logfile"
|
|
61 logfile_a="2>>$logfile"
|
|
62 else
|
|
63 #dump to dev/null
|
|
64 logfile_c="2>&-"
|
|
65 logfile_a="2>&-"
|
|
66 fi
|
|
67
|
|
68 # extra mummer cmd line options
|
|
69
|
|
70 ## generate coords file on the fly?
|
|
71 if [ "$make_coords" == "yes" ]; then
|
|
72 options=" --coords"
|
|
73 fi
|
|
74 ## extra cmd line args to be concatenated in options? We need to prevent extra spaces!
|
|
75 if [ "$cmd_extra" != "" ]; then
|
|
76 if [ "$options" == "" ]; then
|
|
77 options=" $cmd_extra"
|
|
78 else
|
|
79 options="$options $cmd_extra"
|
|
80 fi
|
|
81 fi
|
|
82
|
|
83 # run nucmer/promer
|
|
84 # May only run Promer and Nucmer
|
|
85 echo $algorithm
|
|
86 if [[ $algorithm =~ ...mer$ ]]; then
|
|
87 eval "$mum_path$algorithm$options $input_ref $input_query $logfile_c"
|
|
88 else
|
|
89 log_err 'ERROR, algorithm does not conform to ...mer'
|
|
90 exit 1
|
|
91 fi
|
|
92
|
|
93
|
|
94 ## generate large png if option make_image = yes
|
|
95 ## suppress error from mummerplot since some is deprecated but not a real error
|
|
96 ## error can be easily avoided by modifying the source of mummerplot... just in case
|
|
97 ## however we need to check if a valid png was generated. This is not the case is alignment is none
|
|
98 ## 1 is stderr and 2 stdout. redirect to dev/null
|
|
99 if [ "${make_image}" == "yes" ]; then
|
|
100 eval "$mum_path mummerplot --large --png out.delta 1>&- $logfile_a"
|
|
101 if [ -f "out.png" ]; then
|
|
102 mv out.png $out_png
|
|
103 #cleanup temp gnuplot file
|
|
104 rm out.gp
|
|
105 else
|
|
106 log_err "not exist the req png file!"
|
|
107 exit 1
|
|
108 fi
|
|
109
|
|
110 ## clean up remaining files
|
|
111 rm out.fplot
|
|
112 rm out.rplot
|
|
113
|
|
114 fi
|
|
115
|
|
116 # keep/rename or delete delta file
|
|
117 if [ "$keep_delta" == "yes" ]; then
|
|
118 mv out.delta "$out_delta"
|
|
119 else
|
|
120 rm out.delta
|
|
121 fi
|
|
122
|
|
123 # keep/rename coords file if it was created
|
|
124 if [ "$make_coords" == "yes" ]; then
|
|
125 mv out.coords "$out_coords"
|
|
126 fi
|
|
127 # end script
|
|
128 exit 0 |