bio 0.7.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.
Files changed (201) hide show
  1. data/bin/bioruby +107 -0
  2. data/bin/br_biofetch.rb +59 -0
  3. data/bin/br_bioflat.rb +294 -0
  4. data/bin/br_biogetseq.rb +57 -0
  5. data/bin/br_pmfetch.rb +431 -0
  6. data/doc/BioRuby.rd.ja +225 -0
  7. data/doc/Changes-0.7.rd +236 -0
  8. data/doc/Design.rd.ja +341 -0
  9. data/doc/KEGG_API.rd +1437 -0
  10. data/doc/KEGG_API.rd.ja +1399 -0
  11. data/doc/TODO.rd.ja +138 -0
  12. data/doc/Tutorial.rd +1138 -0
  13. data/doc/Tutorial.rd.ja +2110 -0
  14. data/etc/bioinformatics/seqdatabase.ini +210 -0
  15. data/lib/bio.rb +256 -0
  16. data/lib/bio/alignment.rb +1906 -0
  17. data/lib/bio/appl/bl2seq/report.rb +350 -0
  18. data/lib/bio/appl/blast.rb +269 -0
  19. data/lib/bio/appl/blast/format0.rb +1402 -0
  20. data/lib/bio/appl/blast/format8.rb +95 -0
  21. data/lib/bio/appl/blast/report.rb +652 -0
  22. data/lib/bio/appl/blast/rexml.rb +151 -0
  23. data/lib/bio/appl/blast/wublast.rb +553 -0
  24. data/lib/bio/appl/blast/xmlparser.rb +222 -0
  25. data/lib/bio/appl/blat/report.rb +392 -0
  26. data/lib/bio/appl/clustalw.rb +191 -0
  27. data/lib/bio/appl/clustalw/report.rb +154 -0
  28. data/lib/bio/appl/emboss.rb +68 -0
  29. data/lib/bio/appl/fasta.rb +262 -0
  30. data/lib/bio/appl/fasta/format10.rb +428 -0
  31. data/lib/bio/appl/fasta/format6.rb +37 -0
  32. data/lib/bio/appl/genscan/report.rb +570 -0
  33. data/lib/bio/appl/hmmer.rb +129 -0
  34. data/lib/bio/appl/hmmer/report.rb +556 -0
  35. data/lib/bio/appl/mafft.rb +222 -0
  36. data/lib/bio/appl/mafft/report.rb +119 -0
  37. data/lib/bio/appl/psort.rb +555 -0
  38. data/lib/bio/appl/psort/report.rb +473 -0
  39. data/lib/bio/appl/sim4.rb +134 -0
  40. data/lib/bio/appl/sim4/report.rb +501 -0
  41. data/lib/bio/appl/sosui/report.rb +166 -0
  42. data/lib/bio/appl/spidey/report.rb +604 -0
  43. data/lib/bio/appl/targetp/report.rb +283 -0
  44. data/lib/bio/appl/tmhmm/report.rb +238 -0
  45. data/lib/bio/command.rb +166 -0
  46. data/lib/bio/data/aa.rb +354 -0
  47. data/lib/bio/data/codontable.rb +740 -0
  48. data/lib/bio/data/na.rb +226 -0
  49. data/lib/bio/db.rb +340 -0
  50. data/lib/bio/db/aaindex.rb +280 -0
  51. data/lib/bio/db/embl/common.rb +332 -0
  52. data/lib/bio/db/embl/embl.rb +446 -0
  53. data/lib/bio/db/embl/sptr.rb +954 -0
  54. data/lib/bio/db/embl/swissprot.rb +32 -0
  55. data/lib/bio/db/embl/trembl.rb +31 -0
  56. data/lib/bio/db/embl/uniprot.rb +32 -0
  57. data/lib/bio/db/fantom.rb +604 -0
  58. data/lib/bio/db/fasta.rb +869 -0
  59. data/lib/bio/db/genbank/common.rb +299 -0
  60. data/lib/bio/db/genbank/ddbj.rb +34 -0
  61. data/lib/bio/db/genbank/genbank.rb +354 -0
  62. data/lib/bio/db/genbank/genpept.rb +73 -0
  63. data/lib/bio/db/genbank/refseq.rb +31 -0
  64. data/lib/bio/db/gff.rb +106 -0
  65. data/lib/bio/db/go.rb +497 -0
  66. data/lib/bio/db/kegg/brite.rb +51 -0
  67. data/lib/bio/db/kegg/cell.rb +88 -0
  68. data/lib/bio/db/kegg/compound.rb +130 -0
  69. data/lib/bio/db/kegg/enzyme.rb +125 -0
  70. data/lib/bio/db/kegg/expression.rb +173 -0
  71. data/lib/bio/db/kegg/genes.rb +293 -0
  72. data/lib/bio/db/kegg/genome.rb +362 -0
  73. data/lib/bio/db/kegg/glycan.rb +213 -0
  74. data/lib/bio/db/kegg/keggtab.rb +418 -0
  75. data/lib/bio/db/kegg/kgml.rb +299 -0
  76. data/lib/bio/db/kegg/ko.rb +178 -0
  77. data/lib/bio/db/kegg/reaction.rb +97 -0
  78. data/lib/bio/db/litdb.rb +131 -0
  79. data/lib/bio/db/medline.rb +317 -0
  80. data/lib/bio/db/nbrf.rb +199 -0
  81. data/lib/bio/db/pdb.rb +38 -0
  82. data/lib/bio/db/pdb/atom.rb +60 -0
  83. data/lib/bio/db/pdb/chain.rb +117 -0
  84. data/lib/bio/db/pdb/model.rb +106 -0
  85. data/lib/bio/db/pdb/pdb.rb +1682 -0
  86. data/lib/bio/db/pdb/residue.rb +122 -0
  87. data/lib/bio/db/pdb/utils.rb +234 -0
  88. data/lib/bio/db/prosite.rb +616 -0
  89. data/lib/bio/db/rebase.rb +417 -0
  90. data/lib/bio/db/transfac.rb +387 -0
  91. data/lib/bio/feature.rb +201 -0
  92. data/lib/bio/io/brdb.rb +103 -0
  93. data/lib/bio/io/das.rb +471 -0
  94. data/lib/bio/io/dbget.rb +212 -0
  95. data/lib/bio/io/ddbjxml.rb +614 -0
  96. data/lib/bio/io/fastacmd.rb +123 -0
  97. data/lib/bio/io/fetch.rb +114 -0
  98. data/lib/bio/io/flatfile.rb +496 -0
  99. data/lib/bio/io/flatfile/bdb.rb +266 -0
  100. data/lib/bio/io/flatfile/index.rb +1308 -0
  101. data/lib/bio/io/flatfile/indexer.rb +778 -0
  102. data/lib/bio/io/higet.rb +92 -0
  103. data/lib/bio/io/keggapi.rb +863 -0
  104. data/lib/bio/io/pubmed.rb +189 -0
  105. data/lib/bio/io/registry.rb +308 -0
  106. data/lib/bio/io/soapwsdl.rb +114 -0
  107. data/lib/bio/io/sql.rb +428 -0
  108. data/lib/bio/location.rb +650 -0
  109. data/lib/bio/pathway.rb +991 -0
  110. data/lib/bio/reference.rb +308 -0
  111. data/lib/bio/sequence.rb +593 -0
  112. data/lib/bio/shell.rb +51 -0
  113. data/lib/bio/shell/core.rb +512 -0
  114. data/lib/bio/shell/plugin/codon.rb +228 -0
  115. data/lib/bio/shell/plugin/entry.rb +85 -0
  116. data/lib/bio/shell/plugin/flatfile.rb +119 -0
  117. data/lib/bio/shell/plugin/keggapi.rb +187 -0
  118. data/lib/bio/shell/plugin/midi.rb +448 -0
  119. data/lib/bio/shell/plugin/obda.rb +63 -0
  120. data/lib/bio/shell/plugin/seq.rb +238 -0
  121. data/lib/bio/shell/session.rb +214 -0
  122. data/lib/bio/util/color_scheme.rb +214 -0
  123. data/lib/bio/util/color_scheme/buried.rb +78 -0
  124. data/lib/bio/util/color_scheme/helix.rb +78 -0
  125. data/lib/bio/util/color_scheme/hydropathy.rb +83 -0
  126. data/lib/bio/util/color_scheme/nucleotide.rb +50 -0
  127. data/lib/bio/util/color_scheme/strand.rb +78 -0
  128. data/lib/bio/util/color_scheme/taylor.rb +69 -0
  129. data/lib/bio/util/color_scheme/turn.rb +78 -0
  130. data/lib/bio/util/color_scheme/zappo.rb +69 -0
  131. data/lib/bio/util/contingency_table.rb +337 -0
  132. data/lib/bio/util/sirna.rb +306 -0
  133. data/lib/bioruby.rb +34 -0
  134. data/sample/biofetch.rb +475 -0
  135. data/sample/color_scheme_na.rb +99 -0
  136. data/sample/dbget +37 -0
  137. data/sample/fasta2tab.rb +99 -0
  138. data/sample/fsplit.rb +51 -0
  139. data/sample/gb2fasta.rb +31 -0
  140. data/sample/gb2tab.rb +325 -0
  141. data/sample/gbtab2mysql.rb +161 -0
  142. data/sample/genes2nuc.rb +33 -0
  143. data/sample/genes2pep.rb +33 -0
  144. data/sample/genes2tab.rb +81 -0
  145. data/sample/genome2rb.rb +29 -0
  146. data/sample/genome2tab.rb +76 -0
  147. data/sample/goslim.rb +311 -0
  148. data/sample/gt2fasta.rb +47 -0
  149. data/sample/pmfetch.rb +42 -0
  150. data/sample/pmsearch.rb +42 -0
  151. data/sample/psortplot_html.rb +222 -0
  152. data/sample/ssearch2tab.rb +96 -0
  153. data/sample/tdiary.rb +158 -0
  154. data/sample/tfastx2tab.rb +100 -0
  155. data/sample/vs-genes.rb +212 -0
  156. data/test/data/SOSUI/sample.report +11 -0
  157. data/test/data/TMHMM/sample.report +21 -0
  158. data/test/data/blast/eco:b0002.faa +15 -0
  159. data/test/data/blast/eco:b0002.faa.m0 +128 -0
  160. data/test/data/blast/eco:b0002.faa.m7 +65 -0
  161. data/test/data/blast/eco:b0002.faa.m8 +1 -0
  162. data/test/data/embl/AB090716.embl +65 -0
  163. data/test/data/genscan/sample.report +63 -0
  164. data/test/data/prosite/prosite.dat +2233 -0
  165. data/test/data/refseq/nm_126355.entret +64 -0
  166. data/test/data/uniprot/p53_human.uniprot +1456 -0
  167. data/test/runner.rb +10 -0
  168. data/test/unit/bio/appl/blast/test_report.rb +427 -0
  169. data/test/unit/bio/appl/blast/test_xmlparser.rb +400 -0
  170. data/test/unit/bio/appl/genscan/test_report.rb +195 -0
  171. data/test/unit/bio/appl/sosui/test_report.rb +94 -0
  172. data/test/unit/bio/appl/targetp/test_report.rb +159 -0
  173. data/test/unit/bio/appl/test_blast.rb +159 -0
  174. data/test/unit/bio/appl/test_fasta.rb +142 -0
  175. data/test/unit/bio/appl/tmhmm/test_report.rb +139 -0
  176. data/test/unit/bio/data/test_aa.rb +103 -0
  177. data/test/unit/bio/data/test_codontable.rb +120 -0
  178. data/test/unit/bio/data/test_na.rb +89 -0
  179. data/test/unit/bio/db/embl/test_common.rb +130 -0
  180. data/test/unit/bio/db/embl/test_embl.rb +227 -0
  181. data/test/unit/bio/db/embl/test_sptr.rb +268 -0
  182. data/test/unit/bio/db/embl/test_uniprot.rb +44 -0
  183. data/test/unit/bio/db/kegg/test_genes.rb +58 -0
  184. data/test/unit/bio/db/test_fasta.rb +263 -0
  185. data/test/unit/bio/db/test_gff.rb +140 -0
  186. data/test/unit/bio/db/test_prosite.rb +1450 -0
  187. data/test/unit/bio/io/test_ddbjxml.rb +87 -0
  188. data/test/unit/bio/io/test_soapwsdl.rb +45 -0
  189. data/test/unit/bio/shell/plugin/test_seq.rb +175 -0
  190. data/test/unit/bio/test_alignment.rb +1028 -0
  191. data/test/unit/bio/test_command.rb +71 -0
  192. data/test/unit/bio/test_db.rb +109 -0
  193. data/test/unit/bio/test_feature.rb +128 -0
  194. data/test/unit/bio/test_location.rb +51 -0
  195. data/test/unit/bio/test_pathway.rb +485 -0
  196. data/test/unit/bio/test_sequence.rb +386 -0
  197. data/test/unit/bio/test_shell.rb +31 -0
  198. data/test/unit/bio/util/test_color_scheme.rb +45 -0
  199. data/test/unit/bio/util/test_contingency_table.rb +106 -0
  200. data/test/unit/bio/util/test_sirna.rb +258 -0
  201. metadata +295 -0
