Class Bio::Location
In: lib/bio/location.rb
Parent: Object

Description

The Bio::Location class describes the position of a genomic locus. Typically, Bio::Location objects are created automatically when the user creates a Bio::Locations object, instead of initialized directly.

Usage

  location = Bio::Location.new('500..550')
  puts "start=" + location.from.to_s + ";end=" + location.to.to_s

  #, or better: through Bio::Locations
  locations = Bio::Locations.new('500..550')
  locations.each do |location|
    puts "start=" + location.from.to_s + ";end=" + location.to.to_s
  end

Methods

<=>   complement   new   range   replace  

Included Modules

Comparable

Attributes

carat  [RW]  (true, false or nil) true if the location indicates the site between two adjoining nucleotides
from  [RW]  (Integer) start position of the location
gt  [RW]  (true, false or nil) true if the position contains ’>’
lt  [RW]  (true, false or nil) true if the position contains ’<’
sequence  [RW]  (String) literal sequence of the location
strand  [RW]  (Integer) strand direction of the location (forward => 1 or complement => -1)
to  [RW]  (Integer) end position of the location
xref_id  [RW]  (String) link to the external entry as GenBank ID

Public Class methods

Parses a‘location’ segment, which can be ‘ID:’ + (‘n’ or ‘n..m’ or ‘n^m’ or "seq") with ’<’ or ’>’, and returns a Bio::Location object.

  location = Bio::Location.new('500..550')

Arguments:

Returns:the Bio::Location object

[Source]

    # File lib/bio/location.rb, line 45
45:   def initialize(location = nil)
46: 
47:     if location
48:       if location =~ /:/                                # (G) ID:location
49:         xref_id, location = location.split(':')
50:       end
51:       if location =~ /</                                # (I) <,>
52:         lt = true
53:       end
54:       if location =~ />/
55:         gt = true
56:       end
57:     end
58: 
59:     # s : start base, e : end base => from, to
60:     case location
61:     when /^[<>]?(\d+)$/                                 # (A, I) n
62:       s = e = $1.to_i
63:     when /^[<>]?(\d+)\.\.[<>]?(\d+)$/                   # (B, I) n..m
64:       s = $1.to_i
65:       e = $2.to_i
66:       if e - s < 0
67: #       raise "Error: invalid range : #{location}"
68:         $stderr.puts "[Warning] invalid range : #{location}" if $DEBUG
69:       end
70:     when /^[<>]?(\d+)\^[<>]?(\d+)$/                     # (C, I) n^m
71:       s = $1.to_i
72:       e = $2.to_i
73:       carat = true
74:       if e - s != 1 or e != 1 # assert n^n+1 or n^1
75: #       raise "Error: invalid range : #{location}"
76:         $stderr.puts "[Warning] invalid range : #{location}" if $DEBUG
77:       end
78:     when /^"?([ATGCatgc]+)"?$/                  # (H) literal sequence
79:       sequence = $1.downcase
80:       s = e = nil
81:     when nil
82:       ;
83:     else
84:       raise "Error: unknown location format : #{location}"
85:     end
86: 
87:     @from       = s             # start position of the location
88:     @to         = e             # end position of the location
89:     @strand     = 1             # strand direction of the location
90:                                 #   forward => 1 or complement => -1
91:     @sequence   = sequence      # literal sequence of the location
92:     @lt         = lt            # true if the position contains '<'
93:     @gt         = gt            # true if the position contains '>'
94:     @xref_id    = xref_id       # link to the external entry as GenBank ID
95:     @carat      = carat         # true if the location indicates the site
96:                                 # between two adjoining nucleotides
97:   end

Public Instance methods

Check where a Bio::Location object is located compared to another Bio::Location object (mainly to facilitate the use of Comparable). A location A is upstream of location B if the start position of location A is smaller than the start position of location B. If they‘re the same, the end positions are checked.


Arguments:

Returns::

  • 1 if self < other location
  • -1 if self > other location
  • 0 if both location are the same
  • nil if the argument is not a Bio::Location object

[Source]

     # File lib/bio/location.rb, line 163
163:   def <=>(other)
164:     if ! other.kind_of?(Bio::Location)
165:       return nil
166:     end
167: 
168:     if @from.to_f < other.from.to_f
169:       return -1
170:     elsif @from.to_f > other.from.to_f
171:       return 1
172:     end
173: 
174:     if @to.to_f < other.to.to_f
175:       return -1
176:     elsif @to.to_f > other.to.to_f
177:       return 1
178:     end
179:     return 0
180:   end

Complements the sequence location (i.e. alternates the strand). Note that it is destructive method (i.e. modifies itself), but it does not modify the "sequence" attribute.


Returns:the Bio::Location object

[Source]

     # File lib/bio/location.rb, line 129
129:   def complement
130:     @strand *= -1
131:     self                                        # return Location object
132:   end

Returns the range (from..to) of the location as a Range object.

[Source]

     # File lib/bio/location.rb, line 146
146:   def range
147:     @from..@to
148:   end

Replaces the sequence of the location.


Arguments:

  • (required) sequence: sequence to be used to replace the sequence at the location
Returns:the Bio::Location object

[Source]

     # File lib/bio/location.rb, line 140
140:   def replace(sequence)
141:     @sequence = sequence.downcase
142:     self                                        # return Location object
143:   end

[Validate]