bio 1.4.2 → 1.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. data/.travis.yml +66 -0
  2. data/ChangeLog +989 -4524
  3. data/KNOWN_ISSUES.rdoc +67 -2
  4. data/README.rdoc +89 -23
  5. data/README_DEV.rdoc +93 -2
  6. data/RELEASE_NOTES.rdoc +167 -95
  7. data/Rakefile +199 -7
  8. data/bioruby.gemspec +27 -12
  9. data/bioruby.gemspec.erb +6 -3
  10. data/doc/ChangeLog-before-1.4.2 +5013 -0
  11. data/doc/RELEASE_NOTES-1.4.2.rdoc +132 -0
  12. data/doc/Tutorial.rd +21 -3
  13. data/doc/Tutorial.rd.html +20 -12
  14. data/etc/bioinformatics/seqdatabase.ini +13 -196
  15. data/gemfiles/Gemfile.travis-jruby1.8 +7 -0
  16. data/gemfiles/Gemfile.travis-jruby1.9 +10 -0
  17. data/gemfiles/Gemfile.travis-ruby1.8 +7 -0
  18. data/gemfiles/Gemfile.travis-ruby1.9 +10 -0
  19. data/gemfiles/modify-Gemfile.rb +28 -0
  20. data/gemfiles/prepare-gemspec.rb +25 -0
  21. data/lib/bio/alignment.rb +1 -1
  22. data/lib/bio/appl/bl2seq/report.rb +3 -3
  23. data/lib/bio/appl/blast/ddbj.rb +0 -3
  24. data/lib/bio/appl/blast/format0.rb +4 -22
  25. data/lib/bio/appl/blast/genomenet.rb +33 -16
  26. data/lib/bio/appl/blast/ncbioptions.rb +8 -3
  27. data/lib/bio/appl/blast/remote.rb +6 -5
  28. data/lib/bio/appl/blast/report.rb +10 -6
  29. data/lib/bio/appl/blast/rpsblast.rb +3 -2
  30. data/lib/bio/appl/blast/wublast.rb +3 -3
  31. data/lib/bio/command.rb +118 -36
  32. data/lib/bio/data/na.rb +1 -1
  33. data/lib/bio/db/embl/embl.rb +74 -0
  34. data/lib/bio/db/embl/format_embl.rb +0 -4
  35. data/lib/bio/db/fasta.rb +57 -45
  36. data/lib/bio/db/fasta/defline.rb +1 -1
  37. data/lib/bio/db/fasta/format_fasta.rb +0 -4
  38. data/lib/bio/db/fasta/format_qual.rb +0 -5
  39. data/lib/bio/db/fastq/format_fastq.rb +0 -1
  40. data/lib/bio/db/genbank/format_genbank.rb +0 -4
  41. data/lib/bio/db/gff.rb +41 -12
  42. data/lib/bio/db/kegg/genes.rb +3 -3
  43. data/lib/bio/db/kegg/kgml.rb +465 -64
  44. data/lib/bio/db/newick.rb +0 -244
  45. data/lib/bio/db/pdb.rb +1 -4
  46. data/lib/bio/db/pdb/atom.rb +3 -2
  47. data/lib/bio/db/pdb/chain.rb +2 -3
  48. data/lib/bio/db/pdb/chemicalcomponent.rb +3 -2
  49. data/lib/bio/db/pdb/model.rb +2 -2
  50. data/lib/bio/db/pdb/pdb.rb +2 -1
  51. data/lib/bio/db/pdb/residue.rb +2 -2
  52. data/lib/bio/db/pdb/utils.rb +7 -4
  53. data/lib/bio/db/phyloxml/phyloxml_parser.rb +52 -5
  54. data/lib/bio/feature.rb +2 -3
  55. data/lib/bio/io/flatfile/autodetection.rb +1 -1
  56. data/lib/bio/io/flatfile/buffer.rb +84 -0
  57. data/lib/bio/sequence.rb +6 -4
  58. data/lib/bio/sequence/aa.rb +3 -5
  59. data/lib/bio/sequence/adapter.rb +6 -6
  60. data/lib/bio/sequence/common.rb +3 -3
  61. data/lib/bio/sequence/compat.rb +2 -7
  62. data/lib/bio/sequence/dblink.rb +6 -5
  63. data/lib/bio/sequence/format.rb +0 -6
  64. data/lib/bio/sequence/format_raw.rb +0 -4
  65. data/lib/bio/sequence/generic.rb +3 -4
  66. data/lib/bio/sequence/na.rb +4 -6
  67. data/lib/bio/sequence/quality_score.rb +2 -0
  68. data/lib/bio/sequence/sequence_masker.rb +3 -0
  69. data/lib/bio/shell/core.rb +1 -0
  70. data/lib/bio/tree.rb +1 -2
  71. data/lib/bio/tree/output.rb +264 -0
  72. data/lib/bio/util/restriction_enzyme.rb +1 -3
  73. data/lib/bio/util/restriction_enzyme/analysis.rb +8 -5
  74. data/lib/bio/util/restriction_enzyme/analysis_basic.rb +4 -3
  75. data/lib/bio/util/restriction_enzyme/cut_symbol.rb +3 -2
  76. data/lib/bio/util/restriction_enzyme/dense_int_array.rb +3 -0
  77. data/lib/bio/util/restriction_enzyme/double_stranded.rb +3 -4
  78. data/lib/bio/util/restriction_enzyme/double_stranded/aligned_strands.rb +3 -4
  79. data/lib/bio/util/restriction_enzyme/double_stranded/cut_location_pair.rb +3 -4
  80. data/lib/bio/util/restriction_enzyme/double_stranded/cut_location_pair_in_enzyme_notation.rb +3 -4
  81. data/lib/bio/util/restriction_enzyme/double_stranded/cut_locations.rb +3 -4
  82. data/lib/bio/util/restriction_enzyme/double_stranded/cut_locations_in_enzyme_notation.rb +3 -4
  83. data/lib/bio/util/restriction_enzyme/range/cut_range.rb +3 -4
  84. data/lib/bio/util/restriction_enzyme/range/cut_ranges.rb +3 -4
  85. data/lib/bio/util/restriction_enzyme/range/horizontal_cut_range.rb +3 -4
  86. data/lib/bio/util/restriction_enzyme/range/sequence_range.rb +3 -4
  87. data/lib/bio/util/restriction_enzyme/range/sequence_range/calculated_cuts.rb +3 -4
  88. data/lib/bio/util/restriction_enzyme/range/sequence_range/fragment.rb +3 -4
  89. data/lib/bio/util/restriction_enzyme/range/sequence_range/fragments.rb +3 -4
  90. data/lib/bio/util/restriction_enzyme/range/vertical_cut_range.rb +3 -4
  91. data/lib/bio/util/restriction_enzyme/single_strand.rb +3 -3
  92. data/lib/bio/util/restriction_enzyme/single_strand/cut_locations_in_enzyme_notation.rb +3 -4
  93. data/lib/bio/util/restriction_enzyme/single_strand_complement.rb +3 -4
  94. data/lib/bio/util/restriction_enzyme/sorted_num_array.rb +3 -0
  95. data/lib/bio/util/restriction_enzyme/string_formatting.rb +3 -4
  96. data/lib/bio/version.rb +11 -2
  97. data/sample/seqdatabase.ini +210 -0
  98. data/test/bioruby_test_helper.rb +37 -12
  99. data/test/data/KEGG/test.kgml +37 -0
  100. data/test/data/command/echoarg2.bat +0 -0
  101. data/test/data/command/echoarg2.sh +4 -0
  102. data/test/functional/bio/test_command.rb +58 -28
  103. data/test/{functional → network}/bio/appl/blast/test_remote.rb +0 -0
  104. data/test/{functional → network}/bio/appl/test_blast.rb +0 -0
  105. data/test/{functional → network}/bio/appl/test_pts1.rb +0 -0
  106. data/test/{functional → network}/bio/io/test_ddbjrest.rb +0 -0
  107. data/test/{functional → network}/bio/io/test_ensembl.rb +0 -0
  108. data/test/{functional → network}/bio/io/test_pubmed.rb +0 -0
  109. data/test/{functional → network}/bio/io/test_soapwsdl.rb +0 -0
  110. data/test/{functional → network}/bio/io/test_togows.rb +0 -0
  111. data/test/network/bio/test_command.rb +35 -0
  112. data/test/runner.rb +16 -6
  113. data/test/unit/bio/appl/blast/test_report.rb +119 -0
  114. data/test/unit/bio/appl/blast/test_rpsblast.rb +1 -0
  115. data/test/unit/bio/data/test_na.rb +1 -1
  116. data/test/unit/bio/db/embl/test_embl.rb +2 -7
  117. data/test/unit/bio/db/embl/test_embl_rel89.rb +2 -7
  118. data/test/unit/bio/db/fasta/test_defline.rb +1 -1
  119. data/test/unit/bio/db/genbank/test_genpept.rb +1 -1
  120. data/test/unit/bio/db/kegg/test_drug.rb +1 -1
  121. data/test/unit/bio/db/kegg/test_genome.rb +1 -1
  122. data/test/unit/bio/db/kegg/test_glycan.rb +1 -1
  123. data/test/unit/bio/db/kegg/test_kgml.rb +1022 -0
  124. data/test/unit/bio/db/sanger_chromatogram/test_abif.rb +2 -1
  125. data/test/unit/bio/db/sanger_chromatogram/test_scf.rb +4 -2
  126. data/test/unit/bio/db/test_newick.rb +2 -0
  127. data/test/unit/bio/db/test_phyloxml.rb +54 -2
  128. data/test/unit/bio/db/test_phyloxml_writer.rb +15 -9
  129. data/test/unit/bio/db/test_soft.rb +1 -1
  130. data/test/unit/bio/io/flatfile/test_autodetection.rb +6 -0
  131. data/test/unit/bio/io/flatfile/test_buffer.rb +141 -0
  132. data/test/unit/bio/sequence/test_common.rb +36 -4
  133. data/test/unit/bio/sequence/test_na.rb +1 -1
  134. data/test/unit/bio/test_command.rb +9 -4
  135. data/test/unit/bio/test_sequence.rb +2 -2
  136. data/test/unit/bio/test_tree.rb +11 -11
  137. data/test/unit/bio/util/test_restriction_enzyme.rb +1 -1
  138. metadata +1428 -655
  139. data/rdoc.zsh +0 -8
