class Bio::SQL::Sequence

Attributes

entry[R]

Public Class Methods

new(options={}) click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 106
def initialize(options={})
  #options.assert_valid_keys(:entry, :biodatabase,:biosequence)
  return @entry = options[:entry] unless options[:entry].nil?

  return to_biosql(options[:biosequence], options[:biodatabase]) unless options[:biosequence].nil? or options[:biodatabase].nil?

end

Public Instance Methods

cdsfeatures() click to toggle source

return the seqfeature mapped from BioSQL with a type_term like 'CDS'

# File lib/bio/db/biosql/sequence.rb, line 323
def cdsfeatures
  @entry.cdsfeatures
end
comment=(value) click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 420
def comment=(value)
  #DELETE        comment=Comment.new({:bioentry=>@entry, :comment_text=>value, :rank=>@entry.comments.count.succ})
  comment = @entry.comments.build({:comment_text=>value, :rank=>@entry.comments.count.succ})
  comment.save
end
comments() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 393
def comments
  @entry.comments.map do |comment|
    comment.comment_text
  end
end
database() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 234
def database
  @entry.biodatabase.name
end
database_desc() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 238
def database_desc
  @entry.biodatabase.description
end
definition()
Alias for: description
definition=(value)
Alias for: description=
delete() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 85
def delete
  #TODO: check is references connected to this bioentry are leaf or not.
  #actually I think it should be more sofisticated, check if there are
  #other bioentries connected to references; if not delete 'em
  @entry.references.each { |ref| ref.delete if ref.bioentries.size==1}
  @entry.destroy
end
description() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 260
def description
  @entry.description
end
Also aliased as: definition
description=(value) click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 265
def description=(value)
  @entry.description=value
end
Also aliased as: definition=
division() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 252
def division
  @entry.division
end
division=(value) click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 256
def division=(value)
  @entry.division=value
end
entry_id()
Alias for: name
entry_id=(value)
Alias for: name=
feature=(feat) click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 293
def feature=(feat)
  #ToDo: avoid Ontology find here, probably more efficient create class variables
  #DELETE        type_term_ontology = Ontology.find_or_create({:name=>'SeqFeature Keys'})
  puts "feature:type_term = #{feat.feature}" if $DEBUG
  type_term = Term.first(:conditions=>["name = ?", feat.feature]) || Term.create({:name=>feat.feature, :ontology=>Ontology.first(:conditions=>["name = ?",'SeqFeature Keys'])})
  #DELETE        source_term_ontology = Ontology.find_or_create({:name=>'SeqFeature Sources'})
  puts "feature:source_term" if $DEBUG
  source_term = Term.first(:conditions=>["name = ?",'EMBLGenBankSwit'])
  puts "feature:seqfeature" if $DEBUG
  seqfeature = @entry.seqfeatures.build({:source_term=>source_term, :type_term=>type_term, :rank=>@entry.seqfeatures.count.succ, :display_name=>''})
  seqfeature.save
  puts "feature:location" if $DEBUG
  feat.locations.each do |loc|
    location = seqfeature.locations.build({:seqfeature=>seqfeature, :start_pos=>loc.from, :end_pos=>loc.to, :strand=>loc.strand, :rank=>seqfeature.locations.count.succ})
    location.save
  end

  #DELETE        qual_term_ontology = Ontology.find_or_create({:name=>'Annotation Tags'})

  puts "feature:qualifier" if $DEBUG
  feat.each do |qualifier|
    #DELETE          qual_term = Term.find_or_create({:name=>qualifier.qualifier}, {:ontology=>qual_term_ontology})
    qual_term = Term.first(:conditions=>["name = ?", qualifier.qualifier]) || Term.create({:name=>qualifier.qualifier, :ontology=>Ontology.first(:conditions=>["name = ?", 'Annotation Tags'])})
    qual = seqfeature.seqfeature_qualifier_values.build({:seqfeature=>seqfeature, :term=>qual_term, :value=>qualifier.value.to_s, :rank=>seqfeature.seqfeature_qualifier_values.count.succ})
    qual.save

  end
end
features() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 287
def features
  @entry.seqfeatures.collect do |sf|
    self.get_seqfeature(sf)
  end
end
get_seqfeature(sf) click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 93
def get_seqfeature(sf)

  #in seqfeature BioSQL class
  locations_str = sf.locations.map{|loc| loc.to_s}.join(',')
  #pp sf.locations.inspect
  locations_str = "join(#{locations_str})" if sf.locations.count>1
  Bio::Feature.new(sf.type_term.name, locations_str,sf.seqfeature_qualifier_values.collect{|sfqv| Bio::Feature::Qualifier.new(sfqv.term.name,sfqv.value)})
end
identifier() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 270
def identifier
  @entry.identifier
end
Also aliased as: other_seqids
identifier=(value) click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 275
def identifier=(value)
  @entry.identifier=value
