Sha256: 55089dd2e81ff0670cb0e34abba9f467b6ffa105e0abc9a6de96bda0754667c9

Contents?: true

Size: 797 Bytes

Versions: 1

Compression:

Stored size: 797 Bytes

Contents

# frozen_string_literal: true

module FlexStationData
  class DefaultSampleMap
    attr_reader :rows, :columns, :wells_per_sample

    def initialize(rows, columns, wells_per_sample)
      @rows             = rows
      @columns          = columns
      @wells_per_sample = wells_per_sample
    end

    def [](sample_label)
      sample_label = Integer(sample_label)
      map[sample_label] ||= map_sample(sample_label)
    end

    private

    def map_sample(sample_label)
      column, row = (sample_label - 1).divmod(rows)
      row_label = ("A".ord + row).chr
      base_column = (column * wells_per_sample) + 1
      (0...wells_per_sample).map do |column_offset|
        [ row_label, base_column + column_offset ].join("")
      end
    end

    def map
      @map ||= {}
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
flex-station-data-1.0.2 lib/flex_station_data/default_sample_map.rb