@@ -71,10 +71,10 @@
71
71
 
72
72
  module Bio
73
73
 
74
- autoload :KEGGDB, 'bio/db'
75
- autoload :Locations, 'bio/location'
76
- autoload :Sequence, 'bio/sequence'
74
+ autoload :Locations, 'bio/location' unless const_defined?(:Locations)
75
+ autoload :Sequence, 'bio/sequence' unless const_defined?(:Sequence)
77
76
 
77
+ require 'bio/db'
78
78
  require 'bio/db/kegg/common'
79
79
 
80
80
  class KEGG
@@ -5,10 +5,9 @@
5
5
  # Toshiaki Katayama <k@bioruby.org>
6
6
  # License:: The Ruby License
7
7
  #
8
- # $Id: kgml.rb,v 1.7 2007/04/05 23:35:41 trevor Exp $
9
8
  #
10
9
 
11
- autoload :REXML, 'rexml/document'
10
+ require 'rexml/document'
12
11
 
13
12
  module Bio
14
13
  class KEGG
@@ -17,25 +16,42 @@ class KEGG
17
16
  #
18
17
  # See http://www.genome.jp/kegg/xml/ for more details on KGML.
19
18
  #
19
+ # === Note for older version users
20
+ # * Most of incompatible attribute names with KGML tags are now deprecated.
21
+ # Use the names of KGML tags instead of old incompatible names that will
22
+ # be removed in the future.
23
+ # * Bio::KGML::Entry#id (entry_id is deprecated)
24
+ # * Bio::KGML::Entry#type (category is deprecated)
25
+ # * Bio::KGML::Relation#entry1 (node1 is deprecated)
26
+ # * Bio::KGML::Relation#entry2 (node2 is deprecated)
27
+ # * Bio::KGML::Relation#type (rel is deprecated)
28
+ # * Bio::KGML::Reaction#name (entry_id is deprecated)
29
+ # * Bio::KGML::Reaction#type (direction is deprecated)
30
+ # * New class Bio::KGML::Graphics and new method Bio::KGML::Entry#graphics.
31
+ # Because two or more graphics elements may exist, following attribute
32
+ # methods in Bio::KGML::Entry are now deprecated and will be removed
33
+ # in the future. See rdoc of these methods for details.
34
+ # * Bio::KEGG::KGML::Entry#label
35
+ # * Bio::KEGG::KGML::Entry#shape
36
+ # * Bio::KEGG::KGML::Entry#x
37
+ # * Bio::KEGG::KGML::Entry#y
38
+ # * Bio::KEGG::KGML::Entry#width
39
+ # * Bio::KEGG::KGML::Entry#height
40
+ # * Bio::KEGG::KGML::Entry#fgcolor
41
+ # * Bio::KEGG::KGML::Entry#bgcolor
42
+ # * Incompatible changes: Bio::KEGG::KGML::Reaction#substrates now returns
43
+ # an array containing Bio::KEGG::KGML::Substrate objects, and
44
+ # Bio::KEGG::KGML::Reaction#products now returns an array containing
45
+ # Bio::KEGG::KGML::Product objects. The changes enable us to get id of
46
+ # substrates and products.
47
+ #
20
48
  # === Incompatible attribute names with KGML tags