end
length() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 365
def length
  @entry.biosequence.length
end
length=(len) click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 102
def length=(len)
  @entry.biosequence.length=len
end
name() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 195
def name
  @entry.name
end
Also aliased as: entry_id
name=(value) click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 200
def name=(value)
  @entry.name=value
end
Also aliased as: entry_id=
organism() click to toggle source

TODO def secondary_accession

  @entry.bioentry_qualifier_values
end
# File lib/bio/db/biosql/sequence.rb, line 217
def organism
  @entry.taxon.nil? ? "" : "#{@entry.taxon.taxon_scientific_name.name}"+ (@entry.taxon.taxon_genbank_common_name ? "(#{@entry.taxon.taxon_genbank_common_name.name})" : '')
end
Also aliased as: species
organism=(value) click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 222
def organism=(value)
  #FIX there is a shortcut
  taxon_name=TaxonName.first(:conditions=>["name = ? and name_class = ?",value.gsub(/\s+\(.+\)/,''),'scientific name'])
  if taxon_name.nil?
    puts "Error value doesn't exists in taxon_name table with scientific name constraint."
  else
    @entry.taxon_id=taxon_name.taxon_id
    @entry.save
  end
end
Also aliased as: species=
other_seqids()
Alias for: identifier
primary_accession() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 205
def primary_accession
  @entry.accession
end
primary_accession=(value) click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 209
def primary_accession=(value)
  @entry.accession=value
end
reference=(value) click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 399
def reference=(value)       
  locations=Array.new
  locations << "journal=#{value.journal}" unless value.journal.empty?
  locations << "volume=#{value.volume}" unless value.volume.empty?
  locations << "issue=#{value.issue}" unless value.issue.empty?
  locations << "pages=#{value.pages}" unless value.pages.empty?
  locations << "year=#{value.year}" unless value.year.empty?
  locations << "pubmed=#{value.pubmed}" unless value.pubmed.empty?
  locations << "medline=#{value.medline}" unless value.medline.empty?
  locations << "doi=#{value.doi}" unless value.doi.nil?
  locations << "abstract=#{value.abstract}" unless value.abstract.empty?
  locations << "url=#{value.url}" unless value.url.nil?
  locations << "mesh=#{value.mesh}" unless value.mesh.empty?
  locations << "affiliations=#{value.affiliations}" unless value.affiliations.empty?
  locations << "comments=#{value.comments.join('~')}"unless value.comments.nil?
  start_pos, end_pos = value.sequence_position ? value.sequence_position.gsub(/\s*/,'').split('-') : [nil,nil]
  reference= Reference.first(:conditions=>["title = ?",value.title]) || Reference.create({:title=>value.title,:authors=>value.authors.join(' '), :location=>locations.join('|')})
  bio_reference=@entry.bioentry_references.build({:reference=>reference,:rank=>value.embl_gb_record_number, :start_pos=>start_pos, :end_pos=>end_pos})
  bio_reference.save
end
references() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 369
def references
  #return and array of hash, hash has these keys ["title", "dbxref_id", "reference_id", "authors", "crc", "location"]
  #probably would be better to d a class refrence to collect these informations
  @entry.bioentry_references.collect do |bio_ref|
    hash = Hash.new
    hash['authors'] = bio_ref.reference.authors.gsub(/\.\s/, "\.\s\|").split(/\|/) if (bio_ref.reference and bio_ref.reference.authors)

    hash['sequence_position'] = "#{bio_ref.start_pos}-#{bio_ref.end_pos}" if (bio_ref.start_pos and bio_ref.end_pos)
    hash['title'] = bio_ref.reference.title
    hash['embl_gb_record_number'] = bio_ref.rank
    #TODO: solve the problem with specific comment per reference.
    #TODO: get dbxref
    #take a look when location is build up in def reference=(value)

    bio_ref.reference.location.split('|').each do |element|
      key,value=element.split('=')
      hash[key]=value
    end unless bio_ref.reference.location.nil?

    hash['xrefs'] = bio_ref.reference.dbxref ? "#{bio_ref.reference.dbxref.dbname}; #{bio_ref.reference.dbxref.accession}." : ''
    Bio::Reference.new(hash)
  end
end
save() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 426
def save
  #I should add chks for SQL errors
  @entry.biosequence.save
  @entry.save
end
seq() click to toggle source

Returns the sequence. Returns a Bio::Sequence::Generic object.

# File lib/bio/db/biosql/sequence.rb, line 330
def seq
  s = @entry.biosequence
  Bio::Sequence::Generic.new(s ? s.seq : '')
