Class: Bio::Location
Overview
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
Instance Attribute Summary collapse
-
#carat ⇒ Object
(true, false or nil) true if the location indicates the site between two adjoining nucleotides.
-
#from ⇒ Object
(Integer) start position of the location.
-
#gt ⇒ Object
(true, false or nil) true if the position contains ‘>’.
-
#lt ⇒ Object
(true, false or nil) true if the position contains ‘<’.
-
#sequence ⇒ Object
(String) literal sequence of the location.
-
#strand ⇒ Object
(Integer) strand direction of the location (forward => 1 or complement => -1).
-
#to ⇒ Object
(Integer) end position of the location.
-
#xref_id ⇒ Object
(String) link to the external entry as GenBank ID.
Instance Method Summary collapse
-
#<=>(other) ⇒ Object
Check where a Bio::Location object is located compared to another Bio::Location object (mainly to facilitate the use of Comparable).
-
#==(other) ⇒ Object
If other is equal with the self, returns true.
-
#complement ⇒ Object
Complements the sequence location (i.e. alternates the strand).
-
#initialize(location = nil) ⇒ Location
constructor
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.
-
#range ⇒ Object
Returns the range (from..to) of the location as a Range object.
-
#replace(sequence) ⇒ Object
Replaces the sequence of the location.
Constructor Details
#initialize(location = nil) ⇒ Location
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:
-
(required) str: GenBank style position string (see Bio::Locations documentation)
- Returns
-
the Bio::Location object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# 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 |
Instance Attribute Details
#carat ⇒ Object
(true, false or nil) true if the location indicates the site between two adjoining nucleotides
122 123 124 |
# File 'lib/bio/location.rb', line 122 def carat @carat end |
#from ⇒ Object
(Integer) start position of the location
100 101 102 |
# File 'lib/bio/location.rb', line 100 def from @from end |
#gt ⇒ Object
(true, false or nil) true if the position contains ‘>’
115 116 117 |
# File 'lib/bio/location.rb', line 115 def gt @gt end |
#lt ⇒ Object
(true, false or nil) true if the position contains ‘<’
112 113 114 |
# File 'lib/bio/location.rb', line 112 def lt @lt end |
#sequence ⇒ Object
(String) literal sequence of the location
109 110 111 |
# File 'lib/bio/location.rb', line 109 def sequence @sequence end |
#strand ⇒ Object
(Integer) strand direction of the location (forward => 1 or complement => -1)
106 107 108 |
# File 'lib/bio/location.rb', line 106 def strand @strand end |
#to ⇒ Object
(Integer) end position of the location
102 103 104 |
# File 'lib/bio/location.rb', line 102 def to @to end |
#xref_id ⇒ Object
(String) link to the external entry as GenBank ID
118 119 120 |
# File 'lib/bio/location.rb', line 118 def xref_id @xref_id end |
Instance Method Details
#<=>(other) ⇒ Object
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:
-
(required) _other location_: a Bio::Location object
- 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
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# 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) ⇒ Object
If other is equal with the self, returns true. Otherwise, returns false.
Arguments:
-
(required) other: any object
- Returns
-
true or false
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
# 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 ⇒ Object
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
129 130 131 132 |
# File 'lib/bio/location.rb', line 129 def complement @strand *= -1 self # return Location object end |
#range ⇒ Object
Returns the range (from..to) of the location as a Range object.
146 147 148 |
# File 'lib/bio/location.rb', line 146 def range @from..@to end |
#replace(sequence) ⇒ Object
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
140 141 142 143 |
# File 'lib/bio/location.rb', line 140 def replace(sequence) @sequence = sequence.downcase self # return Location object end |