21
49
  #
22
- # <entry>
23
- # :id -> :entry_id
24
- # :type -> :category
50
+ # <entry>
25
51
  # :map -> :pathway
26
52
  # names()
27
- # <graphics>
28
- # :name -> :label
29
- # :type -> :shape
30
- # <relation>
31
- # :entry1 -> :node1
32
- # :entry2 -> :node2
33
- # :type -> :rel
34
53
  # <subtype>
35
54
  # edge()
36
- # <reaction>
37
- # :name -> :entry_id
38
- # :type -> :direction
39
55
  #
40
56
  # === Examples
41
57
  #
@@ -52,21 +68,22 @@ class KEGG
52
68
  #
53
69
  # kgml.entries.each do |entry|
54
70
  # # <entry> attributes
55
- # puts entry.entry_id
71
+ # puts entry.id
56
72
  # puts entry.name
57
- # puts entry.category
73
+ # puts entry.type
58
74
  # puts entry.link
59
75
  # puts entry.reaction
60
- # puts entry.pathway
61
76
  # # <graphics> attributes
62
- # puts entry.label # name
63
- # puts entry.shape # type
64
- # puts entry.x
65
- # puts entry.y
66
- # puts entry.width
67
- # puts entry.height
68
- # puts entry.fgcolor
69
- # puts entry.bgcolor
77
+ # entry.graphics.each do |graphics|
78
+ # puts graphics.name
79
+ # puts graphics.type
80
+ # puts graphics.x
81
+ # puts graphics.y
82
+ # puts graphics.width
83
+ # puts graphics.height
84
+ # puts graphics.fgcolor
85
+ # puts graphics.bgcolor
86
+ # end
70
87
  # # <component> attributes
