rbbt-entities 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,7 @@
1
1
  require 'rbbt/annotations'
2
2
 
3
- module Entity
3
+ module Entity
4
+
4
5
  class << self
5
6
  attr_accessor :formats, :entity_property_cache, :entity_list_cache
6
7
  end
@@ -12,33 +13,20 @@ module Entity
12
13
  UNPERSISTED_PREFIX = "entity_unpersisted_property_"
13
14
 
14
15
  def self.extended(base)
15
- base.extend Annotation unless Annotation === base
16
-
17
-
16
+ base.extend Annotation
18
17
  Entity.formats[base.to_s] = base
18
+
19
19
  base.module_eval do
20
20
  attr_accessor :_ary_property_cache
21
21
 
22
+ def _ary_property_cache
23
+ @_ary_property_cache ||= {}
24
+ end
25
+
22
26
  if not methods.include? "prev_entity_extended"
23
27
  class << self
24
28
  attr_accessor :template, :list_template, :action_template, :list_action_template, :keep_id
25
- alias prev_entity_extended extended
26
29
  end
27
-
28
- def self.extended(data)
29
- prev_entity_extended(data)
30
-
31
- data._ary_property_cache = {}
32
-
33
- if Array === data and
34
- not AnnotatedArray === data and
35
- not (data.compact.first != nil and Annotated === data.compact.first and (data.annotation_types - data.compact.first.annotation_types).any?)
36
-
37
- data.extend AnnotatedArray
38
- end
39
-
40
- data
41
- end
42
30
  end
43
31
 
44
32
  def self.format=(formats)
@@ -69,7 +57,7 @@ module Entity
69
57
  end
70
58
  end
71
59
 
72
- def clean_annotations
60
+ def clean_annotations_new
73
61
  case
74
62
  when self.nil?
75
63
  nil
@@ -143,7 +131,7 @@ module Entity
143
131
  case
144
132
  when Array === self
145
133
  self.send(ary_name, *args)
146
- when (Array === self.container and self.container.respond_to? ary_name)
134
+ when (Array === self.container and not self.container_index.nil? and self.container.respond_to? ary_name)
147
135
  cache_code = Misc.hash2md5({:name => ary_name, :args => args})
148
136
  res = (self.container._ary_property_cache[cache_code] ||= self.container.send(name, *args))
149
137
  if Hash === res
@@ -34,12 +34,16 @@ module GenomicMutation
34
34
  #persist :guess_watson
35
35
 
36
36
  def watson
37
- if @watson.nil? and Array === self
38
- @watson = :missing
39
- @watson = guess_watson
37
+ if @current_watson.nil?
38
+ current = annotation_values[:watson]
39
+ if current.nil? and Array === self
40
+ watson = current = guess_watson
41
+ else
42
+ current
43
+ end
44
+ @current_watson = current
40
45
  end
41
- @watson = false if @watson == "false"
42
- @watson
46
+ @current_watson
43
47
  end
44
48
 
45
49
  def orig_watson
@@ -274,16 +278,21 @@ module GenomicMutation
274
278
  genes = nil
275
279
  genes = genes_tsv.chunked_values_at self
276
280
  Gene.setup(genes, "Ensembl Gene ID", organism)
281
+ genes
277
282
  end
278
283
  #persist :_ary_genes
279
284
 
280
285
  property :affected_genes => :array2single do
281
286
  _mutated_isoforms = mutated_isoforms
287
+
282
288
  mi_gene = Misc.process_to_hash(MutatedIsoform.setup(_mutated_isoforms.compact.flatten.uniq, organism)){|mis| mis.protein.gene}
