Class: PubliSci::Readers::RCross

Inherits:
Object
  • Object
show all
Includes:
Dataset::DataCube, Output
Defined in:
lib/bio-publisci/readers/r_cross.rb

Instance Method Summary collapse

Methods included from Output

#output

Methods included from Dataset::DataCube

#abbreviate_known, #code_lists, #component_gen, #component_specifications, #concept_codes, #data_structure_definition, #dataset, #defaults, #dimension_properties, #encode_data, #generate, #generate_resources, #measure_properties, #observations, #prefixes, #vocabulary

Methods included from Parser

#add_node, #bnode_value, #encode_value, #get_ary, #get_hashes, #is_complex?, #is_uri?, #load_string, #observation_hash, #sanitize, #sanitize_hash, #strip_prefixes, #strip_uri, #to_literal, #to_resource, #turtle_indent

Instance Method Details

#codes(client, var, options = {}) ⇒ Object



66
67
68
# File 'lib/bio-publisci/readers/r_cross.rb', line 66

def codes(client, var, options={})
  []
end

#dimensions(client, var, options = {}) ⇒ Object



61
62
63
64
# File 'lib/bio-publisci/readers/r_cross.rb', line 61

def dimensions(client, var, options={})
  # dimension_properties([""],var)
  []
end

#generate_n3(client, var, outfile_base, options = {}) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/bio-publisci/readers/r_cross.rb', line 7

def generate_n3(client, var, outfile_base, options={})
  meas = measures(client,var,options)
  dim = dimensions(client,var,options)
  codes = codes(client,var,options)

  #write structure
  open(outfile_base+'_structure.ttl','w'){|f| f.write structure(client,var,options)}

  n_individuals = client.eval("length(#{var}$pheno[[1]])").payload.first
  chromosome_list = (1..19).to_a.map(&:to_s) + ["X"]
  chromosome_list.map{|chrom|
    open(outfile_base+"_#{chrom}.ttl",'w'){|f| f.write prefixes(var,options)}
    entries_per_individual = client.eval("length(#{var}$geno$'#{chrom}'$map)").to_ruby

    #get genotype data (currently only for chromosome 1)
    geno_chr = client.eval("#{var}$geno$'#{chrom}'")

    #get number of markers per individual

    #write observations
    n_individuals.times{|indi|
      obs_data = observation_data(client,var,chrom.to_s,indi,geno_chr,entries_per_individual,options)
      labels = labels_for(obs_data,chrom.to_s,indi)
      open(outfile_base+"_#{chrom}.ttl",'a'){|f| observations(meas,dim,codes,obs_data,labels,var,options).map{|obs| f.write obs}}
      puts "(#{chrom}) #{indi}/#{n_individuals}" unless options[:quiet]
    }
  }

end

#labels_for(data, chr, individual, options = {}) ⇒ Object



70
71
72
73
74
# File 'lib/bio-publisci/readers/r_cross.rb', line 70

def labels_for(data,chr,individual,options={})
  labels=(((data.first.last.size*individual)+1)..(data.first.last.size*(individual+1))).to_a.map(&:to_s)
  labels.map{|l| l.insert(0,"#{chr}_")}
  labels
end

#measures(client, var, options = {}) ⇒ Object



51
52
53
54
55
56
57
58
59
# File 'lib/bio-publisci/readers/r_cross.rb', line 51

def measures(client, var, options={})
  pheno_names = client.eval("names(#{var}$pheno)").to_ruby
  if options[:measures]
    (pheno_names & options[:measures]) | ["genotype","markerpos","marker"]
  else
    pheno_names | ["genotype","markerpos","marker"]
  end
  # measure_properties(measures,var,options)
end

#num_individuals(client, var, options = {}) ⇒ Object



105
106
107
# File 'lib/bio-publisci/readers/r_cross.rb', line 105

def num_individuals(client, var, options={})
  client.eval("#{var}$pheno").payload.first.to_ruby.size
end

#observation_data(client, var, chr, row_individ, geno_chr, entries_per_individual, options = {}) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/bio-publisci/readers/r_cross.rb', line 76

def observation_data(client, var, chr, row_individ, geno_chr, entries_per_individual, options={})
  data = {}

  data["chr"] = []
  data["genotype"] = []
  data["individual"] = []
  data["marker"] = []
  data["markerpos"] = []

  pheno_names = client.eval("names(#{var}$pheno)").to_ruby
  pheno_names.map{|name|
    data[name] = []
  }
  data["individual"] << (1..entries_per_individual).to_a.fill(row_individ)

  pheno_names.map{|name|
    data[name] << (1..entries_per_individual).to_a.fill(client.eval("#{var}$pheno$#{name}").to_ruby[row_individ])
  }

  num_markers = geno_chr.payload.first.to_ruby.column_size
  data["chr"] << (1..num_markers).to_a.fill(chr)
  data["genotype"] << geno_chr.payload["data"].to_ruby.row(row_individ).to_a
  data["marker"] << client.eval("names(#{var}$geno$'#{chr}'$map)").payload
  data["markerpos"] << geno_chr.payload["map"].to_a

  data.map{|k,v| v.flatten!}
  data
end

#structure(client, var, options = {}) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/bio-publisci/readers/r_cross.rb', line 37

def structure(client,var,options={})
  meas = measures(client,var,options)
  dim = dimensions(client,var,options)
  codes = codes(client,var,options)

  str = prefixes(var,options)
  str << data_structure_definition(meas,dim,codes,var,options)
  str << dataset(var,options)
  component_specifications(meas, dim, codes, var, options).map{ |c| str << c }
  measure_properties(meas,var,options).map{|m| str << m}

  str
end