class Bio::Location

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

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

new(location = nil) click to toggle source

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

# File lib/bio/location.rb, line 45
  def initialize(location = nil)

    if location
      if location =~ /:/                                # (G) ID:location
        xref_id, location = location.split(':')
      end
      if location =~ /</                                # (I) <,>
        lt = true
      end
      if location =~ />/
        gt = true
      end
    end

    # s : start base, e : end base => from, to
    case location
    when /^[<>]?(\d+)$/                                 # (A, I) n
      s = e = $1.to_i
    when /^[<>]?(\d+)\.\.[<>]?(\d+)$/                   # (B, I) n..m
      s = $1.to_i
      e = $2.to_i
      if e - s < 0
#       raise "Error: invalid range : #{location}"
        $stderr.puts "[Warning] invalid range : #{location}" if $DEBUG
      end
    when /^[<>]?(\d+)\^[<>]?(\d+)$/                     # (C, I) n^m
      s = $1.to_i
      e = $2.to_i
      carat = true
      if e - s != 1 or e != 1 # assert n^n+1 or n^1
#       raise "Error: invalid range : #{location}"
        $stderr.puts "[Warning] invalid range : #{location}" if $DEBUG
      end
    when /^"?([ATGCatgc]+)"?$/                  # (H) literal sequence
      sequence = $1.downcase
      s = e = nil
    when nil
      ;
    else
      raise "Error: unknown location format : #{location}"
    end

    @from       = s             # start position of the location
    @to         = e             # end position of the location
    @strand     = 1             # strand direction of the location
                                #   forward => 1 or complement => -1
    @sequence   = sequence      # literal sequence of the location
    @lt         = lt            # true if the position contains '<'
    @gt         = gt            # true if the position contains '>'
    @xref_id    = xref_id       # link to the external entry as GenBank ID
    @carat      = carat         # true if the location indicates the site
                                # between two adjoining nucleotides
  end

Public Instance Methods

<=>(other) click to toggle source

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

# File lib/bio/location.rb, line 163
def <=>(other)
  if ! other.kind_of?(Bio::Location)
    return nil
  end

  if @from.to_f < other.from.to_f
    return -1
  elsif @from.to_f > other.from.to_f
    return 1
  end

  if @to.to_f < other.to.to_f
    return -1
  elsif @to.to_f > other.to.to_f
    return 1
  end
  return 0
end
==(other) click to toggle source

If other is equal with the self, returns true. Otherwise, returns false.


Arguments:

  • (required) other: any object

Returns

true or false

Calls superclass method
# File lib/bio/location.rb, line 188
def ==(other)
  return true if super(other)
  return false unless other.instance_of?(self.class)
  flag = false
  [ :from, :to, :strand, :sequence, :lt, :gt,
    :xref_id, :carat ].each do |m|
    begin
      flag = (self.__send__(m) == other.__send__(m))
    rescue NoMethodError, ArgumentError, NameError
      flag = false
    end
    break unless flag
  end
  flag
end
complement() click to toggle source

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

# File lib/bio/location.rb, line 129
def complement
  @strand *= -1
  self                                        # return Location object
end
range() click to toggle source

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

# File lib/bio/location.rb, line 146
def range
  @from..@to
end
replace(sequence) click to toggle source

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

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