summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compound.rb33
-rw-r--r--test/compound.rb14
2 files changed, 47 insertions, 0 deletions
diff --git a/lib/compound.rb b/lib/compound.rb
index a26528b..a86d2e6 100644
--- a/lib/compound.rb
+++ b/lib/compound.rb
@@ -21,6 +21,7 @@ module OpenTox
field :png_id, type: BSON::ObjectId
field :svg_id, type: BSON::ObjectId
field :sdf_id, type: BSON::ObjectId
+ field :molecular_weight, type: Float
field :fingerprints, type: Hash, default: {}
field :default_fingerprint_size, type: Integer
@@ -325,6 +326,38 @@ module OpenTox
$mongo["compounds"].aggregate(aggregate).collect{ |r| [r["_id"], r["tanimoto"]] }
end
+
+ ## TODO: Should the following conversion functions are in overwrite.rb:class Numeric?!
+ # Get mg from logmmol (for nch LOAEL/pTD50 data)
+ # @return [Float] value in mg
+ def logmmol_to_mg(value, mw)
+ mg = (10**(-1.0*value.to_f)*(mw.to_f*1000))
+ return mg
+ end
+
+ # Get mg from mmol
+ # @return [Float] value in mg
+ def mmol_to_mg(value, mw)
+ mg = (value.to_f)*(mw.to_f)
+ return mg
+ end
+
+ # Get mg from logmg
+ # @return [Float] value in mg
+ def logmg_to_mg(value)
+ mg = 10**value.to_f
+ return mg
+ end
+
+ # Calculate molecular weight of Compound with OB and store it in object
+ # @return [Float] molecular weight
+ def molecular_weight
+ if self["molecular_weight"]==0.0 || self["molecular_weight"].nil?
+ update(:molecular_weight => OpenTox::Algorithm::Descriptor.physchem(self, ["Openbabel.MW"]).first)
+ end
+ self["molecular_weight"]
+ end
+
private
diff --git a/test/compound.rb b/test/compound.rb
index 22c152b..3857a85 100644
--- a/test/compound.rb
+++ b/test/compound.rb
@@ -174,4 +174,18 @@ print c.sdf
p neighbors
end
end
+
+ def test_molecular_weight
+ c = OpenTox::Compound.from_smiles "CC(=O)CC(C)C"
+ assert_equal 100.15888, c.molecular_weight
+ end
+
+ def test_mg_conversions
+ c = OpenTox::Compound.from_smiles "O"
+ mw = c.molecular_weight
+ assert_equal 18.01528, mw
+ assert_equal 0.8105107141417474, c.logmmol_to_mg(4.34688225631145, mw)
+ assert_equal 9007.64, c.mmol_to_mg(500, mw)
+ assert_equal 2437.9999984148976, c.logmg_to_mg(3.387033701)
+ end
end