71
88
  # puts entry.components
72
89
  # # methood
@@ -75,11 +92,9 @@ class KEGG
75
92
  #
76
93
  # kgml.relations.each do |relation|
77
94
  # # <relation> attributes
78
- # puts relation.node1 # entry1
79
- # puts relation.node2 # entry2
80
- # puts relation.rel # type
81
- # # method
82
- # puts relation.edge
95
+ # puts relation.entry1
96
+ # puts relation.entry2
97
+ # puts relation.type
83
98
  # # <subtype> attributes
84
99
  # puts relation.name
85
100
  # puts relation.value
@@ -87,11 +102,12 @@ class KEGG
87
102
  #
88
103
  # kgml.reactions.each do |reaction|
89
104
  # # <reaction> attributes
90
- # puts reaction.entry_id # name
91
- # puts reaction.direction # type
105
+ # puts reaction.name
106
+ # puts reaction.type
92
107
  # # <substrate> attributes
93
- # reaction.substrates.each do |entry_id|
94
- # puts entry_id
108
+ # reaction.substrates.each do |substrate|
109
+ # puts substrate.id
110
+ # puts substrate.name
95
111
  # # <alt> attributes
96
112
  # altnames = reaction.alt[entry_id]
97
113
  # altnames.each do |name|
@@ -99,8 +115,9 @@ class KEGG
99
115
  # end
100
116
  # end
101
117
  # # <product> attributes
102
- # reaction.products.each do |entry_id|
103
- # puts entry_id
118
+ # reaction.products.each do |product|
119
+ # puts product.id
120
+ # puts product.name
104
121
  # # <alt> attributes
105
122
  # altnames = reaction.alt[entry_id]
106
123
  # altnames.each do |name|
@@ -109,8 +126,18 @@ class KEGG
109
126
  # end
110
127
  # end
111
128
  #
129
+ # === References
130
+ #
131
+ # * http://www.genome.jp/kegg/xml/docs/
132
+ #
112
133
  class KGML
113
134
 
135
+ # Creates a new KGML object.
136
+ #
137
+ # ---
138
+ # *Arguments*:
139
+ # * (required) _str_: String containing xml data
140
+ # *Returns*:: Bio::KEGG::KGML object
114
141
  def initialize(xml)
115
142
  dom = REXML::Document.new(xml)
116
143
  parse_root(dom)
