summaryrefslogtreecommitdiff
path: root/lib/dataset.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dataset.rb')
-rw-r--r--lib/dataset.rb33
1 files changed, 30 insertions, 3 deletions
diff --git a/lib/dataset.rb b/lib/dataset.rb
index ab55294..44690e1 100644
--- a/lib/dataset.rb
+++ b/lib/dataset.rb
@@ -3,32 +3,43 @@ require 'tempfile'
module OpenTox
+ # Collection of substances and features
class Dataset
field :data_entries, type: Hash, default: {}
# Readers
+ # Get all compounds
+ # @return [Array<OpenTox::Compound>]
def compounds
substances.select{|s| s.is_a? Compound}
end
+ # Get all nanoparticles
+ # @return [Array<OpenTox::Nanoparticle>]
def nanoparticles
substances.select{|s| s.is_a? Nanoparticle}
end
# Get all substances
+ # @return [Array<OpenTox::Substance>]
def substances
@substances ||= data_entries.keys.collect{|id| OpenTox::Substance.find id}.uniq
@substances
end
# Get all features
+ # @return [Array<OpenTox::Feature>]
def features
@features ||= data_entries.collect{|sid,data| data.keys.collect{|id| OpenTox::Feature.find(id)}}.flatten.uniq
@features
end
+ # Get all values for a given substance and feature
+ # @param [OpenTox::Substance,BSON::ObjectId,String] substance or substance id
+ # @param [OpenTox::Feature,BSON::ObjectId,String] feature or feature id
+ # @return [TrueClass,FalseClass,Float]
def values substance,feature
substance = substance.id if substance.is_a? Substance
feature = feature.id if feature.is_a? Feature
@@ -41,6 +52,10 @@ module OpenTox
# Writers
+ # Add a value for a given substance and feature
+ # @param [OpenTox::Substance,BSON::ObjectId,String] substance or substance id
+ # @param [OpenTox::Feature,BSON::ObjectId,String] feature or feature id
+ # @param [TrueClass,FalseClass,Float]
def add(substance,feature,value)
substance = substance.id if substance.is_a? Substance
feature = feature.id if feature.is_a? Feature
@@ -87,7 +102,7 @@ module OpenTox
# Serialisation
- # converts dataset to csv format including compound smiles as first column, other column headers are feature names
+ # Convert dataset to csv format including compound smiles as first column, other column headers are feature names
# @return [String]
def to_csv(inchi=false)
CSV.generate() do |csv|
@@ -130,6 +145,9 @@ module OpenTox
#end
# Create a dataset from CSV file
+ # @param [File]
+ # @param [TrueClass,FalseClass] accept or reject empty values
+ # @return [OpenTox::Dataset]
def self.from_csv_file file, accept_empty_values=false
source = file
name = File.basename(file,".*")
@@ -145,8 +163,10 @@ module OpenTox
dataset
end
- # parse data in tabular format (e.g. from csv)
- # does a lot of guesswork in order to determine feature types
+ # Parse data in tabular format (e.g. from csv)
+ # does a lot of guesswork in order to determine feature types
+ # @param [Array<Array>]
+ # @param [TrueClass,FalseClass] accept or reject empty values
def parse_table table, accept_empty_values
# features
@@ -225,6 +245,7 @@ module OpenTox
save
end
+ # Delete dataset
def delete
compounds.each{|c| c.dataset_ids.delete id.to_s}
super
@@ -238,14 +259,20 @@ module OpenTox
field :prediction_feature_id, type: BSON::ObjectId
field :predictions, type: Hash, default: {}
+ # Get prediction feature
+ # @return [OpenTox::Feature]
def prediction_feature
Feature.find prediction_feature_id
end
+ # Get all compounds
+ # @return [Array<OpenTox::Compound>]
def compounds
substances.select{|s| s.is_a? Compound}
end
+ # Get all substances
+ # @return [Array<OpenTox::Substance>]
def substances
predictions.keys.collect{|id| Substance.find id}
end