end
seq=(value) click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 335
def seq=(value)
  #TODO: revise this piece of code.
  #chk which type of alphabet is, NU/NA/nil
  if @entry.biosequence.nil?
    #DELETE          puts "intoseq1"
    @entry.biosequence = Biosequence.new(:seq=>value)
    #          biosequence = @entry.biosequence.build({:seq=>value})
    @entry.biosequence.save
    #          biosequence.save
  else
    @entry.biosequence.seq=value
  end
  self.length=value.length
  #DELETE        #@entry.biosequence.length=value.length
  #DELETE        #break
  @entry.save
end
sequence_version()
Alias for: version
sequence_version=(value)
Alias for: version=
species()
Alias for: organism
species=(value)
Alias for: organism=
taxonomy() click to toggle source

report parents and exclude info with “no rank”. Now I report rank == class but … Question ? Have to be reported taxonomy with rank==“class”?

# File lib/bio/db/biosql/sequence.rb, line 354
def taxonomy
  tax = []
  taxon = Taxon.first(:conditions=>["taxon_id = ?",@entry.taxon.parent_taxon_id])
  while taxon and taxon.taxon_id != taxon.parent_taxon_id and taxon.node_rank!='no rank'
    tax << taxon.taxon_scientific_name.name if taxon.node_rank!='class'
    #Note: I don't like this call very much, correct with a relationship in the ref class.
    taxon = Taxon.first(:conditions=>["taxon_id = ?",taxon.parent_taxon_id])
  end
  tax.reverse
end
to_biosequence() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 439
def to_biosequence
  Bio::Sequence.adapter(self,Bio::Sequence::Adapter::BioSQL)
end
to_biosql(bs,biodatabase) click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 114
def to_biosql(bs,biodatabase)
  #DELETE        #Transcaction works greatly!!!
  begin
    #DELETE          Bioentry.transaction do
    @entry = biodatabase.bioentries.build({:name=>bs.entry_id})

    puts "primary" if $DEBUG
    self.primary_accession = bs.primary_accession

    puts "def" if $DEBUG
    self.definition = bs.definition unless bs.definition.nil?

    puts "seqver" if $DEBUG
    self.sequence_version = bs.sequence_version || 0

    puts "divi" if $DEBUG
    self.division = bs.division unless bs.division.nil?

    puts "identifier" if $DEBUG
    self.identifier = bs.other_seqids.collect{|dblink| "#{dblink.database}:#{dblink.id}"}.join(';') unless bs.other_seqids.nil?
    @entry.save
    puts "secacc" if $DEBUG

    bs.secondary_accessions.each do |sa|
      puts "#{sa}" if $DEBUG
      #write as qualifier every secondary accession into the array
      self.secondary_accessions = sa
    end unless bs.secondary_accessions.nil?


    #to create the sequence entry needs to exists
    puts "seq" if $DEBUG
    puts bs.seq if $DEBUG
    self.seq = bs.seq unless bs.seq.nil?
    puts "mol" if $DEBUG

    self.molecule_type = bs.molecule_type unless bs.molecule_type.nil?
    puts "dc" if $DEBUG

    self.data_class = bs.data_class unless bs.data_class.nil?
    puts "top" if $DEBUG
    self.topology = bs.topology unless bs.topology.nil?
    puts "datec" if $DEBUG
    self.date_created = bs.date_created unless bs.date_created.nil?
    puts "datemod" if $DEBUG
    self.date_modified = bs.date_modified unless bs.date_modified.nil?
    puts "key" if $DEBUG

    bs.keywords.each do |kw|
      #write as qualifier every secondary accessions into the array
      self.keywords = kw
    end unless bs.keywords.nil?

    puts "spec" if $DEBUG
    #self.species = bs.species unless bs.species.nil?
    self.species = bs.species unless bs.species.empty?
    puts "Debug: #{bs.species}" if $DEBUG
    puts "Debug: feat..start" if $DEBUG

    bs.features.each do |feat|
      self.feature=feat
    end unless bs.features.nil?

    puts "Debug: feat...end" if $DEBUG
    bs.references.each do |reference|
      self.reference=reference
    end unless bs.references.nil?

    bs.comments.each do |comment|
      self.comment=comment
    end unless bs.comments.nil?

    #DELETE          end #transaction
    return self
  rescue Exception => e
    puts "to_biosql exception: #{e}"
    puts $!
  end #rescue
end
to_fasta() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 431
def to_fasta
  ">" + accession + "\n" + seq.gsub(Regexp.new(".{1,#{60}}"), "\\0\n")
end
to_fasta_reverse_complememt() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 435
def to_fasta_reverse_complememt
  ">" + accession + "\n" + seq.reverse_complement.gsub(Regexp.new(".{1,#{60}}"), "\\0\n")
end
version() click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 242
def version
  @entry.version
end
Also aliased as: sequence_version
version=(value) click to toggle source
# File lib/bio/db/biosql/sequence.rb, line 247
def version=(value)
  @entry.version=value
end
Also aliased as: sequence_version=