bio 1.0.0 → 1.1.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 (340) hide show
  1. data/bin/bioruby +14 -122
  2. data/bin/br_biofetch.rb +2 -2
  3. data/bin/br_bioflat.rb +2 -2
  4. data/bin/br_biogetseq.rb +2 -2
  5. data/bin/br_pmfetch.rb +3 -3
  6. data/doc/Changes-0.7.rd +77 -0
  7. data/doc/KEGG_API.rd +523 -232
  8. data/doc/KEGG_API.rd.ja +529 -207
  9. data/doc/Tutorial.rd +48 -11
  10. data/lib/bio.rb +59 -6
  11. data/lib/bio/alignment.rb +713 -103
  12. data/lib/bio/appl/bl2seq/report.rb +2 -18
  13. data/lib/bio/appl/blast.rb +108 -91
  14. data/lib/bio/appl/blast/format0.rb +33 -18
  15. data/lib/bio/appl/blast/format8.rb +6 -20
  16. data/lib/bio/appl/blast/report.rb +293 -429
  17. data/lib/bio/appl/blast/rexml.rb +8 -22
  18. data/lib/bio/appl/blast/wublast.rb +21 -12
  19. data/lib/bio/appl/blast/xmlparser.rb +180 -183
  20. data/lib/bio/appl/blat/report.rb +127 -30
  21. data/lib/bio/appl/clustalw.rb +87 -59
  22. data/lib/bio/appl/clustalw/report.rb +20 -22
  23. data/lib/bio/appl/emboss.rb +113 -20
  24. data/lib/bio/appl/fasta.rb +173 -198
  25. data/lib/bio/appl/fasta/format10.rb +244 -347
  26. data/lib/bio/appl/gcg/msf.rb +212 -0
  27. data/lib/bio/appl/gcg/seq.rb +195 -0
  28. data/lib/bio/appl/genscan/report.rb +5 -23
  29. data/lib/bio/appl/hmmer.rb +8 -45
  30. data/lib/bio/appl/hmmer/report.rb +2 -20
  31. data/lib/bio/appl/iprscan/report.rb +374 -0
  32. data/lib/bio/appl/mafft.rb +87 -50
  33. data/lib/bio/appl/mafft/report.rb +151 -44
  34. data/lib/bio/appl/muscle.rb +52 -0
  35. data/lib/bio/appl/phylip/alignment.rb +129 -0
  36. data/lib/bio/appl/phylip/distance_matrix.rb +96 -0
  37. data/lib/bio/appl/probcons.rb +41 -0
  38. data/lib/bio/appl/psort.rb +89 -96
  39. data/lib/bio/appl/psort/report.rb +6 -22
  40. data/lib/bio/appl/pts1.rb +263 -0
  41. data/lib/bio/appl/sim4.rb +26 -36
  42. data/lib/bio/appl/sim4/report.rb +2 -18
  43. data/lib/bio/appl/sosui/report.rb +5 -20
  44. data/lib/bio/appl/spidey/report.rb +2 -2
  45. data/lib/bio/appl/targetp/report.rb +4 -20
  46. data/lib/bio/appl/tcoffee.rb +55 -0
  47. data/lib/bio/appl/tmhmm/report.rb +4 -20
  48. data/lib/bio/command.rb +235 -64
  49. data/lib/bio/data/aa.rb +21 -26
  50. data/lib/bio/data/codontable.rb +2 -20
  51. data/lib/bio/data/na.rb +19 -4
  52. data/lib/bio/db.rb +27 -12
  53. data/lib/bio/db/aaindex.rb +2 -20
  54. data/lib/bio/db/embl/common.rb +4 -21
  55. data/lib/bio/db/embl/embl.rb +33 -85
  56. data/lib/bio/db/embl/sptr.rb +612 -302
  57. data/lib/bio/db/embl/swissprot.rb +10 -29
  58. data/lib/bio/db/embl/trembl.rb +10 -29
  59. data/lib/bio/db/embl/uniprot.rb +10 -29
  60. data/lib/bio/db/fantom.rb +15 -20
  61. data/lib/bio/db/fasta.rb +3 -3
  62. data/lib/bio/db/genbank/common.rb +37 -46
  63. data/lib/bio/db/genbank/ddbj.rb +6 -18
  64. data/lib/bio/db/genbank/genbank.rb +47 -186
  65. data/lib/bio/db/genbank/genpept.rb +4 -17
  66. data/lib/bio/db/genbank/refseq.rb +4 -17
  67. data/lib/bio/db/gff.rb +103 -35
  68. data/lib/bio/db/go.rb +4 -20
  69. data/lib/bio/db/kegg/brite.rb +26 -36
  70. data/lib/bio/db/kegg/compound.rb +81 -85
  71. data/lib/bio/db/kegg/drug.rb +98 -0
  72. data/lib/bio/db/kegg/enzyme.rb +133 -110
  73. data/lib/bio/db/kegg/expression.rb +2 -20
  74. data/lib/bio/db/kegg/genes.rb +208 -238
  75. data/lib/bio/db/kegg/genome.rb +164 -285
  76. data/lib/bio/db/kegg/glycan.rb +114 -157
  77. data/lib/bio/db/kegg/keggtab.rb +242 -303
  78. data/lib/bio/db/kegg/kgml.rb +117 -160
  79. data/lib/bio/db/kegg/orthology.rb +112 -0
  80. data/lib/bio/db/kegg/reaction.rb +54 -69
  81. data/lib/bio/db/kegg/taxonomy.rb +331 -0
  82. data/lib/bio/db/lasergene.rb +209 -0
  83. data/lib/bio/db/litdb.rb +3 -27
  84. data/lib/bio/db/medline.rb +228 -249
  85. data/lib/bio/db/nbrf.rb +3 -3
  86. data/lib/bio/db/newick.rb +510 -0
  87. data/lib/bio/db/nexus.rb +1854 -0
  88. data/lib/bio/db/pdb.rb +5 -17
  89. data/lib/bio/db/pdb/atom.rb +2 -18
  90. data/lib/bio/db/pdb/chain.rb +2 -18
  91. data/lib/bio/db/pdb/chemicalcomponent.rb +2 -18
  92. data/lib/bio/db/pdb/model.rb +2 -18
  93. data/lib/bio/db/pdb/pdb.rb +73 -34
  94. data/lib/bio/db/pdb/residue.rb +4 -20
  95. data/lib/bio/db/pdb/utils.rb +2 -18
  96. data/lib/bio/db/prosite.rb +403 -422
  97. data/lib/bio/db/rebase.rb +84 -40
  98. data/lib/bio/db/soft.rb +404 -0
  99. data/lib/bio/db/transfac.rb +5 -17
  100. data/lib/bio/feature.rb +106 -52
  101. data/lib/bio/io/das.rb +32 -42
  102. data/lib/bio/io/dbget.rb +2 -20
  103. data/lib/bio/io/ddbjxml.rb +77 -138
  104. data/lib/bio/io/ebisoap.rb +158 -0
  105. data/lib/bio/io/ensembl.rb +229 -0
  106. data/lib/bio/io/fastacmd.rb +89 -82
  107. data/lib/bio/io/fetch.rb +163 -96
  108. data/lib/bio/io/flatfile.rb +170 -73
  109. data/lib/bio/io/flatfile/bdb.rb +3 -16
  110. data/lib/bio/io/flatfile/index.rb +2 -2
  111. data/lib/bio/io/flatfile/indexer.rb +3 -2
  112. data/lib/bio/io/higet.rb +12 -31
  113. data/lib/bio/io/keggapi.rb +210 -269
  114. data/lib/bio/io/ncbisoap.rb +155 -0
  115. data/lib/bio/io/pubmed.rb +169 -147
  116. data/lib/bio/io/registry.rb +4 -20
  117. data/lib/bio/io/soapwsdl.rb +43 -38
  118. data/lib/bio/io/sql.rb +242 -305
  119. data/lib/bio/location.rb +407 -285
  120. data/lib/bio/map.rb +410 -0
  121. data/lib/bio/pathway.rb +558 -695
  122. data/lib/bio/reference.rb +272 -75
  123. data/lib/bio/sequence.rb +255 -13
  124. data/lib/bio/sequence/aa.rb +71 -10
  125. data/lib/bio/sequence/common.rb +187 -33
  126. data/lib/bio/sequence/compat.rb +59 -4
  127. data/lib/bio/sequence/format.rb +54 -7
  128. data/lib/bio/sequence/generic.rb +3 -3
  129. data/lib/bio/sequence/na.rb +328 -26
  130. data/lib/bio/shell.rb +11 -4
  131. data/lib/bio/shell/core.rb +221 -160
  132. data/lib/bio/shell/demo.rb +18 -15
  133. data/lib/bio/shell/interface.rb +14 -12
  134. data/lib/bio/shell/irb.rb +95 -0
  135. data/lib/bio/shell/object.rb +45 -26
  136. data/lib/bio/shell/plugin/blast.rb +42 -0
  137. data/lib/bio/shell/plugin/codon.rb +22 -14
  138. data/lib/bio/shell/plugin/das.rb +58 -0
  139. data/lib/bio/shell/plugin/emboss.rb +2 -2
  140. data/lib/bio/shell/plugin/entry.rb +22 -11
  141. data/lib/bio/shell/plugin/flatfile.rb +2 -2
  142. data/lib/bio/shell/plugin/keggapi.rb +13 -6
  143. data/lib/bio/shell/plugin/midi.rb +4 -4
  144. data/lib/bio/shell/plugin/obda.rb +2 -2
  145. data/lib/bio/shell/plugin/psort.rb +56 -0
  146. data/lib/bio/shell/plugin/seq.rb +35 -8
  147. data/lib/bio/shell/plugin/soap.rb +87 -0
  148. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/bioruby_generator.rb +29 -0
  149. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/_classes.rhtml +4 -0
  150. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/_log.rhtml +27 -0
  151. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/_methods.rhtml +11 -0
  152. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/_modules.rhtml +4 -0
  153. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/_variables.rhtml +7 -0
  154. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/bioruby-bg.gif +0 -0
  155. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/bioruby-console.png +0 -0
  156. data/lib/bio/shell/rails/{public/images/icon.png → vendor/plugins/generators/bioruby/templates/bioruby-gem.png} +0 -0
  157. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/bioruby-link.gif +0 -0
  158. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/bioruby.css +369 -0
  159. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/bioruby.rhtml +47 -0
  160. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/bioruby_controller.rb +144 -0
  161. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/bioruby_helper.rb +47 -0
  162. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/commands.rhtml +8 -0
  163. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/history.rhtml +10 -0
  164. data/lib/bio/shell/rails/vendor/plugins/generators/bioruby/templates/index.rhtml +22 -0
  165. data/lib/bio/shell/script.rb +25 -0
  166. data/lib/bio/shell/setup.rb +109 -0
  167. data/lib/bio/shell/web.rb +70 -58
  168. data/lib/bio/tree.rb +850 -0
  169. data/lib/bio/util/color_scheme.rb +84 -107
  170. data/lib/bio/util/color_scheme/buried.rb +5 -24
  171. data/lib/bio/util/color_scheme/helix.rb +5 -24
  172. data/lib/bio/util/color_scheme/hydropathy.rb +5 -24
  173. data/lib/bio/util/color_scheme/nucleotide.rb +5 -24
  174. data/lib/bio/util/color_scheme/strand.rb +5 -24
  175. data/lib/bio/util/color_scheme/taylor.rb +5 -24
  176. data/lib/bio/util/color_scheme/turn.rb +5 -24
  177. data/lib/bio/util/color_scheme/zappo.rb +5 -24
  178. data/lib/bio/util/contingency_table.rb +70 -43
  179. data/lib/bio/util/restriction_enzyme.rb +228 -0
  180. data/lib/bio/util/restriction_enzyme/analysis.rb +249 -0
  181. data/lib/bio/util/restriction_enzyme/analysis_basic.rb +217 -0
  182. data/lib/bio/util/restriction_enzyme/cut_symbol.rb +107 -0
  183. data/lib/bio/util/restriction_enzyme/double_stranded.rb +321 -0
  184. data/lib/bio/util/restriction_enzyme/double_stranded/aligned_strands.rb +130 -0
  185. data/lib/bio/util/restriction_enzyme/double_stranded/cut_location_pair.rb +103 -0
  186. data/lib/bio/util/restriction_enzyme/double_stranded/cut_location_pair_in_enzyme_notation.rb +38 -0
  187. data/lib/bio/util/restriction_enzyme/double_stranded/cut_locations.rb +76 -0
  188. data/lib/bio/util/restriction_enzyme/double_stranded/cut_locations_in_enzyme_notation.rb +107 -0
  189. data/lib/bio/util/restriction_enzyme/enzymes.yaml +7061 -0
  190. data/lib/bio/util/restriction_enzyme/range/cut_range.rb +24 -0
  191. data/lib/bio/util/restriction_enzyme/range/cut_ranges.rb +47 -0
  192. data/lib/bio/util/restriction_enzyme/range/horizontal_cut_range.rb +67 -0
  193. data/lib/bio/util/restriction_enzyme/range/sequence_range.rb +257 -0
  194. data/lib/bio/util/restriction_enzyme/range/sequence_range/calculated_cuts.rb +242 -0
  195. data/lib/bio/util/restriction_enzyme/range/sequence_range/fragment.rb +51 -0
  196. data/lib/bio/util/restriction_enzyme/range/sequence_range/fragments.rb +41 -0
  197. data/lib/bio/util/restriction_enzyme/range/vertical_cut_range.rb +77 -0
  198. data/lib/bio/util/restriction_enzyme/single_strand.rb +199 -0
  199. data/lib/bio/util/restriction_enzyme/single_strand/cut_locations_in_enzyme_notation.rb +135 -0
  200. data/lib/bio/util/restriction_enzyme/single_strand_complement.rb +23 -0
  201. data/lib/bio/util/restriction_enzyme/string_formatting.rb +111 -0
  202. data/lib/bio/util/sirna.rb +4 -22
  203. data/sample/color_scheme_na.rb +4 -12
  204. data/sample/enzymes.rb +78 -0
  205. data/sample/goslim.rb +5 -13
  206. data/sample/psortplot_html.rb +4 -12
  207. data/test/data/blast/2.2.15.blastp.m7 +876 -0
  208. data/test/data/embl/AB090716.embl.rel89 +63 -0
  209. data/test/data/fasta/example1.txt +75 -0
  210. data/test/data/fasta/example2.txt +21 -0
  211. data/test/data/iprscan/merged.raw +32 -0
  212. data/test/data/iprscan/merged.txt +74 -0
  213. data/test/data/soft/GDS100_partial.soft +92 -0
  214. data/test/data/soft/GSE3457_family_partial.soft +874 -0
  215. data/test/functional/bio/io/test_ensembl.rb +103 -0
  216. data/test/functional/bio/io/test_soapwsdl.rb +5 -17
  217. data/test/unit/bio/appl/bl2seq/test_report.rb +2 -2
  218. data/test/unit/bio/appl/blast/test_report.rb +3 -16
  219. data/test/unit/bio/appl/blast/test_xmlparser.rb +4 -16
  220. data/test/unit/bio/appl/genscan/test_report.rb +3 -16
  221. data/test/unit/bio/appl/hmmer/test_report.rb +3 -16
  222. data/test/unit/bio/appl/iprscan/test_report.rb +338 -0
  223. data/test/unit/bio/appl/mafft/test_report.rb +63 -0
  224. data/test/unit/bio/appl/sosui/test_report.rb +3 -16
  225. data/test/unit/bio/appl/targetp/test_report.rb +3 -16
  226. data/test/unit/bio/appl/test_blast.rb +3 -16
  227. data/test/unit/bio/appl/test_fasta.rb +4 -16
  228. data/test/unit/bio/appl/test_pts1.rb +140 -0
  229. data/test/unit/bio/appl/tmhmm/test_report.rb +3 -16
  230. data/test/unit/bio/data/test_aa.rb +4 -17
  231. data/test/unit/bio/data/test_codontable.rb +3 -16
  232. data/test/unit/bio/data/test_na.rb +3 -3
  233. data/test/unit/bio/db/embl/test_common.rb +3 -16
  234. data/test/unit/bio/db/embl/test_embl.rb +3 -16
  235. data/test/unit/bio/db/embl/test_embl_rel89.rb +219 -0
  236. data/test/unit/bio/db/embl/test_sptr.rb +1548 -41
  237. data/test/unit/bio/db/embl/test_uniprot.rb +3 -16
  238. data/test/unit/bio/db/kegg/test_genes.rb +3 -16
  239. data/test/unit/bio/db/pdb/test_pdb.rb +7 -24
  240. data/test/unit/bio/db/test_aaindex.rb +2 -2
  241. data/test/unit/bio/db/test_fasta.rb +3 -16
  242. data/test/unit/bio/db/test_gff.rb +3 -16
  243. data/test/unit/bio/db/test_lasergene.rb +95 -0
  244. data/test/unit/bio/db/test_newick.rb +56 -0
  245. data/test/unit/bio/db/test_nexus.rb +360 -0
  246. data/test/unit/bio/db/test_prosite.rb +5 -18
  247. data/test/unit/bio/db/test_rebase.rb +11 -25
  248. data/test/unit/bio/db/test_soft.rb +138 -0
  249. data/test/unit/bio/io/test_ddbjxml.rb +5 -17
  250. data/test/unit/bio/io/test_ensembl.rb +109 -0
  251. data/test/unit/bio/io/test_fastacmd.rb +3 -16
  252. data/test/unit/bio/io/test_flatfile.rb +237 -0
  253. data/test/unit/bio/io/test_soapwsdl.rb +4 -17
  254. data/test/unit/bio/sequence/test_aa.rb +3 -3
  255. data/test/unit/bio/sequence/test_common.rb +3 -16
  256. data/test/unit/bio/sequence/test_compat.rb +3 -16
  257. data/test/unit/bio/sequence/test_na.rb +29 -3
  258. data/test/unit/bio/shell/plugin/test_seq.rb +8 -8
  259. data/test/unit/bio/test_alignment.rb +16 -27
  260. data/test/unit/bio/test_command.rb +242 -25
  261. data/test/unit/bio/test_db.rb +3 -16
  262. data/test/unit/bio/test_feature.rb +4 -16
  263. data/test/unit/bio/test_location.rb +4 -16
  264. data/test/unit/bio/test_map.rb +230 -0
  265. data/test/unit/bio/test_pathway.rb +4 -16
  266. data/test/unit/bio/test_reference.rb +2 -2
  267. data/test/unit/bio/test_sequence.rb +7 -19
  268. data/test/unit/bio/test_shell.rb +3 -16
  269. data/test/unit/bio/test_tree.rb +593 -0
  270. data/test/unit/bio/util/restriction_enzyme/analysis/test_calculated_cuts.rb +299 -0
  271. data/test/unit/bio/util/restriction_enzyme/analysis/test_cut_ranges.rb +103 -0
  272. data/test/unit/bio/util/restriction_enzyme/analysis/test_sequence_range.rb +240 -0
  273. data/test/unit/bio/util/restriction_enzyme/double_stranded/test_aligned_strands.rb +100 -0
  274. data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_location_pair.rb +75 -0
  275. data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_location_pair_in_enzyme_notation.rb +73 -0
  276. data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_locations.rb +53 -0
  277. data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_locations_in_enzyme_notation.rb +104 -0
  278. data/test/unit/bio/util/restriction_enzyme/single_strand/test_cut_locations_in_enzyme_notation.rb +83 -0
  279. data/test/unit/bio/util/restriction_enzyme/test_analysis.rb +246 -0
  280. data/test/unit/bio/util/restriction_enzyme/test_cut_symbol.rb +44 -0
  281. data/test/unit/bio/util/restriction_enzyme/test_double_stranded.rb +115 -0
  282. data/test/unit/bio/util/restriction_enzyme/test_single_strand.rb +147 -0
  283. data/test/unit/bio/util/restriction_enzyme/test_single_strand_complement.rb +147 -0
  284. data/test/unit/bio/util/restriction_enzyme/test_string_formatting.rb +60 -0
  285. data/test/unit/bio/util/test_color_scheme.rb +6 -18
  286. data/test/unit/bio/util/test_contingency_table.rb +6 -18
  287. data/test/unit/bio/util/test_restriction_enzyme.rb +42 -0
  288. data/test/unit/bio/util/test_sirna.rb +3 -16
  289. metadata +228 -169
  290. data/doc/BioRuby.rd.ja +0 -225
  291. data/doc/Design.rd.ja +0 -341
  292. data/doc/TODO.rd.ja +0 -138
  293. data/lib/bio/appl/fasta/format6.rb +0 -37
  294. data/lib/bio/db/kegg/cell.rb +0 -88
  295. data/lib/bio/db/kegg/ko.rb +0 -178
  296. data/lib/bio/shell/rails/Rakefile +0 -10
  297. data/lib/bio/shell/rails/app/controllers/application.rb +0 -4
  298. data/lib/bio/shell/rails/app/controllers/shell_controller.rb +0 -94
  299. data/lib/bio/shell/rails/app/helpers/application_helper.rb +0 -3
  300. data/lib/bio/shell/rails/app/models/shell_connection.rb +0 -30
  301. data/lib/bio/shell/rails/app/views/layouts/shell.rhtml +0 -37
  302. data/lib/bio/shell/rails/app/views/shell/history.rhtml +0 -5
  303. data/lib/bio/shell/rails/app/views/shell/index.rhtml +0 -2
  304. data/lib/bio/shell/rails/app/views/shell/show.rhtml +0 -13
  305. data/lib/bio/shell/rails/config/boot.rb +0 -19
  306. data/lib/bio/shell/rails/config/database.yml +0 -85
  307. data/lib/bio/shell/rails/config/environment.rb +0 -53
  308. data/lib/bio/shell/rails/config/environments/development.rb +0 -19
  309. data/lib/bio/shell/rails/config/environments/production.rb +0 -19
  310. data/lib/bio/shell/rails/config/environments/test.rb +0 -19
  311. data/lib/bio/shell/rails/config/routes.rb +0 -19
  312. data/lib/bio/shell/rails/doc/README_FOR_APP +0 -2
  313. data/lib/bio/shell/rails/public/404.html +0 -8
  314. data/lib/bio/shell/rails/public/500.html +0 -8
  315. data/lib/bio/shell/rails/public/dispatch.cgi +0 -10
  316. data/lib/bio/shell/rails/public/dispatch.fcgi +0 -24
  317. data/lib/bio/shell/rails/public/dispatch.rb +0 -10
  318. data/lib/bio/shell/rails/public/favicon.ico +0 -0
  319. data/lib/bio/shell/rails/public/images/rails.png +0 -0
  320. data/lib/bio/shell/rails/public/index.html +0 -277
  321. data/lib/bio/shell/rails/public/javascripts/controls.js +0 -750
  322. data/lib/bio/shell/rails/public/javascripts/dragdrop.js +0 -584
  323. data/lib/bio/shell/rails/public/javascripts/effects.js +0 -854
  324. data/lib/bio/shell/rails/public/javascripts/prototype.js +0 -1785
  325. data/lib/bio/shell/rails/public/robots.txt +0 -1
  326. data/lib/bio/shell/rails/public/stylesheets/main.css +0 -187
  327. data/lib/bio/shell/rails/script/about +0 -3
  328. data/lib/bio/shell/rails/script/breakpointer +0 -3
  329. data/lib/bio/shell/rails/script/console +0 -3
  330. data/lib/bio/shell/rails/script/destroy +0 -3
  331. data/lib/bio/shell/rails/script/generate +0 -3
  332. data/lib/bio/shell/rails/script/performance/benchmarker +0 -3
  333. data/lib/bio/shell/rails/script/performance/profiler +0 -3
  334. data/lib/bio/shell/rails/script/plugin +0 -3
  335. data/lib/bio/shell/rails/script/process/reaper +0 -3
  336. data/lib/bio/shell/rails/script/process/spawner +0 -3
  337. data/lib/bio/shell/rails/script/process/spinner +0 -3
  338. data/lib/bio/shell/rails/script/runner +0 -3
  339. data/lib/bio/shell/rails/script/server +0 -42
  340. data/lib/bio/shell/rails/test/test_helper.rb +0 -28
