summaryrefslogtreecommitdiff
path: root/fminer.rb
diff options
context:
space:
mode:
Diffstat (limited to 'fminer.rb')
-rw-r--r--fminer.rb31
1 files changed, 30 insertions, 1 deletions
diff --git a/fminer.rb b/fminer.rb
index 36e1d73..4d72827 100644
--- a/fminer.rb
+++ b/fminer.rb
@@ -200,6 +200,8 @@ post '/fminer/bbrc/?' do
step_width = 80 / @@bbrc.GetNoRootNodes().to_f
features = Set.new
+ feature_count = {}
+
# run @@bbrc
(0 .. @@bbrc.GetNoRootNodes()-1).each do |j|
results = @@bbrc.MineRoot(j)
@@ -245,6 +247,9 @@ post '/fminer/bbrc/?' do
}
feature_dataset.add_feature feature_uri, metadata
#feature_dataset.add_feature_parameters feature_uri, feature_dataset.parameters
+
+ feature_count[feature_uri] = 0
+
end
id_arrs.each { |id_count_hash|
id=id_count_hash.keys[0].to_i
@@ -253,6 +258,7 @@ post '/fminer/bbrc/?' do
feature_dataset.add(fminer.compounds[id], feature_uri, count)
else
feature_dataset.add(fminer.compounds[id], feature_uri, 1)
+ feature_count[feature_uri] = feature_count[feature_uri]+1
end
}
@@ -261,7 +267,30 @@ post '/fminer/bbrc/?' do
# AM: add feature values for non-present features
# feature_dataset.complete_data_entries
-
+
+ if (params[:max_num_features] && feature_dataset.features.size>params[:max_num_features].to_i)
+ LOGGER.debug "removing features, found: #{feature_dataset.features.size}, max-num: #{params[:max_num_features]}"
+
+ feature_p_count = []
+ feature_dataset.features.each do |f_uri,m|
+ feature_p_count << [f_uri, m[OT.pValue], feature_count[f_uri]]
+ end
+ # sort by p-value, tie breaking by number of compounds that match this feature
+ sorted = feature_p_count.sort do |a,b|
+ if b[1] == a[1]
+ b[2] <=> a[2]
+ else
+ b[1] <=> a[1]
+ end
+ end
+ (params[:max_num_features].to_i..(sorted.size-1)).each do |i|
+ feature_dataset.features.delete(sorted[i][0])
+ feature_dataset.compounds.each do |c|
+ feature_dataset.data_entries[c].delete(sorted[i][0])
+ end
+ end
+ end
+
feature_dataset.save(@subjectid)
feature_dataset.uri
end