sequence_logo 1.1.1 → 1.1.2
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.
- checksums.yaml +4 -4
- data/TODO.txt +4 -0
- data/lib/sequence_logo/alignment.rb +1 -1
- data/lib/sequence_logo/canvas_factory.rb +2 -1
- data/lib/sequence_logo/cli.rb +1 -0
- data/lib/sequence_logo/data_models/ppm_logo.rb +5 -9
- data/lib/sequence_logo/data_models/predefined_logo.rb +4 -1
- data/lib/sequence_logo/data_models/sequence.rb +1 -1
- data/lib/sequence_logo/data_models/sequence_with_snp.rb +1 -1
- data/lib/sequence_logo/exec/glue_logos.rb +14 -3
- data/lib/sequence_logo/exec/sequence_logo.rb +12 -2
- data/lib/sequence_logo/magick_support.rb +21 -8
- data/lib/sequence_logo/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a53d6d681797aec870766358a55b460aa10a87f1
|
4
|
+
data.tar.gz: 43c4712e2b1bbef50ac8de24626c115c5492dfaf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4331c46e148cb21342e7cb5d39ab635ff633086974a3e87d20a8d1efd1534f5590d6df7ccd50f0a5e7eea1d6222fc8a03709a2200f90432083a63a016bf3f9fa
|
7
|
+
data.tar.gz: 7b1013ed36a55848884760f55bb2418789e98fd9cd040e846a8748360889c3bcf34d0a92d520b3e034d501eb21ec2df3948a5d3be41b1b1f22aad699a7546e3b
|
data/TODO.txt
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
Fix word count to calculate column-wise word-counts where possible! Selex logos are bad
|
2
|
+
|
3
|
+
Make use of bioinform gem
|
4
|
+
|
1
5
|
AssetsPath shouldn't be used at draw_logo level because it makes it impossible to change scheme on one folder that is outside the gem
|
2
6
|
And how to make possible use schemes inside the assets path
|
3
7
|
|
@@ -3,7 +3,7 @@ require_relative 'canvases'
|
|
3
3
|
|
4
4
|
module SequenceLogo
|
5
5
|
class CanvasFactory
|
6
|
-
attr_reader :x_unit, :y_unit, :text_size, :logo_shift
|
6
|
+
attr_reader :x_unit, :y_unit, :text_size, :logo_shift, :background_fill
|
7
7
|
attr_reader :letter_images
|
8
8
|
|
9
9
|
def initialize(letter_images, options = {})
|
@@ -12,6 +12,7 @@ module SequenceLogo
|
|
12
12
|
@x_unit = options[:x_unit] || 30
|
13
13
|
@y_unit = options[:y_unit] || 60
|
14
14
|
@text_size = options[:text_size] || 24
|
15
|
+
@background_fill = options[:background_fill] || Magick::SolidFill.new('transparent')
|
15
16
|
end
|
16
17
|
|
17
18
|
def text_image(text, img_height = y_unit)
|
data/lib/sequence_logo/cli.rb
CHANGED
@@ -36,15 +36,11 @@ module SequenceLogo
|
|
36
36
|
|
37
37
|
def render(canvas_factory)
|
38
38
|
canvas = LogoCanvas.new(canvas_factory)
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
canvas.draw_threshold_line(ppm.get_line(ppm.icdTlc))
|
45
|
-
end
|
46
|
-
else
|
47
|
-
canvas.background(Magick::HatchFill.new('white', 'bisque'))
|
39
|
+
canvas.background(canvas_factory.background_fill)
|
40
|
+
if icd_mode == :discrete && enable_threshold_lines
|
41
|
+
canvas.draw_threshold_line(ppm.get_line(ppm.icd2of4))
|
42
|
+
canvas.draw_threshold_line(ppm.get_line(ppm.icdThc))
|
43
|
+
canvas.draw_threshold_line(ppm.get_line(ppm.icdTlc))
|
48
44
|
end
|
49
45
|
|
50
46
|
logo_matrix.each do |position|
|
@@ -23,7 +23,10 @@ module SequenceLogo
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def render(canvas_factory)
|
26
|
-
|
26
|
+
layers = Magick::ImageList.new
|
27
|
+
layers.put_image_at(@direct_image, 0, 0)
|
28
|
+
layers.unshift Magick::Image.new(@direct_image.columns, @direct_image.rows, canvas_factory.background_fill)
|
29
|
+
layers.flatten_images
|
27
30
|
end
|
28
31
|
end
|
29
32
|
end
|
@@ -19,7 +19,7 @@ module SequenceLogo
|
|
19
19
|
|
20
20
|
def render(canvas_factory)
|
21
21
|
canvas = LogoCanvas.new(canvas_factory)
|
22
|
-
canvas.background(
|
22
|
+
canvas.background(canvas_factory.background_fill)
|
23
23
|
sequence.each_char do |letter|
|
24
24
|
canvas.add_letter(letter)
|
25
25
|
end
|
@@ -30,7 +30,7 @@ module SequenceLogo
|
|
30
30
|
|
31
31
|
def render(canvas_factory)
|
32
32
|
canvas = LogoCanvas.new(canvas_factory)
|
33
|
-
canvas.background(
|
33
|
+
canvas.background(canvas_factory.background_fill)
|
34
34
|
left.each_char{|letter| canvas.add_letter(letter) }
|
35
35
|
canvas.add_position_ordered(snp_position_heights)
|
36
36
|
right.each_char{|letter| canvas.add_letter(letter) }
|
@@ -78,7 +78,9 @@ begin
|
|
78
78
|
|
79
79
|
argv = ARGV
|
80
80
|
total_orientation = :direct
|
81
|
-
default_options = {x_unit: 30, y_unit: 60,
|
81
|
+
default_options = { x_unit: 30, y_unit: 60, logo_shift: 300, scheme: 'nucl_simpa',
|
82
|
+
words_count: nil, icd_mode: :discrete, threshold_lines: false,
|
83
|
+
text_size: 24, background_color: 'white' }
|
82
84
|
cli = SequenceLogo::CLI.new(default_options)
|
83
85
|
cli.instance_eval do
|
84
86
|
parser.banner = doc
|
@@ -93,6 +95,14 @@ begin
|
|
93
95
|
raise ArgumentError, 'Orientation can be either direct or revcomp or both' unless [:direct, :revcomp, :both].include?(v)
|
94
96
|
total_orientation = v
|
95
97
|
end
|
98
|
+
|
99
|
+
parser.on('--bg-fill FILL', 'Background fill. Specify either `transparent` or `color` or `color,hatch_color`') do |v|
|
100
|
+
if v.match(/^\w+,\w+$/)
|
101
|
+
options[:background_fill] = Magick::HatchFill.new(*v.split(','))
|
102
|
+
else
|
103
|
+
options[:background_fill] = Magick::SolidFill.new(v)
|
104
|
+
end
|
105
|
+
end
|
96
106
|
end
|
97
107
|
options = cli.parse_options!(argv)
|
98
108
|
|
@@ -105,8 +115,9 @@ begin
|
|
105
115
|
|
106
116
|
scheme_dir = File.join(SequenceLogo::AssetsPath, options[:scheme])
|
107
117
|
letter_images = SequenceLogo::CanvasFactory.letter_images(scheme_dir)
|
108
|
-
canvas_factory = SequenceLogo::CanvasFactory.new(letter_images, x_unit: options[:x_unit], y_unit: options[:y_unit],
|
109
|
-
text_size: options[:text_size], logo_shift: options[:logo_shift]
|
118
|
+
canvas_factory = SequenceLogo::CanvasFactory.new( letter_images, x_unit: options[:x_unit], y_unit: options[:y_unit],
|
119
|
+
text_size: options[:text_size], logo_shift: options[:logo_shift],
|
120
|
+
background_fill: options[:background_fill] )
|
110
121
|
|
111
122
|
case total_orientation
|
112
123
|
when :direct
|
@@ -44,7 +44,9 @@ begin
|
|
44
44
|
EOS
|
45
45
|
|
46
46
|
argv = ARGV
|
47
|
-
default_options = {x_unit: 30, y_unit: 60,
|
47
|
+
default_options = { x_unit: 30, y_unit: 60, scheme: 'nucl_simpa',
|
48
|
+
words_count: nil, orientation: :direct, icd_mode: :discrete, threshold_lines: true,
|
49
|
+
logo_folder: '.', background_color: 'white' }
|
48
50
|
cli = SequenceLogo::CLI.new(default_options)
|
49
51
|
cli.instance_eval do
|
50
52
|
parser.banner = doc
|
@@ -63,6 +65,13 @@ begin
|
|
63
65
|
parser.on('--sequence', 'Specify sequence (like ATCTCGCCTAAT) instead of motif filenames') do
|
64
66
|
options[:sequence] = true
|
65
67
|
end
|
68
|
+
parser.on('--bg-fill FILL', 'Background fill. Specify either `transparent` or `color` or `color,hatch_color`') do |v|
|
69
|
+
if v.match(/^\w+,\w+$/)
|
70
|
+
options[:background_fill] = Magick::HatchFill.new(*v.split(','))
|
71
|
+
else
|
72
|
+
options[:background_fill] = Magick::SolidFill.new(v)
|
73
|
+
end
|
74
|
+
end
|
66
75
|
end
|
67
76
|
options = cli.parse_options!(argv)
|
68
77
|
|
@@ -71,7 +80,8 @@ begin
|
|
71
80
|
|
72
81
|
scheme_dir = File.join(SequenceLogo::AssetsPath, options[:scheme])
|
73
82
|
letter_images = SequenceLogo::CanvasFactory.letter_images(scheme_dir)
|
74
|
-
canvas_factory = SequenceLogo::CanvasFactory.new(letter_images, x_unit: options[:x_unit], y_unit: options[:y_unit]
|
83
|
+
canvas_factory = SequenceLogo::CanvasFactory.new( letter_images, x_unit: options[:x_unit], y_unit: options[:y_unit],
|
84
|
+
background_fill: options[:background_fill] )
|
75
85
|
|
76
86
|
raise "Specify either sequence or sequence with SNP or none of them, but not both" if options[:sequence] && options[:sequence_w_snp]
|
77
87
|
|
@@ -1,14 +1,27 @@
|
|
1
1
|
require 'RMagick'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
module Magick
|
4
|
+
class ImageList
|
5
|
+
def put_image_at(image, x, y)
|
6
|
+
self << image
|
7
|
+
cur_image.page = Magick::Rectangle.new(0, 0, x, y)
|
8
|
+
end
|
9
|
+
|
10
|
+
# add transparent layer so that full canvas size can't be less than given size
|
11
|
+
def set_minimal_size(x_size, y_size)
|
12
|
+
empty_image = Magick::Image.new(x_size, y_size){ self.background_color = 'transparent'}
|
13
|
+
self.unshift(empty_image)
|
14
|
+
end
|
7
15
|
end
|
8
16
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
17
|
+
class SolidFill
|
18
|
+
def initialize(bgcolor)
|
19
|
+
@bgcolor = bgcolor
|
20
|
+
end
|
21
|
+
|
22
|
+
def fill(img)
|
23
|
+
img.background_color = @bgcolor
|
24
|
+
img.erase!
|
25
|
+
end
|
13
26
|
end
|
14
27
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sequence_logo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilya Vorontsov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05
|
11
|
+
date: 2014-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rmagick
|