rbfam 0.2.2 → 12.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|