summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Maunz <andreas@maunz.de>2012-09-26 14:23:19 +0200
committerAndreas Maunz <andreas@maunz.de>2012-09-26 14:23:19 +0200
commit4b874659a8e81e65b3ea7f3c8e07e32bdf3f35ea (patch)
treefbe1341253266801f0fd3f129097ea60e23261ad
parentc7fb4b395fdb5603fed633177aa2e183604e24b0 (diff)
Fixed feature metadata
-rw-r--r--lib/compound/pc_descriptors.rb14
-rw-r--r--webapp/compound.rb109
2 files changed, 68 insertions, 55 deletions
diff --git a/lib/compound/pc_descriptors.rb b/lib/compound/pc_descriptors.rb
index 7ac75df..4bf1171 100644
--- a/lib/compound/pc_descriptors.rb
+++ b/lib/compound/pc_descriptors.rb
@@ -20,10 +20,9 @@ module OpenTox
if (!@lib || @lib.include?("cdk"))
cdk = CDKDescriptors.new(@params)
cdk_master, cdk_ids = cdk.calculate
- cdk_single_ids = cdk_master[0].collect { |id| id.to_s.sub(/[^-]*-/,"").gsub(/[\/.\\\(\)\{\}\[\]]/,"_") } # get column headers w/ nice '_'
- cdk_master[0] = cdk_single_ids.collect{|x| x} # Single IDs as features in result ds
- cdk_ids.shift # remove SMILES
- cdk_single_ids.shift # remove SMILES
+ cdk_single_ids = cdk_master[0].to_a.collect { |id| id.to_s.sub(/[^-]*-/,"").gsub(/[\/.\\\(\)\{\}\[\]]/,"_") } # get column headers w/ nice '_'
+ cdk_master[0].each_index{ |idx| cdk_master[0][idx] = cdk_single_ids[idx] } # Single IDs as features in result ds
+ cdk_single_ids.shift # remove SMILES for IDs
end
if (!@lib || @lib.include?("openbabel"))
openbabel = OpenBabelDescriptors.new(@params)
@@ -45,7 +44,7 @@ module OpenTox
def master_join (m1, m2)
if m2 && m1
nr_cols = (m2[0].size)-1
- $logger.debug "Merging #{nr_cols} new columns on #{m1[0].size}"
+ $logger.debug "Merging #{nr_cols} new columns on #{m1[0].size} (including ID), yields #{nr_cols + m1[0].size}"
m1.each {|row| nr_cols.times { row.push(nil) } }
m2.each do |row|
temp = m1.assoc(row[0]) # Finds the appropriate line in master
@@ -99,6 +98,7 @@ module OpenTox
def calculate
master = nil
cdk_class = nil
+ ids_multiplied = nil
begin
cdk_class = Rjb::import('ApplyCDKDescriptors')
pc_descriptors = YAML::load_file($keysfile)
@@ -133,6 +133,8 @@ module OpenTox
master[0][0] = "InChI"
master[1][0] = @inchi
master[1].collect! { |x| x.to_s == "null" ? nil : x }
+ ids_multiplied = master[0].to_a.collect { |x| x.gsub(/-.*/,"") }
+ ids_multiplied.shift # remove ID
end
rescue Exception => e
$logger.debug "#{e.class}: #{e.message}"
@@ -140,7 +142,7 @@ module OpenTox
ensure
[ csvfile ].each { |f| File.delete(f) } if csvfile
end
- [ master, ids ]
+ [ master, ids_multiplied ]
end
end
diff --git a/webapp/compound.rb b/webapp/compound.rb
index ba70198..da2384d 100644
--- a/webapp/compound.rb
+++ b/webapp/compound.rb
@@ -31,6 +31,9 @@ module OpenTox
pc_type = params[:pc_type].nil? ? "" : params[:pc_type]
pcdf = OpenTox::Compound::PcDescriptorFactory.new(params)
master, cdk_ids, ob_ids, jl_ids, cdk_single_ids = pcdf.calculate
+ #$logger.debug cdk_ids.to_yaml
+ #cdk_single_ids.collect { |x| $logger.debug x }
+ #$logger.debug cdk_single_ids.to_yaml
begin
if master
feature_dataset = OpenTox::Dataset.new(nil, @subjectid)
@@ -45,13 +48,69 @@ module OpenTox
{ RDF::DC.title => "lib", RDF::OT.paramValue => lib },
{ RDF::DC.title => "pc_type", RDF::OT.paramValue => pc_type},
]
+
+ #cdk_single_ids && cdk_single_ids.each_with_index { |id,idx|
+ # raise "Feature not found" if ! ds.features[File.join(ds.uri, "feature", id.to_s)]
+ # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{DC.description => "#{pc_descriptors[cdk_ids[idx]][:name]} [#{pc_descriptors[cdk_ids[idx]][:pc_type]}, #{pc_descriptors[cdk_ids[idx]][:lib]}]"})
+ # creator_uri = ds.uri.gsub(/\/dataset\/.*/, "/algorithm/pc")
+ # creator_uri += "/#{cdk_ids[idx]}" if params[:add_uri]
+ # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{DC.creator => creator_uri})
+ # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{OT.hasSource => params[:dataset_uri]})
+ #}
+
+ #ob_ids && ob_ids.each { |id|
+ # raise "Feature not found" if ! ds.features[File.join(ds.uri, "feature", id.to_s)]
+ # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{DC.description => "#{pc_descriptors[id][:name]} [#{pc_descriptors[id][:pc_type]}, #{pc_descriptors[id][:lib]}]"})
+ # creator_uri = ds.uri.gsub(/\/dataset\/.*/, "/algorithm/pc")
+ # creator_uri += "/#{id}" if params[:add_uri]
+ # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{DC.creator => creator_uri})
+ # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{OT.hasSource => params[:dataset_uri]})
+ #}
+ #jl_ids && jl_ids.each { |id|
+ # raise "Feature not found" if ! ds.features[File.join(ds.uri, "feature", id.to_s)]
+ # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{DC.description => "#{pc_descriptors[id][:name]} [#{pc_descriptors[id][:pc_type]}, #{pc_descriptors[id][:lib]}]"})
+ # creator_uri = ds.uri.gsub(/\/dataset\/.*/, "/algorithm/pc")
+ # creator_uri += "/#{id}" if params[:add_uri]
+ # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{DC.creator => creator_uri})
+ # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{OT.hasSource => params[:dataset_uri]})
+ #}
+
+
features = []
+ pc_descriptors = YAML::load_file($keysfile)
master[0].each_with_index { |f,idx|
if (idx != 0)
+
+ # Description
+ description = ""
+ descriptor_name = ""
+ if cdk_single_ids # we have used CDK
+ idx = cdk_single_ids.index(f)
+ cdk_id = cdk_ids[idx] if idx
+ end
+ if cdk_id
+ #$logger.debug "#{f} in CDK: #{pc_descriptors[cdk_id][:name]}"
+ descriptor_name = pc_descriptors[cdk_id][:name]
+ description = "#{descriptor_name} [#{pc_descriptors[cdk_id][:pc_type]}, #{pc_descriptors[cdk_id][:lib]}]"
+ else
+ #$logger.debug "#{f} not in CDK"
+ if pc_descriptors[f]
+ descriptor_name = pc_descriptors[f][:name]
+ description = "#{descriptor_name} [#{pc_descriptors[f][:pc_type]}, #{pc_descriptors[f][:lib]}]"
+ else
+ internal_server_error "PC feature '#{f}' not found"
+ end
+ end
+
+ # Creator URI
+ creator_uri = File.join url_for("/compound/#{inchi}/pc",:full), f
+
feature = OpenTox::Feature.new nil, @subjectid
feature.title = f.to_s
feature.metadata = {
RDF.type => [RDF::OT.Feature],
+ RDF::DC.creator => creator_uri,
+ RDF::DC.description => description
}
features << feature
end
@@ -60,61 +119,13 @@ module OpenTox
master[1][0] = OpenTox::Compound.new(params[:compound], @subjectid)
feature_dataset << master[1].to_a
format_output(feature_dataset)
+
end
rescue => e
$logger.debug "#{e.class}: #{e.message}"
$logger.debug "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
end
- #begin
- # tf = Tempfile.open(['compound-','.csv'])
- # tf.puts master.collect { |row| row.join(",") }.join("\n")
- # tf.flush
- # ds = OpenTox::Dataset.new nil, nil
- # # Does not work here:
- # #ds.upload tf.path
- # uri = RestClientWrapper.put(ds.uri, {:file => File.new(tf.path)}, {:subjectid => @subjectid})
- # $logger.debug "Waiting for upload (single CSV row): #{uri}"
- # OpenTox::Task.new(uri).wait if URI.task?(uri)
- # $logger.debug "Waiting finished"
- # ds.get
- # $logger.debug "AM: #{ds.uri}"
- #rescue => e
- # $logger.debug "#{e.class}: #{e.message}"
- # $logger.debug "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
- #end
-
-
-
- ## # # add feature metadata
- #pc_descriptors = YAML::load_file($keysfile)
- #cdk_single_ids && cdk_single_ids.each_with_index { |id,idx|
- # raise "Feature not found" if ! ds.features[File.join(ds.uri, "feature", id.to_s)]
- # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{RDF::DC.description => "#{pc_descriptors[cdk_ids[idx]][:name]} [#{pc_descriptors[cdk_ids[idx]][:pc_type]}, #{pc_descriptors[cdk_ids[idx]][:lib]}]"})
- # creator_uri = ds.uri.gsub(/\/dataset\/.*/, "/algorithm/pc")
- # creator_uri += "/#{cdk_ids[idx]}" if params[:add_uri]
- # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{RDF::DC.creator => creator_uri})
- # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{RDF::OT.hasSource => params[:dataset_uri]})
- #}
- #ob_ids && ob_ids.each { |id|
- # raise "Feature not found" if ! ds.features[File.join(ds.uri, "feature", id.to_s)]
- # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{RDF::DC.description => "#{pc_descriptors[id][:name]} [#{pc_descriptors[id][:pc_type]}, #{pc_descriptors[id][:lib]}]"})
- # creator_uri = ds.uri.gsub(/\/dataset\/.*/, "/algorithm/pc")
- # creator_uri += "/#{id}" if params[:add_uri]
- # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{RDF::DC.creator => creator_uri})
- # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{RDF::OT.hasSource => params[:dataset_uri]})
- #}
- #jl_ids && jl_ids.each { |id|
- # raise "Feature not found" if ! ds.features[File.join(ds.uri, "feature", id.to_s)]
- # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{RDF::DC.description => "#{pc_descriptors[id][:name]} [#{pc_descriptors[id][:pc_type]}, #{pc_descriptors[id][:lib]}]"})
- # creator_uri = ds.uri.gsub(/\/dataset\/.*/, "/algorithm/pc")
- # creator_uri += "/#{id}" if params[:add_uri]
- # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{RDF::DC.creator => creator_uri})
- # ds.add_feature_metadata(File.join(ds.uri, "feature", id.to_s),{RDF::OT.hasSource => params[:dataset_uri]})
- #}
- #$logger.debug master.size
- #$logger.debug master.collect { |r| r.join(',') }.join("\n")
- #$logger.debug ""
end
end