From 8eaae3991345a924d01e454105fcfa5af8b85ab5 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Fri, 10 Oct 2014 11:59:35 +0200 Subject: Revert "fix storing feature datasets for dataset with duplicate compounds, preserve feature order" This reverts commit 02e63dd161f07b9ec750af61b933ce60c34be42c. --- lib/descriptor.rb | 47 ++++++++++++++--------------------------------- 1 file changed, 14 insertions(+), 33 deletions(-) diff --git a/lib/descriptor.rb b/lib/descriptor.rb index 7403ebf..36fb1a5 100644 --- a/lib/descriptor.rb +++ b/lib/descriptor.rb @@ -1,8 +1,5 @@ require 'digest/md5' ENV["JAVA_HOME"] ||= "/usr/lib/jvm/java-7-openjdk" - -BABEL_3D_CACHE_DIR = File.join(Dir.pwd,'/babel_3d_cache') - module OpenTox module Algorithm @@ -121,7 +118,7 @@ module OpenTox $logger.debug "> #{line.chomp}" end io.close - raise "external cmd failed '#{cmd}' (see log file for error msg)" unless $?.to_i == 0 + raise "external cmd failed '#{cmd}' (error should be logged)" unless $?.to_i == 0 end end @@ -175,7 +172,7 @@ module OpenTox obconversion.set_out_format 'sdf' digest = Digest::MD5.hexdigest compounds.collect{|c| c.uri}.inspect - sdf_file = File.join(BABEL_3D_CACHE_DIR,"#{digest}.sdf") + sdf_file = "/tmp/#{digest}.sdf" if File.exists? sdf_file # do not recreate existing 3d sdfs $logger.debug "re-using cached 3d structures from #{sdf_file}" else @@ -188,36 +185,20 @@ module OpenTox c = 0 compounds.each do |compound| c += 1 - cmp_file = File.join(BABEL_3D_CACHE_DIR,Digest::MD5.hexdigest(compound.inchi)+".sdf") - cmp_sdf = nil - if File.exists? cmp_file - $logger.debug "read cached 3d structure for compound #{c}/#{compounds.size}" - cmp_sdf = File.read(cmp_file) + $logger.debug "compute 3d structures for compound #{c}/#{compounds.size}" + obconversion.read_string obmol, compound.inchi + sdf_2d = obconversion.write_string(obmol) + OpenBabel::OBOp.find_type("Gen3D").do(obmol) + sdf_3d = obconversion.write_string(obmol) + if sdf_3d.match(/.nan/) + warning = "3D generation failed for compound #{compound.uri}, trying to calculate descriptors from 2D structure." + $logger.warn warning + # TODO + #@feature_dataset[RDF::OT.Warnings] ? @feature_dataset[RDF::OT.Warnings] << warning : @feature_dataset[RDF::OT.Warnings] = warning + tmp_file.write sdf_2d else - $logger.debug "compute 3d structure for compound #{c}/#{compounds.size}" - obconversion.read_string obmol, compound.inchi - sdf_2d = obconversion.write_string(obmol) - error = nil - if compound.inchi.include?(";") # component includes multiple compounds (; in inchi, . in smiles) - error = "OpenBabel 3D generation failed for multi-compound #{compound.uri}, trying to calculate descriptors from 2D structure." - else - OpenBabel::OBOp.find_type("Gen3D").do(obmol) - sdf_3d = obconversion.write_string(obmol) - error = "3D generation failed for compound #{compound.uri}, trying to calculate descriptors from 2D structure." if sdf_3d.match(/.nan/) - end - if error - $logger.warn error - # TODO - # @feature_dataset[RDF::OT.Warnings] ? @feature_dataset[RDF::OT.Warnings] << error : @feature_dataset[RDF::OT.Warnings] = error - cmp_sdf = sdf_2d - else - cmp_sdf = sdf_3d - end - File.open(cmp_file,"w") do |f| - f.write(cmp_sdf) - end + tmp_file.write sdf_3d end - tmp_file.write cmp_sdf end tmp_file.close File.rename(tmp_file, sdf_file) -- cgit v1.2.3