rubychem 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,8 +3,8 @@
3
3
  require 'rubygems'
4
4
  require 'benchmark'
5
5
 
6
- load 'rubychem.rb'
7
- load 'comments.rb'
6
+ load 'rubychem/molecule.rb'
7
+ load 'rubychem/comments.rb'
8
8
 
9
9
 
10
10
  iterations = 10000
@@ -1,62 +1,2 @@
1
- module RubyChem
2
- class Chemical
3
-
4
- MASSES = { :H => 1.01, :He => 4.00, :Li => 6.94, :Be => 9.01, :B => 10.81, :C => 12.01, :N => 14.01, :F => 19.00, :Ne => 20.18, :S => 32.01, :O => 15.99,
5
- :Na => 22.99, :Mg => 24.31, :Al => 26.98, :Si => 28.09, :P => 30.97, :Cl => 35.45, :Ar => 39.95, :K => 39.1, :Ca => 40.08, :Sc => 44.96, :Ti => 47.88, :V => 50.94,
6
- :Cr => 52.00, :Mn => 54.94, :Fe => 55.85, :Co => 58.93, :Ni => 58.69, :Cu => 63.55, :Zn => 65.39, :Ga => 69.72, :Ge=> 72.61, :As => 74.92, :Se => 78.96,
7
- :Br => 79.90, :Kr => 83.80, :Rb => 85.47, :Sr => 87.62, :Y => 88.91, :Zr => 91.22, :Nb => 92.91, :Mo => 95.94, :Te => 98, :Ru => 101.07, :Rh => 102.91,
8
- :Pd => 106.42, :Ag => 107.87, :Cd => 112.41, :In => 114.82, :Sn => 118.71, :Sb => 121.76, :Te => 127.6, :I => 126.9, :Xe => 131.29, :Cs => 132.9, :Ba => 137.3,
9
- :La => 138.9, :Hf => 178.5, :Ta => 180.9, :W => 183.9, :Re => 186.2, :Os => 190.2, :Ir => 192.2, :Pt => 195.1, :Au => 197.0, :Hg => 200.6, :Ti => 204.4,
10
- :Pb => 207.2, :Bi => 209, :Po => 209, :At => 210, :Rn => 222, :Fr => 223, :Ra => 226, :Ac => 227, :Rf => 261, :Db => 262, :Sg => 263, :Bh => 264, :Hs => 265,
11
- :Mt => 268, :Ds => 271, :Rg => 272 }
12
-
13
- attr_accessor :chem_species, :mm
14
-
15
- def initialize(formula)
16
- if formula.scan(/\d+$/) == []
17
- x = formula.gsub(/$/, '1').scan(/[A-za-z]*\d+/)
18
- speciate(x)
19
- else
20
- x = formula.scan(/[A-za-z]*\d+/)
21
- speciate(x)
22
- end
23
- end
24
-
25
- private
26
-
27
- def speciate(x)
28
- @chem_species = x.map { |chem| chem.scan(/[A-Z][^A-Z]*/) }.flatten
29
- @chem_species.map! {|chem| chem.scan /[A-Z]+|\d+/i }
30
- atom_masses = @chem_species.map { |(elem, coeff)| MASSES[elem.to_sym] * (coeff || 1).to_f }
31
- x = atom_masses.map { |int| int.to_f }
32
- @mm = x.inject(0) { |s,v| s+= v }
33
- end
34
- end
35
-
36
- class BalanceChem
37
- attr_accessor :balanced, :lefteq, :righteq, :leftfw, :rightfw, :count
38
-
39
- ##
40
- # Checks if two formulas are balanced.
41
- #
42
- def initialize(lefteq, righteq)
43
- @lefteq = lefteq
44
- @righteq = righteq
45
- @balanced = ( RubyChem::Chemical.new(@lefteq).mm - RubyChem::Chemical.new(@righteq).mm ).abs < 0.00001
46
- end
47
-
48
- def balanceit
49
- @count = 0
50
- @leftfw = @leftfw.fw
51
- @rightfw = @rightfw.fw
52
- until @balanced == true
53
- @rightfw = @rightfw * 2
54
- @balanced = (@leftfw - @rightfw).abs < 0.00001
55
- @count += 1
56
- end
57
- puts "#{@lefteq} (#{@leftfw}) -> #{@righteq} (#{@rightfw}) is a balanced equation; #{@count} iterations"
58
- end
59
-
60
-
61
- end
62
- end
1
+ load 'rubychem/molecule.rb'
2
+ load 'rubychem/valence.rb'
@@ -0,0 +1,62 @@
1
+ module RubyChem
2
+ class Chemical
3
+
4
+ MASSES = { :H => 1.01, :He => 4.00, :Li => 6.94, :Be => 9.01, :B => 10.81, :C => 12.01, :N => 14.01, :F => 19.00, :Ne => 20.18, :S => 32.01, :O => 15.99,
5
+ :Na => 22.99, :Mg => 24.31, :Al => 26.98, :Si => 28.09, :P => 30.97, :Cl => 35.45, :Ar => 39.95, :K => 39.1, :Ca => 40.08, :Sc => 44.96, :Ti => 47.88, :V => 50.94,
6
+ :Cr => 52.00, :Mn => 54.94, :Fe => 55.85, :Co => 58.93, :Ni => 58.69, :Cu => 63.55, :Zn => 65.39, :Ga => 69.72, :Ge=> 72.61, :As => 74.92, :Se => 78.96,
7
+ :Br => 79.90, :Kr => 83.80, :Rb => 85.47, :Sr => 87.62, :Y => 88.91, :Zr => 91.22, :Nb => 92.91, :Mo => 95.94, :Te => 98, :Ru => 101.07, :Rh => 102.91,
8
+ :Pd => 106.42, :Ag => 107.87, :Cd => 112.41, :In => 114.82, :Sn => 118.71, :Sb => 121.76, :Te => 127.6, :I => 126.9, :Xe => 131.29, :Cs => 132.9, :Ba => 137.3,
9
+ :La => 138.9, :Hf => 178.5, :Ta => 180.9, :W => 183.9, :Re => 186.2, :Os => 190.2, :Ir => 192.2, :Pt => 195.1, :Au => 197.0, :Hg => 200.6, :Ti => 204.4,
10
+ :Pb => 207.2, :Bi => 209, :Po => 209, :At => 210, :Rn => 222, :Fr => 223, :Ra => 226, :Ac => 227, :Rf => 261, :Db => 262, :Sg => 263, :Bh => 264, :Hs => 265,
11
+ :Mt => 268, :Ds => 271, :Rg => 272 }
12
+
13
+ attr_accessor :chem_species, :mm
14
+
15
+ def initialize(formula)
16
+ if formula.scan(/\d+$/) == []
17
+ x = formula.gsub(/$/, '1').scan(/[A-za-z]*\d+/)
18
+ speciate(x)
19
+ else
20
+ x = formula.scan(/[A-za-z]*\d+/)
21
+ speciate(x)
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def speciate(x)
28
+ @chem_species = x.map { |chem| chem.scan(/[A-Z][^A-Z]*/) }.flatten
29
+ @chem_species.map! {|chem| chem.scan /[A-Z]+|\d+/i }
30
+ atom_masses = @chem_species.map { |(elem, coeff)| MASSES[elem.to_sym] * (coeff || 1).to_f }
31
+ x = atom_masses.map { |int| int.to_f }
32
+ @mm = x.inject(0) { |s,v| s+= v }
33
+ end
34
+ end
35
+
36
+ class BalanceChem
37
+ attr_accessor :balanced, :lefteq, :righteq, :leftfw, :rightfw, :count
38
+
39
+ ##
40
+ # Checks if two formulas are balanced.
41
+ #
42
+ def initialize(lefteq, righteq)
43
+ @lefteq = lefteq
44
+ @righteq = righteq
45
+ @balanced = ( RubyChem::Chemical.new(@lefteq).mm - RubyChem::Chemical.new(@righteq).mm ).abs < 0.00001
46
+ end
47
+
48
+ def balanceit
49
+ @count = 0
50
+ @leftfw = @leftfw.fw
51
+ @rightfw = @rightfw.fw
52
+ until @balanced == true
53
+ @rightfw = @rightfw * 2
54
+ @balanced = (@leftfw - @rightfw).abs < 0.00001
55
+ @count += 1
56
+ end
57
+ puts "#{@lefteq} (#{@leftfw}) -> #{@righteq} (#{@rightfw}) is a balanced equation; #{@count} iterations"
58
+ end
59
+
60
+
61
+ end
62
+ end
File without changes
@@ -1,3 +1,3 @@
1
1
  module Rubychem
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubychem
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-14 00:00:00.000000000Z
12
+ date: 2011-11-15 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: This is an open source library of chemistry, goodies. I'm dedicating
15
15
  this code to my major professor Arthur Brecher and Graduate PI Dr. Rogers of Bowling
@@ -34,11 +34,13 @@ files:
34
34
  - features/user_submits_compound.feature
35
35
  - lib/.DS_Store
36
36
  - lib/benchmark.rb
37
- - lib/comments.rb
38
37
  - lib/rubychem.rb
38
+ - lib/rubychem/comments.rb
39
+ - lib/rubychem/molecule.rb
40
+ - lib/rubychem/valence.rb
39
41
  - lib/rubychem/version.rb
40
42
  - lib/rubychem_rspec.rb
41
- - lib/valence.rb
43
+ - rubychem-1.0.1.gem
42
44
  - rubychem.gemspec
43
45
  - spec/rubychem/ruby_chem_spec.rb
44
46
  - spec/spec_helper.rb