diff options
author | Andreas Maunz <andreas@maunz.de> | 2012-09-26 14:23:19 +0200 |
---|---|---|
committer | Andreas Maunz <andreas@maunz.de> | 2012-09-26 14:23:19 +0200 |
commit | 4b874659a8e81e65b3ea7f3c8e07e32bdf3f35ea (patch) | |
tree | fbe1341253266801f0fd3f129097ea60e23261ad | |
parent | c7fb4b395fdb5603fed633177aa2e183604e24b0 (diff) |
Fixed feature metadata
-rw-r--r-- | lib/compound/pc_descriptors.rb | 14 | ||||
-rw-r--r-- | webapp/compound.rb | 109 |
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 |