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