bio-ucsc-util 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ v268
@@ -0,0 +1,52 @@
1
+ # == ucsc_util.rb
2
+ # This file contains the UcscUtil class implementing the ucsc utility programs
3
+ #
4
+ # == Contact
5
+ #
6
+ # Author:: Nicholas A. Thrower
7
+ # Copyright:: Copyright (c) 2012 Nicholas A Thrower
8
+ # License:: See LICENSE.txt for more details
9
+
10
+ # :nodoc:
11
+ module Bio
12
+ # -
13
+ module Ucsc
14
+ class Util
15
+ # UcscUtil implements the utility programs from the ucsc source as class methods.
16
+ # Names are converted by ruby convention to snake case (underscore) based on the camel case C routines
17
+ require 'bio/ucsc/binding'
18
+ # Converts ascii Wig file to binary BigWig
19
+ # - :wig_file => input wiggle file
20
+ # - :chrom_file => two column file: <chromosome name> <size in bases> for each entry
21
+ # - :big_wig_file => output indexed file
22
+ # Options:
23
+ # * :blockSize => Number of items to bundle in r-tree [256]
24
+ # * :itemsPerSlot => Number of data points bundled at lowest level [1024]
25
+ # * :clip => If set just issue warning messages rather than dying if wig file contains items off end of chromosome
26
+ # * :unc => If set, do not use compression
27
+ def self.wig_to_big_wig(wig_file, chrom_file, big_wig_file, opts={})
28
+ block_size = opts[:block_size]||256
29
+ items_per_slot = opts[:items_per_slot]||1024
30
+ clip = opts[:clip]||false
31
+ unc = opts[:unc]||false
32
+ do_compress = !unc
33
+ Binding::bigWigFileCreate(wig_file,chrom_file,block_size,items_per_slot,clip,do_compress,big_wig_file)
34
+ return BigWig.open(big_wig_file)
35
+ end
36
+ # Converts ascii bedGraph file to binary bigWig.
37
+ # The input bedGraph file must be sorted, use the unix sort command:
38
+ # sort -k1,1 -k2,2n unsorted.bedGraph > sorted.bedGraph
39
+ # - :bed_file => input bedGraph
40
+ # - :chrom_file => two column file: <chromosome name> <size in bases> for each entry
41
+ # - :big_wig_file => output indexed file
42
+ def self.bed_graph_to_big_wig(wig_file, chrom_file, big_wig_file, opts={})
43
+ block_size = opts[:block_size]||256
44
+ items_per_slot = opts[:items_per_slot]||1024
45
+ unc = opts[:unc]||false
46
+ do_compress = !unc
47
+ Binding::bedGraphToBigWig(wig_file,chrom_file,block_size,items_per_slot,do_compress,big_wig_file)
48
+ return BigWig.open(big_wig_file)
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,12 @@
1
+ chr1 1 2 1
2
+ chr1 2 3 5
3
+ chr1 3 4 5
4
+ chr1 4 5 10
5
+ chr1 5 6 10
6
+ chr1 9 10 5
7
+ chr1 10 11 1
8
+ chr2 1 2 1
9
+ chr2 2 3 5
10
+ chr2 3 4 5
11
+ chr2 4 5 5
12
+ chr2 5 6 1
Binary file
@@ -0,0 +1,20 @@
1
+ variableStep chrom=chr1 span=1
2
+ 1 1
3
+ 2 5
4
+ 3 5
5
+ 4 10
6
+ 5 10
7
+ 9 5
8
+ 10 1
9
+ variableStep chrom=chr2 span=1
10
+ 1 2
11
+ 2 5
12
+ 3 5
13
+ 4 5
14
+ 5 8
15
+ variableStep chrom=chr3 span=1
16
+ 1 1
17
+ 2 1
18
+ 3 2
19
+ 4 3
20
+ 5 3
Binary file
@@ -0,0 +1,3 @@
1
+ chr1 5000
2
+ chr2 2500
3
+ chr3 10000
@@ -0,0 +1,20 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ require 'simplecov'
4
+ SimpleCov.start
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'test/unit'
13
+ require 'shoulda'
14
+
15
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
16
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
17
+ require 'bio-ucsc-util'
18
+
19
+ class Test::Unit::TestCase
20
+ end
@@ -0,0 +1,162 @@
1
+ require 'helper'
2
+
3
+ class TestBioUcscUtil < Test::Unit::TestCase
4
+ include Bio::Ucsc
5
+ TEST_BW = "test/1.bw"
6
+ TEST_WIG = "test/1.wig"
7
+ TEST_BED = "test/1.bed"
8
+ TEST_WIG_OUT = "test/1.wig.bw"
9
+ TEST_BED_OUT = "test/2.bed.bw"
10
+ CHROM_FILE = "test/chrom.sizes"
11
+ BAD_FILE = 'test/not_existing_file'
12
+ TEST_SMOOTH_FILE = 'test/1_smoothed.bw'
13
+ TEST_SMOOTH_OUT_FILE = 'test/smoothed.bw'
14
+
15
+ context "a new big wig" do
16
+ setup do
17
+ @bw = BigWig.new
18
+ end
19
+ should "not be open and have no filename" do
20
+ assert_equal nil, @bw.bbi_file
21
+ assert_equal nil, @bw.filename
22
+ end
23
+ should "allowing setting filename" do
24
+ @bw.filename = TEST_BW
25
+ assert_equal TEST_BW, @bw.filename
26
+ end
27
+ should "report no filename on open" do
28
+ assert_raise ArgumentError do
29
+ @bw.open
30
+ end
31
+ end
32
+ should "report bad filename on open" do
33
+ @bw.filename = BAD_FILE
34
+ assert_raise NameError do
35
+ @bw.open
36
+ end
37
+ end
38
+ should "report bad format on open" do
39
+ @bw.filename = TEST_BED
40
+ assert_raise LoadError do
41
+ @bw.open
42
+ end
43
+ end
44
+ should "allow opening a good file" do
45
+ @bw.filename = TEST_BW
46
+ assert_nothing_raised do
47
+ @bw.open
48
+ end
49
+ assert_not_nil @bw.bbi_file
50
+ end
51
+ end
52
+
53
+ context "an open big wig" do
54
+ setup do
55
+ @bw = BigWig.open(TEST_BW)
56
+ @out = StringIO.new
57
+ $stdout = @out
58
+ end
59
+ should "already be open" do
60
+ assert_not_nil @bw.bbi_file
61
+ end
62
+ should "allow closing a file" do
63
+ @bw.close
64
+ assert_nil @bw.bbi_file
65
+ end
66
+ should "have detailed info" do
67
+ @bw.info
68
+ assert_equal "version: 4\nisCompressed: no\nisSwapped: 0\nprimaryDataSize: 116\nprimaryIndexSize: 6204\nzoomLevels: 1\nchromCount: 1\nbasesCovered: 7\nmean: 52.857143\nmin: 10.000000\nmax: 100.000000\nstd: 36.839420\n", @out.string
69
+ end
70
+ should "allow chrom details" do
71
+ @bw.info({:chroms => true})
72
+ assert @out.string=~/chr1 0 5000/
73
+ end
74
+ should "allow zoom details" do
75
+ @bw.info({:zooms => true})
76
+ assert @out.string=~/32 36/
77
+ end
78
+ should "allow min/max" do
79
+ @bw.info({:minMax => true})
80
+ assert_equal "10.000000 100.000000\n", @out.string
81
+ end
82
+ end
83
+
84
+ context "a new big wig from wig" do
85
+ setup do
86
+ @bw = Util.wig_to_big_wig(TEST_WIG,CHROM_FILE,TEST_WIG_OUT)
87
+ end
88
+ should "have summary data" do
89
+ assert_same_elements( [5.0,10.0], @bw.summary("chr1",2,4,2,{:type => 'max'}) )
90
+ end
91
+ should "have min 1.0" do
92
+ assert_equal 1.0, @bw.min
93
+ end
94
+ should "have max 10.0" do
95
+ assert_equal 10.0, @bw.max
96
+ end
97
+ should "have std of 2.94.." do
98
+ assert_equal 2.9480801329998196, @bw.std_dev
99
+ end
100
+ should "have a mean of 4.23.." do
101
+ assert_equal 4.235294117647059, @bw.mean
102
+ end
103
+ should "have 17 bases covered" do
104
+ assert_equal 17, @bw.bases_covered
105
+ end
106
+ should "have total chromosome length of 17500" do
107
+ assert_equal 17500, @bw.chrom_length
108
+ end
109
+ should "have total coverage of" do
110
+ assert_equal 0.0009714285714285714, @bw.coverage
111
+ end
112
+ should "have chr1 length of" do
113
+ assert_equal 5000, @bw.chrom_length('chr1')
114
+ end
115
+ should "have chr1 coverage of" do
116
+ assert_equal 0.0014, @bw.coverage('chr1')
117
+ end
118
+ should "have chr2 min of 2" do
119
+ assert_equal 2, @bw.min('chr2')
120
+ end
121
+ should "have chr2 max of 8" do
122
+ assert_equal 8, @bw.max('chr2')
123
+ end
124
+ should "have chr2 mean of 5.0" do
125
+ assert_equal 5.0, @bw.mean('chr2')
126
+ end
127
+ should "have chr3 std of 1.0" do
128
+ assert_equal 1.0, @bw.std_dev('chr3')
129
+ end
130
+ should "allow smoothing" do
131
+ assert_nothing_raised do
132
+ @bw.smooth(TEST_SMOOTH_OUT_FILE)
133
+ end
134
+ `rm #{TEST_SMOOTH_OUT_FILE}`
135
+ end
136
+ teardown do
137
+ `rm #{TEST_WIG_OUT}`
138
+ end
139
+ end
140
+
141
+ context "a new big wig from bed" do
142
+ setup do
143
+ @bw = Util.bed_graph_to_big_wig(TEST_BED,CHROM_FILE,TEST_BED_OUT)
144
+ end
145
+ should "have summary data" do
146
+ assert_same_elements [5.0,10.0], @bw.summary("chr1",3,5,2,{:type => 'max'})
147
+ end
148
+ should "have min 1.0" do
149
+ assert_equal 1.0, @bw.min
150
+ end
151
+ should "have max 10.0" do
152
+ assert_equal 10.0, @bw.max
153
+ end
154
+ should "have chr2 length of 2500" do
155
+ assert_equal 2500, @bw.chrom_length('chr2')
156
+ end
157
+ teardown do
158
+ `rm #{TEST_BED_OUT}`
159
+ end
160
+ end
161
+
162
+ end
metadata ADDED
@@ -0,0 +1,142 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bio-ucsc-util
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - throwern
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ffi
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rdoc
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '3.12'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '3.12'
46
+ - !ruby/object:Gem::Dependency
47
+ name: bundler
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '1.0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: jeweler
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.8.3
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.8.3
78
+ description: ! 'Ruby FFI binding and implmentation of the ucsc utilities: bigWigInfo,
79
+ bigWigSummary and wigToBigWig'
80
+ email: throwern@msu.edu
81
+ executables: []
82
+ extensions:
83
+ - ext/ucsc-util/mkrf_conf.rb
84
+ extra_rdoc_files:
85
+ - LICENSE.txt
86
+ - README.rdoc
87
+ files:
88
+ - .document
89
+ - .rvmrc
90
+ - Gemfile
91
+ - Gemfile.lock
92
+ - LICENSE.txt
93
+ - README.rdoc
94
+ - Rakefile
95
+ - VERSION
96
+ - bio-ucsc-util.gemspec
97
+ - ext/ucsc-util/README
98
+ - ext/ucsc-util/makefile
99
+ - ext/ucsc-util/mkrf_conf.rb
100
+ - ext/ucsc-util/ucsc-util-src-v268.tgz
101
+ - lib/bio-ucsc-util.rb
102
+ - lib/bio/ucsc/big_wig.rb
103
+ - lib/bio/ucsc/binding.rb
104
+ - lib/bio/ucsc/library.rb
105
+ - lib/bio/ucsc/src/Version
106
+ - lib/bio/ucsc/util.rb
107
+ - test/1.bed
108
+ - test/1.bw
109
+ - test/1.wig
110
+ - test/1_smoothed.bw
111
+ - test/chrom.sizes
112
+ - test/helper.rb
113
+ - test/test_big_wig.rb
114
+ homepage: http://github.com/throwern/bio-ucsc-util
115
+ licenses:
116
+ - MIT
117
+ post_install_message:
118
+ rdoc_options: []
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ segments:
128
+ - 0
129
+ hash: -1186691304766418588
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ requirements: []
137
+ rubyforge_project:
138
+ rubygems_version: 1.8.24
139
+ signing_key:
140
+ specification_version: 3
141
+ summary: Ruby binding to the ucsc kent utilities
142
+ test_files: []