bio 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
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