@@ -0,0 +1,249 @@
1
+ #
2
+ # bio/util/restriction_enzyme/analysis.rb - Does the work of fragmenting the DNA from the enzymes
3
+ #
4
+ # Author:: Trevor Wennblom <mailto:trevor@corevx.com>
5
+ # Copyright:: Copyright (c) 2005-2007 Midwinter Laboratories, LLC (http://midwinterlabs.com)
6
+ # License:: The Ruby License
7
+ #
8
+ # $Id: analysis.rb,v 1.20 2007/07/16 19:28:48 k Exp $
9
+ #
10
+
11
+ require 'bio/util/restriction_enzyme'
12
+ require 'bio/util/restriction_enzyme/analysis_basic'
13
+
14
+ module Bio
15
+ class RestrictionEnzyme
16
+
17
+ class Analysis
18
+
19
+ # See cut instance method
20
+ def self.cut( sequence, *args )
21
+ self.new.cut( sequence, *args )
22
+ end
23
+
24
+ # See main documentation for Bio::RestrictionEnzyme
25
+ #
26
+ #
27
+ # +cut+ takes into account
28
+ # permutations of cut variations based on competitiveness of enzymes for an
29
+ # enzyme cutsite or enzyme bindsite on a sequence.
30
+ #
31
+ # Example:
32
+ #
33
+ # FIXME add output
34
+ #
35
+ # Bio::RestrictionEnzyme::Analysis.cut('gaattc', 'EcoRI')
36
+ #
37
+ # _same as:_
38
+ #
39
+ # Bio::RestrictionEnzyme::Analysis.cut('gaattc', 'g^aattc')
40
+ # ---
41
+ # *Arguments*
42
+ # * +sequence+: +String+ kind of object that will be used as a nucleic acid sequence.
43
+ # * +args+: Series of enzyme names, enzymes sequences with cut marks, or RestrictionEnzyme objects.
44
+ # *Returns*:: Bio::RestrictionEnzyme::Fragments object populated with Bio::RestrictionEnzyme::Fragment objects. (Note: unrelated to Bio::RestrictionEnzyme::Range::SequenceRange::Fragments) or a +Symbol+ containing an error code
45
+ def cut( sequence, *args )
46
+ view_ranges = false
47
+
48
+ args.select { |i| i.class == Hash }.each do |hsh|
49
+ hsh.each do |key, value|
50
+ if key == :view_ranges
51
+ unless ( value.kind_of?(TrueClass) or value.kind_of?(FalseClass) )
52
+ raise ArgumentError, "view_ranges must be set to true or false, currently #{value.inspect}."
53
+ end
54
+ view_ranges = value
55
+ end
56
+ end
57
+ end
58
+
59
+ res = cut_and_return_by_permutations( sequence, *args )
60
+ return res if res.class == Symbol
61
+ # Format the fragments for the user
62
+ fragments_for_display( res, view_ranges )
63
+ end
64
+
65
+ #########
66
+ protected
67
+ #########
68
+
69
+ # See cut instance method
70
+ #
71
+ # ---
72
+ # *Arguments*
73
+ # * +sequence+: +String+ kind of object that will be used as a nucleic acid sequence.
74
+ # * +args+: Series of enzyme names, enzymes sequences with cut marks, or RestrictionEnzyme objects.
75
+ # May also supply a +Hash+ with the key ":max_permutations" to specificy how many permutations are allowed - a value of 0 indicates no permutations are allowed.
76
+ # *Returns*:: +Hash+ Keys are a permutation ID, values are SequenceRange objects that have cuts applied.
77
+ # _also_ may return the +Symbol+ ':sequence_empty', ':no_cuts_found', or ':too_many_permutations'
78
+ def cut_and_return_by_permutations( sequence, *args )
79
+ my_hash = {}
80
+ maximum_permutations = nil
81
+
82
+ hashes_in_args = args.select { |i| i.class == Hash }
83
+ args.delete_if { |i| i.class == Hash }
84
+ hashes_in_args.each do |hsh|
85
+ hsh.each do |key, value|
86
+ case key
87
+ when :max_permutations, 'max_permutations', :maximum_permutations, 'maximum_permutations'
88
+ maximum_permutations = value.to_i unless value == nil
89
+ when :view_ranges
90
+ else
91
+ raise ArgumentError, "Received key #{key.inspect} in argument - I only know the key ':max_permutations' and ':view_ranges' currently. Hash passed: #{hsh.inspect}"
92
+ end
93
+ end
94
+ end
95
+
96
+ if !sequence.kind_of?(String) or sequence.empty?
97
+ logger.warn "The supplied sequence is empty." if defined?(logger)
98
+ return :sequence_empty
99
+ end
100
+ sequence = Bio::Sequence::NA.new( sequence )
101
+
102
+ enzyme_actions, initial_cuts = create_enzyme_actions( sequence, *args )
103
+
104
+ if enzyme_actions.empty? and initial_cuts.empty?
105
+ logger.warn "This enzyme does not make any cuts on this sequence." if defined?(logger)
106
+ return :no_cuts_found
107
+ end
108
+
109
+ # * When enzyme_actions.size is equal to '1' that means there are no permutations.
110
+ # * If enzyme_actions.size is equal to '2' there is one
111
+ # permutation ("[0, 1]")
112
+ # * If enzyme_actions.size is equal to '3' there are two
113
+ # permutations ("[0, 1, 2]")
114
+ # * and so on..
115
+ if maximum_permutations and enzyme_actions.size > 1
116
+ if (enzyme_actions.size - 1) > maximum_permutations.to_i
117
+ logger.warn "More permutations than maximum, skipping. Found: #{enzyme_actions.size-1} Max: #{maximum_permutations.to_i}" if defined?(logger)
118
+ return :too_many_permutations
119
+ end
120
+ end
121
+
122
+ if enzyme_actions.size > 1
123
+ permutations = permute(enzyme_actions.size)
124
+
125
+ permutations.each do |permutation|
126
+ previous_cut_ranges = []
127
+ # Primary and complement strands are both measured from '0' to 'sequence.size-1' here
128
+ sequence_range = Bio::RestrictionEnzyme::Range::SequenceRange.new( 0, 0, sequence.size-1, sequence.size-1 )
129
+
130
+ # Add the cuts to the sequence_range from each enzyme_action contained
131
+ # in initial_cuts. These are the cuts that have no competition so are
132
+ # not subject to permutations.
133
+ initial_cuts.each do |enzyme_action|
134
+ enzyme_action.cut_ranges.each do |cut_range|
135
+ sequence_range.add_cut_range(cut_range)
136
+ end
137
+ end
138
+
139
+ permutation.each do |id|
140
+ enzyme_action = enzyme_actions[id]
141
+
142
+ # conflict is false if the current enzyme action may cut in it's range.
143
+ # conflict is true if it cannot due to a previous enzyme action making
144
+ # a cut where this enzyme action needs a whole recognition site.
145
+ conflict = false
146
+
147
+ # If current size of enzyme_action overlaps with previous cut_range, don't cut
148
+ # note that the enzyme action may fall in the middle of a previous enzyme action
149
+ # so all cut locations must be checked that would fall underneath.
150
+ previous_cut_ranges.each do |cut_range|
151
+ next unless cut_range.class == Bio::RestrictionEnzyme::Range::VerticalCutRange # we aren't concerned with horizontal cuts
152
+ previous_cut_left = cut_range.range.first
153
+ previous_cut_right = cut_range.range.last
154
+
155
+ # Keep in mind:
156
+ # * The cut location is to the immediate right of the base located at the index.
157
+ # ex: at^gc -- the cut location is at index 1
158
+ # * The enzyme action location is located at the base of the index.
159
+ # ex: atgc -- 0 => 'a', 1 => 't', 2 => 'g', 3 => 'c'
160
+ # method create_enzyme_actions has similar commentary if interested
161
+ if (enzyme_action.right <= previous_cut_left) or
162
+ (enzyme_action.left > previous_cut_right) or
163
+ (enzyme_action.left > previous_cut_left and enzyme_action.right <= previous_cut_right) # in between cuts
164
+ # no conflict
165
+ else
166
+ conflict = true
167
+ end
168
+ end
169
+
170
+ next if conflict == true
171
+ enzyme_action.cut_ranges.each { |cut_range| sequence_range.add_cut_range(cut_range) }
172
+ previous_cut_ranges += enzyme_action.cut_ranges
173
+ end # permutation.each
174
+
175
+ # Fill in the source sequence for sequence_range so it knows what bases
176
+ # to use
177
+ sequence_range.fragments.primary = sequence
178
+ sequence_range.fragments.complement = sequence.forward_complement
179
+ my_hash[permutation] = sequence_range
180
+ end # permutations.each
181
+
182
+ else # if enzyme_actions.size == 1
183
+ # no permutations, just do it
184
+ sequence_range = Bio::RestrictionEnzyme::Range::SequenceRange.new( 0, 0, sequence.size-1, sequence.size-1 )
185
+ initial_cuts.each { |enzyme_action| enzyme_action.cut_ranges.each { |cut_range| sequence_range.add_cut_range(cut_range) } }
186
+ sequence_range.fragments.primary = sequence
187
+ sequence_range.fragments.complement = sequence.forward_complement
188
+ my_hash[0] = sequence_range
189
+ end
190
+
191
+ my_hash
192
+ end
193
+
194
+
195
+ # Returns permutation orders for a given number of elements.
196
+ #
197
+ # Examples:
198
+ # permute(0) # => [[0]]
199
+ # permute(1) # => [[0]]
200
+ # permute(2) # => [[1, 0], [0, 1]]
201
+ # permute(3) # => [[2, 1, 0], [2, 0, 1], [1, 2, 0], [0, 2, 1], [1, 0, 2], [0, 1, 2]]
202
+ # permute(4) # => [[3, 2, 1, 0],
203
+ # [3, 2, 0, 1],
204
+ # [3, 1, 2, 0],
205
+ # [3, 0, 2, 1],
206
+ # [3, 1, 0, 2],
207
+ # [3, 0, 1, 2],
208
+ # [2, 3, 1, 0],
209
+ # [2, 3, 0, 1],
210
+ # [1, 3, 2, 0],
211
+ # [0, 3, 2, 1],
212
+ # [1, 3, 0, 2],
213
+ # [0, 3, 1, 2],
214
+ # [2, 1, 3, 0],
215
+ # [2, 0, 3, 1],
216
+ # [1, 2, 3, 0],
217
+ # [0, 2, 3, 1],
218
+ # [1, 0, 3, 2],
219
+ # [0, 1, 3, 2],
220
+ # [2, 1, 0, 3],
221
+ # [2, 0, 1, 3],
222
+ # [1, 2, 0, 3],
223
+ # [0, 2, 1, 3],
224
+ # [1, 0, 2, 3],
225
+ # [0, 1, 2, 3]]
226
+ #
227
+ # ---
228
+ # *Arguments*
229
+ # * +count+: +Number+ of different elements to be permuted
230
+ # * +permutations+: ignore - for the recursive algorithm
231
+ # *Returns*:: +Array+ of +Array+ objects with different possible permutation orders. See examples.
232
+ def permute(count, permutations = [[0]])
233
+ return permutations if count <= 1
234
+ new_arrays = []
235
+ new_array = []
236
+
237
+ (permutations[0].size + 1).times do |n|
238
+ new_array.clear
239
+ permutations.each { |a| new_array << a.dup }
240
+ new_array.each { |e| e.insert(n, permutations[0].size) }
241
+ new_arrays += new_array
242
+ end
243
+
244
+ permute(count-1, new_arrays)
245
+ end
246
+
247
+ end # Analysis
248
+ end # RestrictionEnzyme
249
+ end # Bio
@@ -0,0 +1,217 @@
1
+ #
2
+ # bio/util/restriction_enzyme/analysis_basic.rb - Does the work of fragmenting the DNA from the enzymes
3
+ #
4
+ # Author:: Trevor Wennblom <mailto:trevor@corevx.com>
5
+ # Copyright:: Copyright (c) 2005-2007 Midwinter Laboratories, LLC (http://midwinterlabs.com)
6
+ # License:: The Ruby License
7
+ #
8
+ # $Id: analysis_basic.rb,v 1.16 2007/07/16 19:28:48 k Exp $
9
+ #
10
+
11
+ require 'set' # for method create_enzyme_actions
12
+ require 'bio/util/restriction_enzyme'
13
+
14
+ module Bio
15
+ class RestrictionEnzyme
16
+
17
+ class Analysis
18
+
19
+ # See cut_without_permutations instance method
20
+ def self.cut_without_permutations( sequence, *args )
21
+ self.new.cut_without_permutations( sequence, *args )
22
+ end
23
+
24
+ # See main documentation for Bio::RestrictionEnzyme
25
+ #
26
+ # Bio::RestrictionEnzyme.cut is preferred over this!
27
+ #
28
+ # USE AT YOUR OWN RISK
29
+ #
30
+ # This is a simpler version of method +cut+. +cut+ takes into account
31
+ # permutations of cut variations based on competitiveness of enzymes for an
32
+ # enzyme cutsite or enzyme bindsite on a sequence. This does not take into
33
+ # account those possibilities and is therefore faster, but less likely to be
34
+ # accurate.
35
+ #
36
+ # This code is mainly included as an academic example
37
+ # without having to wade through the extra layer of complexity added by the
38
+ # permutations.
39
+ #
40
+ # Example:
41
+ #
42
+ # FIXME add output
43
+ #
44
+ # Bio::RestrictionEnzyme::Analysis.cut_without_permutations('gaattc', 'EcoRI')
45
+ #
46
+ # _same as:_
47
+ #
48
+ # Bio::RestrictionEnzyme::Analysis.cut_without_permutations('gaattc', 'g^aattc')
49
+ # ---
50
+ # *Arguments*
51
+ # * +sequence+: +String+ kind of object that will be used as a nucleic acid sequence.
52
+ # * +args+: Series of enzyme names, enzymes sequences with cut marks, or RestrictionEnzyme objects.
53
+ # *Returns*:: Bio::RestrictionEnzyme::Fragments object populated with Bio::RestrictionEnzyme::Fragment objects. (Note: unrelated to Bio::RestrictionEnzyme::Range::SequenceRange::Fragments)
54
+ def cut_without_permutations( sequence, *args )
55
+ return fragments_for_display( {} ) if !sequence.kind_of?(String) or sequence.empty?
56
+ sequence = Bio::Sequence::NA.new( sequence )
57
+
58
+ # create_enzyme_actions returns two seperate array elements, they're not
59
+ # needed separated here so we put them into one array
60
+ enzyme_actions = create_enzyme_actions( sequence, *args ).flatten
61
+ return fragments_for_display( {} ) if enzyme_actions.empty?
62
+
63
+ # Primary and complement strands are both measured from '0' to 'sequence.size-1' here
64
+ sequence_range = Bio::RestrictionEnzyme::Range::SequenceRange.new( 0, 0, sequence.size-1, sequence.size-1 )
65
+
66
+ # Add the cuts to the sequence_range from each enzyme_action
67
+ enzyme_actions.each do |enzyme_action|
68
+ enzyme_action.cut_ranges.each do |cut_range|
69
+ sequence_range.add_cut_range(cut_range)
70
+ end
71
+ end
72
+
73
+ # Fill in the source sequence for sequence_range so it knows what bases
74
+ # to use
75
+ sequence_range.fragments.primary = sequence
76
+ sequence_range.fragments.complement = sequence.forward_complement
77
+
78
+ # Format the fragments for the user
79
+ fragments_for_display( {0 => sequence_range} )
80
+ end
81
+
82
+ #########
83
+ protected
84
+ #########
85
+
86
+ # Take the fragments from SequenceRange objects generated from add_cut_range
87
+ # and return unique results as a Bio::RestrictionEnzyme::Analysis::Fragment object.
88
+ #
89
+ # ---
90
+ # *Arguments*
91
+ # * +hsh+: +Hash+ Keys are a permutation ID, if any. Values are SequenceRange objects that have cuts applied.
92
+ # *Returns*:: Bio::RestrictionEnzyme::Analysis::Fragments object populated with Bio::RestrictionEnzyme::Analysis::Fragment objects.
93
+ def fragments_for_display( hsh, view_ranges=false )
94
+ ary = Fragments.new
95
+ return ary unless hsh
96
+
97
+ hsh.each do |permutation_id, sequence_range|
98
+ sequence_range.fragments.for_display.each do |fragment|
99
+ if view_ranges
100
+ ary << Bio::RestrictionEnzyme::Fragment.new(fragment.primary, fragment.complement, fragment.p_left, fragment.p_right, fragment.c_left, fragment.c_right)
101
+ else
102
+ ary << Bio::RestrictionEnzyme::Fragment.new(fragment.primary, fragment.complement)
103
+ end
104
+ end
105
+ end
106
+
107
+ ary.uniq! unless view_ranges
108
+
109
+ ary
110
+ end
111
+
112
+ # Creates an array of EnzymeActions based on the DNA sequence and supplied enzymes.
113
+ #
114
+ # ---
115
+ # *Arguments*
116
+ # * +sequence+: The string of DNA to match the enzyme recognition sites against
117
+ # * +args+:: The enzymes to use.
118
+ # *Returns*:: +Array+ with the first element being an array of EnzymeAction objects that +sometimes_cut+, and are subject to competition. The second is an array of EnzymeAction objects that +always_cut+ and are not subject to competition.
119
+ def create_enzyme_actions( sequence, *args )
120
+ all_enzyme_actions = []
121
+
122
+ args.each do |enzyme|
123
+ enzyme = Bio::RestrictionEnzyme.new(enzyme) unless enzyme.class == Bio::RestrictionEnzyme::DoubleStranded
124
+
125
+ # make sure pattern is the proper size
126
+ # for more info see the internal documentation of
127
+ # Bio::RestrictionEnzyme::DoubleStranded.create_action_at
128
+ pattern = Bio::Sequence::NA.new(
129
+ Bio::RestrictionEnzyme::DoubleStranded::AlignedStrands.align(
130
+ enzyme.primary, enzyme.complement
131
+ ).primary
132
+ ).to_re
133
+
134
+ find_match_locations( sequence, pattern ).each do |offset|
135
+ all_enzyme_actions << enzyme.create_action_at( offset )
136
+ end
137
+ end
138
+
139
+ # FIXME VerticalCutRange should really be called VerticalAndHorizontalCutRange
140
+
141
+ # * all_enzyme_actions is now full of EnzymeActions at specific locations across
142
+ # the sequence.
143
+ # * all_enzyme_actions will now be examined to see if any EnzymeActions may
144
+ # conflict with one another, and if they do they'll be made note of in
145
+ # indicies_of_sometimes_cut. They will then be remove FIXME
146
+ # * a conflict occurs if another enzyme's bind site is compromised do due
147
+ # to another enzyme's cut. Enzyme's bind sites may overlap and not be
148
+ # competitive, however neither bind site may be part of the other
149
+ # enzyme's cut or else they do become competitive.
150
+ #
151
+ # Take current EnzymeAction's entire bind site and compare it to all other
152
+ # EzymeAction's cut ranges. Only look for vertical cuts as boundaries
153
+ # since trailing horizontal cuts would have no influence on the bind site.
154
+ #
155
+ # If example Enzyme A makes this cut pattern (cut range 2..5):
156
+ #
157
+ # 0 1 2|3 4 5 6 7
158
+ # +-----+
159
+ # 0 1 2 3 4 5|6 7
160
+ #
161
+ # Then the bind site (and EnzymeAction range) for Enzyme B would need it's
162
+ # right side to be at index 2 or less, or it's left side to be 6 or greater.
163
+
164
+ competition_indexes = Set.new
165
+
166
+ all_enzyme_actions[0..-2].each_with_index do |current_enzyme_action, i|
167
+ next if competition_indexes.include? i
168
+ next if current_enzyme_action.cut_ranges.empty? # no cuts, some enzymes are like this (ex. CjuI)
169
+
170
+ all_enzyme_actions[i+1..-1].each_with_index do |comparison_enzyme_action, j|
171
+ j += (i + 1)
172
+ next if competition_indexes.include? j
173
+ next if comparison_enzyme_action.cut_ranges.empty? # no cuts
174
+
175
+ if (current_enzyme_action.right <= comparison_enzyme_action.cut_ranges.min_vertical) or
176
+ (current_enzyme_action.left > comparison_enzyme_action.cut_ranges.max_vertical)
177
+ # no conflict
178
+ else
179
+ competition_indexes += [i, j] # merge both indexes into the flat set
180
+ end
181
+ end
182
+ end
183
+
184
+ sometimes_cut = all_enzyme_actions.values_at( *competition_indexes )
185
+ always_cut = all_enzyme_actions
186
+ always_cut.delete_if {|x| sometimes_cut.include? x }
187
+
188
+ [sometimes_cut, always_cut]
189
+ end
190
+
191
+ # Returns an +Array+ of the match indicies of a +RegExp+ to a string.
192
+ #
193
+ # Example:
194
+ #
195
+ # find_match_locations('abccdefeg', /[ce]/) # => [2,3,5,7]
196
+ #
197
+ # ---
198
+ # *Arguments*
199
+ # * +string+: The string to scan
200
+ # * +re+: A RegExp to use
201
+ # *Returns*:: +Array+ with indicies of match locations
202
+ def find_match_locations( string, re )
203
+ md = string.match( re )
204
+ locations = []
205
+ counter = 0
206
+ while md
207
+ # save the match index relative to the original string
208
+ locations << (counter += md.begin(0))
209
+ # find the next match
210
+ md = string[ (counter += 1)..-1 ].match( re )
211
+ end
212
+ locations
213
+ end
214
+
215
+ end # Analysis
216
+ end # RestrictionEnzyme
217
+ end # Bio