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.
- data/ChangeLog +3421 -0
- data/KNOWN_ISSUES.rdoc +88 -0
- data/README.rdoc +252 -0
- data/README_DEV.rdoc +285 -0
- data/Rakefile +143 -0
- data/bin/bioruby +0 -0
- data/bin/br_biofetch.rb +0 -0
- data/bin/br_bioflat.rb +12 -1
- data/bin/br_biogetseq.rb +0 -0
- data/bin/br_pmfetch.rb +4 -3
- data/bioruby.gemspec +477 -0
- data/bioruby.gemspec.erb +117 -0
- data/doc/Changes-0.7.rd +7 -0
- data/doc/Changes-1.3.rdoc +239 -0
- data/doc/Tutorial.rd +296 -184
- data/doc/Tutorial.rd.html +1031 -0
- data/doc/Tutorial.rd.ja +111 -45
- data/doc/Tutorial.rd.ja.html +2225 -0
- data/doc/bioruby.css +281 -0
- data/extconf.rb +2 -0
- data/lib/bio.rb +29 -4
- data/lib/bio/appl/blast.rb +306 -121
- data/lib/bio/appl/blast/ddbj.rb +142 -0
- data/lib/bio/appl/blast/format0.rb +35 -25
- data/lib/bio/appl/blast/format8.rb +2 -2
- data/lib/bio/appl/blast/genomenet.rb +263 -0
- data/lib/bio/appl/blast/ncbioptions.rb +220 -0
- data/lib/bio/appl/blast/remote.rb +106 -0
- data/lib/bio/appl/blast/report.rb +260 -9
- data/lib/bio/appl/blast/rexml.rb +12 -5
- data/lib/bio/appl/blast/rpsblast.rb +277 -0
- data/lib/bio/appl/blast/wublast.rb +133 -12
- data/lib/bio/appl/blast/xmlparser.rb +35 -18
- data/lib/bio/appl/blat/report.rb +46 -5
- data/lib/bio/appl/emboss.rb +62 -13
- data/lib/bio/appl/fasta.rb +9 -11
- data/lib/bio/appl/genscan/report.rb +3 -3
- data/lib/bio/appl/hmmer.rb +1 -1
- data/lib/bio/appl/hmmer/report.rb +10 -10
- data/lib/bio/appl/paml/baseml.rb +95 -0
- data/lib/bio/appl/paml/baseml/report.rb +32 -0
- data/lib/bio/appl/paml/codeml.rb +242 -0
- data/lib/bio/appl/paml/codeml/rates.rb +67 -0
- data/lib/bio/appl/paml/codeml/report.rb +67 -0
- data/lib/bio/appl/paml/common.rb +348 -0
- data/lib/bio/appl/paml/common_report.rb +38 -0
- data/lib/bio/appl/paml/yn00.rb +103 -0
- data/lib/bio/appl/paml/yn00/report.rb +32 -0
- data/lib/bio/appl/psort.rb +2 -2
- data/lib/bio/appl/pts1.rb +5 -5
- data/lib/bio/appl/tmhmm/report.rb +10 -1
- data/lib/bio/command.rb +297 -41
- data/lib/bio/compat/features.rb +157 -0
- data/lib/bio/compat/references.rb +128 -0
- data/lib/bio/db/biosql/biosql_to_biosequence.rb +67 -0
- data/lib/bio/db/biosql/sequence.rb +508 -0
- data/lib/bio/db/embl/common.rb +28 -12
- data/lib/bio/db/embl/embl.rb +107 -9
- data/lib/bio/db/embl/embl_to_biosequence.rb +85 -0
- data/lib/bio/db/embl/format_embl.rb +190 -0
- data/lib/bio/db/embl/sptr.rb +15 -16
- data/lib/bio/db/fantom.rb +6 -8
- data/lib/bio/db/fasta.rb +10 -507
- data/lib/bio/db/fasta/defline.rb +532 -0
- data/lib/bio/db/fasta/fasta_to_biosequence.rb +63 -0
- data/lib/bio/db/fasta/format_fasta.rb +97 -0
- data/lib/bio/db/genbank/common.rb +25 -8
- data/lib/bio/db/genbank/format_genbank.rb +187 -0
- data/lib/bio/db/genbank/genbank.rb +36 -1
- data/lib/bio/db/genbank/genbank_to_biosequence.rb +86 -0
- data/lib/bio/db/gff.rb +1791 -119
- data/lib/bio/db/kegg/glycan.rb +2 -6
- data/lib/bio/db/lasergene.rb +3 -3
- data/lib/bio/db/medline.rb +4 -1
- data/lib/bio/db/newick.rb +10 -10
- data/lib/bio/db/pdb/chain.rb +6 -2
- data/lib/bio/db/pdb/pdb.rb +12 -3
- data/lib/bio/db/rebase.rb +7 -8
- data/lib/bio/db/soft.rb +3 -3
- data/lib/bio/feature.rb +1 -88
- data/lib/bio/io/biosql/biodatabase.rb +64 -0
- data/lib/bio/io/biosql/bioentry.rb +29 -0
- data/lib/bio/io/biosql/bioentry_dbxref.rb +11 -0
- data/lib/bio/io/biosql/bioentry_path.rb +12 -0
- data/lib/bio/io/biosql/bioentry_qualifier_value.rb +10 -0
- data/lib/bio/io/biosql/bioentry_reference.rb +10 -0
- data/lib/bio/io/biosql/bioentry_relationship.rb +10 -0
- data/lib/bio/io/biosql/biosequence.rb +11 -0
- data/lib/bio/io/biosql/comment.rb +7 -0
- data/lib/bio/io/biosql/config/database.yml +20 -0
- data/lib/bio/io/biosql/dbxref.rb +13 -0
- data/lib/bio/io/biosql/dbxref_qualifier_value.rb +12 -0
- data/lib/bio/io/biosql/location.rb +32 -0
- data/lib/bio/io/biosql/location_qualifier_value.rb +11 -0
- data/lib/bio/io/biosql/ontology.rb +10 -0
- data/lib/bio/io/biosql/reference.rb +9 -0
- data/lib/bio/io/biosql/seqfeature.rb +32 -0
- data/lib/bio/io/biosql/seqfeature_dbxref.rb +11 -0
- data/lib/bio/io/biosql/seqfeature_path.rb +11 -0
- data/lib/bio/io/biosql/seqfeature_qualifier_value.rb +20 -0
- data/lib/bio/io/biosql/seqfeature_relationship.rb +11 -0
- data/lib/bio/io/biosql/taxon.rb +12 -0
- data/lib/bio/io/biosql/taxon_name.rb +9 -0
- data/lib/bio/io/biosql/term.rb +27 -0
- data/lib/bio/io/biosql/term_dbxref.rb +11 -0
- data/lib/bio/io/biosql/term_path.rb +12 -0
- data/lib/bio/io/biosql/term_relationship.rb +13 -0
- data/lib/bio/io/biosql/term_relationship_term.rb +11 -0
- data/lib/bio/io/biosql/term_synonym.rb +10 -0
- data/lib/bio/io/das.rb +7 -7
- data/lib/bio/io/ddbjxml.rb +57 -0
- data/lib/bio/io/ensembl.rb +2 -2
- data/lib/bio/io/fetch.rb +28 -14
- data/lib/bio/io/flatfile.rb +17 -853
- data/lib/bio/io/flatfile/autodetection.rb +545 -0
- data/lib/bio/io/flatfile/buffer.rb +237 -0
- data/lib/bio/io/flatfile/index.rb +17 -7
- data/lib/bio/io/flatfile/indexer.rb +30 -12
- data/lib/bio/io/flatfile/splitter.rb +297 -0
- data/lib/bio/io/hinv.rb +442 -0
- data/lib/bio/io/keggapi.rb +2 -2
- data/lib/bio/io/ncbirest.rb +733 -0
- data/lib/bio/io/pubmed.rb +34 -80
- data/lib/bio/io/registry.rb +2 -2
- data/lib/bio/io/sql.rb +178 -357
- data/lib/bio/io/togows.rb +458 -0
- data/lib/bio/location.rb +106 -11
- data/lib/bio/pathway.rb +120 -14
- data/lib/bio/reference.rb +115 -101
- data/lib/bio/sequence.rb +164 -183
- data/lib/bio/sequence/adapter.rb +108 -0
- data/lib/bio/sequence/common.rb +22 -45
- data/lib/bio/sequence/compat.rb +2 -2
- data/lib/bio/sequence/dblink.rb +54 -0
- data/lib/bio/sequence/format.rb +254 -77
- data/lib/bio/sequence/format_raw.rb +23 -0
- data/lib/bio/shell.rb +3 -1
- data/lib/bio/shell/core.rb +2 -2
- data/lib/bio/shell/plugin/entry.rb +33 -4
- data/lib/bio/shell/plugin/ncbirest.rb +64 -0
- data/lib/bio/shell/plugin/togows.rb +40 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/bioruby_generator.rb +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/_classes.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/_log.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/_methods.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/_modules.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/_variables.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby-bg.gif +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby-gem.png +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby-link.gif +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby.css +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby_controller.rb +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/bioruby_helper.rb +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/commands.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/history.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/index.rhtml +0 -0
- data/lib/bio/shell/rails/vendor/plugins/{generators → bioruby/generators}/bioruby/templates/spinner.gif +0 -0
- data/lib/bio/tree.rb +4 -2
- data/lib/bio/util/color_scheme.rb +2 -2
- data/lib/bio/util/contingency_table.rb +2 -2
- data/lib/bio/util/restriction_enzyme.rb +2 -2
- data/lib/bio/util/restriction_enzyme/single_strand.rb +6 -5
- data/lib/bio/version.rb +25 -0
- data/rdoc.zsh +8 -0
- data/sample/any2fasta.rb +0 -0
- data/sample/biofetch.rb +0 -0
- data/sample/dbget +0 -0
- data/sample/demo_sequence.rb +158 -0
- data/sample/enzymes.rb +0 -0
- data/sample/fasta2tab.rb +0 -0
- data/sample/fastagrep.rb +72 -0
- data/sample/fastasort.rb +54 -0
- data/sample/fsplit.rb +0 -0
- data/sample/gb2fasta.rb +2 -3
- data/sample/gb2tab.rb +0 -0
- data/sample/gbtab2mysql.rb +0 -0
- data/sample/genes2nuc.rb +0 -0
- data/sample/genes2pep.rb +0 -0
- data/sample/genes2tab.rb +0 -0
- data/sample/genome2rb.rb +0 -0
- data/sample/genome2tab.rb +0 -0
- data/sample/goslim.rb +0 -0
- data/sample/gt2fasta.rb +0 -0
- data/sample/na2aa.rb +34 -0
- data/sample/pmfetch.rb +0 -0
- data/sample/pmsearch.rb +0 -0
- data/sample/ssearch2tab.rb +0 -0
- data/sample/tfastx2tab.rb +0 -0
- data/sample/vs-genes.rb +0 -0
- data/setup.rb +1596 -0
- data/test/data/blast/blastp-multi.m7 +188 -0
- data/test/data/command/echoarg2.bat +1 -0
- data/test/data/paml/codeml/control_file.txt +30 -0
- data/test/data/paml/codeml/output.txt +78 -0
- data/test/data/paml/codeml/rates +217 -0
- data/test/data/rpsblast/misc.rpsblast +193 -0
- data/test/data/soft/GDS100_partial.soft +0 -0
- data/test/data/soft/GSE3457_family_partial.soft +0 -0
- data/test/functional/bio/appl/test_pts1.rb +115 -0
- data/test/functional/bio/io/test_ensembl.rb +123 -80
- data/test/functional/bio/io/test_togows.rb +267 -0
- data/test/functional/bio/sequence/test_output_embl.rb +51 -0
- data/test/functional/bio/test_command.rb +301 -0
- data/test/runner.rb +17 -1
- data/test/unit/bio/appl/blast/test_ncbioptions.rb +112 -0
- data/test/unit/bio/appl/blast/test_report.rb +753 -35
- data/test/unit/bio/appl/blast/test_rpsblast.rb +398 -0
- data/test/unit/bio/appl/paml/codeml/test_rates.rb +45 -0
- data/test/unit/bio/appl/paml/codeml/test_report.rb +45 -0
- data/test/unit/bio/appl/paml/test_codeml.rb +174 -0
- data/test/unit/bio/appl/test_blast.rb +135 -4
- data/test/unit/bio/appl/test_fasta.rb +2 -2
- data/test/unit/bio/appl/test_pts1.rb +1 -64
- data/test/unit/bio/db/embl/test_common.rb +15 -15
- data/test/unit/bio/db/embl/test_embl.rb +4 -4
- data/test/unit/bio/db/embl/test_embl_rel89.rb +5 -5
- data/test/unit/bio/db/embl/test_embl_to_bioseq.rb +203 -0
- data/test/unit/bio/db/embl/test_sptr.rb +38 -1
- data/test/unit/bio/db/pdb/test_pdb.rb +2 -2
- data/test/unit/bio/db/test_gff.rb +1151 -25
- data/test/unit/bio/db/test_medline.rb +127 -0
- data/test/unit/bio/db/test_nexus.rb +5 -1
- data/test/unit/bio/db/test_prosite.rb +4 -4
- data/test/unit/bio/io/flatfile/test_autodetection.rb +375 -0
- data/test/unit/bio/io/flatfile/test_buffer.rb +251 -0
- data/test/unit/bio/io/flatfile/test_splitter.rb +369 -0
- data/test/unit/bio/io/test_ddbjxml.rb +8 -3
- data/test/unit/bio/io/test_fastacmd.rb +5 -5
- data/test/unit/bio/io/test_flatfile.rb +357 -106
- data/test/unit/bio/io/test_soapwsdl.rb +2 -2
- data/test/unit/bio/io/test_togows.rb +161 -0
- data/test/unit/bio/sequence/test_common.rb +210 -11
- data/test/unit/bio/sequence/test_compat.rb +3 -3
- data/test/unit/bio/sequence/test_dblink.rb +58 -0
- data/test/unit/bio/sequence/test_na.rb +2 -2
- data/test/unit/bio/test_command.rb +111 -50
- data/test/unit/bio/test_feature.rb +29 -1
- data/test/unit/bio/test_location.rb +566 -6
- data/test/unit/bio/test_pathway.rb +91 -65
- data/test/unit/bio/test_reference.rb +67 -13
- data/test/unit/bio/util/restriction_enzyme/analysis/test_calculated_cuts.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/analysis/test_cut_ranges.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/analysis/test_sequence_range.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/double_stranded/test_aligned_strands.rb +4 -3
- data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_location_pair.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_location_pair_in_enzyme_notation.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_locations.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/double_stranded/test_cut_locations_in_enzyme_notation.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/single_strand/test_cut_locations_in_enzyme_notation.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/test_analysis.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/test_cut_symbol.rb +4 -4
- data/test/unit/bio/util/restriction_enzyme/test_double_stranded.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/test_single_strand.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/test_single_strand_complement.rb +3 -3
- data/test/unit/bio/util/restriction_enzyme/test_string_formatting.rb +3 -3
- data/test/unit/bio/util/test_restriction_enzyme.rb +3 -3
- metadata +202 -167
- 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
|