quorum 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +82 -74
- data/HISTORY.md +9 -0
- data/README.rdoc +101 -23
- data/app/assets/javascripts/quorum/jobs.js +45 -3
- data/app/controllers/quorum/jobs_controller.rb +47 -2
- data/app/models/quorum/job.rb +52 -9
- data/app/views/quorum/jobs/new.html.erb +7 -6
- data/app/views/quorum/jobs/show.html.erb +7 -118
- data/app/views/quorum/jobs/templates/_blast_detailed_report_template.html.erb +53 -0
- data/app/views/quorum/jobs/templates/_blast_template.html.erb +68 -0
- data/config/routes.rb +2 -0
- data/db/migrate/20120109232446_add_hit_display_id_to_blast_reports.rb +8 -0
- data/lib/generators/quorum/images_generator.rb +18 -0
- data/lib/generators/quorum/install_generator.rb +41 -13
- data/lib/generators/templates/README +1 -1
- data/lib/generators/templates/blast.rb +18 -7
- data/lib/generators/templates/blast_db.rb +106 -0
- data/lib/generators/templates/fetch +115 -0
- data/lib/generators/templates/quorum_initializer.rb +1 -1
- data/lib/generators/templates/quorum_settings.yml +4 -4
- data/lib/quorum/helpers.rb +71 -1
- data/lib/quorum/version.rb +1 -1
- data/lib/quorum.rb +15 -5
- data/lib/workers/quorum.rb +12 -2
- data/quorum.gemspec +4 -2
- data/spec/data/seqs_not_fa.txt +16 -16
- data/spec/dummy/config/initializers/quorum_initializer.rb +1 -1
- data/spec/dummy/config/initializers/resque.rb +4 -1
- data/spec/dummy/config/quorum_settings.yml +4 -4
- data/spec/dummy/db/schema.rb +8 -1
- data/spec/dummy/quorum/bin/fetch +115 -0
- data/spec/dummy/quorum/blastdb/test.nin +0 -0
- data/spec/dummy/quorum/blastdb/test.pin +0 -0
- data/spec/dummy/quorum/lib/fetch_tools/blast_db.rb +106 -0
- data/spec/dummy/quorum/lib/search_tools/blast.rb +18 -7
- data/spec/models/job_spec.rb +3 -4
- data/spec/quorum_installed_spec.rb +5 -0
- data/spec/requests/jobs_spec.rb +14 -1
- data/spec/spec_helper.rb +32 -1
- data/spec/support/streams.rb +16 -0
- data/spec/templates/blast_db_spec.rb +63 -0
- data/spec/templates/blast_spec.rb +108 -2
- metadata +64 -37
- /data/app/assets/images/quorum/{knight_rider.gif → loading.gif} +0 -0
- /data/app/views/quorum/jobs/{_blastn_form.html.erb → form/_blastn_form.html.erb} +0 -0
- /data/app/views/quorum/jobs/{_blastp_form.html.erb → form/_blastp_form.html.erb} +0 -0
- /data/app/views/quorum/jobs/{_blastx_form.html.erb → form/_blastx_form.html.erb} +0 -0
- /data/app/views/quorum/jobs/{_tblastn_form.html.erb → form/_tblastn_form.html.erb} +0 -0
data/Gemfile.lock
CHANGED
@@ -1,116 +1,116 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
quorum (0.
|
4
|
+
quorum (0.2.0)
|
5
5
|
bio-blastxmlparser (~> 1.0.1)
|
6
6
|
jquery-rails
|
7
7
|
net-ssh (~> 2.2.1)
|
8
8
|
rails (~> 3.1.0)
|
9
9
|
resque (~> 1.19.0)
|
10
|
+
resque-result (~> 1.0.1)
|
10
11
|
|
11
12
|
GEM
|
12
13
|
remote: http://rubygems.org/
|
13
14
|
specs:
|
14
|
-
actionmailer (3.1.
|
15
|
-
actionpack (= 3.1.
|
15
|
+
actionmailer (3.1.3)
|
16
|
+
actionpack (= 3.1.3)
|
16
17
|
mail (~> 2.3.0)
|
17
|
-
actionpack (3.1.
|
18
|
-
activemodel (= 3.1.
|
19
|
-
activesupport (= 3.1.
|
18
|
+
actionpack (3.1.3)
|
19
|
+
activemodel (= 3.1.3)
|
20
|
+
activesupport (= 3.1.3)
|
20
21
|
builder (~> 3.0.0)
|
21
22
|
erubis (~> 2.7.0)
|
22
23
|
i18n (~> 0.6)
|
23
|
-
rack (~> 1.3.
|
24
|
-
rack-cache (~> 1.
|
24
|
+
rack (~> 1.3.5)
|
25
|
+
rack-cache (~> 1.1)
|
25
26
|
rack-mount (~> 0.8.2)
|
26
27
|
rack-test (~> 0.6.1)
|
27
|
-
sprockets (~> 2.0.
|
28
|
-
activemodel (3.1.
|
29
|
-
activesupport (= 3.1.
|
30
|
-
bcrypt-ruby (~> 3.0.0)
|
28
|
+
sprockets (~> 2.0.3)
|
29
|
+
activemodel (3.1.3)
|
30
|
+
activesupport (= 3.1.3)
|
31
31
|
builder (~> 3.0.0)
|
32
32
|
i18n (~> 0.6)
|
33
|
-
activerecord (3.1.
|
34
|
-
activemodel (= 3.1.
|
35
|
-
activesupport (= 3.1.
|
33
|
+
activerecord (3.1.3)
|
34
|
+
activemodel (= 3.1.3)
|
35
|
+
activesupport (= 3.1.3)
|
36
36
|
arel (~> 2.2.1)
|
37
37
|
tzinfo (~> 0.3.29)
|
38
|
-
activeresource (3.1.
|
39
|
-
activemodel (= 3.1.
|
40
|
-
activesupport (= 3.1.
|
41
|
-
activesupport (3.1.
|
38
|
+
activeresource (3.1.3)
|
39
|
+
activemodel (= 3.1.3)
|
40
|
+
activesupport (= 3.1.3)
|
41
|
+
activesupport (3.1.3)
|
42
42
|
multi_json (~> 1.0)
|
43
43
|
arel (2.2.1)
|
44
|
-
bcrypt-ruby (3.0.0)
|
45
44
|
bio-blastxmlparser (1.0.1)
|
46
45
|
bio-logger (>= 1.0.0)
|
47
46
|
nokogiri (>= 1.5.0)
|
48
47
|
bio-logger (1.0.0)
|
49
48
|
log4r (>= 1.1.9)
|
50
49
|
builder (3.0.0)
|
51
|
-
capybara (1.1.
|
50
|
+
capybara (1.1.2)
|
52
51
|
mime-types (>= 1.16)
|
53
52
|
nokogiri (>= 1.3.3)
|
54
53
|
rack (>= 1.0.0)
|
55
54
|
rack-test (>= 0.5.4)
|
56
55
|
selenium-webdriver (~> 2.0)
|
57
56
|
xpath (~> 0.1.4)
|
58
|
-
childprocess (0.
|
57
|
+
childprocess (0.3.0)
|
59
58
|
ffi (~> 1.0.6)
|
60
59
|
database_cleaner (0.6.7)
|
61
60
|
diff-lcs (1.1.3)
|
62
61
|
erubis (2.7.0)
|
63
|
-
factory_girl (2.1.
|
62
|
+
factory_girl (2.1.2)
|
63
|
+
activesupport
|
64
64
|
factory_girl_rails (1.2.0)
|
65
65
|
factory_girl (~> 2.1.0)
|
66
66
|
railties (>= 3.0.0)
|
67
|
-
ffi (1.0.
|
67
|
+
ffi (1.0.11)
|
68
68
|
hike (1.2.1)
|
69
69
|
i18n (0.6.0)
|
70
|
-
jquery-rails (1.0.
|
70
|
+
jquery-rails (1.0.19)
|
71
71
|
railties (~> 3.0)
|
72
72
|
thor (~> 0.14)
|
73
|
-
|
74
|
-
|
75
|
-
log4r (1.1.9)
|
73
|
+
json (1.6.5)
|
74
|
+
log4r (1.1.10)
|
76
75
|
mail (2.3.0)
|
77
76
|
i18n (>= 0.4.0)
|
78
77
|
mime-types (~> 1.16)
|
79
78
|
treetop (~> 1.4.8)
|
80
|
-
mime-types (1.
|
81
|
-
multi_json (1.0.
|
82
|
-
mysql2 (0.3.
|
83
|
-
net-ssh (2.2.
|
79
|
+
mime-types (1.17.2)
|
80
|
+
multi_json (1.0.4)
|
81
|
+
mysql2 (0.3.11)
|
82
|
+
net-ssh (2.2.2)
|
84
83
|
nokogiri (1.5.0)
|
85
|
-
polyglot (0.3.
|
86
|
-
rack (1.3.
|
87
|
-
rack-cache (1.
|
84
|
+
polyglot (0.3.3)
|
85
|
+
rack (1.3.6)
|
86
|
+
rack-cache (1.1)
|
88
87
|
rack (>= 0.4)
|
89
88
|
rack-mount (0.8.3)
|
90
89
|
rack (>= 1.0.0)
|
91
|
-
rack-protection (1.
|
90
|
+
rack-protection (1.2.0)
|
92
91
|
rack
|
93
92
|
rack-ssl (1.3.2)
|
94
93
|
rack
|
95
94
|
rack-test (0.6.1)
|
96
95
|
rack (>= 1.0)
|
97
|
-
rails (3.1.
|
98
|
-
actionmailer (= 3.1.
|
99
|
-
actionpack (= 3.1.
|
100
|
-
activerecord (= 3.1.
|
101
|
-
activeresource (= 3.1.
|
102
|
-
activesupport (= 3.1.
|
96
|
+
rails (3.1.3)
|
97
|
+
actionmailer (= 3.1.3)
|
98
|
+
actionpack (= 3.1.3)
|
99
|
+
activerecord (= 3.1.3)
|
100
|
+
activeresource (= 3.1.3)
|
101
|
+
activesupport (= 3.1.3)
|
103
102
|
bundler (~> 1.0)
|
104
|
-
railties (= 3.1.
|
105
|
-
railties (3.1.
|
106
|
-
actionpack (= 3.1.
|
107
|
-
activesupport (= 3.1.
|
103
|
+
railties (= 3.1.3)
|
104
|
+
railties (3.1.3)
|
105
|
+
actionpack (= 3.1.3)
|
106
|
+
activesupport (= 3.1.3)
|
108
107
|
rack-ssl (~> 1.3.2)
|
109
108
|
rake (>= 0.8.7)
|
110
109
|
rdoc (~> 3.4)
|
111
110
|
thor (~> 0.14.6)
|
112
|
-
rake (0.9.2)
|
113
|
-
rdoc (3.
|
111
|
+
rake (0.9.2.2)
|
112
|
+
rdoc (3.12)
|
113
|
+
json (~> 1.4)
|
114
114
|
redis (2.2.2)
|
115
115
|
redis-namespace (1.0.3)
|
116
116
|
redis (< 3.0.0)
|
@@ -119,40 +119,47 @@ GEM
|
|
119
119
|
redis-namespace (~> 1.0.2)
|
120
120
|
sinatra (>= 0.9.2)
|
121
121
|
vegas (~> 0.1.2)
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
122
|
+
resque-meta (1.0.3)
|
123
|
+
resque (~> 1.8)
|
124
|
+
resque-result (1.0.1)
|
125
|
+
resque (~> 1.9)
|
126
|
+
resque-meta (~> 1.0)
|
127
|
+
resque_spec (0.8.1)
|
128
|
+
resque (>= 1.19.0)
|
129
|
+
rspec (>= 2.5.0)
|
130
|
+
rspec (2.8.0)
|
131
|
+
rspec-core (~> 2.8.0)
|
132
|
+
rspec-expectations (~> 2.8.0)
|
133
|
+
rspec-mocks (~> 2.8.0)
|
134
|
+
rspec-core (2.8.0)
|
135
|
+
rspec-expectations (2.8.0)
|
128
136
|
diff-lcs (~> 1.1.2)
|
129
|
-
rspec-mocks (2.
|
130
|
-
rspec-rails (2.
|
131
|
-
actionpack (
|
132
|
-
activesupport (
|
133
|
-
railties (
|
134
|
-
rspec (~> 2.
|
135
|
-
rubyzip (0.9.
|
136
|
-
selenium-webdriver (2.
|
137
|
-
childprocess (>= 0.2.
|
138
|
-
ffi (
|
139
|
-
|
137
|
+
rspec-mocks (2.8.0)
|
138
|
+
rspec-rails (2.8.1)
|
139
|
+
actionpack (>= 3.0)
|
140
|
+
activesupport (>= 3.0)
|
141
|
+
railties (>= 3.0)
|
142
|
+
rspec (~> 2.8.0)
|
143
|
+
rubyzip (0.9.5)
|
144
|
+
selenium-webdriver (2.17.0)
|
145
|
+
childprocess (>= 0.2.5)
|
146
|
+
ffi (~> 1.0.9)
|
147
|
+
multi_json (~> 1.0.4)
|
140
148
|
rubyzip
|
141
|
-
sinatra (1.3.
|
142
|
-
rack (~> 1.3)
|
143
|
-
rack-protection (~> 1.
|
144
|
-
tilt (~> 1.3)
|
145
|
-
sprockets (2.0.
|
149
|
+
sinatra (1.3.2)
|
150
|
+
rack (~> 1.3, >= 1.3.6)
|
151
|
+
rack-protection (~> 1.2)
|
152
|
+
tilt (~> 1.3, >= 1.3.3)
|
153
|
+
sprockets (2.0.3)
|
146
154
|
hike (~> 1.2)
|
147
155
|
rack (~> 1.0)
|
148
156
|
tilt (~> 1.1, != 1.3.0)
|
149
|
-
spruz (0.2.13)
|
150
157
|
thor (0.14.6)
|
151
158
|
tilt (1.3.3)
|
152
159
|
treetop (1.4.10)
|
153
160
|
polyglot
|
154
161
|
polyglot (>= 0.3.1)
|
155
|
-
tzinfo (0.3.
|
162
|
+
tzinfo (0.3.31)
|
156
163
|
vegas (0.1.8)
|
157
164
|
rack (>= 1.0.0)
|
158
165
|
xpath (0.1.4)
|
@@ -162,9 +169,10 @@ PLATFORMS
|
|
162
169
|
ruby
|
163
170
|
|
164
171
|
DEPENDENCIES
|
165
|
-
capybara
|
166
|
-
database_cleaner
|
172
|
+
capybara (~> 1.1.1)
|
173
|
+
database_cleaner (~> 0.6.7)
|
167
174
|
factory_girl_rails (~> 1.2.0)
|
168
175
|
mysql2
|
169
176
|
quorum!
|
177
|
+
resque_spec (~> 0.8.1)
|
170
178
|
rspec-rails (~> 2.6)
|
data/HISTORY.md
ADDED
data/README.rdoc
CHANGED
@@ -11,8 +11,8 @@ Dependencies:
|
|
11
11
|
|
12
12
|
* Rails >= 3.1.0
|
13
13
|
* Redis >= 0.900 for Resque (https://github.com/defunkt/resque)
|
14
|
-
* NCBI Blast+ (ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST
|
15
|
-
* Emboss (http://emboss.sourceforge.net
|
14
|
+
* NCBI Blast+ (ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST)
|
15
|
+
* Emboss (http://emboss.sourceforge.net)
|
16
16
|
|
17
17
|
See the gem in action.
|
18
18
|
|
@@ -41,6 +41,36 @@ Migrate the database.
|
|
41
41
|
rake quorum:install:migrations
|
42
42
|
rake db:migrate
|
43
43
|
|
44
|
+
== Upgrading?
|
45
|
+
|
46
|
+
Follow these steps to safely upgrade Quorum.
|
47
|
+
|
48
|
+
* Make a copy of "config/quorum_settings.yml".
|
49
|
+
|
50
|
+
<tt>cp config/quorum_settings.yml config/quorum_settings.yml.old</tt>
|
51
|
+
|
52
|
+
* If you overrode Quorum's styles and / or views, make a copy of the
|
53
|
+
existing directories before upgrading.
|
54
|
+
|
55
|
+
<tt>cp -R app/assets/stylesheets/quorum app/assets/stylesheets/quorum_old</tt>
|
56
|
+
<tt>cp -R app/views/quorum/jobs app/views/quorum/jobs_old</tt>
|
57
|
+
|
58
|
+
* Run the install generator and answer "Yes" to all conflicts.
|
59
|
+
|
60
|
+
<tt>rails generate quorum:install</tt>
|
61
|
+
|
62
|
+
* Copy the old Search Database(s) to the newly generated
|
63
|
+
"config/quorum_settings.yml" file.
|
64
|
+
|
65
|
+
* Update the database migrations.
|
66
|
+
|
67
|
+
<tt>rake quorum:install:migrations
|
68
|
+
rake db:migrate</tt>
|
69
|
+
|
70
|
+
* If applicable, override Quorum's views, styles and images.
|
71
|
+
|
72
|
+
* Update the remote machine(s).
|
73
|
+
|
44
74
|
== Getting Started
|
45
75
|
|
46
76
|
=== NCBI Blast+ Setup
|
@@ -88,6 +118,38 @@ For a full list of supported arguments.
|
|
88
118
|
Don't forget to update "config/quorum_settings.yml" with your newly created
|
89
119
|
database(s).
|
90
120
|
|
121
|
+
==== Download Blast Hit Sequence
|
122
|
+
|
123
|
+
Quorum provides a link to download a Blast hit sequence in the detailed report.
|
124
|
+
For this process to work smoothly, the sequence identifier MUST be unique
|
125
|
+
across ALL Blast databases.
|
126
|
+
|
127
|
+
Example:
|
128
|
+
"example_blast_database/contigs.fa"
|
129
|
+
|
130
|
+
>my_unique_sequence_identifier_201201201327077953
|
131
|
+
ATGC...
|
132
|
+
|
133
|
+
"another_example_blast_database/contigs.fa"
|
134
|
+
|
135
|
+
>my_unique_sequence_identifier_201201201327078017
|
136
|
+
CGTA...
|
137
|
+
|
138
|
+
If the sequence identifiers are not unique across all Blast databases and
|
139
|
+
you wish to remove the link to download a Blast hit sequence, follow the
|
140
|
+
steps below.
|
141
|
+
|
142
|
+
* Override Quorum's views (see Customize Quorum below)
|
143
|
+
* Comment out or remove the lines below in
|
144
|
+
"app/views/quorum/jobs/templates/_blast_detailed_report_template.html.erb"
|
145
|
+
|
146
|
+
\<p class="small">
|
147
|
+
<a id="download_sequence_{{= id }}"
|
148
|
+
onclick="downloadSequence(<%= @jobs.id %>, {{= id }}, '{{= algo }}', this)">
|
149
|
+
Download Sequence
|
150
|
+
</a>
|
151
|
+
\</p>
|
152
|
+
|
91
153
|
=== Remote Machine Setup -- Recommended for Production Use
|
92
154
|
|
93
155
|
Follow the steps below to execute Quorum remotely via Net::SSH.
|
@@ -100,9 +162,9 @@ Follow the steps below to execute Quorum remotely via Net::SSH.
|
|
100
162
|
* Ensure you have supplied the necessary information in
|
101
163
|
"config/quorum_settings.yml" to execute Quorum remotely.
|
102
164
|
|
103
|
-
remote: true
|
104
|
-
ssh_host: remote.machine.org
|
105
|
-
ssh_user: remote_user
|
165
|
+
<tt>remote: true</tt>
|
166
|
+
<tt>ssh_host: remote.machine.org</tt>
|
167
|
+
<tt>ssh_user: remote_user</tt>
|
106
168
|
|
107
169
|
Net::SSH.start() optional params (http://net-ssh.github.com/ssh/v2/api/index.html)
|
108
170
|
|
@@ -112,28 +174,28 @@ Net::SSH.start() optional params (http://net-ssh.github.com/ssh/v2/api/index.htm
|
|
112
174
|
|
113
175
|
* Tar and compress quorum.
|
114
176
|
|
115
|
-
tar -czvf quorum.tar.gz quorum
|
177
|
+
<tt>tar -czvf quorum.tar.gz quorum/</tt>
|
116
178
|
|
117
179
|
* Copy the newly created tarball to the remote machine.
|
118
180
|
|
119
|
-
scp quorum.tar.gz <username>@<host>:/path/to/install
|
181
|
+
<tt>scp quorum.tar.gz <username>@<host>:/path/to/install</tt>
|
120
182
|
|
121
183
|
* Expand the tarball on the remote machine.
|
122
184
|
|
123
|
-
ssh <username>@<host>
|
185
|
+
<tt>ssh <username>@<host></tt>
|
124
186
|
|
125
|
-
tar -xzvf quorum.tar.gz
|
187
|
+
<tt>tar -xzvf quorum.tar.gz</tt>
|
126
188
|
|
127
189
|
* Ensure Quorum script dependencies are added to the remote machine's PATH.
|
128
190
|
If the remote machine doesn't have a .bashrc file, create one.
|
129
191
|
|
130
|
-
touch /path/to/.bashrc
|
192
|
+
<tt>touch /path/to/.bashrc</tt>
|
131
193
|
|
132
194
|
and add script dependencies to PATH.
|
133
195
|
|
134
196
|
echo "export PATH=/path/to/dependencies:$PATH" >> /path/to/.bashrc
|
135
197
|
|
136
|
-
=== Customize Quorum's Views and
|
198
|
+
=== Customize Quorum's Views, Styles and Images
|
137
199
|
|
138
200
|
To override Quorum's default views, run the generator.
|
139
201
|
|
@@ -155,6 +217,22 @@ it's a good idea to remove
|
|
155
217
|
in "app/assets/stylesheets/application.css" and require your stylesheets
|
156
218
|
individually.
|
157
219
|
|
220
|
+
To override Quorum's default images, run the generator.
|
221
|
+
|
222
|
+
rails generate quorum:images
|
223
|
+
|
224
|
+
A copy of Quorum's images can be found in your application under
|
225
|
+
"app/assets/images/quorum/".
|
226
|
+
|
227
|
+
<b>jQuery UI</b>
|
228
|
+
|
229
|
+
Don't like Quorum's jQuery UI theme? Override it!
|
230
|
+
|
231
|
+
* Override Quorum's styles and images.
|
232
|
+
* Roll your own jQuery UI theme. http://jqueryui.com/themeroller
|
233
|
+
* Replace Quorum's theme in "app/assets/{stylesheets:images}/quorum" with
|
234
|
+
your own.
|
235
|
+
|
158
236
|
Don't plan on supporting all of Quorum's alogrithms? Override Quorum's views
|
159
237
|
and comment out any unwanted algorithms in "app/views/quorum/jobs/new.html.erb"
|
160
238
|
and "app/views/quorum/jobs/show.html.erb".
|
@@ -164,22 +242,22 @@ For example:
|
|
164
242
|
Remove Blastp in "app/views/quorum/jobs/new.html.erb"
|
165
243
|
|
166
244
|
<!-- Search Algorithms -->
|
167
|
-
<!-- Comment out an
|
245
|
+
<!-- Comment out an algorithm below to remove it from the form. -->
|
168
246
|
|
169
247
|
<!-- blastn -->
|
170
|
-
<%= render :partial => "blastn_form", :locals => {
|
248
|
+
<%= render :partial => "quorum/jobs/form/blastn_form", :locals => {
|
171
249
|
:f => f, :blast_dbs => @blast_dbs } %>
|
172
250
|
|
173
251
|
<!-- blastx -->
|
174
|
-
<%= render :partial => "blastx_form", :locals => {
|
252
|
+
<%= render :partial => "quorum/jobs/form/blastx_form", :locals => {
|
175
253
|
:f => f, :blast_dbs => @blast_dbs } %>
|
176
254
|
|
177
255
|
<!-- tblastn -->
|
178
|
-
<%= render :partial => "tblastn_form", :locals => {
|
256
|
+
<%= render :partial => "quorum/jobs/form/tblastn_form", :locals => {
|
179
257
|
:f => f, :blast_dbs => @blast_dbs } %>
|
180
258
|
|
181
259
|
<!-- blastp -->
|
182
|
-
<% render :partial => "blastp_form", :locals => {
|
260
|
+
<% render :partial => "quorum/jobs/form/blastp_form", :locals => {
|
183
261
|
:f => f, :blast_dbs => @blast_dbs } %>
|
184
262
|
|
185
263
|
<!-- End Search Algorithms -->
|
@@ -200,21 +278,21 @@ Remove Blastp in "app/views/quorum/jobs/show.html.erb"
|
|
200
278
|
<div id="tabs-1">
|
201
279
|
<h2>Blastn</h2>
|
202
280
|
<div id="blastn-results">
|
203
|
-
Searching... <%= image_tag "quorum/
|
281
|
+
Searching... <%= image_tag "quorum/loading.gif" %>
|
204
282
|
</div>
|
205
283
|
</div>
|
206
284
|
|
207
285
|
<div id="tabs-2">
|
208
286
|
<h2>Blastx</h2>
|
209
287
|
<div id="blastx-results">
|
210
|
-
Searching... <%= image_tag "quorum/
|
288
|
+
Searching... <%= image_tag "quorum/loading.gif" %>
|
211
289
|
</div>
|
212
290
|
</div>
|
213
291
|
|
214
292
|
<div id="tabs-3">
|
215
293
|
<h2>Tblastn</h2>
|
216
294
|
<div id="tblastn-results">
|
217
|
-
Searching... <%= image_tag "quorum/
|
295
|
+
Searching... <%= image_tag "quorum/loading.gif" %>
|
218
296
|
</div>
|
219
297
|
</div>
|
220
298
|
|
@@ -222,7 +300,7 @@ Remove Blastp in "app/views/quorum/jobs/show.html.erb"
|
|
222
300
|
<div id="tabs-4">
|
223
301
|
<h2>Blastp</h2>
|
224
302
|
<div id="blastp-results">
|
225
|
-
Searching... <%= image_tag "quorum/
|
303
|
+
Searching... <%= image_tag "quorum/loading.gif" %>
|
226
304
|
</div>
|
227
305
|
</div>
|
228
306
|
-->
|
@@ -232,7 +310,7 @@ Remove Blastp in "app/views/quorum/jobs/show.html.erb"
|
|
232
310
|
|
233
311
|
For detailed Redis installation instructions, follow the links below.
|
234
312
|
|
235
|
-
* Redis (http://redis.io
|
313
|
+
* Redis (http://redis.io)
|
236
314
|
* Resque (https://github.com/defunkt/resque)
|
237
315
|
|
238
316
|
=== Resque
|
@@ -301,7 +379,7 @@ https://github.com/ncgr/quorum/issues
|
|
301
379
|
=== TODO
|
302
380
|
|
303
381
|
* Add GFF3 annotations to detailed Blast reports
|
304
|
-
* Add link to download Blast hit
|
382
|
+
* Add link to download multiple Blast hit sequences in detailed report
|
305
383
|
* Support Hmmer3
|
306
384
|
|
307
385
|
=== Maintained By
|
@@ -315,4 +393,4 @@ https://github.com/ncgr/quorum/issues
|
|
315
393
|
|
316
394
|
== License
|
317
395
|
|
318
|
-
MIT License. Copyright NCGR http://ncgr.org
|
396
|
+
MIT License. Copyright NCGR http://ncgr.org
|
@@ -180,7 +180,7 @@ var pollResults = function(id, interval, algos) {
|
|
180
180
|
data: data,
|
181
181
|
algo: a
|
182
182
|
}
|
183
|
-
|
183
|
+
);
|
184
184
|
$('#' + a + '-results').html(temp);
|
185
185
|
return;
|
186
186
|
}
|
@@ -198,7 +198,7 @@ var viewDetailedReport = function(id, focus_id, query, algo) {
|
|
198
198
|
// Create the modal box.
|
199
199
|
$('#detailed_report_dialog').html(
|
200
200
|
"<p class='center'>" +
|
201
|
-
"Loading... <img src='/assets/quorum/
|
201
|
+
"Loading... <img src='/assets/quorum/loading.gif' alt='Loading'>" +
|
202
202
|
"</p>"
|
203
203
|
).dialog({
|
204
204
|
modal: true,
|
@@ -249,7 +249,7 @@ var addBaseTitleIndex = function(bases, from, to, algo, type) {
|
|
249
249
|
forward = false;
|
250
250
|
}
|
251
251
|
|
252
|
-
//
|
252
|
+
// Set value to 3 for the below.
|
253
253
|
if ((type === "hit" && algo === "tblastn") ||
|
254
254
|
(type === "query" && algo === "blastx")) {
|
255
255
|
value = 3;
|
@@ -350,6 +350,48 @@ var displayHspLinks = function(focus, group, data) {
|
|
350
350
|
}
|
351
351
|
}
|
352
352
|
|
353
|
+
//
|
354
|
+
// Download Blast hit sequence.
|
355
|
+
//
|
356
|
+
var downloadSequence = function(id, algo_id, algo, el) {
|
357
|
+
$(el).html('Fetching sequence...');
|
358
|
+
|
359
|
+
$.getJSON(
|
360
|
+
"/quorum/jobs/" + id + "/get_quorum_blast_hit_sequence.json?algo_id=" +
|
361
|
+
algo_id + "&algo=" + algo,
|
362
|
+
function(data) {
|
363
|
+
getSequenceFile(id, data[0].meta_id, el);
|
364
|
+
}
|
365
|
+
);
|
366
|
+
}
|
367
|
+
|
368
|
+
//
|
369
|
+
// Poll application for Blast hit sequence.
|
370
|
+
//
|
371
|
+
var getSequenceFile = function(id, meta_id, el) {
|
372
|
+
var url = "/quorum/jobs/" + id +
|
373
|
+
"/send_quorum_blast_hit_sequence?meta_id=" + meta_id;
|
374
|
+
$.get(
|
375
|
+
url,
|
376
|
+
function(data) {
|
377
|
+
if (data.length === 0) {
|
378
|
+
setTimeout(function() { getSequenceFile(id, meta_id, el) }, 2500);
|
379
|
+
} else {
|
380
|
+
if (data.indexOf("error") !== -1) {
|
381
|
+
// Print error message.
|
382
|
+
$(el).addClass('ui-state-error').html(data);
|
383
|
+
} else {
|
384
|
+
// Force browser to download file via iframe.
|
385
|
+
$(el).addClass('ui-state-highlight').html('Sequence Downloaded Successfully');
|
386
|
+
$('.quorum_sequence_download').remove();
|
387
|
+
$('body').append('<iframe class="quorum_sequence_download"></iframe>');
|
388
|
+
$('.quorum_sequence_download').attr('src', url).hide();
|
389
|
+
}
|
390
|
+
}
|
391
|
+
}
|
392
|
+
);
|
393
|
+
}
|
394
|
+
|
353
395
|
//
|
354
396
|
// Autoscroll to given div id.
|
355
397
|
//
|
@@ -53,12 +53,11 @@ module Quorum
|
|
53
53
|
# Returns Resque worker results.
|
54
54
|
#
|
55
55
|
def get_quorum_search_results
|
56
|
-
valid = ["blastn", "blastx", "tblastn", "blastp"]
|
57
56
|
empty = [{ :results => false }].to_json
|
58
57
|
|
59
58
|
json = empty
|
60
59
|
|
61
|
-
if
|
60
|
+
if Quorum::BLAST_ALGORITHMS.include?(params[:algo])
|
62
61
|
queued = "#{params[:algo]}_job".to_sym
|
63
62
|
report = "#{params[:algo]}_job_reports".to_sym
|
64
63
|
|
@@ -84,6 +83,52 @@ module Quorum
|
|
84
83
|
respond_with json
|
85
84
|
end
|
86
85
|
|
86
|
+
#
|
87
|
+
# Find hit sequence, queue worker and return worker meta_id
|
88
|
+
# for lookup.
|
89
|
+
#
|
90
|
+
def get_quorum_blast_hit_sequence
|
91
|
+
json = []
|
92
|
+
|
93
|
+
if Quorum::BLAST_ALGORITHMS.include?(params[:algo])
|
94
|
+
begin
|
95
|
+
job = Job.find(params[:id])
|
96
|
+
rescue ActiveRecord::RecordNotFound => e
|
97
|
+
logger.error e.message
|
98
|
+
else
|
99
|
+
data = job.fetch_quorum_blast_sequence(
|
100
|
+
params[:algo], params[:algo_id]
|
101
|
+
)
|
102
|
+
json = [{ :meta_id => data.meta_id }]
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
respond_with json
|
107
|
+
end
|
108
|
+
|
109
|
+
#
|
110
|
+
# Send Blast hit sequence as attached file or render
|
111
|
+
# error message as text.
|
112
|
+
#
|
113
|
+
# See lib/generators/templates/blast_db.rb for more info.
|
114
|
+
#
|
115
|
+
def send_quorum_blast_hit_sequence
|
116
|
+
data = Workers::System.get_meta(params[:meta_id])
|
117
|
+
if data.succeeded?
|
118
|
+
unless data.result.downcase.include?("error")
|
119
|
+
send_data data.result,
|
120
|
+
:filename => "#{params[:meta_id]}.fa",
|
121
|
+
:type => "text/plain",
|
122
|
+
:disposition => "attachment"
|
123
|
+
return
|
124
|
+
else
|
125
|
+
render :text => data.result
|
126
|
+
return
|
127
|
+
end
|
128
|
+
end
|
129
|
+
render :text => ""
|
130
|
+
end
|
131
|
+
|
87
132
|
private
|
88
133
|
|
89
134
|
#
|