1
2
3
4
5
6
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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
|
module OpenTox
# Original ID (e.g. from CSV input)
class OriginalId < Feature
field :dataset_id, type: BSON::ObjectId
end
# Original SMILES (e.g. from CSV input)
class OriginalSmiles < Feature
field :dataset_id, type: BSON::ObjectId
end
# Warnings
class Warnings < Feature
field :dataset_id, type: BSON::ObjectId
end
# Categorical variables
class NominalFeature < Feature
field :accept_values, type: Array
end
# Quantitative variables
class NumericFeature < Feature
field :unit, type: String
end
# Nominal biological activity
class NominalBioActivity < NominalFeature
end
# Numeric biological activity
class NumericBioActivity < NumericFeature
end
# Merged nominal biological activity
class MergedNominalBioActivity < NominalFeature
field :original_feature_ids, type: Array
end
# Transformed nominal biological activity
class TransformedNominalBioActivity < NominalFeature
field :original_feature_id, type: BSON::ObjectId
field :transformation, type: Hash
end
# Transformed numeric biological activity
class TransformedNumericBioActivity < NumericFeature
field :original_feature_id, type: BSON::ObjectId
field :transformation, type: String
end
# Nominal lazar prediction
class NominalLazarPrediction < NominalFeature
field :model_id, type: BSON::ObjectId
field :training_feature_id, type: BSON::ObjectId
def name
"#{self[:name]} Prediction"
end
end
class LazarPredictionProbability < NominalLazarPrediction
def name
"probability(#{self[:name]})"
end
end
# Numeric lazar prediction
class NumericLazarPrediction < NumericFeature
field :model_id, type: BSON::ObjectId
field :training_feature_id, type: BSON::ObjectId
def name
"#{name} Prediction"
end
end
class LazarPredictionInterval < NumericLazarPrediction
def name
"prediction_interval_#{self[:name]}"
end
end
class NominalSubstanceProperty < NominalFeature
end
class NumericSubstanceProperty < NumericFeature
end
class NanoParticleProperty < NumericSubstanceProperty
field :category, type: String
field :conditions, type: Hash
end
# Feature for SMARTS fragments
class Smarts < Feature
field :smarts, type: String
index "smarts" => 1
# Create feature from SMARTS string
# @param [String]
# @return [OpenTox::Feature]
def self.from_smarts smarts
self.find_or_create_by :smarts => smarts
end
end
end
|