@@ -118,30 +145,386 @@ class KGML
118
145
  parse_relation(dom)
119
146
  parse_reaction(dom)
120
147
  end
121
- attr_reader :name, :org, :number, :title, :image, :link
122
- attr_accessor :entries, :relations, :reactions
123
148
 
149
+ # KEGG-style ID string of this pathway map (String or nil)
150
+ # ('pathway' element)
151
+ attr_reader :name
152
+
153
+ # "ko" (KEGG Orthology), "ec" (KEGG ENZYME),
154
+ # or the KEGG 3-letter organism code (String or nil)
155
+ # ('pathway' element)
156
+ attr_reader :org
157
+
158
+ # map number (String or nil)
159
+ # ('pathway' element)
160
+ attr_reader :number
161
+
162
+ # title (String or nil)
163
+ # ('pathway' element)
164
+ attr_reader :title
165
+
166
+ # image URL of this pathway map (String or nil)
167
+ # ('pathway' element)
168
+ attr_reader :image
169
+
170
+ # information URL of this pathway map (String or nil)
171
+ # ('pathway' element)
172
+ attr_reader :link
173
+
174
+ # entry elements (Array containing KGML::Entry objects, or nil)
175
+ attr_accessor :entries
176
+
177
+ # relation elements (Array containing KGML::Relations objects, or nil)
178
+ attr_accessor :relations
179
+
180
+ # reaction elements (Array containing KGML::Reactions objects, or nil)
181
+ attr_accessor :reactions
182
+
183
+ # Bio::KEGG:Entry contains an entry element in the KGML.
124
184
  class Entry
