Class: OpenTox::Algorithm::Fminer

Inherits:
Object
  • Object
show all
Includes:
OpenTox::Algorithm
Defined in:
lib/algorithm.rb

Overview

Fminer algorithms (github.com/amaunz/fminer2)

Direct Known Subclasses

BBRC, LAST

Instance Attribute Summary collapse

Attributes included from OpenTox

#metadata, #uri

Instance Method Summary collapse

Methods included from OpenTox::Algorithm

effect, gauss, get_pc_descriptors, isnull_or_singular?, load_ds_csv, min_frequency, numeric?, pc_descriptors, #run, sum_size, #to_rdfxml, zero_variance?

Methods included from OpenTox

#add_metadata, all, #delete, #initialize, #load_metadata, sign_in, text_to_html, #to_rdfxml

Instance Attribute Details

#all_activitiesObject

Returns the value of attribute all_activities.



55
56
57
# File 'lib/algorithm.rb', line 55

def all_activities
  @all_activities
end

#compoundsObject

Returns the value of attribute compounds.



55
56
57
# File 'lib/algorithm.rb', line 55

def compounds
  @compounds
end

#db_class_sizesObject

Returns the value of attribute db_class_sizes.



55
56
57
# File 'lib/algorithm.rb', line 55

def db_class_sizes
  @db_class_sizes
end

#minfreqObject

Returns the value of attribute minfreq.



55
56
57
# File 'lib/algorithm.rb', line 55

def minfreq
  @minfreq
end

#prediction_featureObject

Returns the value of attribute prediction_feature.



55
56
57
# File 'lib/algorithm.rb', line 55

def prediction_feature
  @prediction_feature
end

#smiObject

Returns the value of attribute smi.



55
56
57
# File 'lib/algorithm.rb', line 55

def smi
  @smi
end

#training_datasetObject

Returns the value of attribute training_dataset.



55
56
57
# File 'lib/algorithm.rb', line 55

def training_dataset
  @training_dataset
end

Instance Method Details

#add_fminer_data(fminer_instance, params, value_map) ⇒ Object



72
73
74
75
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
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/algorithm.rb', line 72

def add_fminer_data(fminer_instance, params, value_map)

  id = 1 # fminer start id is not 0
  @training_dataset.data_entries.each do |compound,entry|
    begin
      smiles = OpenTox::Compound.smiles(compound.to_s)
    rescue
      LOGGER.warn "No resource for #{compound.to_s}"
      next
    end
    if smiles == '' or smiles.nil?
      LOGGER.warn "Cannot find smiles for #{compound.to_s}."
      next
    end

    value_map=params[:value_map] unless params[:value_map].nil?
    entry.each do |feature,values|
      if feature == @prediction_feature.uri
        values.each do |value|
          if value.nil? 
            LOGGER.warn "No #{feature} activity for #{compound.to_s}."
          else
            if @prediction_feature.feature_type == "classification"
              activity= value_map.invert[value.to_s].to_i # activities are mapped to 1..n
              @db_class_sizes[activity-1].nil? ? @db_class_sizes[activity-1]=1 : @db_class_sizes[activity-1]+=1 # AM effect
            elsif @prediction_feature.feature_type == "regression"
              activity= value.to_f 
            end
            begin
              fminer_instance.AddCompound(smiles,id)
              fminer_instance.AddActivity(activity, id)
              @all_activities[id]=activity # DV: insert global information
              @compounds[id] = compound
              @smi[id] = smiles
              id += 1
            rescue Exception => e
              LOGGER.warn "Could not add " + smiles + "\t" + value.to_s + " to fminer"
              LOGGER.warn e.backtrace
            end
          end
        end
      end
    end
  end
end

#check_params(params, per_mil, subjectid = nil) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/algorithm.rb', line 57

def check_params(params,per_mil,subjectid=nil)
  raise OpenTox::NotFoundError.new "Please submit a dataset_uri." unless params[:dataset_uri] and  !params[:dataset_uri].nil?
  raise OpenTox::NotFoundError.new "Please submit a prediction_feature." unless params[:prediction_feature] and  !params[:prediction_feature].nil?
  @prediction_feature = OpenTox::Feature.find params[:prediction_feature], subjectid
  @training_dataset = OpenTox::Dataset.find "#{params[:dataset_uri]}", subjectid
  raise OpenTox::NotFoundError.new "No feature #{params[:prediction_feature]} in dataset #{params[:dataset_uri]}" unless @training_dataset.features and @training_dataset.features.include?(params[:prediction_feature])

  unless params[:min_frequency].nil? 
    @minfreq=params[:min_frequency].to_i
    raise "Minimum frequency must be a number >0!" unless @minfreq>0
  else
    @minfreq=OpenTox::Algorithm.min_frequency(@training_dataset,per_mil) # AM sugg. 8-10 per mil for BBRC, 50 per mil for LAST
  end
end