Class: OpenTox::PhysChem

Inherits:
NumericSubstanceProperty show all
Defined in:
lib/physchem.rb

Overview

Feature for physico-chemical descriptors

Constant Summary collapse

JAVA_DIR =
File.join(File.dirname(__FILE__),"..","java")
CDK_JAR =
Dir[File.join(JAVA_DIR,"cdk-*jar")].last
JOELIB_JAR =
File.join(JAVA_DIR,"joelib2.jar")
LOG4J_JAR =
File.join(JAVA_DIR,"log4j.jar")
JMOL_JAR =
File.join(JAVA_DIR,"Jmol.jar")
OPENBABEL =
Hash[OpenBabel::OBDescriptor.list_as_string("descriptors").split("\n").collect do |d|
  name,description = d.split(/\s+/,2)
  ["Openbabel."+name,description] unless obexclude.include? name
end.compact.sort{|a,b| a[0]
CDK_DESCRIPTIONS =
YAML.load(`java -classpath #{CDK_JAR}:#{JAVA_DIR}  CdkDescriptorInfo`)
CDK =
cdkdescriptors
JOELIB =

strip Joelib messages from stdout

DESCRIPTORS =
OPENBABEL.merge(CDK.merge(JOELIB))

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.cdk_descriptorsArray<OpenTox::PhysChem>

Get CDK descriptor features

Returns:



80
81
82
# File 'lib/physchem.rb', line 80

def self.cdk_descriptors
  descriptors CDK
end

.descriptors(desc = DESCRIPTORS) ⇒ Array<OpenTox::PhysChem>

Get descriptor features

Parameters:

  • (Hash)

Returns:



45
46
47
48
49
50
# File 'lib/physchem.rb', line 45

def self.descriptors desc=DESCRIPTORS
  desc.collect do |name,description|
    lib,desc = name.split('.',2)
    self.find_or_create_by(:name => name, :library => lib, :descriptor => desc, :description => description)
  end
end

.joelib_descriptorsArray<OpenTox::PhysChem>

Get JOELIB descriptor features

Returns:



86
87
88
# File 'lib/physchem.rb', line 86

def self.joelib_descriptors
  descriptors JOELIB
end

.openbabel_descriptorsArray<OpenTox::PhysChem>

Get OpenBabel descriptor features

Returns:



74
75
76
# File 'lib/physchem.rb', line 74

def self.openbabel_descriptors
  descriptors OPENBABEL
end

.unique_descriptorsArray<OpenTox::PhysChem>

Get unique descriptor features

Returns:



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/physchem.rb', line 54

def self.unique_descriptors
  udesc = []
  UNIQUEDESCRIPTORS.each do |name|
    lib,desc = name.split('.',2)
    if lib == "Cdk"
      CDK_DESCRIPTIONS.select{|d| desc == d[:java_class].split('.').last.sub('Descriptor','') }.first[:names].each do |n|
        dname = "#{name}.#{n}"
        description = DESCRIPTORS[dname]
        udesc << self.find_or_create_by(:name => dname, :library => lib, :descriptor => desc, :description => description)
      end
    else
      description = DESCRIPTORS[name]
      udesc << self.find_or_create_by(:name => name, :library => lib, :descriptor => desc, :description => description)
    end
  end
  udesc
end

Instance Method Details

#cdk(descriptor, compound) ⇒ Hash

Calculate CDK descriptors

Parameters:

Returns:

  • (Hash)


107
108
109
# File 'lib/physchem.rb', line 107

def cdk descriptor, compound
  java_descriptor "cdk", descriptor, compound
end

#joelib(descriptor, compound) ⇒ Hash

Calculate JOELIB descriptors

Parameters:

Returns:

  • (Hash)


115
116
117
# File 'lib/physchem.rb', line 115

def joelib descriptor, compound
  java_descriptor "joelib", descriptor, compound
end

#openbabel(descriptor, compound) ⇒ Hash

Calculate OpenBabel descriptors

Parameters:

Returns:

  • (Hash)


94
95
96
97
98
99
100
101
# File 'lib/physchem.rb', line 94

def openbabel descriptor, compound
  obdescriptor = OpenBabel::OBDescriptor.find_type descriptor
  obmol = OpenBabel::OBMol.new
  obconversion = OpenBabel::OBConversion.new
  obconversion.set_in_format 'smi'
  obconversion.read_string obmol, compound.smiles
  {"#{library.capitalize}.#{descriptor}" => fix_value(obdescriptor.predict(obmol))}
end