class Dataset

Public Class Methods

new(header = []) click to toggle source
# File lib/anncrsnp/dataset.rb, line 7
def initialize(header = [])
        @all_record = []
        @metadata = {}
        add_metadata(:header, [:chr, :start, :ending, :id].concat(header))
end

Public Instance Methods

add_metadata(keyword, value) click to toggle source
# File lib/anncrsnp/dataset.rb, line 93
def add_metadata(keyword, value)
        return @metadata[keyword] = value
end
add_record(fields_array, add_start = 0, add_stop = 0) click to toggle source
# File lib/anncrsnp/dataset.rb, line 13
def add_record(fields_array, add_start = 0, add_stop = 0) # Fixed col => 0 -> chr, 1 -> start, 2 -> end, 3 -> id
        fields_array[START] = fields_array[START].to_i + add_start
        fields_array[ENDING] = fields_array[ENDING].to_i + add_stop
        @all_record << fields_array
end
add_record_batch(records_array) click to toggle source
# File lib/anncrsnp/dataset.rb, line 19
def add_record_batch(records_array)
        records_array.each do |record|
                add_record(record)
        end
end
create_record_template(record) click to toggle source
# File lib/anncrsnp/dataset.rb, line 126
def create_record_template(record)
        record_template = []
        record_lentgh = record.select{|field| field.class == Array }.map{|field| field.length}.max
        record_lentgh = 1 if record_lentgh.nil? || record_lentgh == 0
        record_lentgh.times do
                record_template << Array.new(@fields_number){" "}
        end
        field_position = 0
        record.each_with_index do |field, column_number|
                if field.class != Array
                        record_template[0][field_position] = field
                        field_position += 1
                else
                        field.each_with_index do |added_record, raw|
                                added_record.each_with_index do |record_field, col|
                                        record_template[raw][col+field_position+1] = record_field
                                end 
                        end

                        field_position += @html_header[column_number- @html_header.first.last.length+1].last.length
                        #field_position += @html_header[get_metadata(:header)[column_number]].length
                end
        end
        record_html = ""
        record_template.each do |row|
                record_html << "<tr><td>#{row.join("</td><td>")}</td></tr>\n"
        end
        return record_html
end
drop_columns(col_names) click to toggle source
# File lib/anncrsnp/dataset.rb, line 60
def drop_columns(col_names)
        drop_index = col_names.map{|name| get_metadata(:header).index(name)}
        each_record do |rec|
                drop_index.reverse_each do |ind|
                        rec.delete_at(ind)
                end
        end
        add_metadata(:header, get_metadata(:header) - col_names)
end
each_record() { |record| ... } click to toggle source
# File lib/anncrsnp/dataset.rb, line 37
def each_record
        @all_record.each do |record|
                yield(record)
        end
end
empty?() click to toggle source
# File lib/anncrsnp/dataset.rb, line 85
def empty?
        return @all_record.empty?
end
extract_records_by_coordinates(dataset, results_column_name) click to toggle source
# File lib/anncrsnp/dataset.rb, line 70
def extract_records_by_coordinates(dataset, results_column_name)
        added_fields = get_metadata(:added_fields)
        if added_fields
                added_fields[results_column_name] = dataset.get_metadata(:header)
        else
                added_fields = {results_column_name => dataset.get_metadata(:header)}
        end
        add_metadata(:added_fields, added_fields)
        add_metadata(:header, get_metadata(:header).concat([results_column_name])) # Add new column to dataset
        each_record{|record|

                record << dataset.get_elements_on_position(record[CHR], record[START], record[ENDING])
        }
end
first() click to toggle source
# File lib/anncrsnp/dataset.rb, line 47
def first
        return @all_record.first
end
get_elements_on_position(chr, start, ending) click to toggle source
# File lib/anncrsnp/dataset.rb, line 25
def get_elements_on_position(chr, start, ending)
        results = []
        @all_record.each do |record|
                if record[CHR] == chr
                        if (record[START] >= start && record[START] <= ending) || (record[ENDING] >= start && record[ENDING] <= ending) 
                                results << record
                        end
                end
        end
        return results
end
get_metadata(keyword) click to toggle source
# File lib/anncrsnp/dataset.rb, line 89
def get_metadata(keyword)
        return @metadata[keyword]
end
last() click to toggle source
# File lib/anncrsnp/dataset.rb, line 51
def last
        return @all_record.last
end
length() click to toggle source
# File lib/anncrsnp/dataset.rb, line 43
def length
        return @all_record.length
end
numeric_filter(col_name, thresold) click to toggle source
# File lib/anncrsnp/dataset.rb, line 55
def numeric_filter(col_name, thresold)
        index = get_metadata(:header).index(col_name)
        @all_record.select!{|rec| rec[index].to_f >= thresold }
end
write(output_path, output_format) click to toggle source
# File lib/anncrsnp/dataset.rb, line 97
def write(output_path, output_format)
        path = "#{output_path}.#{output_format}"
        if output_format == 'html'
                write_html(path)
        end
end
write_html(path) click to toggle source
# File lib/anncrsnp/dataset.rb, line 103
def write_html(path)
        output_file = File.open(path, 'w')
        # Header
        output_file.puts "<html>",
                                        "<header>",
                                        "</header>",
                                        "<body>"

        #Table
        output_file.puts '<table border=1>'
        output_file.puts write_html_table_header
        each_record{|record|
                output_file.puts create_record_template(record)
        }
        output_file.puts "</table>"

        # Footer
        output_file.puts "</body>",
                                        "</html>"

        output_file.close
end
write_html_table_header() click to toggle source
# File lib/anncrsnp/dataset.rb, line 156
def write_html_table_header
        @html_header = []
        added_fields = get_metadata(:added_fields)
        @html_header << [ get_metadata(:classification) ,  get_metadata(:header) - added_fields.keys]
        puts @html_header.inspect
        added_fields.each do |classification, fields|
                @html_header << [classification, fields]
        end

        puts @html_header.inspect

        main_header = ""
        fields_header = ""
        @fields_number = 0
        @html_header.each do |classification, fields|
                main_header << "<td colspan=\"#{fields.length}\">#{classification.to_s}"
                fields_header << "<td>#{fields.map{|h| h.to_s}.join("</td><td>")}</td>"
                @fields_number += fields.length
        end

        return "<tr>#{main_header}</tr>\n<tr>#{fields_header}</tr>"
end