bio 1.2.1 → 1.3.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 (259) hide show
  1. data/ChangeLog +3421 -0
  2. data/KNOWN_ISSUES.rdoc +88 -0
  3. data/README.rdoc +252 -0
  4. data/README_DEV.rdoc +285 -0
  5. data/Rakefile +143 -0
  6. data/bin/bioruby +0 -0
  7. data/bin/br_biofetch.rb +0 -0
  8. data/bin/br_bioflat.rb +12 -1
  9. data/bin/br_biogetseq.rb +0 -0
  10. data/bin/br_pmfetch.rb +4 -3
  11. data/bioruby.gemspec +477 -0
  12. data/bioruby.gemspec.erb +117 -0
  13. data/doc/Changes-0.7.rd +7 -0
  14. data/doc/Changes-1.3.rdoc +239 -0
  15. data/doc/Tutorial.rd +296 -184
  16. data/doc/Tutorial.rd.html +1031 -0
  17. data/doc/Tutorial.rd.ja +111 -45
  18. data/doc/Tutorial.rd.ja.html +2225 -0
  19. data/doc/bioruby.css +281 -0
  20. data/extconf.rb +2 -0
  21. data/lib/bio.rb +29 -4
  22. data/lib/bio/appl/blast.rb +306 -121
  23. data/lib/bio/appl/blast/ddbj.rb +142 -0
  24. data/lib/bio/appl/blast/format0.rb +35 -25
  25. data/lib/bio/appl/blast/format8.rb +2 -2
  26. data/lib/bio/appl/blast/genomenet.rb +263 -0
  27. data/lib/bio/appl/blast/ncbioptions.rb +220 -0
  28. data/lib/bio/appl/blast/remote.rb +106 -0
  29. data/lib/bio/appl/blast/report.rb +260 -9
  30. data/lib/bio/appl/blast/rexml.rb +12 -5
  31. data/lib/bio/appl/blast/rpsblast.rb +277 -0
  32. data/lib/bio/appl/blast/wublast.rb +133 -12
  33. data/lib/bio/appl/blast/xmlparser.rb +35 -18
  34. data/lib/bio/appl/blat/report.rb +46 -5
  35. data/lib/bio/appl/emboss.rb +62 -13
  36. data/lib/bio/appl/fasta.rb +9 -11
  37. data/lib/bio/appl/genscan/report.rb +3 -3
  38. data/lib/bio/appl/hmmer.rb +1 -1
  39. data/lib/bio/appl/hmmer/report.rb +10 -10
  40. data/lib/bio/appl/paml/baseml.rb +95 -0
  41. data/lib/bio/appl/paml/baseml/report.rb +32 -0
  42. data/lib/bio/appl/paml/codeml.rb +242 -0
  43. data/lib/bio/appl/paml/codeml/rates.rb +67 -0
  44. data/lib/bio/appl/paml/codeml/report.rb +67 -0
  45. data/lib/bio/appl/paml/common.rb +348 -0
  46. data/lib/bio/appl/paml/common_report.rb +38 -0
  47. data/lib/bio/appl/paml/yn00.rb +103 -0
  48. data/lib/bio/appl/paml/yn00/report.rb +32 -0
  49. data/lib/bio/appl/psort.rb +2 -2
  50. data/lib/bio/appl/pts1.rb +5 -5
  51. data/lib/bio/appl/tmhmm/report.rb +10 -1
  52. data/lib/bio/command.rb +297 -41
  53. data/lib/bio/compat/features.rb +157 -0
  54. data/lib/bio/compat/references.rb +128 -0
  55. data/lib/bio/db/biosql/biosql_to_biosequence.rb +67 -0
  56. data/lib/bio/db/biosql/sequence.rb +508 -0
  57. data/lib/bio/db/embl/common.rb +28 -12
  58. data/lib/bio/db/embl/embl.rb +107 -9
  59. data/lib/bio/db/embl/embl_to_biosequence.rb +85 -0
  60. data/lib/bio/db/embl/format_embl.rb +190 -0
  61. data/lib/bio/db/embl/sptr.rb +15 -16
  62. data/lib/bio/db/fantom.rb +6 -8
  63. data/lib/bio/db/fasta.rb +10 -507
  64. data/lib/bio/db/fasta/defline.rb +532 -0
  65. data/lib/bio/db/fasta/fasta_to_biosequence.rb +63 -0
  66. data/lib/bio/db/fasta/format_fasta.rb +97 -0
  67. data/lib/bio/db/genbank/common.rb +25 -8
  68. data/lib/bio/db/genbank/format_genbank.rb +187 -0
  69. data/lib/bio/db/genbank/genbank.rb +36 -1
  70. data/lib/bio/db/genbank/genbank_to_biosequence.rb +86 -0
  71. data/lib/bio/db/gff.rb +1791 -119
  72. data/lib/bio/db/kegg/glycan.rb +2 -6
  73. data/lib/bio/db/lasergene.rb +3 -3
  74. data/lib/bio/db/medline.rb +4 -1
  75. data/lib/bio/db/newick.rb +10 -10
  76. data/lib/bio/db/pdb/chain.rb +6 -2
  77. data/lib/bio/db/pdb/pdb.rb +12 -3
  78. data/lib/bio/db/rebase.rb +7 -8
  79. data/lib/bio/db/soft.rb +3 -3
  80. data/lib/bio/feature.rb +1 -88
  81. data/lib/bio/io/biosql/biodatabase.rb +64 -0
  82. data/lib/bio/io/biosql/bioentry.rb +29 -0
  83. data/lib/bio/io/biosql/bioentry_dbxref.rb +11 -0
  84. data/lib/bio/io/biosql/bioentry_path.rb +12 -0
  85. data/lib/bio/io/biosql/bioentry_qualifier_value.rb +10 -0
  86. data/lib/bio/io/biosql/bioentry_reference.rb +10 -0
  87. data/lib/bio/io/biosql/bioentry_relationship.rb +10 -0
  88. data/lib/bio/io/biosql/biosequence.rb +11 -0
  89. data/lib/bio/io/biosql/comment.rb +7 -0
  90. data/lib/bio/io/biosql/config/database.yml +20 -0
  91. data/lib/bio/io/biosql/dbxref.rb +13 -0
  92. data/lib/bio/io/biosql/dbxref_qualifier_value.rb +12 -0
  93. data/lib/bio/io/biosql/location.rb +32 -0
  94. data/lib/bio/io/biosql/location_qualifier_value.rb +11 -0
  95. data/lib/bio/io/biosql/ontology.rb +10 -0
  96. data/lib/bio/io/biosql/reference.rb +9 -0
  97. data/lib/bio/io/biosql/seqfeature.rb +32 -0
  98. data/lib/bio/io/biosql/seqfeature_dbxref.rb +11 -0
  99. data/lib/bio/io/biosql/seqfeature_path.rb +11 -0
  100. data/lib/bio/io/biosql/seqfeature_qualifier_value.rb +20 -0
  101. data/lib/bio/io/biosql/seqfeature_relationship.rb +11 -0
  102. data/lib/bio/io/biosql/taxon.rb +12 -0
  103. data/lib/bio/io/biosql/taxon_name.rb +9 -0
  104. data/lib/bio/io/biosql/term.rb +27 -0
  105. data/lib/bio/io/biosql/term_dbxref.rb +11 -0
  106. data/lib/bio/io/biosql/term_path.rb +12 -0
  107. data/lib/bio/io/biosql/term_relationship.rb +13 -0
  108. data/lib/bio/io/biosql/term_relationship_term.rb +11 -0
  109. data/lib/bio/io/biosql/term_synonym.rb +10 -0
  110. data/lib/bio/io/das.rb +7 -7
  111. data/lib/bio/io/ddbjxml.rb +57 -0
  112. data/lib/bio/io/ensembl.rb +2 -2
  113. data/lib/bio/io/fetch.rb +28 -14
  114. data/lib/bio/io/flatfile.rb +17 -853
  115. data/lib/bio/io/flatfile/autodetection.rb +545 -0
  116. data/lib/bio/io/flatfile/buffer.rb +237 -0
  117. data/lib/bio/io/flatfile/index.rb +17 -7
  118. data/lib/bio/io/flatfile/indexer.rb +30 -12
  119. data/lib/bio/io/flatfile/splitter.rb +297 -0
  120. data/lib/bio/io/hinv.rb +442 -0
  121. data/lib/bio/io/keggapi.rb +2 -2
  122. data/lib/bio/io/ncbirest.rb +733 -0
  123. data/lib/bio/io/pubmed.rb +34 -80
  124. data/lib/bio/io/registry.rb +2 -2
  125. data/lib/bio/io/sql.rb +178 -357
  126. data/lib/bio/io/togows.rb +458 -0
  127. data/lib/bio/location.rb +106 -11
  128. data/lib/bio/pathway.rb +120 -14
  129. data/lib/bio/reference.rb +115 -101
  130. data/lib/bio/sequence.rb +164 -183
  131. data/lib/bio/sequence/adapter.rb +108 -0
  132. data/lib/bio/sequence/common.rb +22 -45
  133. data/lib/bio/sequence/compat.rb +2 -2
  134. data/lib/bio/sequence/dblink.rb +54 -0
  135. data/lib/bio/sequence/format.rb +254 -77
  136. data/lib/bio/sequence/format_raw.rb +23 -0
  137. data/lib/bio/shell.rb +3 -1
  138. data/lib/bio/shell/core.rb +2 -2
  139. data/lib/bio/shell/plugin/entry.rb +33 -4
  140. data/lib/bio/shell/plugin/ncbirest.rb +64 -0
  141. data/lib/bio/shell/plugin/togows.rb +40 -0
  142. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/bioruby_generator.rb +0 -0
  143. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/_classes.rhtml +0 -0
  144. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/_log.rhtml +0 -0
  145. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/_methods.rhtml +0 -0
  146. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/_modules.rhtml +0 -0
  147. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/_variables.rhtml +0 -0
  148. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby-bg.gif +0 -0
  149. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby-gem.png +0 -0
  150. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby-link.gif +0 -0
  151. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby.css +0 -0
  152. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby.rhtml +0 -0
  153. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby_controller.rb +0 -0
  154. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby_helper.rb +0 -0
  155. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/commands.rhtml +0 -0
  156. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/history.rhtml +0 -0
  157. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/index.rhtml +0 -0
  158. data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/spinner.gif +0 -0
  159. data/lib/bio/tree.rb +4 -2
  160. data/lib/bio/util/color_scheme.rb +2 -2
  161. data/lib/bio/util/contingency_table.rb +2 -2
  162. data/lib/bio/util/restriction_enzyme.rb +2 -2
  163. data/lib/bio/util/restriction_enzyme/single_strand.rb +6 -5
  164. data/lib/bio/version.rb +25 -0
  165. data/rdoc.zsh +8 -0
  166. data/sample/any2fasta.rb +0 -0
  167. data/sample/biofetch.rb +0 -0
  168. data/sample/dbget +0 -0
  169. data/sample/demo_sequence.rb +158 -0
  170. data/sample/enzymes.rb +0 -0
  171. data/sample/fasta2tab.rb +0 -0
  172. data/sample/fastagrep.rb +72 -0
  173. data/sample/fastasort.rb +54 -0
  174. data/sample/fsplit.rb +0 -0
  175. data/sample/gb2fasta.rb +2 -3
  176. data/sample/gb2tab.rb +0 -0
  177. data/sample/gbtab2mysql.rb +0 -0
  178. data/sample/genes2nuc.rb +0 -0
  179. data/sample/genes2pep.rb +0 -0
  180. data/sample/genes2tab.rb +0 -0
  181. data/sample/genome2rb.rb +0 -0
  182. data/sample/genome2tab.rb +0 -0
  183. data/sample/goslim.rb +0 -0
  184. data/sample/gt2fasta.rb +0 -0
  185. data/sample/na2aa.rb +34 -0
  186. data/sample/pmfetch.rb +0 -0
  187. data/sample/pmsearch.rb +0 -0
  188. data/sample/ssearch2tab.rb +0 -0
  189. data/sample/tfastx2tab.rb +0 -0
  190. data/sample/vs-genes.rb +0 -0
  191. data/setup.rb +1596 -0
  192. data/test/data/blast/blastp-multi.m7 +188 -0
  193. data/test/data/command/echoarg2.bat +1 -0
  194. data/test/data/paml/codeml/control_file.txt +30 -0
  195. data/test/data/paml/codeml/output.txt +78 -0
  196. data/test/data/paml/codeml/rates +217 -0
  197. data/test/data/rpsblast/misc.rpsblast +193 -0
  198. data/test/data/soft/GDS100_partial.soft +0 -0
  199. data/test/data/soft/GSE3457_family_partial.soft +0 -0
  200. data/test/functional/bio/appl/test_pts1.rb +115 -0
  201. data/test/functional/bio/io/test_ensembl.rb +123 -80
  202. data/test/functional/bio/io/test_togows.rb +267 -0
  203. data/test/functional/bio/sequence/test_output_embl.rb +51 -0
  204. data/test/functional/bio/test_command.rb +301 -0
  205. data/test/runner.rb +17 -1
  206. data/test/unit/bio/appl/blast/test_ncbioptions.rb +112 -0
  207. data/test/unit/bio/appl/blast/test_report.rb +753 -35
  208. data/test/unit/bio/appl/blast/test_rpsblast.rb +398 -0
  209. data/test/unit/bio/appl/paml/codeml/test_rates.rb +45 -0
  210. data/test/unit/bio/appl/paml/codeml/test_report.rb +45 -0
  211. data/test/unit/bio/appl/paml/test_codeml.rb +174 -0
  212. data/test/unit/bio/appl/test_blast.rb +135 -4
  213. data/test/unit/bio/appl/test_fasta.rb +2 -2
  214. data/test/unit/bio/appl/test_pts1.rb +1 -64
  215. data/test/unit/bio/db/embl/test_common.rb +15 -15
  216. data/test/unit/bio/db/embl/test_embl.rb +4 -4
  217. data/test/unit/bio/db/embl/test_embl_rel89.rb +5 -5
  218. data/test/unit/bio/db/embl/test_embl_to_bioseq.rb +203 -0
  219. data/test/unit/bio/db/embl/test_sptr.rb +38 -1
  220. data/test/unit/bio/db/pdb/test_pdb.rb +2 -2
  221. data/test/unit/bio/db/test_gff.rb +1151 -25
  222. data/test/unit/bio/db/test_medline.rb +127 -0
  223. data/test/unit/bio/db/test_nexus.rb +5 -1
  224. data/test/unit/bio/db/test_prosite.rb +4 -4
  225. data/test/unit/bio/io/flatfile/test_autodetection.rb +375 -0
  226. data/test/unit/bio/io/flatfile/test_buffer.rb +251 -0
  227. data/test/unit/bio/io/flatfile/test_splitter.rb +369 -0
  228. data/test/unit/bio/io/test_ddbjxml.rb +8 -3
  229. data/test/unit/bio/io/test_fastacmd.rb +5 -5
  230. data/test/unit/bio/io/test_flatfile.rb +357 -106
  231. data/test/unit/bio/io/test_soapwsdl.rb +2 -2
  232. data/test/unit/bio/io/test_togows.rb +161 -0
  233. data/test/unit/bio/sequence/test_common.rb +210 -11
  234. data/test/unit/bio/sequence/test_compat.rb +3 -3
  235. data/test/unit/bio/sequence/test_dblink.rb +58 -0
  236. data/test/unit/bio/sequence/test_na.rb +2 -2
  237. data/test/unit/bio/test_command.rb +111 -50
  238. data/test/unit/bio/test_feature.rb +29 -1
  239. data/test/unit/bio/test_location.rb +566 -6
  240. data/test/unit/bio/test_pathway.rb +91 -65
  241. data/test/unit/bio/test_reference.rb +67 -13
  242. data/test/unit/bio/util/restriction_enzyme/analysis/test_calculated_cuts.rb +3 -3
  243. data/test/unit/bio/util/restriction_enzyme/analysis/test_cut_ranges.rb +3 -3
  244. data/test/unit/bio/util/restriction_enzyme/analysis/test_sequence_range.rb +3 -3
  245. data/test/unit/bio/util/restriction_enzyme/double_stranded/test_aligned_strands.rb +4 -3
  246. data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_location_pair.rb +3 -3
  247. data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_location_pair_in_enzyme_notation.rb +3 -3
  248. data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_locations.rb +3 -3
  249. data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_locations_in_enzyme_notation.rb +3 -3
  250. data/test/unit/bio/util/restriction_enzyme/single_strand/test_cut_locations_in_enzyme_notation.rb +3 -3
  251. data/test/unit/bio/util/restriction_enzyme/test_analysis.rb +3 -3
  252. data/test/unit/bio/util/restriction_enzyme/test_cut_symbol.rb +4 -4
  253. data/test/unit/bio/util/restriction_enzyme/test_double_stranded.rb +3 -3
  254. data/test/unit/bio/util/restriction_enzyme/test_single_strand.rb +3 -3
  255. data/test/unit/bio/util/restriction_enzyme/test_single_strand_complement.rb +3 -3
  256. data/test/unit/bio/util/restriction_enzyme/test_string_formatting.rb +3 -3
  257. data/test/unit/bio/util/test_restriction_enzyme.rb +3 -3
  258. metadata +202 -167
  259. data/test/unit/bio/appl/blast/test_xmlparser.rb +0 -388