283
- from_protein = mutated_isoforms.collect{|mis|
289
+
290
+ _mutated_isoforms = _mutated_isoforms.clean_annotations if _mutated_isoforms.respond_to? :clean_annotations
291
+ from_protein = _mutated_isoforms.collect{|mis|
284
292
  genes = mis.nil? ? [] : mi_gene.values_at(*mis).compact
285
293
  Gene.setup(genes.uniq, "Ensembl Gene ID", organism)
286
294
  }
295
+
287
296
  is_exon_junction = self.in_exon_junction?.zip(self.type).collect{|in_ex,type| in_ex and type != "none"}
288
297
  genes_with_altered_splicing = self.transcripts_with_affected_splicing.collect{|transcripts| transcripts.gene}
289
298
  from_protein.each_with_index do |list, i|
@@ -292,11 +301,11 @@ module GenomicMutation
292
301
  list.uniq!
293
302
  end
294
303
  end
304
+
295
305
  Gene.setup(from_protein, "Ensembl Gene ID", organism)
296
306
  end
297
307
  #persist :_ary_affected_genes
298
308
 
299
-
300
309
  property :relevant? => :array2single do
301
310
  affected_genes.collect{|list| list and list.any?}
302
311
  end
@@ -327,7 +336,10 @@ module GenomicMutation
327
336
  property :mutated_isoforms => :array2single do
328
337
  res = Sequence.job(:mutated_isoforms_for_genomic_mutations, jobname, :watson => watson, :organism => organism, :mutations => self.clean_annotations).run.chunked_values_at self
329
338
  res.each{|list| list.organism = organism unless list.nil?}
330
- res.compact[0].annotate res if res.compact[0].respond_to? :annotate
339
+ if Annotated === (first = res.compact[0])
340
+ first.annotate(res)
341
+ res.extend AnnotatedArray
342
+ end
331
343
  res
332
344
  end
333
345
  #persist :_ary_mutated_isoforms
@@ -468,6 +480,7 @@ module GenomicMutation
468
480
  end
469
481
 
470
482
  property :damaging? => :array2single do |*args|
483
+
471
484
  all_mutated_isoforms = mutated_isoforms.compact.flatten
472
485
  damaged_mutated_isoforms = all_mutated_isoforms.select{|mi| mi.damaged?(*args)}
473
486
  exon_junctions.zip(mutated_isoforms, self.type).collect do |exs, mis, type|
@@ -475,7 +488,6 @@ module GenomicMutation
475
488
  (Array === mis and (damaged_mutated_isoforms & mis).any?)
476
489
  end
477
490
  end
478
- #persist :damaging?
479
491
 
480
492
  property :worst_consequence => :array2single do |*args|
481
493
  gene = args.first
@@ -63,7 +63,7 @@ module Genotype
63
63
 
64
64
  def metagenotype
65
65
  organism = self.collect{|g| g.organism}.compact.first
66
- orig_watson = self.collect{|g| g.orig_watson}.compact.first
66
+ orig_watson = self.collect{|g| g.watson}.compact.first
67
67
  GenomicMutation.setup(self.dup.flatten, jobname, organism, orig_watson).extend Genotype
68
68
  end
69
69
 
@@ -16,7 +16,11 @@ module Transcript
16
16
  else
17
17
  @@enst2ensg[organism][transcript]
18
18
  end
19
- Gene.setup(res, "Ensembl Gene ID", organism) if defined? Gene
19
+
20
+ if defined? Gene
21
+ Gene.fast_setup(res, {:format => "Ensembl Gene ID", :organism => organism})
22
+ end
23
+
20
24
  res
21
25
  end
22
26
 
@@ -74,7 +74,14 @@ class TestGenomicMutation < Test::Unit::TestCase
74
74
  assert(SPLICING2.transcripts_with_affected_splicing.empty?)
75
75
  end
76
76
 
77
+ def test_genes_persist
77
78
 
79
+ GenomicMutation.with_persisted :genes do
80
+
81
+ m = MUTATION.annotate(MUTATION.dup)
82
+ assert AnnotatedArray === m.genes
83
+ end
84
+ end
78
85
  end
79
86
 
80
87
 
@@ -4,9 +4,19 @@ require 'rbbt/entity'
4
4
  require 'rbbt/util/tmpfile'
5
5
  require 'test/unit'
6
6
 
7
+ class TestA
8
+ attr_accessor :foo, :bar
9
+ def initialize(foo, bar)
10
+ @foo = foo
11
+ @bar = bar
12
+ end
13
+ end
14
+
7
15
  module ReversableString
8
16
  extend Entity
9
-
17
+
18
+ self.annotation :foo, :bar
19
+
10
20
  property :reverse_text_ary => :array do
11
21
  $count += 1
12
22
  self.collect{|s| s.reverse}
@@ -54,9 +64,9 @@ end
54
64
 
55
65
  class TestEntity < Test::Unit::TestCase
56
66
 
57
- def _test_property_ary
67
+ def test_property_ary
58
68
  a = ["String1", "String2"]
59
- a.extend ReversableString
69
+ ReversableString.setup(a)
60
70
 
61
71
  $count = 0
62
72
 
@@ -74,9 +84,9 @@ class TestEntity < Test::Unit::TestCase
74
84
  end
75
85
  end
76
86
 
77
- def _test_property_single
87
+ def test_property_single
78
88
  a = ["String1", "String2"]
79
- a.extend ReversableString
89
+ ReversableString.setup a
80
90
 
81
91
  $count = 0
82
92
 
@@ -86,9 +96,9 @@ class TestEntity < Test::Unit::TestCase
86
96
  assert_equal 3, $count
87
97
  end
88
98
 
89
- def _test_property_ary_p
99
+ def test_property_ary_p
90
100
  a = ["String1", "String2"]
91
- a.extend ReversableString
101
+ ReversableString.setup a
92
102
 
93
103
  $count = 0
94
104
 
@@ -97,9 +107,9 @@ class TestEntity < Test::Unit::TestCase
97
107
  assert_equal 1, $count
98
108
  end
99
109
 
100
- def _test_property_single_p
110
+ def test_property_single_p
101
111
  a = ["String1", "String2"]
102
- a.extend ReversableString
112
+ ReversableString.setup a
103
113
 
104
114
  $count = 0
105
115
 
@@ -109,9 +119,9 @@ class TestEntity < Test::Unit::TestCase
109
119
  assert_equal 2, $count
110
120
  end
111
121
 
112
- def _test_property_ary_p_array
122
+ def test_property_ary_p_array
113
123
  a = ["String1", "String2"]
114
- a.extend ReversableString
124
+ ReversableString.setup a
115
125
 
116
126
  $count = 0
117
127
 
@@ -121,9 +131,9 @@ class TestEntity < Test::Unit::TestCase
121
131
  assert_equal 1, $count
122
132
  end
123
133
 
124
- def _test_unpersist
134
+ def test_unpersist
125
135
  a = ["String1", "String2"]
126
- a.extend ReversableString
136
+ ReversableString.setup a
127
137
 
128
138
  # Before persist
129
139
  assert(! ReversableString.persisted?(:random))
@@ -150,7 +160,7 @@ class TestEntity < Test::Unit::TestCase
150
160
 
151
161
  end
152
162
 
153
- def _test_persist_annotations
163
+ def test_persist_annotations
154
164
  string = 'aaabbbccc'
155
165
  ReversableString.setup(string)
156
166
  assert_equal string.length, string.annotation_list.length
@@ -158,14 +168,25 @@ class TestEntity < Test::Unit::TestCase
158
168
  end
159
169
 
160
170
  def __test_performance
171
+ require 'rbbt/entity/gene'
172
+ Misc.profile(:min_percent => 2) do
173
+ 1000.times do
174
+ TestA.new "foo", "bar"
175
+ end
176
+ end
161
177
 
162
- require 'rbbt/workflow'
163
- Workflow.require_workflow "StudyExplorer"
178
+ Misc.profile(:min_percent => 2) do
179
+ 1000.times do
180
+ Gene.setup_positional("", "foo", "bar")
181
+ end
182
+ end
164
183
 
165
- s = Study.setup("CLL")
166
- mutations = s.cohort.metagenotype
167
- Misc.profile_html(:min_percent => 1) do
168
- mutated_isoforms = mutations.each{|m| m.genes.each{|g| g}}
184
+ Misc.benchmark(100000) do
185
+ Gene.setup("", :foo => "foo", :bar => "bar")
186
+ end
187
+
188
+ Misc.benchmark(100000) do
189
+ TestA.new "foo", "bar"
169
190
  end
170
191
  end
171
192
 
@@ -174,14 +195,21 @@ class TestEntity < Test::Unit::TestCase
174
195
  Workflow.require_workflow "StudyExplorer"
175
196
 
176
197
  s = Study.setup("CLL")
177
- mutations = s.cohort.metagenotype.mutated_isoforms
198
+ mutations = s.cohort.metagenotype
199
+
200
+ mis = mutations.mutated_isoforms.compact.flatten
201
+
202
+ Misc.profile(:min_percent => 1) do
203
+ mis.each{|m| m}
204
+ end
205
+
178
206
 
179
- Misc.benchmark(100) do
180
- mutations.each{|m| m}
207
+ Misc.benchmark(10) do
208
+ mis.each{|m| m}
181
209
  end
182
210
 
183
- Misc.benchmark(100) do
184
- mutations.clean_annotations.each{|m| m}
211
+ Misc.benchmark(10) do
212
+ mis.clean_annotations.each{|m| m}
185
213
  end
186
214
 
187
215
  m = mutations.first
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-entities
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-21 00:00:00.000000000 Z
12
+ date: 2013-01-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rbbt-util
@@ -65,13 +65,13 @@ files:
65
65
  - lib/rbbt/entity/pmid.rb
66
66
  - lib/rbbt/entity/protein.rb
67
67
  - lib/rbbt/entity/transcript.rb
68
- - test/test_helper.rb
69
- - test/rbbt/entity/test_gene.rb
70
- - test/rbbt/entity/test_genomic_mutation.rb
71
- - test/rbbt/entity/test_mutated_isoform.rb
68
+ - test/rbbt/test_entity.rb
72
69
  - test/rbbt/entity/test_protein.rb
70
+ - test/rbbt/entity/test_mutated_isoform.rb
73
71
  - test/rbbt/entity/test_pmid.rb
74
- - test/rbbt/test_entity.rb
72
+ - test/rbbt/entity/test_gene.rb
73
+ - test/rbbt/entity/test_genomic_mutation.rb
74
+ - test/test_helper.rb
75
75
  homepage: http://github.com/mikisvaz/rbbt-util
76
76
  licenses: []
77
77
  post_install_message:
@@ -97,10 +97,10 @@ signing_key:
97
97
  specification_version: 3
98
98
  summary: Entities for the Ruby Bioinformatics Toolkit (rbbt)
99
99
  test_files:
100
- - test/test_helper.rb
101
- - test/rbbt/entity/test_gene.rb
102
- - test/rbbt/entity/test_genomic_mutation.rb
103
- - test/rbbt/entity/test_mutated_isoform.rb
100
+ - test/rbbt/test_entity.rb
104
101
  - test/rbbt/entity/test_protein.rb
102
+ - test/rbbt/entity/test_mutated_isoform.rb
105
103
  - test/rbbt/entity/test_pmid.rb
106
- - test/rbbt/test_entity.rb
104
+ - test/rbbt/entity/test_gene.rb
105
+ - test/rbbt/entity/test_genomic_mutation.rb
106
+ - test/test_helper.rb