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
         |