@@ -0,0 +1,157 @@
1
+ #
2
+ # = bio/compat/features.rb - Obsoleted Features class
3
+ #
4
+ # Copyright:: Copyright (c) 2002, 2005 Toshiaki Katayama <k@bioruby.org>
5
+ # 2006 Jan Aerts <jan.aerts@bbsrc.ac.uk>
6
+ # 2008 Naohisa Goto <ng@bioruby.org>
7
+ # License:: The Ruby License
8
+ #
9
+ # $Id: features.rb,v 1.1.2.2 2008/03/10 13:42:26 ngoto Exp $
10
+ #
11
+ # == Description
12
+ #
13
+ # The Bio::Features class was obsoleted after BioRuby 1.2.1.
14
+ # To keep compatibility, some wrapper methods are provided in this file.
15
+ # As the compatibility methods (and Bio::Features) will soon be removed,
16
+ # Please change your code not to use Bio::Features.
17
+ #
18
+ # Note that Bio::Feature is different from the Bio::Features.
19
+ # Bio::Feature still exists to store DDBJ/GenBank/EMBL feature information.
20
+
21
+ require 'bio/location'
22
+
23
+ module Bio
24
+
25
+ # = DESCRIPTION
26
+ #
27
+ # This class is OBSOLETED, and will soon be removed.
28
+ # Instead of this class, an array is to be used.
29
+ #
30
+ #
31
+ # Container for a list of Feature objects.
32
+ #
33
+ # = USAGE
34
+ # # First, create some Bio::Feature objects
35
+ # feature1 = Bio::Feature.new('intron','3627..4059')
36
+ # feature2 = Bio::Feature.new('exon','4060..4236')
37
+ # feature3 = Bio::Feature.new('intron','4237..4426')
38
+ # feature4 = Bio::Feature.new('CDS','join(2538..3626,4060..4236)',
39
+ # [ Bio::Feature::Qualifier.new('gene', 'CYP2D6'),
40
+ # Bio::Feature::Qualifier.new('translation','MGXXTVMHLL...')
41
+ # ])
42
+ #
43
+ # # And create a container for them
44
+ # feature_container = Bio::Features.new([ feature1, feature2, feature3, feature4 ])
45
+ #
46
+ # # Iterate over all features and print
47
+ # feature_container.each do |feature|
48
+ # puts feature.feature + "\t" + feature.position
49
+ # feature.each do |qualifier|
50
+ # puts "- " + qualifier.qualifier + ": " + qualifier.value
51
+ # end
52
+ # end
53
+ #
54
+ # # Iterate only over CDS features and extract translated amino acid sequences
55
+ # features.each("CDS") do |feature|
56
+ # hash = feature.to_hash
57
+ # name = hash["gene"] || hash["product"] || hash["note"]
58
+ # aaseq = hash["translation"]
59
+ # pos = feature.position
60
+ # if name and seq
61
+ # puts ">#{gene} #{feature.position}"
62
+ # puts aaseq
63
+ # end
64
+ # end
65
+ class Features
66
+
67
+ # module to keep backward compatibility with obsoleted Bio::Features
68
+ module BackwardCompatibility #:nodoc:
69
+
70
+ # Backward compatibility with Bio::Features#features.
71
+ # Now, features are stored in an array, and
72
+ # you should change your code not to use this method.
73
+ def features
74
+ warn 'Bio::Features is obsoleted. Now, features are stored in an array.'
75
+ self
76
+ end
77
+
78
+ # Backward compatibility with Bio::Features#append.
79
+ # Now, references are stored in an array, and
80
+ # you should change your code not to use this method.
81
+ def append(feature)
82
+ warn 'Bio::Features is obsoleted. Now, features are stored in an array.'
83
+ self.push(feature) if feature.is_a? Feature
84
+ self
85
+ end
86
+ end #module BackwardCompatibility
87
+
88
+ # This method should not be used.
89
+ # Only for backward compatibility of existing code.
90
+ #
91
+ # Since Bio::Features is obsoleted,
92
+ # Bio::Features.new not returns Bio::Features object,
93
+ # but modifies given _ary_ and returns the _ary_.
94
+ #
95
+ # *Arguments*:
96
+ # * (optional) __: Array of Bio::Feature objects
97
+ # *Returns*:: the given array
98
+ def self.new(ary = [])
99
+ warn 'Bio::Features is obsoleted. Some methods are added to given array to keep backward compatibility.'
100
+ ary.extend(BackwardCompatibility)
101
+ ary
102
+ end
103
+
104
+ # Normally, users can not call this method.
105
+ #
106
+ # Create a new Bio::Features object.
107
+ #
108
+ # *Arguments*:
109
+ # * (optional) _list of features_: list of Bio::Feature objects
110
+ # *Returns*:: Bio::Features object
111
+ def initialize(ary = [])
112
+ @features = ary
113
+ end
114
+
115
+ # Returns an Array of Feature objects.
116
+ attr_accessor :features
117
+
118
+ # Appends a Feature object to Features.
119
+ #
120
+ # *Arguments*:
121
+ # * (required) _feature_: Bio::Feature object
122
+ # *Returns*:: Bio::Features object
123
+ def append(a)
124
+ @features.push(a) if a.is_a? Feature
125
+ return self
126
+ end
127
+
128
+ # Iterates on each feature object.
129
+ #
130
+ # *Arguments*:
131
+ # * (optional) _key_: if specified, only iterates over features with this key
132
+ def each(arg = nil)
133
+ @features.each do |x|
134
+ next if arg and x.feature != arg
135
+ yield x
136
+ end
137
+ end
138
+
139
+ # Short cut for the Features#features[n]
140
+ def [](*arg)
141
+ @features[*arg]
142
+ end
143
+
144
+ # Short cut for the Features#features.first
145
+ def first
146
+ @features.first
147
+ end
148
+
149
+ # Short cut for the Features#features.last
150
+ def last
151
+ @features.last
152
+ end
153
+
154
+ end # Features
155
+
156
+ end # Bio
157
+
@@ -0,0 +1,128 @@
1
+ #
2
+ # = bio/compat/references.rb - Obsoleted References class
3
+ #
4
+ # Copyright:: Copyright (C) 2008
5
+ # Toshiaki Katayama <k@bioruby.org>,
6
+ # Ryan Raaum <ryan@raaum.org>,
7
+ # Jan Aerts <jandot@bioruby.org>,
8
+ # Naohisa Goto <ng@bioruby.org>
9
+ # License:: The Ruby License
10
+ #
11
+ # $Id: references.rb,v 1.1.2.1 2008/03/04 10:07:49 ngoto Exp $
12
+ #
13
+ # == Description
14
+ #
15
+ # The Bio::References class was obsoleted after BioRuby 1.2.1.
16
+ # To keep compatibility, some wrapper methods are provided in this file.
17
+ # As the compatibility methods (and Bio::References) will soon be removed,
18
+ # Please change your code not to use Bio::References.
19
+ #
20
+ # Note that Bio::Reference is different from Bio::References.
21
+ # Bio::Reference still exists for storing a reference information
22
+ # in sequence entries.
23
+
24
+ module Bio
25
+
26
+ # = DESCRIPTION
27
+ #
28
+ # This class is OBSOLETED, and will soon be removed.
29
+ # Instead of this class, an array is to be used.
30
+ #
31
+ #
32
+ # A container class for Bio::Reference objects.
33
+ #
34
+ # = USAGE
35
+ #
36
+ # This class should NOT be used.
37
+ #
38
+ # refs = Bio::References.new
39
+ # refs.append(Bio::Reference.new(hash))
40
+ # refs.each do |reference|
41
+ # ...
42
+ # end
43
+ #
44
+ class References
45
+
46
+ # module to keep backward compatibility with obsoleted Bio::References
47
+ module BackwardCompatibility #:nodoc:
48
+
49
+ # Backward compatibility with Bio::References#references.
50
+ # Now, references are stored in an array, and
51
+ # you should change your code not to use this method.
52
+ def references
53
+ warn 'Bio::References is obsoleted. Now, references are stored in an array.'
54
+ self
55
+ end
56
+
57
+ # Backward compatibility with Bio::References#append.
58
+ # Now, references are stored in an array, and
59
+ # you should change your code not to use this method.
60
+ def append(reference)
61
+ warn 'Bio::References is obsoleted. Now, references are stored in an array.'
62
+ self.push(reference) if reference.is_a? Reference
63
+ self
64
+ end
65
+ end #module BackwardCompatibility
66
+
67
+ # This method should not be used.
68
+ # Only for backward compatibility of existing code.
69
+ #
70
+ # Since Bio::References is obsoleted,
71
+ # Bio::References.new not returns Bio::References object,
72
+ # but modifies given _ary_ and returns the _ary_.
73
+ #
74
+ # *Arguments*:
75
+ # * (optional) __: Array of Bio::Reference objects
76
+ # *Returns*:: the given array
77
+ def self.new(ary = [])
78
+ warn 'Bio::References is obsoleted. Some methods are added to given array to keep backward compatibility.'
79
+ ary.extend(BackwardCompatibility)
80
+ ary
81
+ end
82
+
83
+ # Array of Bio::Reference objects
84
+ attr_accessor :references
85
+
86
+ # Normally, users can not call this method.
87
+ #
88
+ # Create a new Bio::References object
89
+ #
90
+ # refs = Bio::References.new
91
+ # ---
92
+ # *Arguments*:
93
+ # * (optional) __: Array of Bio::Reference objects
94
+ # *Returns*:: Bio::References object
95
+ def initialize(ary = [])
96
+ @references = ary
97
+ end
98
+
99
+
100
+ # Add a Bio::Reference object to the container.
101
+ #
102
+ # refs.append(reference)
103
+ # ---
104
+ # *Arguments*:
105
+ # * (required) _reference_: Bio::Reference object
106
+ # *Returns*:: current Bio::References object
107
+ def append(reference)
108
+ @references.push(reference) if reference.is_a? Reference
109
+ return self
110
+ end
111
+
112
+ # Iterate through Bio::Reference objects.
113
+ #
114
+ # refs.each do |reference|
115
+ # ...
116
+ # end
117
+ # ---
118
+ # *Block*:: yields each Bio::Reference object
119
+ def each
120
+ @references.each do |reference|
121
+ yield reference
122
+ end
123
+ end
124
+
125
+ end #class References
126
+ end #module Bio
127
+
128
+
@@ -0,0 +1,67 @@
1
+ #
2
+ # = bio/db/biosql/biosql_to_biosequence.rb - Bio::SQL::Sequence to Bio::Sequence adapter module
3
+ #
4
+ # Copyright:: Copyright (C) 2008
5
+ # Naohisa Goto <ng@bioruby.org>,
6
+ # Raoul Jean Pierre Bonnal
7
+ # License:: The Ruby License
8
+ #
9
+ # $Id:$
10
+ #
11
+
12
+ require 'bio/sequence'
13
+ require 'bio/sequence/adapter'
14
+
15
+ # Internal use only. Normal users should not use this module.
16
+ #
17
+ # Bio::SQL::Sequence to Bio::Sequence adapter module.
18
+ # It is internally used in Bio::SQL::Sequence#to_biosequence.
19
+ #
20
+ module Bio::Sequence::Adapter::BioSQL
21
+
22
+ extend Bio::Sequence::Adapter
23
+
24
+ private
25
+
26
+ def_biosequence_adapter :seq
27
+
28
+ def_biosequence_adapter :entry_id
29
+
30
+ def_biosequence_adapter :primary_accession
31
+
32
+ def_biosequence_adapter :secondary_accessions
33
+
34
+ def_biosequence_adapter :molecule_type
35
+
36
+ #--
37
+ #TODO: identify where is stored data_class in biosql
38
+ #++
39
+
40
+ def_biosequence_adapter :data_class
41
+
42
+ def_biosequence_adapter :definition, :description
43
+
44
+ def_biosequence_adapter :topology
45
+
46
+ def_biosequence_adapter :date_created
47
+
48
+ def_biosequence_adapter :date_modified
49
+
50
+ def_biosequence_adapter :division
51
+
52
+ def_biosequence_adapter :sequence_version
53
+
54
+ def_biosequence_adapter :keywords
55
+
56
+ def_biosequence_adapter :species
57
+
58
+ def_biosequence_adapter :classification, :taxonomy
59
+
60
+ def_biosequence_adapter :references
61
+
62
+ def_biosequence_adapter :features
63
+
64
+ def_biosequence_adapter :comments
65
+
66
+ end #module Bio::Sequence::Adapter::BioSQL
67
+
@@ -0,0 +1,508 @@
1
+
2
+ #TODO save on db reading from a genbank or embl object
3
+ module Bio
4
+ class SQL
5
+
6
+ class Sequence
7
+ private
8
+ # example
9
+ # bioentry_qualifier_anchor :molecule_type, :synonym=>'mol_type'
10
+ # this function creates other 3 functions, molecule_type, molecule_type=, molecule_type_update
11
+ #molecule_type => return an array of strings, where each string is the value associated with the qualifier, ordered by rank.
12
+ #molecule_type=value add a bioentry_qualifier value to the table
13
+ #molecule_type_update(value, rank) update an entry of the table with an existing rank
14
+ #the method inferr the qualifier term from the name of the first symbol, or you can specify a synonym to use
15
+
16
+ #creating an object with to_biosql is transaction safe.
17
+
18
+ #TODO: implement setting for more than a qualifier-vale.
19
+ def self.bioentry_qualifier_anchor(sym, *args)
20
+ options = args.first || Hash.new
21
+ #options.assert_valid_keys(:rank,:synonym,:multi)
22
+ method_reader = sym.to_s.to_sym
23
+ method_writer_operator = (sym.to_s+"=").to_sym
24
+ method_writer_modder = (sym.to_s+"_update").to_sym
25
+ synonym = options[:synonym].nil? ? sym.to_s : options[:synonym]
26
+
27
+ #Bio::SQL::Term.create(:name=>synonym, :ontology=> Bio::SQL::Ontology.find_by_name('Annotation Tags')) unless Bio::SQL::Term.exists?(:name =>synonym)
28
+ send :define_method, method_reader do
29
+ #return an array of bioentry_qualifier_values
30
+ begin
31
+ ontology_annotation_tags = Ontology.find_or_create_by_name('Annotation Tags')
32
+ term = Term.find_or_create_by_name(:name => synonym, :ontology=> ontology_annotation_tags)
33
+ bioentry_qualifier_values = @entry.bioentry_qualifier_values.find_all_by_term_id(term)
34
+ bioentry_qualifier_values.map{|row| row.value} unless bioentry_qualifier_values.nil?
35
+ rescue Exception => e
36
+ puts "Reader Error: #{synonym} #{e.message}"
37
+ end
38
+ end
39
+
40
+ send :define_method, method_writer_operator do |value|
41
+ begin
42
+ ontology_annotation_tags = Ontology.find_or_create_by_name('Annotation Tags')
43
+ term = Term.find_or_create_by_name(:name => synonym, :ontology=> ontology_annotation_tags)
44
+ datas = @entry.bioentry_qualifier_values.find_all_by_term_id(term.term_id)
45
+ #add an element incrementing the rank or setting the first to 1
46
+ @entry.bioentry_qualifier_values.create(:term_id=>term.term_id, :rank=>datas.empty? ? 1 : datas.last.rank.succ, :value=>value)
47
+ rescue Exception => e
48
+ puts "WriterOperator= Error: #{synonym} #{e.message}"
49
+ end
50
+ end
51
+
52
+ send :define_method, method_writer_modder do |value, rank|
53
+ begin
54
+ ontology_annotation_tags = Ontology.find_or_create_by_name('Annotation Tags')
55
+ term = Term.find_or_create_by_name(:name => synonym, :ontology=> ontology_annotation_tags)
56
+ data = @entry.bioentry_qualifier_values.find_by_term_id_and_rank(term.term_id, rank)
57
+ if data.nil?
58
+ send method_writer_operator, value
59
+ else
60
+ data.value=value
61
+ data.save!
62
+ end
63
+ rescue Exception => e
64
+ puts "WriterModder Error: #{synonym} #{e.message}"
65
+ end
66
+ end
67
+
68
+ end
69
+ public
70
+ attr_reader :entry
71
+
72
+ def delete
73
+ @entry.destroy
74
+ end
75
+
76
+ def get_seqfeature(sf)
77
+
78
+ #in seqfeature BioSQL class
79
+ locations_str = sf.locations.map{|loc| loc.to_s}.join(',')
80
+ #pp sf.locations.inspect
81
+ locations_str = "join(#{locations_str})" if sf.locations.count>1
82
+ Bio::Feature.new(sf.type_term.name, locations_str,sf.seqfeature_qualifier_values.collect{|sfqv| Bio::Feature::Qualifier.new(sfqv.term.name,sfqv.value)})
83
+ end
84
+
85
+ def length=(len)
86
+ @entry.biosequence.length=len
87
+ end
88
+
89
+ def initialize(options={})
90
+ options.assert_valid_keys(:entry, :biodatabase_id,:biosequence)
91
+ return @entry = options[:entry] unless options[:entry].nil?
92
+
93
+ return to_biosql(options[:biosequence], options[:biodatabase_id]) unless options[:biosequence].nil? or options[:biodatabase_id].nil?
94
+
95
+ end
96
+
97
+ def to_biosql(bs,biodatabase_id)
98
+ #Transcaction works greatly!!!
99
+
100
+ #
101
+ begin
102
+ Bioentry.transaction do
103
+
104
+ @entry = Bioentry.new(:biodatabase_id=>biodatabase_id, :name=>bs.entry_id)
105
+
106
+ puts "primary" if $DEBUG
107
+ self.primary_accession = bs.primary_accession
108
+
109
+ puts "def" if $DEBUG
110
+ self.definition = bs.definition unless bs.definition.nil?
111
+
112
+ puts "seqver" if $DEBUG
113
+ self.sequence_version = bs.sequence_version || 0
114
+
115
+ puts "divi" if $DEBUG
116
+ self.division = bs.division unless bs.division.nil?
117
+
118
+ @entry.save!
119
+ puts "secacc" if $DEBUG
120
+
121
+ bs.secondary_accessions.each do |sa|
122
+ #write as qualifier every secondary accession into the array
123
+ self.secondary_accessions = sa
124
+ end unless bs.secondary_accessions.nil?
125
+
126
+
127
+ #to create the sequence entry needs to exists
128
+ puts "seq" if $DEBUG
129
+ puts bs.seq if $DEBUG
130
+ self.seq = bs.seq unless bs.seq.nil?
131
+ puts "mol" if $DEBUG
132
+
133
+ self.molecule_type = bs.molecule_type unless bs.molecule_type.nil?
134
+ puts "dc" if $DEBUG
135
+
136
+ self.data_class = bs.data_class unless bs.data_class.nil?
137
+ puts "top" if $DEBUG
138
+ self.topology = bs.topology unless bs.topology.nil?
139
+ puts "datec" if $DEBUG
140
+ self.date_created = bs.date_created unless bs.date_created.nil?
141
+ puts "datemod" if $DEBUG
142
+ self.date_modified = bs.date_modified unless bs.date_modified.nil?
143
+ puts "key" if $DEBUG
144
+
145
+ bs.keywords.each do |kw|
146
+ #write as qualifier every secondary accessions into the array
147
+ self.keywords = kw
148
+ end unless bs.keywords.nil?
149
+ #FIX: problem settinf taxon_name: embl has "Arabidopsis thaliana (thale cress)" but in taxon_name table there isn't this name. I must check if there is a new version of the table
150
+ puts "spec" if $DEBUG
151
+ self.species = bs.species unless bs.species.nil?
152
+ puts "Debug: #{bs.species}" if $DEBUG
153
+ puts "Debug: feat..start" if $DEBUG
154
+
155
+ bs.features.each do |feat|
156
+ self.feature=feat
157
+ end unless bs.features.nil?
158
+ puts "Debug: feat...end" if $DEBUG
159
+
160
+ #TODO: add comments and references
161
+ bs.references.each do |reference|
162
+ # puts reference.inspect
163
+ self.reference=reference
164
+ end unless bs.references.nil?
165
+
166
+ bs.comments.each do |comment|
167
+ self.comment=comment
168
+ end unless bs.comments.nil?
169
+
170
+ end #transaction
171
+ return self
172
+ rescue Exception => e
173
+ puts "to_biosql exception: #{e}"
174
+ puts $!
175
+ end #rescue
176
+ end #to_biosql
177
+
178
+
179
+ def name
180
+ @entry.name
181
+ end
182
+ alias entry_id name
183
+
184
+ def name=(value)
185
+ @entry.name=value
186
+ end
187
+ alias entry_id= name=
188
+
189
+ def primary_accession
190
+ @entry.accession
191
+ end
192
+
193
+ def primary_accession=(value)
194
+ @entry.accession=value
195
+ end
196
+
197
+ #TODO def secondary_accession
198
+ # @entry.bioentry_qualifier_values
199
+ # end
200
+
201
+ def organism
202
+ @entry.taxon.nil? ? "" : "#{@entry.taxon.taxon_scientific_name.name}"+ (@entry.taxon.taxon_genbank_common_name ? "(#{@entry.taxon.taxon_genbank_common_name.name})" : '')
203
+ end
204
+ alias species organism
205
+
206
+ def organism=(value)
207
+ taxon_name=TaxonName.find_by_name_and_name_class(value.gsub(/\s+\(.+\)/,''),'scientific name')
208
+ if taxon_name.nil?
209
+ puts "Error value doesn't exists in taxon_name table with scientific name constraint."
210
+ else
211
+ @entry.taxon_id=taxon_name.taxon_id
212
+ @entry.save!
213
+ end
214
+ end
215
+ alias species= organism=
216
+
217
+ def database
218
+ @entry.biodatabase.name
219
+ end
220
+
221
+ def database_desc
222
+ @entry.biodatabase.description
223
+ end
224
+
225
+ def version
226
+ @entry.version
227
+ end
228
+ alias sequence_version version
229
+
230
+ def version=(value)
231
+ @entry.version=value
232
+ end
233
+ alias sequence_version= version=
234
+
235
+ def division
236
+ @entry.division
237
+ end
238
+ def division=(value)
239
+ @entry.division=value
240
+ end
241
+
242
+ def description
243
+ @entry.description
244
+ end
245
+ alias definition description
246
+
247
+ def description=(value)
248
+ @entry.description=value
249
+ end
250
+ alias definition= description=
251
+
252
+ def identifier
253
+ @entry.identifier
254
+ end
255
+
256
+ def identifier=(value)
257
+ @entry.identifier=value
258
+ end
259
+
260
+ bioentry_qualifier_anchor :data_class
261
+ bioentry_qualifier_anchor :molecule_type, :synonym=>'mol_type'
262
+ bioentry_qualifier_anchor :topology
263
+ bioentry_qualifier_anchor :date_created
264
+ bioentry_qualifier_anchor :date_modified, :synonym=>'date_changed'
265
+ bioentry_qualifier_anchor :keywords, :synonym=>'keyword'
266
+ bioentry_qualifier_anchor :secondary_accessions, :synonym=>'secondary_accession'
267
+
268
+ def features
269
+ @entry.seqfeatures.collect {|sf|
270
+ self.get_seqfeature(sf)}
271
+ end
272
+
273
+ def feature=(feat)
274
+ #ToDo: avoid Ontology find here, probably more efficient create class variables
275
+ type_term_ontology = Ontology.find_or_create_by_name('SeqFeature Keys')
276
+ type_term = Term.find_or_create_by_name(:name=>feat.feature, :ontology=>type_term_ontology)
277
+ source_term_ontology = Ontology.find_or_create_by_name('SeqFeature Sources')
278
+ source_term = Term.find_or_create_by_name(:name=>'EMBLGenBankSwit',:ontology=>source_term_ontology)
279
+ seqfeature = Seqfeature.create(:bioentry=>@entry, :source_term=>source_term, :type_term=>type_term, :rank=>@entry.seqfeatures.count.succ, :display_name=>'')
280
+ #seqfeature.save!
281
+ feat.locations.each do |loc|
282
+ location = Location.new(:seqfeature=>seqfeature, :start_pos=>loc.from, :end_pos=>loc.to, :strand=>loc.strand, :rank=>seqfeature.locations.count.succ)
283
+ location.save!
284
+ end
285
+ qual_term_ontology = Ontology.find_or_create_by_name('Annotation Tags')
286
+ feat.each do |qualifier|
287
+ qual_term = Term.find_or_create_by_name(:name=>qualifier.qualifier, :ontology=>qual_term_ontology)
288
+ qual = SeqfeatureQualifierValue.new(:seqfeature=>seqfeature, :term=>qual_term, :value=>qualifier.value.to_s, :rank=>seqfeature.seqfeature_qualifier_values.count.succ)
289
+ qual.save!
290
+ end
291
+ end
292
+
293
+ #return the seqfeature mapped from BioSQL with a type_term like 'CDS'
294
+ def cdsfeatures
295
+ @entry.cdsfeatures
296
+ end
297
+
298
+ # Returns the sequence.
299
+ # Returns a Bio::Sequence::Generic object.
300
+
301
+ def seq
302
+ s = @entry.biosequence
303
+ Bio::Sequence::Generic.new(s ? s.seq : '')
304
+ end
305
+
306
+ def seq=(value)
307
+
308
+ #chk which type of alphabet is, NU/NA/nil
309
+ if @entry.biosequence.nil?
310
+ # puts "intoseq1"
311
+ @entry.biosequence = Biosequence.new(:seq=>value)
312
+ @entry.biosequence.save!
313
+
314
+ else
315
+ @entry.biosequence.seq=value
316
+ end
317
+ self.length=value.length
318
+ #@entry.biosequence.length=value.length
319
+ #break
320
+ @entry.save!
321
+ end
322
+
323
+ def taxonomy
324
+ tax = []
325
+ taxon = @entry.taxon
326
+ while taxon and taxon.taxon_id != taxon.parent_taxon_id
327
+ tax << taxon.taxon_scientific_name.name
328
+ #Note: I don't like this call very much, correct with a relationship in the ref class.
329
+ taxon = Taxon.find(taxon.parent_taxon_id)
330
+ end
331
+ tax.reverse
332
+ end
333
+
334
+ def length
335
+ @entry.biosequence.length
336
+ end
337
+
338
+ def references
339
+ #return and array of hash, hash has these keys ["title", "dbxref_id", "reference_id", "authors", "crc", "location"]
340
+ #probably would be better to d a class refrence to collect these informations
341
+ @entry.bioentry_references.collect do |bio_ref|
342
+ hash = Hash.new
343
+ hash['authors'] = bio_ref.reference.authors.gsub(/\.\s/, "\.\s\|").split(/\|/)
344
+
345
+ hash['sequence_position'] = "#{bio_ref.start_pos}-#{bio_ref.end_pos}" if (bio_ref.start_pos and bio_ref.end_pos)
346
+ hash['title'] = bio_ref.reference.title
347
+ hash['embl_gb_record_number'] = bio_ref.rank
348
+ #TODO: solve the problem with specific comment per reference.
349
+ #TODO: get dbxref
350
+ #take a look when location is build up in def reference=(value)
351
+
352
+ bio_ref.reference.location.split('|').each do |element|
353
+ key,value=element.split('=')
354
+ hash[key]=value
355
+ end unless bio_ref.reference.location.nil?
356
+
357
+ hash['xrefs'] = bio_ref.reference.dbxref ? "#{bio_ref.reference.dbxref.dbname}; #{bio_ref.reference.dbxref.accession}." : ''
358
+ Bio::Reference.new(hash)
359
+ end
360
+ end
361
+
362
+ def comments
363
+ @entry.comments.map do |comment|
364
+ comment.comment_text
365
+ end
366
+ end
367
+
368
+
369
+ def reference=(value)
370
+
371
+ locations=Array.new
372
+ locations << "journal=#{value.journal}" unless value.journal.empty?
373
+ locations << "volume=#{value.volume}" unless value.volume.empty?
374
+ locations << "issue=#{value.issue}" unless value.issue.empty?
375
+ locations << "pages=#{value.pages}" unless value.pages.empty?
376
+ locations << "year=#{value.year}" unless value.year.empty?
377
+ locations << "pubmed=#{value.pubmed}" unless value.pubmed.empty?
378
+ locations << "medline=#{value.medline}" unless value.medline.empty?
379
+ locations << "doi=#{value.doi}" unless value.doi.nil?
380
+ locations << "abstract=#{value.abstract}" unless value.abstract.empty?
381
+ locations << "url=#{value.url}" unless value.url.nil?
382
+ locations << "mesh=#{value.mesh}" unless value.mesh.empty?
383
+ locations << "affiliations=#{value.affiliations}" unless value.affiliations.empty?
384
+ locations << "comments=#{value.comments.join('~')}"unless value.comments.nil?
385
+ start_pos, end_pos = value.sequence_position ? value.sequence_position.gsub(/\s*/,'').split('-') : [nil,nil]
386
+ reference=Reference.find_or_create_by_title(:title=>value.title, :authors=>value.authors.join(' '), :location=>locations.join('|'))
387
+
388
+ bio_reference=BioentryReference.new(:bioentry=>@entry,:reference=>reference,:rank=>value.embl_gb_record_number, :start_pos=>start_pos, :end_pos=>end_pos)
389
+ bio_reference.save!
390
+ end
391
+
392
+ def comment=(value)
393
+ comment=Comment.new(:bioentry=>@entry, :comment_text=>value, :rank=>@entry.comments.count.succ)
394
+ comment.save!
395
+ end
396
+
397
+ def save
398
+ #I should add chks for SQL errors
399
+ @entry.biosequence.save!
400
+ @entry.save!
401
+ end
402
+ def to_fasta
403
+ #prima erano 2 print in stdout, meglio ritornare una stringa in modo che poi ci si possa fare quello che si vuole
404
+ #print ">" + accession + "\n"
405
+ #print seq.gsub(Regexp.new(".{1,#{60}}"), "\\0\n")
406
+ ">" + accession + "\n" + seq.gsub(Regexp.new(".{1,#{60}}"), "\\0\n")
407
+ end
408
+
409
+ def to_fasta_reverse_complememt
410
+ ">" + accession + "\n" + seq.reverse_complement.gsub(Regexp.new(".{1,#{60}}"), "\\0\n")
411
+ end
412
+
413
+
414
+
415
+ def to_biosequence
416
+ Bio::Sequence.adapter(self,Bio::Sequence::Adapter::BioSQL)
417
+ end
418
+ end #Sequence
419
+
420
+
421
+ end #SQL
422
+ end #Bio
423
+
424
+ #TODO create tests for sequence object, roundtrip of informations
425
+
426
+ if __FILE__ == $0
427
+
428
+ require 'bio'
429
+ require 'bio/io/sql'
430
+ require 'pp'
431
+
432
+ # connection = Bio::SQL.establish_connection('bio/io/biosql/config/database.yml','development')
433
+ connection = Bio::SQL.establish_connection({'development'=>{'database'=>"biorails_development", 'adapter'=>"postgresql", 'username'=>"rails", 'password'=>nil}},'development')
434
+ databases = Bio::SQL.list_databases
435
+
436
+ # parser = Bio::FlatFile.auto('/home/febo/Desktop/aj224122.embl')
437
+ parser = Bio::FlatFile.auto('/home/febo/Desktop/aj224122.gb')
438
+ #parser = Bio::FlatFile.auto('/home/febo/Desktop/aj224122.fasta')
439
+
440
+ parser.each do |entry|
441
+ biosequence = entry.to_biosequence
442
+ result = Bio::SQL::Sequence.new(:biosequence=>biosequence,:biodatabase_id=>databases.first[:id]) unless Bio::SQL.exists_accession(biosequence.primary_accession)
443
+
444
+ if result.nil?
445
+ pp "The sequence is already present into the biosql database"
446
+ else
447
+ # pp "Sequence"
448
+ puts result.to_biosequence.output(:genbank) #:embl
449
+ result.delete
450
+ end
451
+ end
452
+
453
+ if false
454
+ sqlseq = Bio::SQL.fetch_accession('AJ224122')
455
+ #only output tests.
456
+ pp "Connection"
457
+ pp connection
458
+ pp "Seq in dbs"
459
+ pp Bio::SQL.list_entries
460
+ #; NC_003098
461
+
462
+
463
+ #pp sqlseq
464
+ pp sqlseq.entry.inspect
465
+ pp "sequence"
466
+ #pp Bio::Sequence.auto(sqlseq.seq)
467
+ pp "entry_id"
468
+ pp sqlseq.entry_id
469
+
470
+ pp "primary"
471
+ pp sqlseq.accession
472
+ pp "secondary_accessions"
473
+ pp sqlseq.secondary_accessions
474
+ pp "molecule type"
475
+ pp sqlseq.molecule_type
476
+ pp "data_class"
477
+ pp sqlseq.data_class
478
+ pp "division"
479
+ pp sqlseq.division
480
+ # NOTE : Topology is not represented in biosql?
481
+ pp "topology"
482
+ #TODO: CIRCULAR this at present maps to bioentry_qualifier_value, though there are plans to make it a column in table biosequence.
483
+ pp sqlseq.topology
484
+ pp "version"
485
+ pp sqlseq.version
486
+ #sequence.date_created = nil #????
487
+ pp "date modified"
488
+ pp sqlseq.date_modified
489
+ pp "definition"
490
+ pp sqlseq.definition
491
+ pp "keywords"
492
+ pp sqlseq.keywords
493
+ pp "species"
494
+ pp sqlseq.organism
495
+ #sequence.classification = self.taxonomy.to_s.sub(/\.\z/, '').split(/\s*\;\s*/)"
496
+ pp "classification"
497
+ pp sqlseq.taxonomy
498
+ #sequence.organnella = nil # not used
499
+ pp "comments"
500
+ pp sqlseq.comments
501
+ pp "references"
502
+ pp sqlseq.references
503
+ pp "features"
504
+ pp sqlseq.features
505
+ puts sqlseq.to_biosequence.output(:embl)
506
+ end
507
+ ##
508
+ end