125
- attr_accessor :entry_id, :name, :category, :link, :reaction, :pathway
126
- attr_accessor :label, :shape, :x, :y, :width, :height, :fgcolor, :bgcolor
185
+
186
+ # ID of this entry in this pathway map (Integer or nil).
187
+ # ('id' attribute in 'entry' element)
188
+ attr_accessor :id
189
+
190
+ alias entry_id id
191
+ alias entry_id= id=
192
+
193
+ # KEGG-style ID string of this entry (String or nil)
194
+ attr_accessor :name
195
+
196
+ # type of this entry (String or nil).
197
+ # Normally one of the following:
198
+ # * "ortholog"
199
+ # * "enzyme"
200
+ # * "reaction"
201
+ # * "gene"
202
+ # * "group"
203
+ # * "compound"
204
+ # * "map"
205
+ # See http://www.genome.jp/kegg/xml/docs/ for details.
206
+ # ('type' attribute in 'entry' element)
207
+ attr_accessor :type
208
+
209
+ alias category type
210
+ alias category= type=
211
+
212
+ # URL pointing information about this entry (String or nil)
213
+ attr_accessor :link
214
+
215
+ # KEGG-style ID string of this reaction (String or nil)
216
+ attr_accessor :reaction
217
+
218
+ # (Deprecated?) ('map' attribute in 'entry' element)
219
+ attr_accessor :pathway
220
+
221
+ # (private) get an attribute value in the graphics[-1] object
222
+ def _graphics_attr(attr)
223
+ if self.graphics then
224
+ g = self.graphics[-1]
225
+ g ? g.__send__(attr) : nil
226
+ else
227
+ nil
228
+ end
229
+ end
230
+ private :_graphics_attr
231
+
232
+ # (private) get an attribute value in the graphics[-1] object
233
+ def _graphics_set_attr(attr, val)
234
+ self.graphics ||= []
235
+ unless g = self.graphics[-1] then
236
+ g = Graphics.new
237
+ self.graphics.push(g)
238
+ end
239
+ g.__send__(attr, val)
240
+ end
241
+ private :_graphics_set_attr
242
+
243
+ # Deprecated.
244
+ # Same as self.graphics[-1].name (additional nil checks may be needed).
245
+ #
246
+ # label of the 'graphics' element (String or nil)
247
+ # ('name' attribute in 'graphics' element)
248
+ def label
249
+ _graphics_attr(:name)
250
+ end
251
+
252
+ # Deprecated.
253
+ # Same as self.graphics[-1].name= (additional nil checks may be needed).
254
+ #
255
+ def label=(val)
256
+ _graphics_set_attr(:name=, val)
257
+ end
258
+
259
+ # Deprecated.
260
+ # Same as self.graphics[-1].type (additional nil checks may be needed).
261
+ #
262
+ # shape of the 'graphics' element (String or nil)
263
+ # Normally one of the following:
264
+ # * "rectangle"
265
+ # * "circle"
266
+ # * "roundrectangle"
267
+ # * "line"
268
+ # If not specified, "rectangle" is the default value.
269
+ # ('type' attribute in 'graphics' element)
270
+ def shape
271
+ _graphics_attr(:type)
272
+ end
273
+
274
+ # Deprecated.
275
+ # Same as self.graphics[-1].type= (additional nil checks may be needed).
276
+ #
277
+ def shape=(val)
278
+ _graphics_set_attr(:type=, val)
279
+ end
280
+
281
+ # Deprecated.
282
+ # Same as self.graphics[-1].x (additional nil checks may be needed).
283
+ #
284
+ # X axis position (Integer or nil) ('graphics' element)
285
+ def x
286
+ _graphics_attr(:x)
287
+ end
288
+
289
+ # Deprecated.
290
+ # Same as self.graphics[-1].x= (additional nil checks may be needed).
291
+ #
292
+ def x=(val)
293
+ _graphics_set_attr(:x=, val)
294
+ end
295
+
296
+ # Deprecated.
297
+ # Same as self.graphics[-1].y (additional nil checks may be needed).
298
+ #
299
+ # Y axis position (Integer or nil) ('graphics' element)
300
+ def y
301
+ _graphics_attr(:y)
302
+ end
303
+
304
+ # Deprecated.
305
+ # Same as self.graphics[-1].y= (additional nil checks may be needed).
306
+ #
307
+ def y=(val)
308
+ _graphics_set_attr(:y=, val)
309
+ end
310
+
311
+ # Deprecated.
312
+ # Same as self.graphics[-1].width (additional nil checks may be needed).
313
+ #
314
+ # width (Integer or nil) ('graphics' element)
315
+ def width
316
+ _graphics_attr(:width)
317
+ end
318
+
319
+ # Deprecated.
320
+ # Same as self.graphics[-1].width= (additional nil checks may be needed).
321
+ #
322
+ def width=(val)
323
+ _graphics_set_attr(:width=, val)
324
+ end
325
+
326
+ # Deprecated.
327
+ # Same as self.graphics[-1].height (additional nil checks may be needed).
328
+ #
329
+ # height (Integer or nil) ('graphics' element)
330
+ def height
331
+ _graphics_attr(:height)
332
+ end
333
+
334
+ # Deprecated.
335
+ # Same as self.graphics[-1].height= (additional nil checks may be needed).
336
+ #
337
+ def height=(val)
338
+ _graphics_set_attr(:height=, val)
339
+ end
340
+
341
+ # Deprecated.
342
+ # Same as self.graphics[-1].fgcolor (additional nil checks may be needed).
343
+ #
344
+ # foreground color (String or nil) ('graphics' element)
345
+ def fgcolor
346
+ _graphics_attr(:fgcolor)
347
+ end
348
+
349
+ # Deprecated.
350
+ # Same as self.graphics[-1].fgcolor= (additional nil checks may be needed).
351
+ #
352
+ def fgcolor=(val)
353
+ _graphics_set_attr(:fgcolor=, val)
354
+ end
355
+
356
+ # Deprecated.
357
+ # Same as self.graphics[-1].bgcolor (additional nil checks may be needed).
358
+ #
359
+ # background color (String or nil) ('graphics' element)
360
+ def bgcolor
361
+ _graphics_attr(:bgcolor)
362
+ end
363
+
364
+ # Deprecated.
365
+ # Same as self.graphics[-1].bgcolor= (additional nil checks may be needed).
366
+ #
367
+ def bgcolor=(val)
368
+ _graphics_set_attr(:bgcolor=, val)
369
+ end
370
+
371
+ # graphics elements included in this entry
372
+ # (Array containing Graphics objects, or nil)
373
+ attr_accessor :graphics
374
+
375
+ # component elements included in this entry
376
+ # (Array containing Integer objects, or nil)
127
377
  attr_accessor :components
378
+
379
+ # the "name" attribute may contain multiple names separated
380
+ # with space characters. This method returns the names
381
+ # as an array. (Array containing String objects)
128
382
  def names
129
383
  @name.split(/\s+/)
130
384
  end
131
385
  end
132
386
 
