quorum 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +10 -0
- data/.rspec +1 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +170 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +318 -0
- data/Rakefile +31 -0
- data/app/assets/images/quorum/.gitkeep +0 -0
- data/app/assets/images/quorum/bg.png +0 -0
- data/app/assets/images/quorum/knight_rider.gif +0 -0
- data/app/assets/images/quorum/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/app/assets/images/quorum/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/app/assets/images/quorum/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/app/assets/images/quorum/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/app/assets/images/quorum/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/app/assets/images/quorum/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/app/assets/images/quorum/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/app/assets/images/quorum/ui-bg_inset-soft_95_fef1ec_1x100.png +0 -0
- data/app/assets/images/quorum/ui-icons_222222_256x240.png +0 -0
- data/app/assets/images/quorum/ui-icons_2e83ff_256x240.png +0 -0
- data/app/assets/images/quorum/ui-icons_454545_256x240.png +0 -0
- data/app/assets/images/quorum/ui-icons_888888_256x240.png +0 -0
- data/app/assets/images/quorum/ui-icons_cd0a0a_256x240.png +0 -0
- data/app/assets/javascripts/quorum/application.js +13 -0
- data/app/assets/javascripts/quorum/jobs.js +386 -0
- data/app/assets/stylesheets/quorum/application.css +224 -0
- data/app/assets/stylesheets/quorum/jobs.css +72 -0
- data/app/assets/stylesheets/quorum/jquery-ui-1.8.16.custom.css +568 -0
- data/app/assets/stylesheets/quorum/tipsy.css +25 -0
- data/app/controllers/quorum/application_controller.rb +5 -0
- data/app/controllers/quorum/jobs_controller.rb +102 -0
- data/app/helpers/quorum/application_helper.rb +4 -0
- data/app/models/quorum/blastn_job.rb +111 -0
- data/app/models/quorum/blastn_job_report.rb +7 -0
- data/app/models/quorum/blastp_job.rb +111 -0
- data/app/models/quorum/blastp_job_report.rb +7 -0
- data/app/models/quorum/blastx_job.rb +111 -0
- data/app/models/quorum/blastx_job_report.rb +7 -0
- data/app/models/quorum/job.rb +164 -0
- data/app/models/quorum/tblastn_job.rb +111 -0
- data/app/models/quorum/tblastn_job_report.rb +7 -0
- data/app/views/layouts/quorum/application.html.erb +15 -0
- data/app/views/quorum/jobs/_blastn_form.html.erb +71 -0
- data/app/views/quorum/jobs/_blastp_form.html.erb +71 -0
- data/app/views/quorum/jobs/_blastx_form.html.erb +71 -0
- data/app/views/quorum/jobs/_tblastn_form.html.erb +71 -0
- data/app/views/quorum/jobs/new.html.erb +45 -0
- data/app/views/quorum/jobs/show.html.erb +183 -0
- data/app/views/shared/_error_messages.html.erb +10 -0
- data/config/locales/en.yml +8 -0
- data/config/routes.rb +9 -0
- data/db/migrate/20111031204518_create_jobs.rb +12 -0
- data/db/migrate/20111031204701_create_blastn_jobs.rb +19 -0
- data/db/migrate/20111031204719_create_blastx_jobs.rb +19 -0
- data/db/migrate/20111031204733_create_blastp_jobs.rb +19 -0
- data/db/migrate/20111031204754_create_tblastn_jobs.rb +19 -0
- data/db/migrate/20111031204846_create_blastn_job_reports.rb +34 -0
- data/db/migrate/20111031204903_create_blastx_job_reports.rb +34 -0
- data/db/migrate/20111031204922_create_blastp_job_reports.rb +34 -0
- data/db/migrate/20111031204941_create_tblastn_job_reports.rb +34 -0
- data/lib/generators/quorum/install_generator.rb +68 -0
- data/lib/generators/quorum/styles_generator.rb +18 -0
- data/lib/generators/quorum/views_generator.rb +18 -0
- data/lib/generators/templates/README +25 -0
- data/lib/generators/templates/blast.rb +412 -0
- data/lib/generators/templates/logger.rb +43 -0
- data/lib/generators/templates/quorum_initializer.rb +36 -0
- data/lib/generators/templates/quorum_settings.yml +157 -0
- data/lib/generators/templates/search +141 -0
- data/lib/generators/templates/trollop.rb +781 -0
- data/lib/quorum/engine.rb +5 -0
- data/lib/quorum/helpers.rb +17 -0
- data/lib/quorum/sequence.rb +89 -0
- data/lib/quorum/version.rb +3 -0
- data/lib/quorum.rb +89 -0
- data/lib/tasks/blastdb/README +17 -0
- data/lib/tasks/blastdb/build_blast_db.rb +222 -0
- data/lib/tasks/quorum_resque.rake +3 -0
- data/lib/tasks/quorum_tasks.rake +50 -0
- data/lib/workers/quorum.rb +45 -0
- data/quorum.gemspec +29 -0
- data/script/rails +6 -0
- data/spec/data/nucl_prot_seqs.txt +36 -0
- data/spec/data/nucl_seqs.txt +32 -0
- data/spec/data/prot_seqs.txt +4 -0
- data/spec/data/seqs.docx +0 -0
- data/spec/data/seqs_not_fa.txt +16 -0
- data/spec/data/tmp/test.tgz +0 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +9 -0
- data/spec/dummy/app/assets/stylesheets/application.css +7 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.gitkeep +0 -0
- data/spec/dummy/app/models/.gitkeep +0 -0
- data/spec/dummy/app/models/blast.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config/application.rb +46 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/environment.rb +20 -0
- data/spec/dummy/config/environments/development.rb +30 -0
- data/spec/dummy/config/environments/production.rb +60 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +10 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/quorum_initializer.rb +36 -0
- data/spec/dummy/config/initializers/resque.rb +1 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/locales/quorum.en.yml +8 -0
- data/spec/dummy/config/quorum_settings.yml +145 -0
- data/spec/dummy/config/routes.rb +9 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/schema.rb +214 -0
- data/spec/dummy/lib/assets/.gitkeep +0 -0
- data/spec/dummy/log/.gitkeep +0 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/quorum/bin/search +141 -0
- data/spec/dummy/quorum/blastdb/test/contigs.fa +2 -0
- data/spec/dummy/quorum/blastdb/test/peptides.fa +2 -0
- data/spec/dummy/quorum/blastdb/test.nhd +1 -0
- data/spec/dummy/quorum/blastdb/test.nhi +0 -0
- data/spec/dummy/quorum/blastdb/test.nhr +0 -0
- data/spec/dummy/quorum/blastdb/test.nin +0 -0
- data/spec/dummy/quorum/blastdb/test.nog +0 -0
- data/spec/dummy/quorum/blastdb/test.nsd +1 -0
- data/spec/dummy/quorum/blastdb/test.nsi +0 -0
- data/spec/dummy/quorum/blastdb/test.nsq +0 -0
- data/spec/dummy/quorum/blastdb/test.phd +1 -0
- data/spec/dummy/quorum/blastdb/test.phi +0 -0
- data/spec/dummy/quorum/blastdb/test.phr +0 -0
- data/spec/dummy/quorum/blastdb/test.pin +0 -0
- data/spec/dummy/quorum/blastdb/test.pog +0 -0
- data/spec/dummy/quorum/blastdb/test.psd +1 -0
- data/spec/dummy/quorum/blastdb/test.psi +0 -0
- data/spec/dummy/quorum/blastdb/test.psq +0 -0
- data/spec/dummy/quorum/lib/logger.rb +43 -0
- data/spec/dummy/quorum/lib/search_tools/blast.rb +412 -0
- data/spec/dummy/quorum/lib/trollop.rb +781 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/models/blastn_job_report_spec.rb +13 -0
- data/spec/models/blastn_job_spec.rb +103 -0
- data/spec/models/blastp_job_report_spec.rb +13 -0
- data/spec/models/blastp_job_spec.rb +103 -0
- data/spec/models/blastx_job_report_spec.rb +13 -0
- data/spec/models/blastx_job_spec.rb +103 -0
- data/spec/models/job_spec.rb +40 -0
- data/spec/models/tblastn_job_report_spec.rb +13 -0
- data/spec/models/tblastn_job_spec.rb +103 -0
- data/spec/quorum/quorum_sequence_spec.rb +64 -0
- data/spec/quorum_installed_spec.rb +64 -0
- data/spec/requests/jobs_spec.rb +138 -0
- data/spec/spec_helper.rb +45 -0
- data/spec/tasks/blastdb_rake_spec.rb +119 -0
- data/spec/templates/blast_spec.rb +8 -0
- data/spec/templates/logger_spec.rb +35 -0
- data/vendor/assets/javascripts/jquery.tipsy.js +241 -0
- data/vendor/assets/javascripts/underscore-min.js +30 -0
- metadata +325 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Quorum
|
|
2
|
+
module Helpers
|
|
3
|
+
|
|
4
|
+
#
|
|
5
|
+
# I18n flash helper. Set flash message based on key.
|
|
6
|
+
#
|
|
7
|
+
def set_flash_message(key, kind, options = {})
|
|
8
|
+
options[:scope] = "quorum.#{controller_name}"
|
|
9
|
+
options[:scope] << ".errors" if key.to_s == "error"
|
|
10
|
+
options[:scope] << ".notices" if key.to_s == "notice"
|
|
11
|
+
options[:scope] << ".alerts" if key.to_s == "alert"
|
|
12
|
+
message = I18n.t("#{kind}", options)
|
|
13
|
+
flash[key] = message if message.present?
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
module Quorum
|
|
2
|
+
module Sequence
|
|
3
|
+
|
|
4
|
+
#
|
|
5
|
+
# Create a unique hash plus timestamp.
|
|
6
|
+
#
|
|
7
|
+
def create_hash(sequence)
|
|
8
|
+
Digest::MD5.hexdigest(sequence).to_s + "-" + Time.now.to_f.to_s
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
#
|
|
12
|
+
# Write input sequence to file. Pass the raw input data through seqret
|
|
13
|
+
# to ensure FASTA format.
|
|
14
|
+
#
|
|
15
|
+
def write_input_sequence_to_file(tmp_dir, hash, sequence)
|
|
16
|
+
seq = File.join(tmp_dir, hash + ".seq")
|
|
17
|
+
File.open(seq, "w") do |f|
|
|
18
|
+
f << sequence
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
fasta = File.join(tmp_dir, hash + ".fa")
|
|
22
|
+
|
|
23
|
+
# Force FASTA format.
|
|
24
|
+
cmd = "seqret -filter -sformat pearson -osformat fasta < #{seq} " <<
|
|
25
|
+
"> #{fasta} 2> /dev/null"
|
|
26
|
+
system(cmd)
|
|
27
|
+
if $?.exitstatus > 0
|
|
28
|
+
raise " - Please enter your sequence(s) in Plain Text as " <<
|
|
29
|
+
"FASTA."
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
#
|
|
34
|
+
# Discover input sequence type (nucleic acid NA or amino acid AA).
|
|
35
|
+
#
|
|
36
|
+
# Subtracting all AA single letter chars from NA single letter chars
|
|
37
|
+
# (including ALL ambiguity codes for each!) leaves us with
|
|
38
|
+
# EQILFP. If a sequence contains EQILFP, it's safe to call it an AA.
|
|
39
|
+
#
|
|
40
|
+
# See single letter char tables for more information:
|
|
41
|
+
# http://en.wikipedia.org/wiki/Proteinogenic_amino_acid
|
|
42
|
+
# http://www.chick.manchester.ac.uk/SiteSeer/IUPAC_codes.html
|
|
43
|
+
#
|
|
44
|
+
# If a sequence doesn't contain EQILFP, it could be either an AA
|
|
45
|
+
# or NA. To distinguish the two, count the number of As Ts Gs Cs
|
|
46
|
+
# and Ns, divide by the the length of the sequence and * 100.
|
|
47
|
+
#
|
|
48
|
+
# If the percentage of A, T, U, G, C or N is >= 15.0, call it a NA.
|
|
49
|
+
# 15% was choosen based on the data in the table
|
|
50
|
+
# "Relative proportions (%) of bases in DNA"
|
|
51
|
+
# (http://en.wikipedia.org/wiki/Chargaff's_rules) and the
|
|
52
|
+
# precentage of AAs found in peptides
|
|
53
|
+
# (http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2590925/).
|
|
54
|
+
#
|
|
55
|
+
def discover_input_sequence_type(sequence)
|
|
56
|
+
# Index of the first newline char.
|
|
57
|
+
start = sequence.index(/\n/)
|
|
58
|
+
# Remove the sequence FASTA header.
|
|
59
|
+
seq = sequence.slice(start..-1).gsub!(/\n/, '')
|
|
60
|
+
|
|
61
|
+
if seq =~ /[EQILFP]+/
|
|
62
|
+
type = "amino_acid"
|
|
63
|
+
else
|
|
64
|
+
# Length of the sequence minus the FASTA header.
|
|
65
|
+
len = seq.length.to_f
|
|
66
|
+
|
|
67
|
+
na_percent = 15.0
|
|
68
|
+
|
|
69
|
+
a = (seq.count("A").to_f / len) * 100
|
|
70
|
+
t = (seq.count("T").to_f / len) * 100
|
|
71
|
+
u = (seq.count("U").to_f / len) * 100
|
|
72
|
+
|
|
73
|
+
g = (seq.count("G").to_f / len) * 100
|
|
74
|
+
c = (seq.count("C").to_f / len) * 100
|
|
75
|
+
|
|
76
|
+
n = (seq.count("N").to_f / len) * 100
|
|
77
|
+
|
|
78
|
+
if (a >= na_percent) || (t >= na_percent) || (u >= na_percent) ||
|
|
79
|
+
(g >= na_percent) || (c >= na_percent) || (n >= na_percent)
|
|
80
|
+
type = "nucleic_acid"
|
|
81
|
+
else
|
|
82
|
+
type = "amino_acid"
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
type
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
89
|
+
end
|
data/lib/quorum.rb
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
require "quorum/engine"
|
|
2
|
+
require "quorum/helpers"
|
|
3
|
+
require "quorum/sequence"
|
|
4
|
+
require "workers/quorum"
|
|
5
|
+
require "resque"
|
|
6
|
+
require "resque/server"
|
|
7
|
+
require "net/ssh"
|
|
8
|
+
|
|
9
|
+
module Quorum
|
|
10
|
+
|
|
11
|
+
## Supported Algorithms ##
|
|
12
|
+
BLAST_ALGORITHMS = ["blastn", "blastx", "blastp", "tblastn"]
|
|
13
|
+
|
|
14
|
+
mattr_accessor :blast_remote, :blast_ssh_host, :blast_ssh_user,
|
|
15
|
+
:blast_ssh_options, :blast_script, :blast_log_dir, :blast_tmp_dir,
|
|
16
|
+
:blast_db, :tblastn, :blastp, :blastn, :blastx, :blast_threads
|
|
17
|
+
|
|
18
|
+
class << self
|
|
19
|
+
|
|
20
|
+
## Blast ##
|
|
21
|
+
|
|
22
|
+
# Execute remotely.
|
|
23
|
+
def blast_remote
|
|
24
|
+
@@blast_remote || false
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Net::SSH host.
|
|
28
|
+
def blast_ssh_host
|
|
29
|
+
@@blast_ssh_host || nil
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Net::SSH user.
|
|
33
|
+
def blast_ssh_user
|
|
34
|
+
@@blast_ssh_user || nil
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Net::SSH options.
|
|
38
|
+
def blast_ssh_options
|
|
39
|
+
@@blast_ssh_options || {}
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Blast script path.
|
|
43
|
+
def blast_script
|
|
44
|
+
@@blast_script || nil
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Blast log dir path.
|
|
48
|
+
def blast_log_dir
|
|
49
|
+
@@blast_log_dir || nil
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# Blast tmp dir path.
|
|
53
|
+
def blast_tmp_dir
|
|
54
|
+
@@blast_tmp_dir || nil
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Blast database path.
|
|
58
|
+
def blast_db
|
|
59
|
+
@@blast_db || nil
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# tblastn directories.
|
|
63
|
+
def tblastn
|
|
64
|
+
@@tblastn || []
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# blastp directories.
|
|
68
|
+
def blastp
|
|
69
|
+
@@blastp || []
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# blastn directories.
|
|
73
|
+
def blastn
|
|
74
|
+
@@blastn || []
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# blastx directories.
|
|
78
|
+
def blastx
|
|
79
|
+
@@blastx || []
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Number of Blast threads.
|
|
83
|
+
def blast_threads
|
|
84
|
+
@@blast_threads || 1
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
==
|
|
3
|
+
|
|
4
|
+
Finished building your Blast database(s).
|
|
5
|
+
|
|
6
|
+
makeblastdb results are located in quorum/log/makeblastdb.log.
|
|
7
|
+
|
|
8
|
+
===================================================================
|
|
9
|
+
|
|
10
|
+
Add the newly created Blast database files in
|
|
11
|
+
quorum/blastdb to config/quorum_settings.yml. Update
|
|
12
|
+
RAILS_ENV settings.
|
|
13
|
+
|
|
14
|
+
See config/quorum_settings.yml for instructions.
|
|
15
|
+
|
|
16
|
+
===================================================================
|
|
17
|
+
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
module Quorum
|
|
2
|
+
#
|
|
3
|
+
# Build Blast Database(s)
|
|
4
|
+
#
|
|
5
|
+
class BuildBlastDB
|
|
6
|
+
|
|
7
|
+
# Valid values for @type.
|
|
8
|
+
VALID_TYPES = ["both", "prot", "nucl"]
|
|
9
|
+
|
|
10
|
+
# Blast dependencies
|
|
11
|
+
DEPENDENCIES = ["makeblastdb"]
|
|
12
|
+
|
|
13
|
+
# File bz2 and gz extensions.
|
|
14
|
+
GZIP = /\.(tgz$)|(tar.gz$)/
|
|
15
|
+
BZIP = /\.(tbz$)|(tar.bz2$)/
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def initialize(args, output = $stdout)
|
|
20
|
+
@dir = args[:dir]
|
|
21
|
+
@type = args[:type]
|
|
22
|
+
@prot_file = args[:prot_file]
|
|
23
|
+
@nucl_file = args[:nucl_file]
|
|
24
|
+
@rebuild_db = args[:rebuild_db]
|
|
25
|
+
@empty = args[:empty]
|
|
26
|
+
@blastdb_dir = args[:blastdb_dir]
|
|
27
|
+
@gff_dir = args[:gff_dir]
|
|
28
|
+
@log_dir = args[:log_dir]
|
|
29
|
+
|
|
30
|
+
@output = output
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
#
|
|
34
|
+
# Check build_blast_db dependencies.
|
|
35
|
+
#
|
|
36
|
+
def check_dependencies
|
|
37
|
+
DEPENDENCIES.each do |b|
|
|
38
|
+
system("which #{b} > /dev/null 2>&1")
|
|
39
|
+
if $?.exitstatus > 0
|
|
40
|
+
raise "Dependency not found. Please add `#{b}` to your PATH."
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
#
|
|
46
|
+
# Make Quorum directories.
|
|
47
|
+
#
|
|
48
|
+
def make_directories
|
|
49
|
+
begin
|
|
50
|
+
`rm -rf #{@blastdb_dir}` if File.directory?(@blastdb_dir) && @rebuild_db
|
|
51
|
+
Dir.mkdir(@blastdb_dir) unless File.directory?(@blastdb_dir)
|
|
52
|
+
|
|
53
|
+
`rm -rf #{@gff_dir}` if File.directory?(@gff_dir) && @rebuild_db
|
|
54
|
+
Dir.mkdir(@gff_dir) unless File.directory?(@gff_dir)
|
|
55
|
+
|
|
56
|
+
Dir.mkdir(@log_dir) unless File.directory?(@log_dir)
|
|
57
|
+
rescue SystemCallError => e
|
|
58
|
+
@output.puts e.message
|
|
59
|
+
raise "Unable to make directory. " <<
|
|
60
|
+
"Perhaps you forgot to execute the quorum initializer. \n\n" <<
|
|
61
|
+
"rails generate quorum:install"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
#
|
|
66
|
+
# Create directories per tarball and return tarball file name
|
|
67
|
+
# minus the file extension.
|
|
68
|
+
#
|
|
69
|
+
def create_file_name(file, base_dir)
|
|
70
|
+
file_name = file.split("/").delete_if { |f| f.include?(".") }.first
|
|
71
|
+
unless File.exists?(File.join(base_dir, file_name))
|
|
72
|
+
Dir.mkdir(File.join(base_dir, file_name))
|
|
73
|
+
end
|
|
74
|
+
file_name
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
#
|
|
78
|
+
# Extracts and concatenates files from tarballs.
|
|
79
|
+
#
|
|
80
|
+
def extract_files(src, file, flag, path)
|
|
81
|
+
extract_data_error = File.join(@log_dir, "extract_data_error.log")
|
|
82
|
+
|
|
83
|
+
cmd = "tar -x#{flag}Of #{src} #{file} >> #{path} 2>> " <<
|
|
84
|
+
"#{extract_data_error}"
|
|
85
|
+
system(cmd)
|
|
86
|
+
if $?.exitstatus > 0
|
|
87
|
+
raise "Data extraction error. " <<
|
|
88
|
+
"See #{extract_data_error} for details."
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
#
|
|
93
|
+
# Execute makeblastdb on an extracted dataset.
|
|
94
|
+
#
|
|
95
|
+
def execute_makeblastdb(type, title, input)
|
|
96
|
+
@output.puts "Executing makeblastdb for #{title} dbtype #{type}..."
|
|
97
|
+
|
|
98
|
+
makeblast_log = File.join(@log_dir, "makeblastdb.log")
|
|
99
|
+
output = File.dirname(input)
|
|
100
|
+
|
|
101
|
+
cmd = "makeblastdb " <<
|
|
102
|
+
"-dbtype #{type} " <<
|
|
103
|
+
"-title #{title} " <<
|
|
104
|
+
"-in #{input} " <<
|
|
105
|
+
"-out #{output} " <<
|
|
106
|
+
"-hash_index >> #{makeblast_log}"
|
|
107
|
+
system(cmd)
|
|
108
|
+
if $?.exitstatus > 0
|
|
109
|
+
raise "makeblastdb error. " <<
|
|
110
|
+
"See #{makeblast_log} for details."
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
#
|
|
115
|
+
# Builds a Blast database from parse_blast_db_data.
|
|
116
|
+
#
|
|
117
|
+
def build_blast_db(blastdb)
|
|
118
|
+
Dir.glob(File.expand_path(blastdb) + "/*").each do |d|
|
|
119
|
+
if File.directory?(d)
|
|
120
|
+
contigs = File.join(d, "contigs.fa")
|
|
121
|
+
peptides = File.join(d, "peptides.fa")
|
|
122
|
+
|
|
123
|
+
found = false
|
|
124
|
+
|
|
125
|
+
if File.exists?(contigs) && File.readable?(contigs)
|
|
126
|
+
execute_makeblastdb("nucl", d, contigs)
|
|
127
|
+
found = true
|
|
128
|
+
end
|
|
129
|
+
if File.exists?(peptides) && File.readable?(peptides)
|
|
130
|
+
execute_makeblastdb("prot", d, peptides)
|
|
131
|
+
found = true
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
unless found
|
|
135
|
+
raise "Extracted data not found for #{contigs} or #{peptides}. " <<
|
|
136
|
+
"Make sure you supplied the correct data directory and file names."
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
#
|
|
143
|
+
# Display BLAST_README
|
|
144
|
+
#
|
|
145
|
+
def readme
|
|
146
|
+
file = File.readlines(File.join(File.dirname(__FILE__), "README"))
|
|
147
|
+
file.each { |f| @output.print f }
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
public
|
|
151
|
+
|
|
152
|
+
#
|
|
153
|
+
# Parse Blast database data.
|
|
154
|
+
#
|
|
155
|
+
def build_blast_db_data
|
|
156
|
+
# Create necessary directories and return.
|
|
157
|
+
if @empty
|
|
158
|
+
make_directories
|
|
159
|
+
return
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
if @dir.blank?
|
|
163
|
+
raise "DIR must be set to continue. Execute `rake -D` for more information."
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
unless VALID_TYPES.include?(@type)
|
|
167
|
+
raise "Unknown type: #{@type}. " <<
|
|
168
|
+
"Please provide one: both, nucl or prot."
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
check_dependencies
|
|
172
|
+
|
|
173
|
+
make_directories
|
|
174
|
+
|
|
175
|
+
begin
|
|
176
|
+
@dir.split(':').each do |d|
|
|
177
|
+
unless File.directory?(d)
|
|
178
|
+
raise "Directory not found: #{d}"
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
@data = Dir.glob("#{d}/*.{tgz,tar.gz,tbz,tar.bz2}")
|
|
182
|
+
|
|
183
|
+
if @data.blank?
|
|
184
|
+
raise "Data not found. Please check your directory and try " <<
|
|
185
|
+
"again.\nDirectory Entered: #{d}"
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
@data.each do |s|
|
|
189
|
+
if s =~ GZIP
|
|
190
|
+
files = `tar -tzf #{s}`
|
|
191
|
+
flag = "z"
|
|
192
|
+
elsif s =~ BZIP
|
|
193
|
+
files = `tar -tjf #{s}`
|
|
194
|
+
flag = "j"
|
|
195
|
+
end
|
|
196
|
+
files = files.split(/\n/)
|
|
197
|
+
files.each do |f|
|
|
198
|
+
if f.include?(@prot_file)
|
|
199
|
+
file_name = create_file_name(f, @blastdb_dir)
|
|
200
|
+
extract_files(s, f, flag, File.join(@blastdb_dir, file_name, "peptides.fa"))
|
|
201
|
+
elsif f.include?(@nucl_file)
|
|
202
|
+
file_name = create_file_name(f, @blastdb_dir)
|
|
203
|
+
extract_files(s, f, flag, File.join(@blastdb_dir, file_name, "contigs.fa"))
|
|
204
|
+
elsif f.include?("gff")
|
|
205
|
+
file_name = create_file_name(f, @gff_dir)
|
|
206
|
+
extract_files(s, f, flag, File.join(@gff_dir, file_name, "annots.gff"))
|
|
207
|
+
end
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
build_blast_db(@blastdb_dir)
|
|
212
|
+
rescue Exception => e
|
|
213
|
+
# Remove empty directories.
|
|
214
|
+
`rm -rf #{@blastdb_dir}/*` if File.directory?(@blastdb_dir)
|
|
215
|
+
`rm -rf #{@gff_dir}/*` if File.directory?(@gff_dir)
|
|
216
|
+
raise e
|
|
217
|
+
end
|
|
218
|
+
readme
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
end
|
|
222
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Quourm Rake Tasks
|
|
3
|
+
#
|
|
4
|
+
|
|
5
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'blastdb'))
|
|
6
|
+
|
|
7
|
+
require 'build_blast_db'
|
|
8
|
+
|
|
9
|
+
namespace :quorum do
|
|
10
|
+
namespace :blastdb do
|
|
11
|
+
desc "Build Blast Database (options: DIR=/path/to/data " <<
|
|
12
|
+
"{valid extensions: .tar.gz .tgz .tar.bz2 .tbz} " <<
|
|
13
|
+
"-- separate multiple directories with a colon. " <<
|
|
14
|
+
"TYPE={both}{prot}{nucl} -- defaults to both. " <<
|
|
15
|
+
"PROT_FILE_NAME= -- defaults to peptides.fa. " <<
|
|
16
|
+
"NUCL_FILE_NAME= -- defaults to contigs.fa. " <<
|
|
17
|
+
"REBUILD_DB= {true or false} -- remove existing blast database(s). " <<
|
|
18
|
+
"Defaults to false. " <<
|
|
19
|
+
"EMPTY={true or false} -- skip makeblastdb and create empty " <<
|
|
20
|
+
"directories. Use this option if you prefer to create your own " <<
|
|
21
|
+
"Blast database. Defaults to false.)"
|
|
22
|
+
task :build do
|
|
23
|
+
|
|
24
|
+
args = {}
|
|
25
|
+
|
|
26
|
+
args[:dir] = ENV['DIR']
|
|
27
|
+
args[:type] = ENV['TYPE'] || 'both'
|
|
28
|
+
args[:prot_file] = ENV['PROT_FILE_NAME'] || 'peptides.fa'
|
|
29
|
+
args[:nucl_file] = ENV['NUCL_FILE_NAME'] || 'contigs.fa'
|
|
30
|
+
args[:rebuild_db] = ENV['REBUILD_DB'] || false
|
|
31
|
+
args[:empty] = ENV['EMPTY'] || false
|
|
32
|
+
|
|
33
|
+
args[:blastdb_dir] = File.join(::Rails.root.to_s, "quorum", "blastdb")
|
|
34
|
+
args[:gff_dir] = File.join(::Rails.root.to_s, "quorum", "gff3")
|
|
35
|
+
args[:log_dir] = File.join(::Rails.root.to_s, "quorum", "log")
|
|
36
|
+
|
|
37
|
+
args[:type] = args[:type].downcase.strip
|
|
38
|
+
args[:prot_file] = args[:prot_file].downcase.strip
|
|
39
|
+
args[:nucl_file] = args[:nucl_file].downcase.strip
|
|
40
|
+
args[:nucl_file] = "NULL" if args[:type] == "prot"
|
|
41
|
+
args[:prot_file] = "NULL" if args[:type] == "nucl"
|
|
42
|
+
|
|
43
|
+
puts "Building your Blast database(s). This may take a while..."
|
|
44
|
+
|
|
45
|
+
build = Quorum::BuildBlastDB.new(args)
|
|
46
|
+
build.build_blast_db_data
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module Workers
|
|
2
|
+
class System
|
|
3
|
+
@queue = :system_queue
|
|
4
|
+
|
|
5
|
+
#
|
|
6
|
+
# Resque worker method.
|
|
7
|
+
#
|
|
8
|
+
def self.perform(cmd, remote, ssh_host, ssh_user, ssh_options = {})
|
|
9
|
+
unless ssh_options.empty?
|
|
10
|
+
# Convert each key in ssh_options to a symbol.
|
|
11
|
+
ssh_options = ssh_options.inject({}) do |memo, (k, v)|
|
|
12
|
+
memo[k.to_sym] = v
|
|
13
|
+
memo
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
exit_status = 1
|
|
18
|
+
|
|
19
|
+
if remote
|
|
20
|
+
# Execute command on remote machine.
|
|
21
|
+
Net::SSH.start(ssh_host, ssh_user, ssh_options) do |ssh|
|
|
22
|
+
ssh.open_channel do |ch|
|
|
23
|
+
ch.exec(cmd) do |ch, success|
|
|
24
|
+
unless success
|
|
25
|
+
Rails.logger.warn "Channel Net::SSH exec() failed. :'("
|
|
26
|
+
else
|
|
27
|
+
# Read the exit status of the remote process.
|
|
28
|
+
ch.on_request("exit-status") do |ch, data|
|
|
29
|
+
exit_status = data.read_long
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
ssh.loop
|
|
35
|
+
end
|
|
36
|
+
else
|
|
37
|
+
system(cmd)
|
|
38
|
+
exit_status = $?.exitstatus
|
|
39
|
+
end
|
|
40
|
+
if exit_status > 0
|
|
41
|
+
raise "Worker failed :'(. See quorum/log/quorum.log for more information."
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
data/quorum.gemspec
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
|
2
|
+
|
|
3
|
+
# Maintain your gem's version:
|
|
4
|
+
require "quorum/version"
|
|
5
|
+
|
|
6
|
+
# Describe your gem and declare its dependencies:
|
|
7
|
+
Gem::Specification.new do |s|
|
|
8
|
+
s.name = "quorum"
|
|
9
|
+
s.version = Quorum::VERSION
|
|
10
|
+
s.authors = ["Ken Seal"]
|
|
11
|
+
s.email = ["kas@ncgr.org"]
|
|
12
|
+
s.homepage = "https://github.com/ncgr/quorum"
|
|
13
|
+
s.summary = "Flexible bioinformatics search tool."
|
|
14
|
+
s.description = "Flexible bioinformatics search tool."
|
|
15
|
+
|
|
16
|
+
s.files = `git ls-files`.split(/\n/)
|
|
17
|
+
|
|
18
|
+
s.add_dependency "rails", "~> 3.1.0"
|
|
19
|
+
s.add_dependency "jquery-rails"
|
|
20
|
+
s.add_dependency "net-ssh", "~> 2.2.1"
|
|
21
|
+
s.add_dependency "resque", "~> 1.19.0"
|
|
22
|
+
s.add_dependency "bio-blastxmlparser", "~> 1.0.1"
|
|
23
|
+
|
|
24
|
+
s.add_development_dependency "mysql2"
|
|
25
|
+
s.add_development_dependency "rspec-rails", "~> 2.6"
|
|
26
|
+
s.add_development_dependency "capybara"
|
|
27
|
+
s.add_development_dependency "database_cleaner"
|
|
28
|
+
s.add_development_dependency "factory_girl_rails", "~> 1.2.0"
|
|
29
|
+
end
|
data/script/rails
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
#!/usr/bin/env ruby
|
|
3
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
|
4
|
+
|
|
5
|
+
ENGINE_PATH = File.expand_path('../..', __FILE__)
|
|
6
|
+
load File.expand_path('../../spec/dummy/script/rails', __FILE__)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
>TOG900080
|
|
2
|
+
TGATAGGATAATTCTAGACAAAACATTAGCCGATCAAGTGTCATCATGGAAAAGCAGCAGGGGCCTTAGTGATACAGTGGTGACTGATCATGCTTGTTCTGGGGAAACATGCTCGTACTACGCAATTGGAGATGTATTTATTTGTGAAAAGACTGGACAAGTTCATGTTTGTGACGAAACATGTAGGGAAGTAGTAATGGATCCCACCAACGAGCTTTTGGTCTGTACAATATCTGGCCACTGTTTTGACAGATTGCTATCACCTGCTGAAATGGAGCCTGATGCTGAGCAGCAGCAAGGTGGTGCGGCAGATGAGGCAGAACCGTTTATGGGATCTGGCCGTTTTGCACGGGCTTATTTGCTGGGATACAATTGTGCTGATGAAAAGGAGCTTGAAGCTACTTTGAGGTTTTGCTGATCCCTATTGGCCCTTCTGGAGTGGATGATCTCATGTCTCAGCATTTACCTATTTAAGATCAAATAAATCGGGTTTCCTTTTCGTGTTTCTCTTGGCATAAGAATGTTTGATTAGATCTAGATTATGAAACTCTAATCGTCTTCTATATTAATAATTGTATGCTTAAATTTATAGTTGAAATTCCATTGATGAATTTTTCTT
|
|
3
|
+
>TOG899661
|
|
4
|
+
CAGAAGACATGTCTTTGACAAAGGTATACCATCTTTTCCNCCAACTTGGTTTGAGACATTTATTTGTTGTACCTCGTCCATCGCGTGTGCTTGGTTTGATAACCAGAAAAGATTTGTTGATTGAGGACACAGATGCGAATACATTAGAGCTTCAGGCAACTAGTAGTTCGGCATCCAGGTAAAAGATTGATGGCAAGGAATGCAGATGTGGAGAGCCCTCTGCTAAATGGTCTTCTGGTTCAGAATCAGATACCTGACTAATACCGTCTGCAGCCTTCCCGAATTCCTTTTTGCGTCCCATTTTCACTTGAAAATCATTCTTTATTATTTTTGTATTAATGTTGAAATAGGTTAGAGAACCCGATATTTTGGGGATGGAACGGGGTTGTAGACTGACAGTATACCCTAGAATTTTGTATATAAAGTATAAACTACAGCAAGCACAGAAAAAAATCATGAAAGCGCCCTTGTGATAATTATGATAGCAGAATTTAGACTGAT
|
|
5
|
+
>TOG899078
|
|
6
|
+
CTCTCTCTCTCTCTCTCTCTCTCTCTCTCCGTCGTCGTTTTGGGTTCTGCGGATCGGTGGATTCTGGTCGCGAATTCCGACGCTGTTCGTGGCGGCGAACCGAATTCCGGTCAACAAGCGAAGAAGATGAAGGTTTTCGTCAAGACTCTGAAGGGCTCTCACTTCGAAATCGAAGTCAAGCCCCAAGACACGGTTTCGGATGTGAAGAAAAATATTGAAACTGTTCAAGGTGGATGTCTATCCTGCCGCGCAGCAAATGCTTATTCATCAAGGGAAAGTTCTTAAGGATGGTACTACCTTGGAGGAAAATAAAGTAGCTGAAAATAGTTTCATTGTGATTATGATTTCCAAGAGTAAGACTCCGTCTGGTGAAGGATCTACTACTTCAGCTGCACCTTCAGCTAAGGCTCCAGCTCCTGCTCCTATATCTTCGGGCACGGCTGTGGAAGGTTCTGATGTCTATGGACAAGCAGCATCCAATCTGGTTGCTGGTAGCAACTTGGAAGACACAATTCAGCAAATTCTTGATGTTGGAGGAGGGACCTGGGATAGGGATACTGTAGTCCGGGCTCTTCGAGCTGCCTTCAACAACCCTGAGAGAGCTATTGAATATTTATATTCAGGAATCCCCGAGCAAGCTGAAGCTCCACCTGTGGGCCGTGTGCCTGCAAGTGCACAACCTGCAAATCCTCCAGCAGCTGCAGCTCCGCAAGCGGCACAACCTGCTCCTGTTACCTCAAGTGGGCCTAATGCTAATCCTTTAGACCTTTTTCCACAGGGCCTCCCAAATGTTGGTTCTGGTGGTGCTGGTGCTGGTGCTGGCTCTTTAGATTTTCTTCGCAACAGCCAACAATTCCAAGCCTTGCGAGCTATGGTGCAGGCTAATCCACAAATATTGCAGCCTATGCTACAAGAGCTTGGCAAACAGAATCCTCATCTAATGAGATTGATTCGAGATCATCAAGCTGACTTCCTTCGCTTGATAAATGAGCCTGTGGAAGGTGGCGAAGGGAACCCATTGGGGCAGCTGGCTGGTGGCATACCACAAGCAATAACTGTCACCCCTGAGGAGCGCCAAGCAATTGAACGTCTTGAAGCAATGGGTTTCGATCGTGCGATTGTATTGGAGGTGTTCTTCGCTTGCAACAAAAATGAGGAATTGGCTGCCAACTACCTTTTAGATCACATGCATGAGTTCGACGAACAATAAATCTCTTCATGTTGCTAAATTATTTATCTGTTATCTTTTTAATGTTTATGGGGCCTTTGTTTTACTAGACGGTTTGATGAGGTAATACTTGAAAATGAAAAAAATCTCAAGTGGAGAAGGAACGTTTTTACCACCTCCACATTATTGCCTTTGTGGACAGTCTCAGTATTCATATACATAGTCGTTTGTCCTGTACTATTGGTATTGTGCATCCTTTTAACATGTGTAATTGTTTAGCTGCGCATCCTATTCTATATTTTCT
|
|
7
|
+
>TOG896930
|
|
8
|
+
CGTTCGCATTGTTCACTCACCATACGCACTTCCATTTTCATCTCCCACCGTCGCATTTTCTTCGGATCTGAAATTCCTCACCATGAATCGCCACCACGATCCCAATCCATTCGACGAAGACGAAGTCAATCCCTTCTCGAACGGTGCTGCTCCTGGATCTAAATCACGTATTCCACCATTGGCATCCGAACCACTGGGCTTTGGTCAAAGACATGATGCTACAGTTGATATTCCTTTGGATACCACAAATGAGCCTAAAAAAAAAGGTCAAGAGCTAGCAGCTTGGGAAGCAGATTTGAAAAGGAGAGAAAAGGATTTAAAAAGAAGAGAGGATGCTGTTTCTAGAGCTGGTGTGCCTGTTGATGATAAGAATTGGCCTCCGATTTTCCCAATTATTCACCATGATATTGCCAATGAGATACCGGTTCATGCTCAGAGGCTGCAATATTTGGCCTTTGCAAGTTGGTTAGGAATTGTTCTCTGCCTTGTTTTTAATGTAGTTGCTGTGATGGTCTGTTGGATCAGAGGCGGTGGTGTTAAAATTTTTTTCCTTGCGGTGATCTATGCTCTACTTGGTGTTCCCCTTTCATATGTGCTTTGGTACAGGCCCCTTTATCGTGCTATGAGGACGGATAGTGCACTGAAGTTTGGCTGGTTTTTCATGTTCTACTTGCTTCATATTGCATTTTGCATCTTTGCTGCAATTGCACCTCCAGTTGTTTTTCATGGGAAATCATTAACGGGCATCCTTGCAGCAACTGACGTCTTCTCAGACCATGTATTGGTTGGGATATTCTATTTGGTTGGATTTGGCCTGTTTTGCTTGGAGTCTCTTCTAAGCTTGTGGGTAATTCAGAAAATATACCTGTTTTTCCGGGGGCATAAGTGAGGCTACTCAGGATTTTGATCCATCGGCTTTTATGATATCAGTCACTTCCCGGCGTGGCTTAGTATATTCTTTCTTTTTGTCTATCCTCTTTTTTCGCTTGCAATATTTTCGTGTGATATTGTTTGTTGTTGTAGTCTAGTTCTTGTTACAGAGCTTAGTGTGTAATTTCCTGTGTAATGAATTCTGTGAAGTTTAGTAATTTTCTAGTGTAACAATAACCAAGCTTTGCTTTCGATAAGCATATATGTAGTGGATTTCCATAAGGAATTATTGTAGTGCTATTGTAGTTGTGAATAGTGACACCCCTCGGAGGTTTTCTATTTGTAAGACAGCACTGATGCAAACACTTTAGTTAAAATTCATGTAGGATCTATTCAATT
|
|
9
|
+
>TOG902802
|
|
10
|
+
CAGGATACACCTCCAGATGGGGAAAATATGACAGGAGCCTCCAAAGAGATGAATGTAGAATCTATTCCTTCCTTCTTTCAAGATATTATTGAGCGTATGGTTTCCTCACAAGTTATGACTGTGAAGCCTGATGCTTGCATTGTGGATTTCTATAATGAGGGCGATCACTCACATCCCTACAATTGGCCACATTGGTATGGAAGGCCTGTCTATATCCTTTCCCTGACAGAATGTGATATGACTTTAGGAAGAGTAATTTCCTCAGACCATCCAGGGGATTACAGGGGCTCTCTGAAGCTTTCTCTTCTCCCTGGGTCTCTTCTGTCAAGGCAAGGGAAATCTACTAATTTTGCTAGATATGCTATTCCTTCTATCCGCAAACAACGCATACTTGTTATTTTTACAAAGTCCCAACCAAAGAAGTCACTGTCAAGTGATGCTCAACGTTTTACCTCATCAGCAGCATCTTCTCATTGGGGTCCACCGCCAAGCCGTTCCCCCAATCACGTTCGTCATCATTTAGGCCACAAGCATTATGCTTCAGCTCCAACAAACGGAGGACTGCCAGCTCCACCAATCCGGCCACA
|
|
11
|
+
>TOG913027
|
|
12
|
+
AAGGACTAGTTGATTTGCTACATGTGTTCTGTGTTGTTCTTGCTTTGGTAAATGTGTCTCTAGTGAAAGCAGAAGATCCATACAAGTTCTACACATGGACAGTGACTTATGGAACTCTTTCTCCTCTGGGCAGTCCTCAACAAGTTATTCTGATCAATGGTCAGTTTCCTGGTCCAAGACTTGACTTGGTAACTAATGACAACGTGATTCTCAACCTCATCAACAAGCTGGATGAGCCATTCTTGCTCACATGGAATGGCATTAAGCAGAGGAAAAATTCTTGGCAAGATGGGGTTTTAGGAACTAACTGTCCCATTCCTCCAAACTCAAATTACACTTACAAGTTTCAGGCCAAGGATCAGATTGGCACTTATACATACTTTCCATCAACTAAGATGCATAAAGCTTCTGGAGGGTTTGGAGCTCTCAATGTTCTTCATAGATCTGTCATCCCAATCCCTTATCCAAACCCTGATGGAGATTTTACATTACTCATTGGTGATTGGTACAAAACTAGCCACAAGACATTAAGCCAAACATTGGATTCTGGGAAATCTCTTGCCTTTCCTGATGGCCTCCTTATCAATGGCCAGGCTCATTCTACCTTCACTGTTAACCAGGGAAAAACCTATATGTTCAGGATCTCAAATGTTGGTCTGTCAACCTCAATTAACTTCAGAATTCAGGGACATACCCTAAAACTAGTTGAGGTTGAAGGATCACACACTATCCAGAACGAATACGACTCGCTTGATGTGCATGTTGGCCAATCAGTTTCTGTGTTAGTAACCTTAAATCAACCTCCAAAGGACTATTACATCGTTGCCTCAACAAGATTTACCAAGACTGTTCTCACTACAACCTCAGTGCTACACTAAAATTCTCAGTCAGCCGCATCAGGATCCTTGCCTGCTCCCCCTGCTGACAAT
|
|
13
|
+
>TOG919655
|
|
14
|
+
ATTGAAATACGTCTTGCAAAAGCTGAAGCTATTAATTGGACATCTCTCGAATATAGCAAGGATATGCCTCCCCAAAAAATTAAAGTGCCTACAATTCAATCTGAAAGGCCTGCATACCCATCATCAAAGCCAAGGACAAAAGATTGGGATAAGTTGGAAGCTATGGTGAAAAAAGAGGAGAAAGAAGAAAAGCTGGATGGTGATGCTGCTTTGAATAAATTGTTCCGTGATATTTATCAAAATGCTGATGAGGACATGCGGAGAGCAATGAGCAAGTCATTTCTGGAGTCAAATGGAACAGTGCTGTCAACGGATTGGAAAGAAGTGGGATCCAAGAAGGTGGAAGGAAGTCCTCCAGAAGGTATGGAATTGAAGAAATGGGAGTACTAATTCAGTACAAGCTGATGCTCATGAGAGTTCAAATTCACAAAAATAAATTCTGAGAAGGGAAACAAATTCTGTAATCTTAATGGTATCGGTTATTTTG
|
|
15
|
+
>TOG906701
|
|
16
|
+
TGAGATCATGCGCGAAATGATGAGGAATACAGACAGAGCCATGAGCAACATTGAGTCTTCTCCTGAGGGATTCAACATGCTGAGGCGCATGTATGAAAATGTTCAAGAACCATTTTTAAATGCCACTACAATGGCTGGTAATACAGGAAATGATGGTGTCAGGAATCAATCAACTAATCCCTCAACGACTAATTCTGAAGCAACTTCCCCTGTTCCAAATACTAACCCACTTCCTAATCCTTGGTCCTCCACTGGAACTGGAGGTGCACAAGGCAACACCAGAAGGACAACTGCTGGTGGGGATGCTCGGCAGCAGGCACTCACTGGACTAGGAGGACTTGGTGTGCCAGATCTTGAAGGCATGATGGGTGGTATGCCAGATCCTGCTATGTTGACCCAATTAATGCAAAATCCAGCTATTTCACAAATGATGCAGAGTATCCTTTCCAATCCACAGACTATGAATCAGATTCTTGGTCTCAATACTGAGCAGCGTGGCATGCCTGATCTAAACTCACTAAGAAGATGTGATGCAAAACCCAGAGTTTCTTCGCTTATTTTCCTCACCTGAGACACTGCAGCAACTCATGTCTTTCCAGCAATCTCTTATGTCTCAAGTTGG
|
|
17
|
+
>TOG894885
|
|
18
|
+
CAGCTCTATTCTCCACCAACACAAAAACGCTCACAAACTAGCTTCTTTGGAGAAAACATTAGAGACAATAGTGGCGGTGGTGGGAACAATGGCAGCCTCACTACAAGCAGCAGCTACTTTCATGCAACCAACCAAGTTTGGTCGCACCAACACTTTGCAGCTGAAATCTACTCAATCCATTTCTAAGGCTTTTGGGTTGGAGCCCTCTGCAGCTAAGGTCTCATGTTCCCTTCAGGCTGATTTCAAGGAGTTGGCTCACAAGTGTGTTGAAGCTACCAAGATTGCTGGGTTTGCTCTTGCCACCTCTGCTCTAGTTGTCTCTGGAGCAAGTGCGGAAGGTGCTCCGAAGAGGCTAACCTTCGATGAAATCCAGAGCAAGACATACATGGAAGTGAAGGGAACCGGAACCGCAAACCAGTGCCCCACCATTGAAGGGGGAGTGGAATCATTTTCCTTCAAGGCCGGGAAGTACAATGCCAAGAAGTTCTGCCTTGAACCCACTTCATTCACAGTGAAGGCAGAGGGAGTAGCCAAGAACGCCCCACTTGAGTTCCAAAACACCAAGCTCATGACACGTCTGACCTACACCCTCGACGAGATCGAAGGACCCTTTGAGGTTTCCTCTGATGGCACTGTCAAGTTCGAGGAGAAAGATGGCATTGACTACGCTGCTGTCACAGTTCAGCTTCCCGGTGGCGAGCGTGTTCCATTCCTTTTCACCATCAAACAGTTGGTAGCATCTGGGAAGCCAGACAGCTTCAGTGGGGAGTTTCTAGTGCCTTCATACCGTGGATCTTCCTTCTTGGACCCCAAGGGAAGAGGTGCGTCAACTGGTTATGACAATGCTGTCGCATTGCCTGCTGGTGGCAGAGGAGATGAGGAAGAACTTGCTAAGGAGAACAACCAGAGTGCTTCTTCATCCCAAGGGAAGATCACCTTGAGCGTGACACAGAGCAAGCCTGATACCGGTGAGGTGATTGGTGTGTTCGAGAGCATTCAGCCGTCCGACACTGATTTGGGAGCGAAAGCTCCCAAGGATGTGAAGATCCAGGGAGTTTGGTATGCTCAGCTCGAGTCATAGACAGCTTTATCTCTCTTCTGCTTTATTTTGTATTTTGTTGTAACTTCTCAGTGTTGCTGCCATTACCTTTGACACCACTGTCCCAGCATGAGAGTGTTATCCTTGTTTGTATGTATACTATCGACTTTCAATTATAATGCTCGAAAATGTCCAAGGTTT
|
|
19
|
+
>TOG897619
|
|
20
|
+
AGCAGTGTTCCCATGAAACCTTCCCACTGAGTCAACTCACTCTGTACATAAAACCCTCTTCATCATCATCATGGCTTCTCAAGTTTTTCTTCAGCAAGGGTTGTTACTGTTTGCCCCAAACCAATGTTCTCCAACCAAGCTCGGTGTATCTTCTTGCCTCGGTTCTCGTAACTTTCCGTTGATTTCCTCCACCTCAATTTCATGGCGTTGCAACAACCCTCTCTCTGCCAAACCCTCTTTTGTTGTCAGAGCTGACTCCAATGTCGACGCTGCTTCCGACAATGCTGGTGAAGTTCCAGAAGCTGAAGGTAGCGTTGATCAGGTTCCTGAAGATGGAGAAGCAGAACTAGCTTCGGATTCTGAGGTGGAGCAACCCAAGCCCCCTAGAAAGCAACGAGTCAAGCTTGGAGATGTTATGGGGATATTGAATCAGAGGGCAATTGAGGCATCGGAAAGCATGAGGCCGACTCCAGAAATTAGGACTGGAGATGTTGTGGAAATCAAACTGGAAGTTCCTGAGAACAAGCGTAGGTTGTCTATTTATAAAGGTATAGTCATCTCAAGACAAAATGCTGGTATTCACACAACTATTCGAATCCGAAGGATTATTGCTGGCACAGGGGTTGAGATTGTCTTCCCAATTTACTCACCAAACATCAAAGAAATCAAAGTGGTAAACCACCGTAAAGTCAGAAGAGCAAGATTGTACTATTTAAGAGACAAGCTTCCCAGATTCTCCACTTTCAAATGATACGGTTACCACTTCTCATCCTGATCTTCTTCAAAGTAGTTGCTGATATTGCAGGGCCATATTTTGGTTATTTCGTTTTGTTGTGTTGTAGAATATATCATTTTTCTTCCTCTAAATCTATCCTCCGAGAATTGGAAACAAGTGTATGTATGTTGCCCTTGATAATATTTGAAATTTGAAGTGTTCTCCCTTGCATTCCTTGGTATAGGATAGAAAGCCAAGCTCCTAAACAAACATTACTAAATATGACAGTCTAAGGAATGAGCATGTGTATCGATACCAGTTAAGTGCATTGTGAATGTATTTTTTTTTTTTATCTCTATCCATAAAAAAAGGTATGTTCATTCTTG
|
|
21
|
+
>TOG898302
|
|
22
|
+
AAGAAACAAGAGAGAGAAGATGATTTAGATGAGCCAAAAACAAAGGAAAAACGGCAAAAGGGAGAGAAAGGAAAATCTCCATCAGGTTTTCTTGCTCCTCTCCAGCTATCTGATGCCCTTGTAAACTTCCTTGGTACTGGAGAAAGTGAATTATCAAGATCTGATGTCATAAAAAGAATGTGGGAATACATAAAAGGAAACGACCTTCAGGATCCTTCTGACAAGAGGAAAATATTATGCGACGACAAGCTGAAAGAACTCTTTGATGTGGACTCCTTTAACGGCTTCACCGTTACAAAACTGTTGACTCCTCATTTTATAAAGGCAGAGCAGTGAGTTGCTTGTGGAAATCGGTAATGTTGTCCAATTAGGTTTGGAAGGTCCTTCTTTTGTGGCCTTTTGGCATTGTCTGCCAACACGAGGAATAGGAATTAGGAACATGACAGATTTTCAGTAAATTTTTCTCCAAGAATTTAATGTTACGTGACCATTACTTTGTTTTTTTTAATATCACGTTTTGTCACTTGGCAGTTGAAATTTTTGTATATTTTCAGTTCCTGAAGCTGCAAGGATAATGCTGACTTCTTACTCTACTCTGCATTTGCTCATATGAGGCACTACACATATCCATAATACATGAATAAATTTGCAGTATTGAA
|
|
23
|
+
>TOG897516
|
|
24
|
+
CATTTGTTCCATTTGCTCAGGCATTTGCAGCTGTACTTACAGCTGTCCTTACTGGTTCTCTCTATTATGTGGCTGCCTCTCCTAAAGATCCTACTTATATTGTGGCACCTGTTTTACAGTCTCGCTCTGGTCGTCAAGATTTGAAAAAGCTATTTGAAGCCTGGTATGAGAAACGGCAAATGAAAAAAATATATTCACCACTTCTGGAAGGACTACTAGCTCTCTACCTAGGATTTGAGTGGATCCAAACGAATAACATTCTTGCTCCCATTATCACACATGGCATATACTCCACAGTTATATTGGGACATGGCCTTTGGAAGATAAACGACCACCGGCGAAGACTACGTCAAAGAATCCAACAGCTCAAATCTGAAGAACAAAATTCCCAGTAGACTTTGAAATACCTTCCATGTCTGGCTGTGATACAAAAAATGTATATGTATGTATTAGAGCTGCTAATTATGTAAAGAGAAAAGATGTATATACTTGTGTTAGCTGAGGTCTCGTACACACTGAATATTCAGGTTTTGTTCACCATTTTCTAATTTCGAGTTACTATATGTAGTGTTTTCTAATAAAATGAAATAAAATCCCCAAGTTGGGTTGATTTAAATT
|
|
25
|
+
>TOG894063
|
|
26
|
+
GAGACCTGTTATGATTCACAGAGCCATTCTAGGATCTGTTGAGCGCATGTTTGCCATTCTTTTAGAGCACTACAAGGGTAAATGGCCCTTGTGGCTCAGTCCTCGTCAAGCAATTGTATGTCCTGTGTCAGAGAAATCACAAGCTTATGCACTGCAGGTGCGAGATCAGATCCACCAAGCAGGATATCACGTTGATGCTGATACAACTGATCGGAAGATTCAGAAGAAGGTACGGGAAGCTCAATTAGCGCAGTACAACTACATCTTGGTTGTTGGAGAGGAGGAAGCTAATACAGGACAGGTGAGTGTACGGGTTAGAGATAAAGCAGACCATAGCGTTATGAGTATTGAGAATCTACTCAAACACTTCAGCGACGAAGTTGCAGCTTTTCATTGATACTTCTCTTGTGAAAACTGTTGGAAGCAAATTTTACCCCCACTCACCTAGTTTGTTCACACTTTGTGTGCATTATTTATATTTTCAGCCTGACAATTTACATTTAGATGATTTGGGTAATGACTGTATTTTCTATGTGAATTTTGGAGCGCACTGATATCGATCCATTGTTTGAAAAGCTGAGAGAAAGTGTAATCTTTTATTTTCTGTCTACATTTTAATTATGTTTTTCGTTAGTTTTTTCCTTTTATATATTTGTTTGTTAAATTGAAGGAAACTATTGTTGG
|
|
27
|
+
>TOG897346
|
|
28
|
+
GGCACCAGGGATCTTACAAGGCTGGATCTCCATAATAACAAGTTGACAGGGCCTATTCCTCCTCAAATTGGACGGTTGAAGCGTCTTAAAATACTCAATTTGAGGTGGAACAAACTACAGGATGCAATTCCTCCAGAAATTGGCGAGCTTAAAAGTTTAACACATCTGTACCTAAGCTTCAATAGTTTCAAGGGAGAAATTCCCAAAGAGCTAGCAAATCTTCCAGACCTTCGCTACCTTTATCTTCATGAAAACCGTTTAATTGGTAGGATACCACCTGAGTTGGGCACTCTACAAAACCTTCGGCACTTGGATGCTGGTAACAATCATTTGGTGGGTACCATAAGGGAACTCATTCGTATTGAAGGTTGCTTTCCAGCACTCCGCAATCTATATCTAAACAATAATTATTTTACTGGAGGAATGCCTGCACAACTTGCCAACTTATCCAGTCTTGAGATCTTGTACCTGTCCTACAATAAAATGTCAGGAGTTATACCATCTAGCCTTGCTCATATTCCTAAATTGACATACTTGTACTTGGATCACAATCAGTTTTCGGGGAGAATTCCCGAACCCTTTTACAAACATTCATTTTTGAAAGAAATGTACATCGAGGGAAATGCATTCCGGCCTGGTGTTAAACCCATTGGTTTCCATAAAGTGCTTGAAGTTTCTGATTCAGACTTCCTTGTTTAATGAAACTCAACATATTTAGTTTTTTAGGAAGTTTACGTGTATAATTAATGAAACAATAGCTCCTCTGATTTTCTCAATGAAAATTGCTATATGGGTAATTCAATTTTTGTCACGGCTGTCTTGTCAGAAGAATCAATAAATAATAGTGTTTTTTAACTCT
|
|
29
|
+
>TOG915900
|
|
30
|
+
GGAAATGAGCACAATGTTAAGCAGATCAAGAATTACCGCCAAAAGGTTGAGGAGGAACTCTCCAAAATTTGTGGTGACATCCTGACTATTATAGACCAGCATCTAATTCCTTCTTCCGCCTCAGCAGAAGCTAGTGTTTTCTACTATAAGATGAAAGGTGATTATTATCGGTATCTTGCTGAGTTCAAGACCGACCAAGAAAGGAAAGAGGCAGCCGAGCAGTCACTCAAGGGATATGAGGCTGCTTCAGCCACTGCCAACACCGATCTTCCATCAACACATCCAATCCGTCTTGGACTTGCTCTCAACTTCTCTGTCTTTTATTACGAGATCATGAACTCTCCTGAAAGGGCCTGCCATTTGGCTAAACAAGCTTTTGATGAGGCAATTGCAGAGTTGGACACCTTGAGTGAAGAGTCATACAAGGACAGTACTTTGATCATGCAGTTGTTGAGAGACAACCTGACTCTCTGGACATCCGATTTGCCAGAAGATGGAGGCGAGGAGAACATAAAAGCTGAAGAAGCCAAACCTACTGAGCCTGAGAATTAACTAGGTTCTTTTGGATCTTTGGCCCTGATTCAATAGTCAGATTTTTGTGGTGCTCTGCAAAGAGGGCATTTTTCAGCTTTTCTTGCAATGGATTTGGAATGGACAATATGAGCTGTCGCCACTTCATAATTACCAACCAAAGCCAAAAGATCTGAGCCTGCCTTTTCTTTATTTCTTTAAATTGTTTTTCTTTCTTACTGCCTTTATCTATTTTAAGCAAAGTGGTCGGTTGAAACAATGGATAATTCACATTTAAATCATAAGAATCTTTTTCAAGTGTTCATTACATCCGTTTTGGTTCGTTTAAAATATTGTTTCCTATGCGCTCCTAGATGGGATACAGTACAAGTATTCAACTGTTGAGCAGAGATTTTTACCTCAAAAAATTAGT
|
|
31
|
+
>TOG895871
|
|
32
|
+
AGACACAACATCATAGAAACAGATCAACAACACATTAAAATTAGCATGGATCATAGCTTACGTTGTTTTGGGTCGACACTACCCAAAACTCTTCTTCAGTTTCTGTTATCACCTTCACTCCTTCTCTTCATCTCCTTCTTCAGTTTCTCCAACGCAGCCTTCGACCTCGCCACCATACCCTTCAACGATGCCTATTCACCCCTCTTTGGGGATGGCAACCTTGTCCGCTCCGCCGATGGCAACGGTGTTCAACTCCTCCTCGATCGCTTCACCGGTTCTGGTTTCGTTTCTTCCAATATGTACCAGCATGGATTCTTCAGCGCCAATATCAAGCTACCATCGAATTACAGCGCTGGTATTTGCGTGGCCTTTTATACATCAAACAATGAGATGTTTGAGAAGACACACGATGAGTTAGACTTTGAATTCTTAGGTAATATAGCCGGAAAGCCTTGGAGGTTTCAGACAAACTTGTACGGCAATGGCAGCACCAACCGTGGCCGTGAGGAGCGGTACCGCCTCTGGTTTGATCCAACCAAGGGATTCCATAGATACAGCATTCTATGGACAGCTAAGAACATCATATTTTACATAGATGAGGTTCCAATTAGAGAAATTATAAGAAGTGAAGAAATGGGAGCTGATTACCCAGCAAAGCCAATGGCATTATACGCCACAATATGGGATGCATCAAATTGGGCCACATCGGGTGGAAA
|
|
33
|
+
>ADA84676.1 protein L-isoaspartyl methyltransferase 1 [Cicer arietinum]
|
|
34
|
+
MEQYWSGSAINENKGMVENLQRYGIIKSSKVAETMEKIDRGLFVPNGVQPYIDSPMSIGYNATISAPHMHATCLQLLENYLQPGMHALDVGSGTGYLTACFAMMVGPNGRAVGVEHIPELVSFSINNIEKSAAAPQLKDGSLSVHEGDGRQGWPEFATYDAIHVGAAAPEIPQPLIDQLKTGGRMIIPVGNVFQDLKVVDKNSDGSISIRTETSVRYVPLTSKEAQLKE
|
|
35
|
+
>ADA84676.2 protein L-isoaspartyl methyltransferase 1 [Cicer arietinum]
|
|
36
|
+
MEQYWSGSAGIIKSSKVAETMEKIDRGLFVPNGVQPYIDSPMSIGYNATISAPHMHATCLQLLENYLQINENKGMVENLQRYPGMHALDVGSGTGYLTACFAMMVGPNGRAVGVEHIPELVSFSINNIEKSAAAPQLKDGSLSVHEGDGRQGWPEFATYDAIHVGAAAPEIPGIIKSSKVAETMEKIDRGLFVPNGVQPYIDSPMSIGYNATISAPHMHATCLQLLENYLQPLIDQLKTGGRMIIPVGNVFQDLKVVDKNSDGSISIRTETGIIKSSKVAETMEKIDRGLFVPNGVQPYIDSPMSIGYNATISAPHMHATCLQLLENYLQSVRYVPLTSKEAQLKE
|