bio-genomic-interval
- Author
-
MISHIMA, Hiroyuki (hmishima AT nagasaki-u.ac.jp, missy AT be.to)
- Version
-
0.1.2
- Copyright
-
Copyright © MISHIMA, Hiroyuki, 2011
- License
-
the MIT/X11 license
A BioRuby plugin: handling genomic intervals,such as “chr1:123-456”, and overlaps between two intervals.
Install
$ gem install bio-genomic-interval
(sudo or switching to root may be required)
Usage
Generation of interval objects
a interval object be generated by like the following:
a = Bio::GenomicInterval.new("chr1", 123, 456)
a.to_s # => "chr1:123-456"
b = Bio::GenomicInterval.parse("chr1:123-456")
b.to_s # => "chr1:123-456"
b2 = Bio::GenomicInterval.parse("chr1:1,234,567-2,345,678")
b2.to_s # => "chr1:1234567-2345678" # ignoring ","
c = Bio::GenomicInetrval.zero_based("chr1", 122, 456)
c.to_s # => "chr1:123-456"
c.zero_start # => 122
Last one is generated from a “Zero-based half-closed[start, end)” interval , which used in UCSC Genobe Browser’s BED format, instead of usual “One-based full-closed [start, end]” intervals.
d = Bio::GenomicInetrval.zero_based("chr1", 100, 100)
d.to_s # => "chr1:101-101"
d.length # => 1
In the BED format, an insertion position is like “chr1:100-100”, whose size is 0. This interval is converted into “chr1:101-101” in the one-based format. Note that size is changed to 1.
Comparison
ref = Bio::GenomicInterval.parse("chr1:123-456")
cmp = Bio::GenomicInterval.parse("chr1:234-567")
ref.compare(cmp) # => :right_overlapped
ref.adjacent # => 20
near = Bio::GenomicInterval.parse("chr1:458-567")
ref.compare(cmp) # => :right_adjacent
ref.adjacent = 1
ref.compare(cmp) # => :right_off
Bio::GenomicInterval.compare returns one of the followings:
:different_chrom, :left_adjacent, :right_adjacent
:left_off, :right_off, :equal
:contained_by, :contains, :left_overlapped, :right_overlapped
Overlap metrics
-
When a overlap exist, return a positive integers (>1) for the overlap length.
-
When a overlap does not exist, return a zero or a negative (<= 0) for the space size between the intervals.
ref = Bio::GenomicInterval.parse("chr1:10-20")
cmp = Bio::GenomicInterval.parse("chr1:15-25")
ref.overlap(cmp) # => 6
cmp2 = Bio::GenomicInterval.parse("chr1:25-35")
ref.overlap(cmp2) # => -4
Expansion (or integration)
ref = Bio::GenomicInterval.parse("chr1:400-600")
other = Bio::GenomicInterval.parse("chr1:650-800")
ref.(other).to_s # => "chr1:400-800"
Center
obj1 = Bio::GenomicInterval.parse("chr1:1-3")
obj1.center # => "chr1:2-2"
obj2 = Bio::GenomicInterval.parse("chr2:1-4")
obj2.center # => "chr1:2-2"
And others
ref = Bio::GenomicInterval.parse("chr1:400-600")
other = Bio::GenomicInterval.parse("chr1:605-800")
ref.overlapped?(other) # => false
ref.nearly_overlapped?(other) # => true
ref.size # => 201
ref.chr_start -= 100
ref.chr_end += 100
ref.chrom = "chrX"
ref.to_s # => "chrX:300-700"
See also the Rspec file.
Contributing to bio-genomic-interval
Please do not hesitate to contanct the author by emails.
Copyright
Copyright © 2011 Hiroyuki Mishima. See LICENSE.txt for further details.