rbfam 0.2.2 → 12.0.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +77 -64
- data/Rakefile +7 -2
- data/db/config.yml +1 -1
- data/db/migrate/20140114232757_add_alignment_table.rb +1 -1
- data/db/migrate/20140114232805_add_sequence_table.rb +1 -1
- data/db/migrate/20140114232810_add_family_table.rb +1 -1
- data/db/migrate/20150102185134_drop_alignments.rb +6 -0
- data/db/migrate/20150102185348_add_consensus_structure_to_families.rb +5 -0
- data/db/migrate/20150102192407_rename_table_and_columns_for_sequence.rb +7 -0
- data/db/schema.rb +18 -25
- data/db/seeds.rb +22 -0
- data/lib/rbfam.rb +9 -14
- data/lib/rbfam/db_config.rb +41 -0
- data/lib/rbfam/family.rb +17 -0
- data/lib/rbfam/rna.rb +47 -0
- data/lib/rbfam/version.rb +1 -1
- data/rbfam.gemspec +14 -14
- metadata +68 -57
- data/lib/rbfam/helpers/common.rb +0 -18
- data/lib/rbfam/helpers/simple_names.json +0 -11
- data/lib/rbfam/modules/alignment.rb +0 -60
- data/lib/rbfam/modules/family.rb +0 -70
- data/lib/rbfam/modules/sequence.rb +0 -114
- data/lib/rbfam/modules/utils.rb +0 -38
- data/lib/rbfam/scripts/sequences_in_mysql.rb +0 -46
- data/load_rbfam_seed.rb +0 -28
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 73c4a2c6bb2e20a1eeddd818c01199c6aceca461
|
|
4
|
+
data.tar.gz: 7ba0aa6f44ba94fbbf35cc234b7ad257c9dcdf00
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bef8054a40a26e2f58d2f2e869f3bc8741d469db958066cfd8812117a768c47e7c2b6a1eefe17d125984262f6be47351ef4299848126583328c540bc432e2c8a
|
|
7
|
+
data.tar.gz: 8c32403f117ed54c391c456b6125aa08949fab7ee6dd9f6de25a51028e829300010110135d7393709e2d0e206bbc9ad42827a37a6ba697ee3fdb831c3916719f
|
data/Gemfile.lock
CHANGED
|
@@ -1,93 +1,107 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
rbfam (0.
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
rbfam (12.0.0)
|
|
5
|
+
active_record_migrations (~> 4.2, >= 4.2.0.1)
|
|
6
|
+
activerecord (~> 4.2, >= 4.2.0)
|
|
7
|
+
activerecord-import (~> 0.7, >= 0.7.0)
|
|
8
|
+
activesupport (~> 4.2, >= 4.2.0)
|
|
7
9
|
bio (~> 1.4, >= 1.4.2)
|
|
8
10
|
bio-stockholm (~> 0.0, >= 0.0.1)
|
|
9
|
-
entrez (~> 0.5, >= 0.5.8.1)
|
|
10
|
-
httparty (~> 0.8, >= 0.8.3)
|
|
11
11
|
mysql2 (~> 0.3, >= 0.3.14)
|
|
12
|
-
nokogiri (~> 1.6, >= 1.6.1)
|
|
13
12
|
parallel (~> 1.3, >= 1.3.2)
|
|
13
|
+
ruby-progressbar (~> 1.7, >= 1.7.0)
|
|
14
|
+
virtus (~> 1.0, >= 1.0.3)
|
|
14
15
|
|
|
15
16
|
GEM
|
|
16
17
|
remote: https://rubygems.org/
|
|
17
18
|
specs:
|
|
18
|
-
actionpack (
|
|
19
|
-
|
|
20
|
-
activesupport (=
|
|
21
|
-
|
|
19
|
+
actionpack (4.2.0)
|
|
20
|
+
actionview (= 4.2.0)
|
|
21
|
+
activesupport (= 4.2.0)
|
|
22
|
+
rack (~> 1.6.0)
|
|
23
|
+
rack-test (~> 0.6.2)
|
|
24
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
25
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.1)
|
|
26
|
+
actionview (4.2.0)
|
|
27
|
+
activesupport (= 4.2.0)
|
|
28
|
+
builder (~> 3.1)
|
|
22
29
|
erubis (~> 2.7.0)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
30
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
31
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.1)
|
|
32
|
+
active_record_migrations (4.2.0.1)
|
|
33
|
+
activerecord (= 4.2.0)
|
|
34
|
+
railties (= 4.2.0)
|
|
35
|
+
rake
|
|
36
|
+
activemodel (4.2.0)
|
|
37
|
+
activesupport (= 4.2.0)
|
|
38
|
+
builder (~> 3.1)
|
|
39
|
+
activerecord (4.2.0)
|
|
40
|
+
activemodel (= 4.2.0)
|
|
41
|
+
activesupport (= 4.2.0)
|
|
42
|
+
arel (~> 6.0)
|
|
43
|
+
activerecord-import (0.7.0)
|
|
44
|
+
activerecord (>= 3.0)
|
|
45
|
+
activesupport (4.2.0)
|
|
46
|
+
i18n (~> 0.7)
|
|
47
|
+
json (~> 1.7, >= 1.7.7)
|
|
48
|
+
minitest (~> 5.1)
|
|
49
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
|
50
|
+
tzinfo (~> 1.1)
|
|
51
|
+
arel (6.0.0)
|
|
40
52
|
awesome_print (1.2.0)
|
|
53
|
+
axiom-types (0.1.1)
|
|
54
|
+
descendants_tracker (~> 0.0.4)
|
|
55
|
+
ice_nine (~> 0.11.0)
|
|
56
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
|
41
57
|
bio (1.4.3.0001)
|
|
42
58
|
bio-stockholm (0.0.1)
|
|
43
|
-
builder (3.
|
|
44
|
-
|
|
45
|
-
|
|
59
|
+
builder (3.2.2)
|
|
60
|
+
coercible (1.0.0)
|
|
61
|
+
descendants_tracker (~> 0.0.1)
|
|
62
|
+
descendants_tracker (0.0.4)
|
|
63
|
+
thread_safe (~> 0.3, >= 0.3.1)
|
|
64
|
+
equalizer (0.0.9)
|
|
46
65
|
erubis (2.7.0)
|
|
47
66
|
gem-release (0.7.3)
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
json (~> 1.8)
|
|
51
|
-
multi_xml (>= 0.5.2)
|
|
52
|
-
i18n (0.6.11)
|
|
53
|
-
journey (1.0.4)
|
|
67
|
+
i18n (0.7.0)
|
|
68
|
+
ice_nine (0.11.1)
|
|
54
69
|
json (1.8.1)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
70
|
+
loofah (2.0.1)
|
|
71
|
+
nokogiri (>= 1.5.9)
|
|
72
|
+
mini_portile (0.6.2)
|
|
73
|
+
minitest (5.5.0)
|
|
58
74
|
mysql2 (0.3.17)
|
|
59
75
|
nokogiri (1.6.5)
|
|
60
76
|
mini_portile (~> 0.6.0)
|
|
61
77
|
parallel (1.3.3)
|
|
62
|
-
rack (1.
|
|
63
|
-
rack-cache (1.2)
|
|
64
|
-
rack (>= 0.4)
|
|
65
|
-
rack-ssl (1.3.4)
|
|
66
|
-
rack
|
|
78
|
+
rack (1.6.0)
|
|
67
79
|
rack-test (0.6.2)
|
|
68
80
|
rack (>= 1.0)
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
81
|
+
rails-deprecated_sanitizer (1.0.3)
|
|
82
|
+
activesupport (>= 4.2.0.alpha)
|
|
83
|
+
rails-dom-testing (1.0.5)
|
|
84
|
+
activesupport (>= 4.2.0.beta, < 5.0)
|
|
85
|
+
nokogiri (~> 1.6.0)
|
|
86
|
+
rails-deprecated_sanitizer (>= 1.0.1)
|
|
87
|
+
rails-html-sanitizer (1.0.1)
|
|
88
|
+
loofah (~> 2.0)
|
|
89
|
+
railties (4.2.0)
|
|
90
|
+
actionpack (= 4.2.0)
|
|
91
|
+
activesupport (= 4.2.0)
|
|
73
92
|
rake (>= 0.8.7)
|
|
74
|
-
|
|
75
|
-
thor (>= 0.14.6, < 2.0)
|
|
93
|
+
thor (>= 0.18.1, < 2.0)
|
|
76
94
|
rake (10.4.2)
|
|
77
|
-
|
|
78
|
-
json (~> 1.4)
|
|
79
|
-
sprockets (2.2.3)
|
|
80
|
-
hike (~> 1.2)
|
|
81
|
-
multi_json (~> 1.0)
|
|
82
|
-
rack (~> 1.0)
|
|
83
|
-
tilt (~> 1.1, != 1.3.0)
|
|
84
|
-
standalone_migrations (2.1.5)
|
|
85
|
-
activerecord (~> 3.2)
|
|
86
|
-
railties (~> 3.2)
|
|
87
|
-
rake (~> 10.0)
|
|
95
|
+
ruby-progressbar (1.7.1)
|
|
88
96
|
thor (0.19.1)
|
|
89
|
-
|
|
90
|
-
tzinfo (
|
|
97
|
+
thread_safe (0.3.4)
|
|
98
|
+
tzinfo (1.2.2)
|
|
99
|
+
thread_safe (~> 0.1)
|
|
100
|
+
virtus (1.0.3)
|
|
101
|
+
axiom-types (~> 0.1)
|
|
102
|
+
coercible (~> 1.0)
|
|
103
|
+
descendants_tracker (~> 0.0, >= 0.0.3)
|
|
104
|
+
equalizer (~> 0.0, >= 0.0.9)
|
|
91
105
|
|
|
92
106
|
PLATFORMS
|
|
93
107
|
ruby
|
|
@@ -98,4 +112,3 @@ DEPENDENCIES
|
|
|
98
112
|
gem-release (~> 0.7, >= 0.7.3)
|
|
99
113
|
rake (~> 10.0)
|
|
100
114
|
rbfam!
|
|
101
|
-
standalone_migrations (~> 2.1, >= 2.1.5)
|
data/Rakefile
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
require "bundler/gem_tasks"
|
|
2
|
-
require "
|
|
3
|
-
|
|
2
|
+
require "active_record_migrations"
|
|
3
|
+
require "rbfam"
|
|
4
|
+
|
|
5
|
+
ActiveRecordMigrations.load_tasks
|
|
6
|
+
|
|
7
|
+
ActiveRecord::Base.configurations = ActiveRecord::Tasks::DatabaseTasks.database_configuration = Rbfam.db.config
|
|
8
|
+
ActiveRecord::Tasks::DatabaseTasks.env = Rbfam.db.env
|
data/db/config.yml
CHANGED
data/db/schema.rb
CHANGED
|
@@ -9,36 +9,29 @@
|
|
|
9
9
|
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
|
10
10
|
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
|
11
11
|
#
|
|
12
|
-
# It's strongly recommended
|
|
12
|
+
# It's strongly recommended that you check this file into your version control system.
|
|
13
13
|
|
|
14
|
-
ActiveRecord::Schema.define(:
|
|
14
|
+
ActiveRecord::Schema.define(version: 20150102192407) do
|
|
15
15
|
|
|
16
|
-
create_table "
|
|
17
|
-
t.datetime "created_at",
|
|
18
|
-
t.datetime "updated_at",
|
|
19
|
-
t.
|
|
20
|
-
t.
|
|
21
|
-
t.text "consensus_structure"
|
|
16
|
+
create_table "families", force: :cascade do |t|
|
|
17
|
+
t.datetime "created_at", null: false
|
|
18
|
+
t.datetime "updated_at", null: false
|
|
19
|
+
t.string "name", limit: 255
|
|
20
|
+
t.string "description", limit: 255
|
|
21
|
+
t.text "consensus_structure", limit: 65535
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
t.datetime "created_at", :null => false
|
|
26
|
-
t.datetime "updated_at", :null => false
|
|
27
|
-
t.string "name"
|
|
28
|
-
t.string "description"
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
add_index "families", ["name"], :name => "index_families_on_name", :unique => true
|
|
24
|
+
add_index "families", ["name"], name: "index_families_on_name", unique: true, using: :btree
|
|
32
25
|
|
|
33
|
-
create_table "
|
|
34
|
-
t.datetime "created_at",
|
|
35
|
-
t.datetime "updated_at",
|
|
36
|
-
t.integer "
|
|
37
|
-
t.string "accession"
|
|
38
|
-
t.text "
|
|
39
|
-
t.text "
|
|
40
|
-
t.integer "from"
|
|
41
|
-
t.integer "to"
|
|
26
|
+
create_table "rnas", force: :cascade do |t|
|
|
27
|
+
t.datetime "created_at", null: false
|
|
28
|
+
t.datetime "updated_at", null: false
|
|
29
|
+
t.integer "family_id", limit: 4
|
|
30
|
+
t.string "accession", limit: 255
|
|
31
|
+
t.text "sequence", limit: 65535
|
|
32
|
+
t.text "gapped_sequence", limit: 65535
|
|
33
|
+
t.integer "from", limit: 4
|
|
34
|
+
t.integer "to", limit: 4
|
|
42
35
|
end
|
|
43
36
|
|
|
44
37
|
end
|
data/db/seeds.rb
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require "rbfam"
|
|
2
|
+
require "activerecord-import/base"
|
|
3
|
+
|
|
4
|
+
puts "Parsing %s to load in DB." % Rbfam.db.rfam_file
|
|
5
|
+
entries = Bio::Stockholm::Reader.parse_from_file(Rbfam.db.rfam_file) and nil
|
|
6
|
+
puts "Loading up %d RFam families." % entries.size
|
|
7
|
+
|
|
8
|
+
Parallel.each(entries, progress: "Populating MySQL") do |stockholm|
|
|
9
|
+
family = Rbfam::Family.find_or_create_by(name: stockholm.gf_features["AC"], description: stockholm.gf_features["DE"], consensus_structure: stockholm.gc_features["SS_cons"])
|
|
10
|
+
|
|
11
|
+
existing_sequences = family.rnas.map { |sequence| sequence.instance_eval { "%s/%d-%d" % [accession, from, to] } }.to_set
|
|
12
|
+
sequences = stockholm.records.reject { |key, _| key == ?# || existing_sequences.include?(key) }.map do |identifier, record|
|
|
13
|
+
accession, from, to = identifier.split(/[\/-]/)
|
|
14
|
+
|
|
15
|
+
Rbfam::Rna.find_or_initialize_by(family: family, accession: accession, from: from, to: to) do |sequence|
|
|
16
|
+
sequence.gapped_sequence = record.sequence.upcase
|
|
17
|
+
sequence.sequence = sequence.gapped_sequence.gsub(/[^AUGC]/, "")
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
Rbfam::Rna.import(sequences.select(&:new_record?))
|
|
22
|
+
end and nil
|
data/lib/rbfam.rb
CHANGED
|
@@ -2,24 +2,19 @@ require "active_record"
|
|
|
2
2
|
require "active_support/inflector"
|
|
3
3
|
require "bio"
|
|
4
4
|
require "bio-stockholm"
|
|
5
|
-
require "entrez"
|
|
6
|
-
require "httparty"
|
|
7
|
-
require "json"
|
|
8
5
|
require "mysql2"
|
|
9
6
|
require "parallel"
|
|
7
|
+
require "rake"
|
|
8
|
+
require "ruby-progressbar"
|
|
9
|
+
require "singleton"
|
|
10
|
+
require "virtus"
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
require "rbfam/db_config"
|
|
13
|
+
require "rbfam/family"
|
|
14
|
+
require "rbfam/rna"
|
|
14
15
|
|
|
15
16
|
module Rbfam
|
|
16
|
-
def self.
|
|
17
|
-
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def self.script(name)
|
|
21
|
-
require "rbfam/scripts/#{File.basename(name, '.rb')}"
|
|
17
|
+
def self.db
|
|
18
|
+
DbConfig.instance
|
|
22
19
|
end
|
|
23
20
|
end
|
|
24
|
-
|
|
25
|
-
Rbfam::Family.const_set(:READABLE, JSON.parse(File.read(File.join(File.dirname(__FILE__), "rbfam", "helpers", "simple_names.json"))))
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Rbfam
|
|
2
|
+
class DbConfig
|
|
3
|
+
include Singleton, Virtus.model
|
|
4
|
+
|
|
5
|
+
attribute :rfam_file, String, default: ->(_, _) { File.join(File.dirname(__FILE__), "..", "..", "rfam_12.seed.utf8") }
|
|
6
|
+
attribute :env, String, default: "rbfam"
|
|
7
|
+
attribute :config, Hash[String => String], default: ->(_, _) { YAML.load_file(File.join(File.dirname(__FILE__), "..", "..", "db", "config.yml")) }
|
|
8
|
+
|
|
9
|
+
def scoped_config
|
|
10
|
+
config[env]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def bootstrap!
|
|
14
|
+
load_rakefile
|
|
15
|
+
Rake::Task["db:reset"].invoke
|
|
16
|
+
true
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def seed!
|
|
20
|
+
load_rakefile
|
|
21
|
+
Rake::Task["db:seed"].invoke
|
|
22
|
+
true
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def clear!
|
|
26
|
+
load_rakefile
|
|
27
|
+
Rake::Task["db:drop"].invoke
|
|
28
|
+
true
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def connect
|
|
32
|
+
ActiveRecord::Base.establish_connection(scoped_config)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def load_rakefile
|
|
38
|
+
Rake.load_rakefile(File.join(File.dirname(__FILE__), "..", "..", "Rakefile"))
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
data/lib/rbfam/family.rb
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Rbfam
|
|
2
|
+
class Family < ActiveRecord::Base
|
|
3
|
+
has_many :rnas
|
|
4
|
+
|
|
5
|
+
validates :name, :description, :consensus_structure, presence: true
|
|
6
|
+
validates :name, uniqueness: true
|
|
7
|
+
|
|
8
|
+
def self.rf(id)
|
|
9
|
+
int_id = id.to_i
|
|
10
|
+
find_by_name("RF%s%d" % [?0 * (5 - Math.log10(int_id).ceil), int_id])
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def self.named(string)
|
|
14
|
+
where(arel_table[:description].matches("%#{string}%"))
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/rbfam/rna.rb
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module Rbfam
|
|
2
|
+
class Rna < ActiveRecord::Base
|
|
3
|
+
belongs_to :family
|
|
4
|
+
|
|
5
|
+
validates :accession, :from, :to, :sequence, :gapped_sequence, presence: true
|
|
6
|
+
validates :from, :to, numericality: { only_integer: true, greater_than_or_equal_to: 0 }
|
|
7
|
+
validates :accession, uniqueness: { scope: [:sequence, :from, :to] }
|
|
8
|
+
|
|
9
|
+
def strand
|
|
10
|
+
plus_strand? ? :plus : :minus
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def plus_strand?
|
|
14
|
+
to > from
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def minus_strand?
|
|
18
|
+
!plus_strand?
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def seq_from
|
|
22
|
+
[from, to].min
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def seq_to
|
|
26
|
+
[from, to].max
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
alias_method :seq, def sequence
|
|
30
|
+
as_bioseq(read_attribute(:sequence))
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def gapped_sequence
|
|
34
|
+
as_bioseq(read_attribute(:gapped_sequence))
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def _id
|
|
38
|
+
("%s %s %s" % [accession, from, to]).gsub(/\W+/, "_")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
def as_bioseq(string)
|
|
44
|
+
Bio::Sequence::NA.new(string).upcase
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
data/lib/rbfam/version.rb
CHANGED
data/rbfam.gemspec
CHANGED
|
@@ -20,19 +20,19 @@ Gem::Specification.new do |spec|
|
|
|
20
20
|
|
|
21
21
|
spec.required_ruby_version = ">= 2.0"
|
|
22
22
|
|
|
23
|
-
spec.add_development_dependency "awesome_print",
|
|
24
|
-
spec.add_development_dependency "bundler",
|
|
25
|
-
spec.add_development_dependency "gem-release",
|
|
26
|
-
spec.add_development_dependency "rake",
|
|
27
|
-
spec.add_development_dependency "standalone_migrations", "~> 2.1", ">= 2.1.5"
|
|
23
|
+
spec.add_development_dependency "awesome_print", "~> 1.2.0"
|
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.7"
|
|
25
|
+
spec.add_development_dependency "gem-release", "~> 0.7", ">= 0.7.3"
|
|
26
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
|
28
27
|
|
|
29
|
-
spec.add_runtime_dependency "activerecord"
|
|
30
|
-
spec.add_runtime_dependency "
|
|
31
|
-
spec.add_runtime_dependency "
|
|
32
|
-
spec.add_runtime_dependency "
|
|
33
|
-
spec.add_runtime_dependency "
|
|
34
|
-
spec.add_runtime_dependency "
|
|
35
|
-
spec.add_runtime_dependency "mysql2",
|
|
36
|
-
spec.add_runtime_dependency "
|
|
37
|
-
spec.add_runtime_dependency "
|
|
28
|
+
spec.add_runtime_dependency "activerecord", "~> 4.2", ">= 4.2.0"
|
|
29
|
+
spec.add_runtime_dependency "activerecord-import", "~> 0.7", ">= 0.7.0"
|
|
30
|
+
spec.add_runtime_dependency "active_record_migrations", "~> 4.2", ">= 4.2.0.1"
|
|
31
|
+
spec.add_runtime_dependency "activesupport", "~> 4.2", ">= 4.2.0"
|
|
32
|
+
spec.add_runtime_dependency "bio", "~> 1.4", ">= 1.4.2"
|
|
33
|
+
spec.add_runtime_dependency "bio-stockholm", "~> 0.0", ">= 0.0.1"
|
|
34
|
+
spec.add_runtime_dependency "mysql2", "~> 0.3", ">= 0.3.14"
|
|
35
|
+
spec.add_runtime_dependency "parallel", "~> 1.3", ">= 1.3.2"
|
|
36
|
+
spec.add_runtime_dependency "ruby-progressbar", "~> 1.7", ">= 1.7.0"
|
|
37
|
+
spec.add_runtime_dependency "virtus", "~> 1.0", ">= 1.0.3"
|
|
38
38
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rbfam
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 12.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Evan Senter
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2015-01-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: awesome_print
|
|
@@ -73,193 +73,205 @@ dependencies:
|
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
74
|
version: '10.0'
|
|
75
75
|
- !ruby/object:Gem::Dependency
|
|
76
|
-
name:
|
|
76
|
+
name: activerecord
|
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
|
78
78
|
requirements:
|
|
79
79
|
- - "~>"
|
|
80
80
|
- !ruby/object:Gem::Version
|
|
81
|
-
version: '2
|
|
81
|
+
version: '4.2'
|
|
82
82
|
- - ">="
|
|
83
83
|
- !ruby/object:Gem::Version
|
|
84
|
-
version: 2.
|
|
85
|
-
type: :
|
|
84
|
+
version: 4.2.0
|
|
85
|
+
type: :runtime
|
|
86
86
|
prerelease: false
|
|
87
87
|
version_requirements: !ruby/object:Gem::Requirement
|
|
88
88
|
requirements:
|
|
89
89
|
- - "~>"
|
|
90
90
|
- !ruby/object:Gem::Version
|
|
91
|
-
version: '2
|
|
91
|
+
version: '4.2'
|
|
92
92
|
- - ">="
|
|
93
93
|
- !ruby/object:Gem::Version
|
|
94
|
-
version: 2.
|
|
94
|
+
version: 4.2.0
|
|
95
95
|
- !ruby/object:Gem::Dependency
|
|
96
|
-
name: activerecord
|
|
96
|
+
name: activerecord-import
|
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
|
98
98
|
requirements:
|
|
99
|
+
- - "~>"
|
|
100
|
+
- !ruby/object:Gem::Version
|
|
101
|
+
version: '0.7'
|
|
99
102
|
- - ">="
|
|
100
103
|
- !ruby/object:Gem::Version
|
|
101
|
-
version:
|
|
104
|
+
version: 0.7.0
|
|
102
105
|
type: :runtime
|
|
103
106
|
prerelease: false
|
|
104
107
|
version_requirements: !ruby/object:Gem::Requirement
|
|
105
108
|
requirements:
|
|
109
|
+
- - "~>"
|
|
110
|
+
- !ruby/object:Gem::Version
|
|
111
|
+
version: '0.7'
|
|
106
112
|
- - ">="
|
|
107
113
|
- !ruby/object:Gem::Version
|
|
108
|
-
version:
|
|
114
|
+
version: 0.7.0
|
|
109
115
|
- !ruby/object:Gem::Dependency
|
|
110
|
-
name:
|
|
116
|
+
name: active_record_migrations
|
|
111
117
|
requirement: !ruby/object:Gem::Requirement
|
|
112
118
|
requirements:
|
|
119
|
+
- - "~>"
|
|
120
|
+
- !ruby/object:Gem::Version
|
|
121
|
+
version: '4.2'
|
|
113
122
|
- - ">="
|
|
114
123
|
- !ruby/object:Gem::Version
|
|
115
|
-
version:
|
|
124
|
+
version: 4.2.0.1
|
|
116
125
|
type: :runtime
|
|
117
126
|
prerelease: false
|
|
118
127
|
version_requirements: !ruby/object:Gem::Requirement
|
|
119
128
|
requirements:
|
|
129
|
+
- - "~>"
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '4.2'
|
|
120
132
|
- - ">="
|
|
121
133
|
- !ruby/object:Gem::Version
|
|
122
|
-
version:
|
|
134
|
+
version: 4.2.0.1
|
|
123
135
|
- !ruby/object:Gem::Dependency
|
|
124
|
-
name:
|
|
136
|
+
name: activesupport
|
|
125
137
|
requirement: !ruby/object:Gem::Requirement
|
|
126
138
|
requirements:
|
|
127
139
|
- - "~>"
|
|
128
140
|
- !ruby/object:Gem::Version
|
|
129
|
-
version: '
|
|
141
|
+
version: '4.2'
|
|
130
142
|
- - ">="
|
|
131
143
|
- !ruby/object:Gem::Version
|
|
132
|
-
version:
|
|
144
|
+
version: 4.2.0
|
|
133
145
|
type: :runtime
|
|
134
146
|
prerelease: false
|
|
135
147
|
version_requirements: !ruby/object:Gem::Requirement
|
|
136
148
|
requirements:
|
|
137
149
|
- - "~>"
|
|
138
150
|
- !ruby/object:Gem::Version
|
|
139
|
-
version: '
|
|
151
|
+
version: '4.2'
|
|
140
152
|
- - ">="
|
|
141
153
|
- !ruby/object:Gem::Version
|
|
142
|
-
version:
|
|
154
|
+
version: 4.2.0
|
|
143
155
|
- !ruby/object:Gem::Dependency
|
|
144
|
-
name: bio
|
|
156
|
+
name: bio
|
|
145
157
|
requirement: !ruby/object:Gem::Requirement
|
|
146
158
|
requirements:
|
|
147
159
|
- - "~>"
|
|
148
160
|
- !ruby/object:Gem::Version
|
|
149
|
-
version: '
|
|
161
|
+
version: '1.4'
|
|
150
162
|
- - ">="
|
|
151
163
|
- !ruby/object:Gem::Version
|
|
152
|
-
version:
|
|
164
|
+
version: 1.4.2
|
|
153
165
|
type: :runtime
|
|
154
166
|
prerelease: false
|
|
155
167
|
version_requirements: !ruby/object:Gem::Requirement
|
|
156
168
|
requirements:
|
|
157
169
|
- - "~>"
|
|
158
170
|
- !ruby/object:Gem::Version
|
|
159
|
-
version: '
|
|
171
|
+
version: '1.4'
|
|
160
172
|
- - ">="
|
|
161
173
|
- !ruby/object:Gem::Version
|
|
162
|
-
version:
|
|
174
|
+
version: 1.4.2
|
|
163
175
|
- !ruby/object:Gem::Dependency
|
|
164
|
-
name:
|
|
176
|
+
name: bio-stockholm
|
|
165
177
|
requirement: !ruby/object:Gem::Requirement
|
|
166
178
|
requirements:
|
|
167
179
|
- - "~>"
|
|
168
180
|
- !ruby/object:Gem::Version
|
|
169
|
-
version: '0.
|
|
181
|
+
version: '0.0'
|
|
170
182
|
- - ">="
|
|
171
183
|
- !ruby/object:Gem::Version
|
|
172
|
-
version: 0.
|
|
184
|
+
version: 0.0.1
|
|
173
185
|
type: :runtime
|
|
174
186
|
prerelease: false
|
|
175
187
|
version_requirements: !ruby/object:Gem::Requirement
|
|
176
188
|
requirements:
|
|
177
189
|
- - "~>"
|
|
178
190
|
- !ruby/object:Gem::Version
|
|
179
|
-
version: '0.
|
|
191
|
+
version: '0.0'
|
|
180
192
|
- - ">="
|
|
181
193
|
- !ruby/object:Gem::Version
|
|
182
|
-
version: 0.
|
|
194
|
+
version: 0.0.1
|
|
183
195
|
- !ruby/object:Gem::Dependency
|
|
184
|
-
name:
|
|
196
|
+
name: mysql2
|
|
185
197
|
requirement: !ruby/object:Gem::Requirement
|
|
186
198
|
requirements:
|
|
187
199
|
- - "~>"
|
|
188
200
|
- !ruby/object:Gem::Version
|
|
189
|
-
version: '0.
|
|
201
|
+
version: '0.3'
|
|
190
202
|
- - ">="
|
|
191
203
|
- !ruby/object:Gem::Version
|
|
192
|
-
version: 0.
|
|
204
|
+
version: 0.3.14
|
|
193
205
|
type: :runtime
|
|
194
206
|
prerelease: false
|
|
195
207
|
version_requirements: !ruby/object:Gem::Requirement
|
|
196
208
|
requirements:
|
|
197
209
|
- - "~>"
|
|
198
210
|
- !ruby/object:Gem::Version
|
|
199
|
-
version: '0.
|
|
211
|
+
version: '0.3'
|
|
200
212
|
- - ">="
|
|
201
213
|
- !ruby/object:Gem::Version
|
|
202
|
-
version: 0.
|
|
214
|
+
version: 0.3.14
|
|
203
215
|
- !ruby/object:Gem::Dependency
|
|
204
|
-
name:
|
|
216
|
+
name: parallel
|
|
205
217
|
requirement: !ruby/object:Gem::Requirement
|
|
206
218
|
requirements:
|
|
207
219
|
- - "~>"
|
|
208
220
|
- !ruby/object:Gem::Version
|
|
209
|
-
version: '
|
|
221
|
+
version: '1.3'
|
|
210
222
|
- - ">="
|
|
211
223
|
- !ruby/object:Gem::Version
|
|
212
|
-
version:
|
|
224
|
+
version: 1.3.2
|
|
213
225
|
type: :runtime
|
|
214
226
|
prerelease: false
|
|
215
227
|
version_requirements: !ruby/object:Gem::Requirement
|
|
216
228
|
requirements:
|
|
217
229
|
- - "~>"
|
|
218
230
|
- !ruby/object:Gem::Version
|
|
219
|
-
version: '
|
|
231
|
+
version: '1.3'
|
|
220
232
|
- - ">="
|
|
221
233
|
- !ruby/object:Gem::Version
|
|
222
|
-
version:
|
|
234
|
+
version: 1.3.2
|
|
223
235
|
- !ruby/object:Gem::Dependency
|
|
224
|
-
name:
|
|
236
|
+
name: ruby-progressbar
|
|
225
237
|
requirement: !ruby/object:Gem::Requirement
|
|
226
238
|
requirements:
|
|
227
239
|
- - "~>"
|
|
228
240
|
- !ruby/object:Gem::Version
|
|
229
|
-
version: '1.
|
|
241
|
+
version: '1.7'
|
|
230
242
|
- - ">="
|
|
231
243
|
- !ruby/object:Gem::Version
|
|
232
|
-
version: 1.
|
|
244
|
+
version: 1.7.0
|
|
233
245
|
type: :runtime
|
|
234
246
|
prerelease: false
|
|
235
247
|
version_requirements: !ruby/object:Gem::Requirement
|
|
236
248
|
requirements:
|
|
237
249
|
- - "~>"
|
|
238
250
|
- !ruby/object:Gem::Version
|
|
239
|
-
version: '1.
|
|
251
|
+
version: '1.7'
|
|
240
252
|
- - ">="
|
|
241
253
|
- !ruby/object:Gem::Version
|
|
242
|
-
version: 1.
|
|
254
|
+
version: 1.7.0
|
|
243
255
|
- !ruby/object:Gem::Dependency
|
|
244
|
-
name:
|
|
256
|
+
name: virtus
|
|
245
257
|
requirement: !ruby/object:Gem::Requirement
|
|
246
258
|
requirements:
|
|
247
259
|
- - "~>"
|
|
248
260
|
- !ruby/object:Gem::Version
|
|
249
|
-
version: '1.
|
|
261
|
+
version: '1.0'
|
|
250
262
|
- - ">="
|
|
251
263
|
- !ruby/object:Gem::Version
|
|
252
|
-
version: 1.3
|
|
264
|
+
version: 1.0.3
|
|
253
265
|
type: :runtime
|
|
254
266
|
prerelease: false
|
|
255
267
|
version_requirements: !ruby/object:Gem::Requirement
|
|
256
268
|
requirements:
|
|
257
269
|
- - "~>"
|
|
258
270
|
- !ruby/object:Gem::Version
|
|
259
|
-
version: '1.
|
|
271
|
+
version: '1.0'
|
|
260
272
|
- - ">="
|
|
261
273
|
- !ruby/object:Gem::Version
|
|
262
|
-
version: 1.3
|
|
274
|
+
version: 1.0.3
|
|
263
275
|
description: Light wrapper for RFam data in Ruby.
|
|
264
276
|
email:
|
|
265
277
|
- evansenter@gmail.com
|
|
@@ -276,17 +288,16 @@ files:
|
|
|
276
288
|
- db/migrate/20140114232757_add_alignment_table.rb
|
|
277
289
|
- db/migrate/20140114232805_add_sequence_table.rb
|
|
278
290
|
- db/migrate/20140114232810_add_family_table.rb
|
|
291
|
+
- db/migrate/20150102185134_drop_alignments.rb
|
|
292
|
+
- db/migrate/20150102185348_add_consensus_structure_to_families.rb
|
|
293
|
+
- db/migrate/20150102192407_rename_table_and_columns_for_sequence.rb
|
|
279
294
|
- db/schema.rb
|
|
295
|
+
- db/seeds.rb
|
|
280
296
|
- lib/rbfam.rb
|
|
281
|
-
- lib/rbfam/
|
|
282
|
-
- lib/rbfam/
|
|
283
|
-
- lib/rbfam/
|
|
284
|
-
- lib/rbfam/modules/family.rb
|
|
285
|
-
- lib/rbfam/modules/sequence.rb
|
|
286
|
-
- lib/rbfam/modules/utils.rb
|
|
287
|
-
- lib/rbfam/scripts/sequences_in_mysql.rb
|
|
297
|
+
- lib/rbfam/db_config.rb
|
|
298
|
+
- lib/rbfam/family.rb
|
|
299
|
+
- lib/rbfam/rna.rb
|
|
288
300
|
- lib/rbfam/version.rb
|
|
289
|
-
- load_rbfam_seed.rb
|
|
290
301
|
- rbfam.gemspec
|
|
291
302
|
- rfam_12.seed.utf8
|
|
292
303
|
homepage: ''
|
data/lib/rbfam/helpers/common.rb
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
module Rbfam
|
|
2
|
-
module CommonHelpers
|
|
3
|
-
def self.included(base)
|
|
4
|
-
base.send(:include, InstanceMethods)
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
module InstanceMethods
|
|
8
|
-
def bootstrap!(options = {})
|
|
9
|
-
tap { load_entries!(options) }
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def entries!(options = {})
|
|
13
|
-
remove_instance_variable(:@parsed_entries)
|
|
14
|
-
entries(options)
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
module Rbfam
|
|
2
|
-
class Alignment
|
|
3
|
-
include Rbfam::CommonHelpers
|
|
4
|
-
|
|
5
|
-
LINE_REGEXP = /^([\w\.]+)\/(\d+)\-(\d+)\s+([AUGC\.]+)$/
|
|
6
|
-
|
|
7
|
-
attr_reader :family, :seed
|
|
8
|
-
|
|
9
|
-
def initialize(family)
|
|
10
|
-
@family = family
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def entries(options = {})
|
|
14
|
-
options = { alignment: :seed, limit: false }.merge(options)
|
|
15
|
-
|
|
16
|
-
@parsed_entries ||= (pull_from_server(options[:alignment]) || "").split(/\n/).reject do |line|
|
|
17
|
-
line =~ /^#/
|
|
18
|
-
end.select do |line|
|
|
19
|
-
line =~ LINE_REGEXP
|
|
20
|
-
end[options[:limit] ? 0...options[:limit] : 0..-1].map(&method(:parse_line)).tap do
|
|
21
|
-
@seed = options[:alignment] == :seed
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def save_entries!
|
|
26
|
-
entries.each { |sequence| sequence.save!(seed: seed) }
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def load_entries!(options = {})
|
|
30
|
-
@parsed_entries = family.load_entries!(options)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
private
|
|
34
|
-
|
|
35
|
-
def pull_from_server(alignment)
|
|
36
|
-
url = "http://rfam.sanger.ac.uk/family/alignment/download/format?acc=%s&alnType=%s&nseLabels=1&format=pfam&download=0" % [
|
|
37
|
-
family.family_name,
|
|
38
|
-
alignment
|
|
39
|
-
]
|
|
40
|
-
puts "GET: %s" % url unless @reponse
|
|
41
|
-
|
|
42
|
-
@response ||= if (party = HTTParty.get(url)).response.code == "200"
|
|
43
|
-
puts "RESPONSE: 200 OK"
|
|
44
|
-
party.parsed_response
|
|
45
|
-
else
|
|
46
|
-
raise RuntimeError.new("HTTParty raised the following error when retrieving alignment %s: %s %s" % [
|
|
47
|
-
family_name,
|
|
48
|
-
party.response.code,
|
|
49
|
-
party.response.message
|
|
50
|
-
])
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def parse_line(line)
|
|
55
|
-
line_match = line.match(LINE_REGEXP)
|
|
56
|
-
|
|
57
|
-
Rbfam::Sequence.new(family, line_match[1], line_match[2].to_i, line_match[3].to_i, autoload: true)
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
data/lib/rbfam/modules/family.rb
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
module Rbfam
|
|
2
|
-
class Family
|
|
3
|
-
include Rbfam::CommonHelpers
|
|
4
|
-
|
|
5
|
-
attr_reader :family_name, :description
|
|
6
|
-
|
|
7
|
-
class << self
|
|
8
|
-
def method_missing(name, *args, &block)
|
|
9
|
-
READABLE[name.to_s] ? new(READABLE[name.to_s]) : super
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def initialize(family_name, description = "")
|
|
14
|
-
@family_name = family_name
|
|
15
|
-
@description = description
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def id
|
|
19
|
-
("%s %s" % [family_name, description.downcase]).strip.gsub(/\W+/, "_")
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def alignment
|
|
23
|
-
Rbfam::Alignment.new(self)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def entries(options = {})
|
|
27
|
-
options = { limit: false }.merge(options)
|
|
28
|
-
|
|
29
|
-
@parsed_entries ||= pull_from_server.split(/\n/).reject { |line| line =~ /^#/ }[options[:limit] ? 0...options[:limit] : 0..-1].map(&method(:parse_line))
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def load_entries!(options = {})
|
|
33
|
-
Rbfam.script("sequences_in_mysql")
|
|
34
|
-
|
|
35
|
-
Rbfam::DB::Sequence.joins(alignment: :family).where(families: { name: family_name }.merge(options)).map do |entry|
|
|
36
|
-
entry.to_rbfam(self)
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def save_entries!
|
|
41
|
-
entries.each(&:save!)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
private
|
|
45
|
-
|
|
46
|
-
def pull_from_server
|
|
47
|
-
# It isn't the greatest design pattern to memoize a block where a branch has unmanaged exception raising, but for my uses that should never
|
|
48
|
-
# happen and needs to blow up hard if it does.
|
|
49
|
-
url = "http://rfam.sanger.ac.uk/family/regions?entry=%s" % family_name
|
|
50
|
-
puts "GET: %s" % url unless @reponse
|
|
51
|
-
|
|
52
|
-
@reponse ||= if (party = HTTParty.get(url)).response.code == "200"
|
|
53
|
-
puts "RESPONSE: 200 OK"
|
|
54
|
-
party.parsed_response
|
|
55
|
-
else
|
|
56
|
-
raise RuntimeError.new("HTTParty raised the following error when retrieving family %s: %s %s" % [
|
|
57
|
-
family_name,
|
|
58
|
-
party.response.code,
|
|
59
|
-
party.response.message
|
|
60
|
-
])
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def parse_line(line)
|
|
65
|
-
split_line = line.split(/\t/)
|
|
66
|
-
|
|
67
|
-
Rbfam::Sequence.new(self, split_line[0], split_line[2].to_i, split_line[3].to_i, autoload: true)
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
module Rbfam
|
|
2
|
-
class Sequence < ActiveRecord::Base
|
|
3
|
-
attr_reader :family, :accession, :from, :to, :coord_options
|
|
4
|
-
|
|
5
|
-
def initialize(family, accession, from, to, options = {})
|
|
6
|
-
@family = family
|
|
7
|
-
@accession = accession
|
|
8
|
-
@from = from
|
|
9
|
-
@to = to
|
|
10
|
-
@coord_options = options[:autoload].is_a?(Hash) ? options[:autoload] : {}
|
|
11
|
-
|
|
12
|
-
if options[:sequence]
|
|
13
|
-
@raw_sequence = (options[:sequence].is_a?(String) ? Bio::Sequence::NA.new(options[:sequence]) : options[:sequence]).upcase
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
if options[:autoload]
|
|
17
|
-
sequence
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def save!(options = {})
|
|
22
|
-
unless extended?
|
|
23
|
-
Rbfam.script("sequences_in_mysql")
|
|
24
|
-
|
|
25
|
-
SequenceTable.create({
|
|
26
|
-
family: family.family_name,
|
|
27
|
-
accession: accession,
|
|
28
|
-
sequence: sequence,
|
|
29
|
-
sequence_length: sequence.length,
|
|
30
|
-
from: from,
|
|
31
|
-
to: to,
|
|
32
|
-
seq_from: seq_from,
|
|
33
|
-
seq_to: seq_to,
|
|
34
|
-
seed: options[:seed]
|
|
35
|
-
})
|
|
36
|
-
else
|
|
37
|
-
tap { puts "ERROR: at this time you can not save #{self.class.name}#extend! objects to protect against DB redundancy (and I'm lazy)." }
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def up_coord
|
|
42
|
-
[from, to].min
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def down_coord
|
|
46
|
-
[from, to].max
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def seq_from
|
|
50
|
-
up_coord + coord_window.min
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def seq_to
|
|
54
|
-
up_coord + coord_window.max
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def strand
|
|
58
|
-
plus_strand? ? :plus : :minus
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def plus_strand?
|
|
62
|
-
to > from
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def minus_strand?
|
|
66
|
-
!plus_strand?
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
alias_method :seq, def sequence
|
|
70
|
-
@raw_sequence ||= Rbfam::Utils.rna_sequence_from_entrez(accession, up_coord, coord_window)
|
|
71
|
-
@raw_sequence = minus_strand? ? @raw_sequence.complement : @raw_sequence
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def description
|
|
75
|
-
("%s %s %s" % [accession, from, to]).gsub(/\W+/, "_")
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def extend!(coord_options = {})
|
|
79
|
-
tap do
|
|
80
|
-
@extended = true
|
|
81
|
-
@coord_options = coord_options
|
|
82
|
-
remove_instance_variable(:@raw_sequence)
|
|
83
|
-
sequence
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
def extended?
|
|
88
|
-
@extended
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
def coord_window
|
|
92
|
-
# Options from coord_options ex: { length: 300, extend: 3 }, or { length: 250, extend: :both }
|
|
93
|
-
range = 0..(down_coord - up_coord)
|
|
94
|
-
|
|
95
|
-
if coord_options[:length] && coord_options[:direction]
|
|
96
|
-
if coord_options[:direction] == :both
|
|
97
|
-
Range.new(range.min - coord_options[:length], range.max + coord_options[:length])
|
|
98
|
-
else
|
|
99
|
-
case [coord_options[:direction], strand]
|
|
100
|
-
when [3, :plus], [5, :minus] then Range.new(range.min, range.max + coord_options[:length])
|
|
101
|
-
when [5, :plus], [3, :minus] then Range.new(range.min - coord_options[:length], range.max)
|
|
102
|
-
else puts "WARNING: value for :direction key in sequence retrieval needs to be one of 5, 3, :both - found (%s)" % coord_options[:direction].inspect
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
else
|
|
106
|
-
range
|
|
107
|
-
end
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
def inspect
|
|
111
|
-
"#<Rbfam::Sequence #{description} #{seq[0, 20] + ('...' if seq.length > 20)}>"
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
end
|
data/lib/rbfam/modules/utils.rb
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
module Rbfam
|
|
2
|
-
module Utils
|
|
3
|
-
class << self
|
|
4
|
-
def simple_rna_sequence(id, from, to)
|
|
5
|
-
sequence = rna_sequence_from_entrez(id, [from, to].min, 0..((to - from).abs))
|
|
6
|
-
|
|
7
|
-
to < from ? sequence.complement : sequence
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def rna_sequence_from_entrez(id, position, window, buffer_size = 0)
|
|
11
|
-
na_sequence_from_entrez(id, position, window, buffer_size).rna
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def na_sequence_from_entrez(id, position, window, buffer_size = 0)
|
|
15
|
-
Bio::Sequence::NA.new(sequence_from_entrez(id, position, Range.new(window.min - buffer_size, window.max + buffer_size)).seq)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def aa_sequence_from_entrez(id, position, window)
|
|
19
|
-
Bio::Sequence::AA.new(sequence_from_entrez(id, position, window).seq)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def sequence_from_entrez(id, position, window)
|
|
23
|
-
puts "Retrieving sequence from Entrez: using nuccore DB (id: #{id}, seq_start: #{position + window.min}, seq_stop: #{position + window.max})"
|
|
24
|
-
puts "> True starting position: #{position} with window #{window.min} to #{window.max}"
|
|
25
|
-
|
|
26
|
-
fasta = Entrez.EFetch("nuccore", {
|
|
27
|
-
id: id,
|
|
28
|
-
seq_start: position + window.min,
|
|
29
|
-
seq_stop: position + window.max,
|
|
30
|
-
retmode: :fasta,
|
|
31
|
-
rettype: :text
|
|
32
|
-
}).response.body
|
|
33
|
-
|
|
34
|
-
Bio::FastaFormat.new(fasta)
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
require "mysql2"
|
|
2
|
-
require "active_record"
|
|
3
|
-
|
|
4
|
-
module Rbfam
|
|
5
|
-
module DB
|
|
6
|
-
class Sequence < ActiveRecord::Base
|
|
7
|
-
belongs_to :alignment
|
|
8
|
-
|
|
9
|
-
validates_uniqueness_of :accession, scope: [:stripped_sequence, :from, :to]
|
|
10
|
-
|
|
11
|
-
def self.connect
|
|
12
|
-
ActiveRecord::Base.establish_connection(config = { adapter: "mysql2", username: "root", reconnect: true })
|
|
13
|
-
|
|
14
|
-
unless ActiveRecord::Base.connection.execute("show databases").to_a.inject(&:+).include?("rbfam")
|
|
15
|
-
ActiveRecord::Base.connection.create_database("rbfam")
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
ActiveRecord::Base.establish_connection(config.merge(database: "rbfam"))
|
|
19
|
-
|
|
20
|
-
inline_rails if defined?(inline_rails)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def to_rbfam(family = nil)
|
|
24
|
-
# Should use a singleton pattern here to look up the family.
|
|
25
|
-
::Rbfam::Sequence.new(family || Rbfam::Family.new(family), accession, from, to, { sequence: stripped_sequence })
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
class Alignment < ActiveRecord::Base
|
|
30
|
-
belongs_to :family
|
|
31
|
-
has_many :sequences
|
|
32
|
-
|
|
33
|
-
self.table_name = "alignments"
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
class Family < ActiveRecord::Base
|
|
37
|
-
has_many :alignments
|
|
38
|
-
has_many :sequences, through: :alignment
|
|
39
|
-
|
|
40
|
-
self.table_name = "families"
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
Rbfam::DB::Sequence.connect
|
data/load_rbfam_seed.rb
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
require "rbfam"
|
|
2
|
-
|
|
3
|
-
entries = Bio::Stockholm::Reader.parse_from_file("rfam_12.seed.utf8") and nil
|
|
4
|
-
|
|
5
|
-
Rbfam.connect(config: { adapter: "mysql2", database: "rbfam", username: "root", password: "" })
|
|
6
|
-
|
|
7
|
-
class Family < ActiveRecord::Base; has_one :alignment; end
|
|
8
|
-
class Alignment < ActiveRecord::Base; belongs_to :family; end
|
|
9
|
-
class Sequence < ActiveRecord::Base; belongs_to :alignment; end
|
|
10
|
-
|
|
11
|
-
Parallel.each(entries, progress: "Populating MySQL") do |stockholm|
|
|
12
|
-
family = Family.find_or_create_by(name: stockholm.gf_features["AC"], description: stockholm.gf_features["DE"])
|
|
13
|
-
|
|
14
|
-
alignment = Alignment.find_or_create_by(family: family) do |alignment|
|
|
15
|
-
alignment.stockholm = stockholm.to_yaml
|
|
16
|
-
alignment.consensus_structure = stockholm.gc_features["SS_cons"].gsub(?<, ?().gsub(?>, ?))
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
stockholm.records.reject { |key, _| key == ?# }.each do |identifier, record|
|
|
20
|
-
accession, from, to = identifier.split(/[\/-]/)
|
|
21
|
-
|
|
22
|
-
Sequence.find_or_create_by(alignment: alignment, accession: accession, from: from, to: to) do |sequence|
|
|
23
|
-
raw_sequence = record.sequence.upcase
|
|
24
|
-
sequence.stripped_sequence = raw_sequence.gsub(/[^AUGC]/, "")
|
|
25
|
-
sequence.alignment_sequence = raw_sequence
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end and nil
|