@@ -0,0 +1,448 @@
1
+ #
2
+ # = bio/shell/plugin/midi.rb - Sequence to MIDI converter
3
+ #
4
+ # Copyright:: Copyright (C) 2003, 2005
5
+ # Natsuhiro Ichinose <ichinose@genome.ist.i.kyoto-u.ac.jp>,
6
+ # Toshiaki Katayama <k@bioruby.org>
7
+ # License:: LGPL
8
+ #
9
+ # $Id: midi.rb,v 1.6 2005/11/28 12:06:18 k Exp $
10
+ #
11
+ #--
12
+ #
13
+ # This library is free software; you can redistribute it and/or
14
+ # modify it under the terms of the GNU Lesser General Public
15
+ # License as published by the Free Software Foundation; either
16
+ # version 2 of the License, or (at your option) any later version.
17
+ #
18
+ # This library is distributed in the hope that it will be useful,
19
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
20
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
+ # Lesser General Public License for more details.
22
+ #
23
+ # You should have received a copy of the GNU Lesser General Public
24
+ # License along with this library; if not, write to the Free Software
25
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26
+ #
27
+ #++
28
+ #
29
+
30
+ #--
31
+ # *TODO*
32
+ # - add "Ohno" style
33
+ # - add a accessor to drum pattern
34
+ # - add a new feature to select music style (pop, trans, ryukyu, ...)
35
+ # - what is the base?
36
+ #++
37
+
38
+ class Bio::Sequence::NA
39
+
40
+ class MidiTrack
41
+
42
+ MidiProg = [
43
+ "Acoustic Grand Piano",
44
+ "Bright Acoustic Piano",
45
+ "Electric grand Piano",
46
+ "Honky Tonk Piano",
47
+ "Eiectric Piano 1",
48
+ "Electric Piano 2",
49
+ "Harpsichord",
50
+ "Clavinet",
51
+ "Celesra",
52
+ "Glockenspiel",
53
+ "Music Box",
54
+ "Vibraphone",
55
+ "Marimba",
56
+ "Xylophone",
57
+ "Tubular bells",
58
+ "Dulcimer",
59
+ "Drawbar Organ",
60
+ "Percussive Organ",
61
+ "Rock Organ",
62
+ "Church Organ",
63
+ "Reed Organ",
64
+ "Accordion",
65
+ "Harmonica",
66
+ "Tango Accordion",
67
+ "Nylon Accustic Guitar",
68
+ "Steel Acoustic Guitar",
69
+ "Jazz Electric Guitar",
70
+ "Ciean Electric Guitar",
71
+ "Muted Electric Guitar",
72
+ "Overdrive Guitar",
73
+ "Distorted Guitar",
74
+ "Guitar Harmonics",
75
+ "Acoustic Bass",
76
+ "Electric Fingered Bass",
77
+ "Electric Picked Bass",
78
+ "Fretless Bass",
79
+ "Slap Bass 1",
80
+ "Slap Bass 2",
81
+ "Syn Bass 1",
82
+ "Syn Bass 2",
83
+ "Violin",
84
+ "Viola",
85
+ "Cello",
86
+ "Contrabass",
87
+ "Tremolo Strings",
88
+ "Pizzicato Strings",
89
+ "Orchestral Harp",
90
+ "Timpani",
91
+ "String Ensemble 1",
92
+ "String Ensemble 2 (Slow)",
93
+ "Syn Strings 1",
94
+ "Syn Strings 2",
95
+ "Choir Aahs",
96
+ "Voice Oohs",
97
+ "Syn Choir",
98
+ "Orchestral Hit",
99
+ "Trumpet",
100
+ "Trombone",
101
+ "Tuba",
102
+ "Muted Trumpet",
103
+ "French Horn",
104
+ "Brass Section",
105
+ "Syn Brass 1",
106
+ "Syn Brass 2",
107
+ "Soprano Sax",
108
+ "Alto Sax",
109
+ "Tenor Sax",
110
+ "Baritone Sax",
111
+ "Oboe",
112
+ "English Horn",
113
+ "Bassoon",
114
+ "Clarinet",
115
+ "Piccolo",
116
+ "Flute",
117
+ "Recorder",
118
+ "Pan Flute",
119
+ "Bottle Blow",
120
+ "Shakuhachi",
121
+ "Whistle",
122
+ "Ocarina",
123
+ "Syn Square Wave",
124
+ "Syn Sawtooth Wave",
125
+ "Syn Calliope",
126
+ "Syn Chiff",
127
+ "Syn Charang",
128
+ "Syn Voice",
129
+ "Syn Fifths Sawtooth Wave",
130
+ "Syn Brass & Lead",
131
+ "New Age Syn Pad",
132
+ "Warm Syn Pad",
133
+ "Polysynth Syn Pad",
134
+ "Choir Syn Pad",
135
+ "Bowed Syn Pad",
136
+ "Metal Syn Pad",
137
+ "Halo Syn Pad",
138
+ "Sweep Syn Pad",
139
+ "SFX Rain",
140
+ "SFX Soundtrack",
141
+ "SFX Crystal",
142
+ "SFX Atmosphere",
143
+ "SFX Brightness",
144
+ "SFX Goblins",
145
+ "SFX Echoes",
146
+ "SFX Sci-fi",
147
+ "Sitar",
148
+ "Banjo",
149
+ "Shamisen",
150
+ "Koto",
151
+ "Kalimba",
152
+ "Bag Pipe",
153
+ "Fiddle",
154
+ "Shanai",
155
+ "Tinkle Bell",
156
+ "Agogo",
157
+ "Steel Drums",
158
+ "Woodblock",
159
+ "Taiko Drum",
160
+ "Melodic Tom",
161
+ "Syn Drum",
162
+ "Reverse Cymbal",
163
+ "Guitar Fret Noise",
164
+ "Breath Noise",
165
+ "Seashore",
166
+ "Bird Tweet",
167
+ "Telephone Ring",
168
+ "Helicopter",
169
+ "Applause",
170
+ "Gun Shot"
171
+ ]
172
+
173
+ Styles = {
174
+ # "Ohno" => {
175
+ # # http://home.hiroshima-u.ac.jp/cato/bunkakoryuron.html
176
+ # },
177
+ "Ichinose" => {
178
+ :tempo => 120,
179
+ :scale => [0, 2, 4, 5, 7, 9, 11],
180
+ :tones => [
181
+ {:prog => 9, :base => 60, :range => 2},
182
+ {:prog => 13, :base => 48, :range => 2},
183
+ {:prog => 41, :base => 48, :range => 2},
184
+ {:prog => 44, :base => 36, :range => 2},
185
+ ]
186
+ },
187
+ "Okinawan" => {
188
+ :tempo => 180,
189
+ :scale => [0,4,5,7,11],
190
+ :tones => [
191
+ {:prog => MidiProg.index("Harpsichord"), :base => 60, :range => 2},
192
+ {:prog => MidiProg.index("Dulcimer"), :base => 48, :range => 2},
193
+ {:prog => MidiProg.index("Fretless Base"), :base => 36, :range => 1},
194
+ ]
195
+ },
196
+ "Major" => {
197
+ :scale => [0,2,4,5,7,9,11],
198
+ },
199
+ "Minor" => {
200
+ :scale => [0,2,3,5,7,9,10],
201
+ },
202
+ "Harmonic minor" => {
203
+ :scale => [0,2,3,5,7,9,11],
204
+ },
205
+ "Whole tone" => {
206
+ :scale => [0,2,4,6,8,10],
207
+ },
208
+ "Half tone" => {
209
+ :scale => [0,1,2,3,4,5,6,7,8,9,10,11],
210
+ },
211
+ "Indian" => {
212
+ :scale => [0,1,4,5,7,8,11],
213
+ },
214
+ "Arabic" => {
215
+ :scale => [0,2,3,6,7,8,11],
216
+ },
217
+ "Spanish" => {
218
+ :scale => [0,1,3,4,5,7,8,10],
219
+ },
220
+ "Japanese" => {
221
+ :scale => [0,2,5,7,9],
222
+ },
223
+ }
224
+
225
+ def initialize(channel = 0, program = nil, base = nil, range = nil, scale = nil)
226
+ @channel = channel & 0xff
227
+ @program = program || 0
228
+ @base = base || 60
229
+ @range = range || 2
230
+ @scale = scale || [0, 2, 4, 5, 7, 9, 11]
231
+
232
+ @tunes = []
233
+ @tune = 0
234
+ @code = []
235
+ @time = 0
236
+
237
+ @range.times do |i|
238
+ @scale.each do |c|
239
+ @tunes.push c + i * 12
240
+ end
241
+ end
242
+
243
+ @ttype = {
244
+ 'aa' => 1, 'at' => 0, 'ac' => 3, 'ag' => -1,
245
+ 'ta' => 0, 'tt' => -1, 'tc' => 1, 'tg' => -2,
246
+ 'ca' => 2, 'ct' => 1, 'cc' => 2, 'cg' => 6,
247
+ 'ga' => -1, 'gt' => -3, 'gc' => 0, 'gg' => -2,
248
+ }
249
+ @dtype = [
250
+ { 'aa' => 2, 'at' => 4, 'ac' => 4, 'ag' => 2,
251
+ 'ta' => 2, 'tt' => 4, 'tc' => 4, 'tg' => 2,
252
+ 'ca' => 2, 'ct' => 3, 'cc' => 1, 'cg' => 2,
253
+ 'ga' => 1, 'gt' => 2, 'gc' => 2, 'gg' => 3,
254
+ },
255
+ { 'aa' => 3, 'at' => 3, 'ac' => 2, 'ag' => 3,
256
+ 'ta' => 3, 'tt' => 3, 'tc' => 2, 'tg' => 2,
257
+ 'ca' => 3, 'ct' => 2, 'cc' => 1, 'cg' => 1,
258
+ 'ga' => 1, 'gt' => 1, 'gc' => 1, 'gg' => 1,
259
+ },
260
+ { 'aa' => 2, 'at' => 2, 'ac' => 2, 'ag' => 2,
261
+ 'ta' => 1, 'tt' => 1, 'tc' => 2, 'tg' => 2,
262
+ 'ca' => 2, 'ct' => 2, 'cc' => 2, 'cg' => 3,
263
+ 'ga' => 2, 'gt' => 2, 'gc' => 3, 'gg' => 1,
264
+ },
265
+ { 'aa' => 1, 'at' => 1, 'ac' => 1, 'ag' => 1,
266
+ 'ta' => 1, 'tt' => 1, 'tc' => 1, 'tg' => 1,
267
+ 'ca' => 1, 'ct' => 1, 'cc' => 1, 'cg' => 3,
268
+ 'ga' => 1, 'gt' => 1, 'gc' => 1, 'gg' => 1,
269
+ },
270
+ ]
271
+
272
+ @code.concat [0x00, 0xc0 | (@channel & 0xff)]
273
+ @code.concat icode(@program & 0xff, 1)
274
+ end
275
+
276
+ def icode(num, n)
277
+ code = []
278
+ n.times do |i|
279
+ code.push num & 0xff
280
+ num >>= 8
281
+ end
282
+ code.reverse
283
+ end
284
+
285
+ def rcode(num)
286
+ code = []
287
+ code.push num & 0x7f
288
+ while num > 0x7f
289
+ num >>= 7
290
+ code.push num & 0x7f | 0x80
291
+ end
292
+ code.reverse
293
+ end
294
+
295
+ def c2s(code)
296
+ ans = ""
297
+ code.each do |c|
298
+ ans += c.chr
299
+ end
300
+ ans
301
+ end
302
+
303
+ def push(s)
304
+ tt = @time % 4
305
+ t = @ttype[s[0, 2]]
306
+ d = @dtype[tt][s[2, 2]]
307
+ if !t.nil? && !d.nil?
308
+ @tune += t
309
+ @tune %= @tunes.length
310
+ if tt == 0
311
+ vel = 90
312
+ elsif tt == 1 && d > 1
313
+ vel = 100
314
+ elsif tt == 2
315
+ vel = 60
316
+ else
317
+ vel = 50
318
+ end
319
+ @code.concat rcode(1)
320
+ @code.concat [0x90 | @channel, @tunes[@tune] + @base, vel]
321
+ @code.concat rcode(240 * d)
322
+ @code.concat [0x80 | @channel, @tunes[@tune] + @base, 0]
323
+ @time += d
324
+ end
325
+ end
326
+
327
+ def push_silent(d)
328
+ @code.concat rcode(1)
329
+ @code.concat [0x90 | @channel, 0, 0]
330
+ @code.concat rcode(240 * d)
331
+ @code.concat [0x80 | @channel, 0, 0]
332
+ @time += d;
333
+ end
334
+
335
+ def encode
336
+ ans ="MTrk"
337
+ ans += c2s(icode(@code.length + 4, 4))
338
+ ans += c2s(@code)
339
+ ans += c2s([0x00, 0xff, 0x2f, 0x00])
340
+ ans
341
+ end
342
+
343
+ def header(num, tempo = 120)
344
+ ans = "MThd"
345
+ ans += c2s(icode(6, 4))
346
+ ans += c2s(icode(1, 2))
347
+ ans += c2s(icode(num + 1, 2))
348
+ ans += c2s(icode(480, 2))
349
+ ans += "MTrk"
350
+ ans += c2s(icode(11, 4))
351
+ ans += c2s([0x00, 0xff, 0x51, 0x03])
352
+ ans += c2s(icode(60000000 / tempo, 3))
353
+ ans += c2s([0x00, 0xff, 0x2f, 0x00])
354
+ ans
355
+ end
356
+
357
+ end # MidiTrack
358
+
359
+
360
+ # style:
361
+ # Hash of :tempo, :scale, :tones
362
+ # scale:
363
+ # C C# D D# E F F# G G# A A# B
364
+ # 0 1 2 3 4 5 6 7 8 9 10 11
365
+ # tones:
366
+ # Hash of :prog, :base, :range -- tone, vol? or len?, octaves
367
+ # drum:
368
+ # true (with rhythm part), false (without rhythm part)
369
+ def to_midi(style = {}, drum = true)
370
+ default = MidiTrack::Styles["Ichinose"]
371
+ if style.is_a?(String)
372
+ style = MidiTrack::Styles[style] || default
373
+ end
374
+ tempo = style[:tempo] || default[:tempo]
375
+ scale = style[:scale] || default[:scale]
376
+ tones = style[:tones] || default[:tones]
377
+
378
+ track = []
379
+
380
+ tones.each_with_index do |tone, i|
381
+ ch = i
382
+ ch += 1 if i >= 9 # skip rythm track
383
+ track.push MidiTrack.new(ch, tone[:prog], tone[:base], tone[:range], scale)
384
+ end
385
+
386
+ if drum
387
+ rhythm = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
388
+ track.push(MidiTrack.new(9, 0, 35, 2, rhythm))
389
+ end
390
+
391
+ cur = 0
392
+ window_search(4) do |s|
393
+ track[cur % track.length].push(s)
394
+ cur += 1
395
+ end
396
+
397
+ track.each do |t|
398
+ t.push_silent(12)
399
+ end
400
+
401
+ ans = track[0].header(track.length, tempo)
402
+ track.each do |t|
403
+ ans += t.encode
404
+ end
405
+ return ans
406
+ end
407
+
408
+ end
409
+
410
+
411
+ module Bio::Shell
412
+
413
+ private
414
+
415
+ def midifile(filename, seq, *args)
416
+ begin
417
+ print "Saving MIDI file (#{filename}) ... "
418
+ File.open(filename, "w") do |file|
419
+ file.puts seq.to_midi(*args)
420
+ end
421
+ puts "done"
422
+ rescue
423
+ warn "Error: Failed to save (#{filename}) : #{$!}"
424
+ end
425
+ end
426
+
427
+ end
428
+
429
+
430
+ if $0 == __FILE__
431
+
432
+ # % for i in file*
433
+ # do
434
+ # ruby -r bio bio/shell/plugin/midi.rb $i ${i}.mid
435
+ # done
436
+
437
+ include Bio::Shell
438
+
439
+ seq_file = ARGV.shift
440
+ mid_file = ARGV.shift
441
+ style = ARGV.shift
442
+
443
+ Bio::FlatFile.auto(seq_file) do |ff|
444
+ ff.each do |f|
445
+ midi(f.naseq[0..1000], mid_file, style)
446
+ end
447
+ end
448
+ end
@@ -0,0 +1,63 @@
1
+ #
2
+ # = bio/shell/plugin/obda.rb - plugin for OBDA
3
+ #
4
+ # Copyright:: Copyright (C) 2005
5
+ # Toshiaki Katayama <k@bioruby.org>
6
+ # License:: LGPL
7
+ #
8
+ # $Id: obda.rb,v 1.8 2005/11/30 02:01:04 k Exp $
9
+ #
10
+ #--
11
+ #
12
+ # This library is free software; you can redistribute it and/or
13
+ # modify it under the terms of the GNU Lesser General Public
14
+ # License as published by the Free Software Foundation; either
15
+ # version 2 of the License, or (at your option) any later version.
16
+ #
17
+ # This library is distributed in the hope that it will be useful,
18
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20
+ # Lesser General Public License for more details.
21
+ #
22
+ # You should have received a copy of the GNU Lesser General Public
23
+ # License along with this library; if not, write to the Free Software
24
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25
+ #
26
+ #++
27
+ #
28
+
29
+ module Bio::Shell
30
+
31
+ private
32
+
33
+ def obda
34
+ @obda ||= Bio::Registry.new
35
+ end
36
+
37
+ def obdaentry(dbname, entry_id)
38
+ db = obda.get_database(dbname)
39
+ unless db
40
+ warn "Error: No such database (#{dbname})"
41
+ return
42
+ end
43
+ entry = db.get_by_id(entry_id)
44
+ if block_given?
45
+ yield entry
46
+ else
47
+ return entry
48
+ end
49
+ end
50
+
51
+ def obdadbs
52
+ result = obda.databases.map {|db| db.database}
53
+ return result
54
+ end
55
+
56
+ def biofetch(db, id, style = 'raw', format = 'default')
57
+ serv = Bio::Fetch.new("http://www.ebi.ac.uk/cgi-bin/dbfetch")
58
+ result = serv.fetch(db, id, style, format)
59
+ return result
60
+ end
61
+
62
+ end
63
+