387
+ # Bio::KEGG::KGML::Graphics contains a 'graphics' element in the KGML.
388
+ class Graphics
389
+ # label of the 'graphics' element (String or nil)
390
+ attr_accessor :name
391
+
392
+ # shape of the 'graphics' element (String or nil)
393
+ # Normally one of the following:
394
+ # * "rectangle"
395
+ # * "circle"
396
+ # * "roundrectangle"
397
+ # * "line"
398
+ # If not specified, "rectangle" is the default value.
399
+ attr_accessor :type
400
+
401
+ # X axis position (Integer or nil)
402
+ attr_accessor :x
403
+
404
+ # Y axis position (Integer or nil)
405
+ attr_accessor :y
406
+
407
+ # polyline coordinates
408
+ # (Array containing Array of [ x, y ] pair of Integer values)
409
+ attr_accessor :coords
410
+
411
+ # width (Integer or nil)
412
+ attr_accessor :width
413
+
414
+ # height (Integer or nil)
415
+ attr_accessor :height
416
+
417
+ # foreground color (String or nil)
418
+ attr_accessor :fgcolor
419
+
420
+ # background color (String or nil)
421
+ attr_accessor :bgcolor
422
+ end #class Graphics
423
+
424
+ # Bio::KEGG::KGML::Relation contains a relation element in the KGML.
133
425
  class Relation
134
- attr_accessor :node1, :node2, :rel
135
- attr_accessor :name, :value
426
+
427
+ # the first entry of the relation (Integer or nil)
428
+ # ('entry1' attribute in 'relation' element)
429
+ attr_accessor :entry1
430
+
431
+ alias node1 entry1
432
+ alias node1= entry1=
433
+
434
+ # the second entry of the relation (Integer or nil)
435
+ # ('entry2' attribute in 'relation' element)
436
+ attr_accessor :entry2
437
+
438
+ alias node2 entry2
439
+ alias node2= entry2=
440
+
441
+ # type of this relation (String or nil).
442
+ # Normally one of the following:
443
+ # * "ECrel"
444
+ # * "PPrel"
445
+ # * "GErel"
446
+ # * "PCrel"
447
+ # * "maplink"
448
+ # ('type' attribute in 'relation' element)
449
+ attr_accessor :type
450
+
451
+ alias rel type
452
+ alias rel= type=
453
+
454
+ # interaction and/or relation type (String or nil).
455
+ # See http://www.genome.jp/kegg/xml/docs/ for details.
456
+ # ('name' attribute in 'subtype' element)
457
+ attr_accessor :name
458
+
459
+ # interaction and/or relation information (String or nil).
460
+ # See http://www.genome.jp/kegg/xml/docs/ for details.
461
+ # ('value' attribute in 'subtype' element)
462
+ attr_accessor :value
463
+
464
+ # (Deprecated?)
136
465
  def edge
137
466
  @value.to_i
138
467
  end
139
468
  end
140
469
 
470
+ # Bio::KEGG::KGML::Reaction contains a reaction element in the KGML.
141
471
  class Reaction
142
- attr_accessor :entry_id, :direction
143
- attr_accessor :substrates, :products # Array
144
- attr_accessor :alt # Hash
472
+
473
+ # ID of this reaction (Integer or nil)
474
+ attr_accessor :id
475
+
476
+ # KEGG-stype ID string of this reaction (String or nil)
477
+ # ('name' attribute in 'reaction' element)
478
+ attr_accessor :name
479
+
480
+ alias entry_id name
481
+ alias entry_id= name=
482
+
483
+ # type of this reaction (String or nil).
484
+ # Normally "reversible" or "irreversible".
485
+ # ('type' attribute in 'reaction' element)
486
+ attr_accessor :type
487
+
488
+ alias direction type
489
+ alias direction= type=
490
+
491
+ # Substrates. Each substrate name is the KEGG-style ID string.
492
+ # (Array containing String objects, or nil)
493
+ attr_accessor :substrates
494
+
495
+ # Products. Each product name is the KEGG-style ID string.
496
+ # (Array containing String objects, or nil)
497
+ attr_accessor :products
498
+
499
+ # alt element (Hash)
500
+ attr_accessor :alt
501
+ end
502
+
503
+ # Bio::KEGG::KGML::SubstrateProduct contains a substrate element
504
+ # or a product element in the KGML.
505
+ #
506
+ # Please do not use SubstrateProduct directly.
507
+ # Instead, please use Substrate or Product class.
508
+ class SubstrateProduct
509
+ # ID of this substrate or product (Integer or nil)
510
+ attr_accessor :id
511
+
512
+ # name of this substrate or product (String or nil)
513
+ attr_accessor :name
514
+
515
+ # Creates a new object
516
+ def initialize(id = nil, name = nil)
517
+ @id ||= id
518
+ @name ||= name
519
+ end
520
+ end #class SubstrateProduct
521
+
522
+ # Bio::KEGG::KGML::Substrate contains a substrate element in the KGML.
523
+ class Substrate < SubstrateProduct
524
+ end
525
+
526
+ # Bio::KEGG::KGML::Product contains a product element in the KGML.
527
+ class Product < SubstrateProduct
145
528
  end
146
529
 
147
530
  private
@@ -162,24 +545,39 @@ class KGML
162
545
  dom.elements.each("/pathway/entry") { |node|
163
546
  attr = node.attributes
164
547
  entry = Entry.new
165
- entry.entry_id = attr["id"].to_i
166
- entry.name = attr["name"]
167
- entry.category = attr["type"]
548
+ entry.id = attr["id"].to_i
549
+ entry.name = attr["name"]
550
+ entry.type = attr["type"]
168
551
  # implied
169
552
  entry.link = attr["link"]
170
553
  entry.reaction = attr["reaction"]
171
554
  entry.pathway = attr["map"]
172
555
 
173
556
  node.elements.each("graphics") { |graphics|
557
+ g = Graphics.new
174
558
  attr = graphics.attributes
175
- entry.x = attr["x"].to_i
176
- entry.y = attr["y"].to_i
177
- entry.shape = attr["type"]
178
- entry.label = attr["name"]
179
- entry.width = attr["width"].to_i
180
- entry.height = attr["height"].to_i
181
- entry.fgcolor = attr["fgcolor"]
182
- entry.bgcolor = attr["bgcolor"]
559
+ g.x = attr["x"].to_i
560
+ g.y = attr["y"].to_i
561
+ g.type = attr["type"]
562
+ g.name = attr["name"]
563
+ g.width = attr["width"].to_i
564
+ g.height = attr["height"].to_i
565
+ g.fgcolor = attr["fgcolor"]
566
+ g.bgcolor = attr["bgcolor"]
567
+ if str = attr["coords"] then
568
+ coords = []
569
+ tmp = str.split(',')
570
+ tmp.collect! { |n| n.to_i }
571
+ while xx = tmp.shift
572
+ yy = tmp.shift
573
+ coords.push [ xx, yy ]
574
+ end
575
+ g.coords = coords
576
+ else
577
+ g.coords = nil
578
+ end
579
+ entry.graphics ||= []
580
+ entry.graphics.push g
183
581
  }
184
582
 
185
583
  node.elements.each("component") { |component|
@@ -198,9 +596,9 @@ class KGML
198
596
  dom.elements.each("/pathway/relation") { |node|
199
597
  attr = node.attributes
200
598
  relation = Relation.new
201
- relation.node1 = attr["entry1"].to_i
202
- relation.node2 = attr["entry2"].to_i
203
- relation.rel = attr["type"]
599
+ relation.entry1 = attr["entry1"].to_i
600
+ relation.entry2 = attr["entry2"].to_i
601
+ relation.type = attr["type"]
204
602
 
205
603
  node.elements.each("subtype") { |subtype|
206
604
  attr = subtype.attributes
@@ -217,24 +615,27 @@ class KGML
217
615
  dom.elements.each("/pathway/reaction") { |node|
218
616
  attr = node.attributes
219
617
  reaction = Reaction.new
220
- reaction.entry_id = attr["name"]
221
- reaction.direction = attr["type"]
618
+ reaction.id = attr["id"].to_i
619
+ reaction.name = attr["name"]
620
+ reaction.type = attr["type"]
222
621
 
223
622
  substrates = Array.new
224
623
  products = Array.new
225
624
  hash = Hash.new
226
625
 
227
626
  node.elements.each("substrate") { |substrate|
627
+ id = substrate.attributes["id"].to_i
228
628
  name = substrate.attributes["name"]
229
- substrates << name
629
+ substrates << Substrate.new(id, name)
230
630
  substrate.elements.each("alt") { |alt|
231
631
  hash[name] ||= Array.new
232
632
  hash[name] << alt.attributes["name"]
233
633
  }
234
634
  }
235
635
  node.elements.each("product") { |product|
636
+ id = product.attributes["id"].to_i
236
637
  name = product.attributes["name"]
237
- products << name
638
+ products << Product.new(id, name)
238
639
  product.elements.each("alt") { |alt|
239
640
  hash[name] ||= Array.new
240
641
  hash[name] << alt.attributes["name"]