rubychem 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/README.markdown +14 -2
- data/features/step_definitions/user_starts_program_steps.rb +1 -1
- data/features/support/env.rb +1 -1
- data/lib/rubychem/lewis.rb +42 -0
- data/lib/rubychem/molecule.rb +17 -17
- data/lib/rubychem/version.rb +1 -1
- data/rubychem-1.0.2.gem +0 -0
- metadata +5 -5
data/Gemfile.lock
CHANGED
data/README.markdown
CHANGED
@@ -1,13 +1,25 @@
|
|
1
|
-
# RubyChem
|
1
|
+
# RubyChem - scripting chemistry intelligence
|
2
2
|
|
3
3
|
Example:
|
4
4
|
|
5
5
|
* H2SO4 -> ["H2", "S", "O4"]
|
6
6
|
* -> 97.99
|
7
7
|
|
8
|
-
|
8
|
+
************************************************************************
|
9
9
|
|
10
10
|
# Installation
|
11
11
|
|
12
12
|
* gem install rubychem
|
13
13
|
|
14
|
+
|
15
|
+
# Use
|
16
|
+
|
17
|
+
* x = RubyChem::Valence.new(1).calc_valence
|
18
|
+
* => {"1s"=>1}
|
19
|
+
|
20
|
+
* x = RubyChem::Chemical.new("H2O")
|
21
|
+
* => #<RubyChem::Chemical:0x00000101059540 @chem_species=[["H", "2"], ["O", "1"]], @mm=18.01, @moles=.0.010205122971731808>
|
22
|
+
* x = RubyChem::Chemical.new("H2O").chem_species
|
23
|
+
* => [["H", "2"], ["O", "1"]]
|
24
|
+
* x = RubyChem::Chemical.new("H2O",1).moles
|
25
|
+
* => 0.010205122971731808
|
data/features/support/env.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
$LOAD_PATH << File.expand_path('../../../lib', __FILE__)
|
2
|
-
require '
|
2
|
+
require 'rubychem'
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module RubyChem
|
2
|
+
class Lewis
|
3
|
+
attr_accessor :structure
|
4
|
+
Valence = {"O" => 6, "C" => 4}
|
5
|
+
Species = [["C"], ["O", "2"]]
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@species = Species
|
9
|
+
determine_configuration
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def determine_configuration
|
15
|
+
@valence_electrons_available = valence_electrons_available(@species)
|
16
|
+
@valence_electrons_needed = valence_electrons_needed_to_complete_shell(@species) * 8
|
17
|
+
@shared_electrons = @valence_electrons_needed - @valence_electrons_available
|
18
|
+
end
|
19
|
+
|
20
|
+
def valence_electrons_available(species)
|
21
|
+
electrons = []
|
22
|
+
species.each do |x|
|
23
|
+
if x.count > 1
|
24
|
+
x.count.times do
|
25
|
+
electrons << Valence[x.first]
|
26
|
+
end
|
27
|
+
else
|
28
|
+
electrons << Valence[x.first]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
electrons.inject{|sum,x| sum + x }
|
32
|
+
end
|
33
|
+
|
34
|
+
def valence_electrons_needed_to_complete_shell(species)
|
35
|
+
array = []
|
36
|
+
species.each{|x|array << x.count}
|
37
|
+
array.inject{|sum,x| sum + x}
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
data/lib/rubychem/molecule.rb
CHANGED
@@ -1,44 +1,44 @@
|
|
1
1
|
module RubyChem
|
2
2
|
class Chemical
|
3
3
|
|
4
|
-
MASSES = { :
|
5
|
-
:
|
6
|
-
:
|
7
|
-
:
|
8
|
-
:
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:
|
12
|
-
|
13
|
-
attr_accessor :chem_species, :mm
|
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, :moles
|
14
14
|
|
15
|
-
def initialize(formula)
|
15
|
+
def initialize(formula,grams=1)
|
16
16
|
if formula.scan(/\d+$/) == []
|
17
17
|
x = formula.gsub(/$/, '1').scan(/[A-za-z]*\d+/)
|
18
|
-
speciate(x)
|
18
|
+
speciate(x,grams)
|
19
19
|
else
|
20
20
|
x = formula.scan(/[A-za-z]*\d+/)
|
21
|
-
speciate(x)
|
21
|
+
speciate(x,grams)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
private
|
26
26
|
|
27
|
-
def speciate(x)
|
27
|
+
def speciate(x,grams=1)
|
28
28
|
@chem_species = x.map { |chem| chem.scan(/[A-Z][^A-Z]*/) }.flatten
|
29
29
|
@chem_species.map! {|chem| chem.scan /[A-Z]+|\d+/i }
|
30
30
|
atom_masses = @chem_species.map { |(elem, coeff)| MASSES[elem.to_sym] * (coeff || 1).to_f }
|
31
31
|
x = atom_masses.map { |int| int.to_f }
|
32
32
|
@mm = x.inject(0) { |s,v| s+= v }
|
33
|
+
@moles = grams/@mm
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
36
37
|
class BalanceChem
|
37
38
|
attr_accessor :balanced, :lefteq, :righteq, :leftfw, :rightfw, :count
|
38
39
|
|
39
|
-
|
40
|
-
#
|
41
|
-
#
|
40
|
+
# Checks if two formulas are balanced.
|
41
|
+
#
|
42
42
|
def initialize(lefteq, righteq)
|
43
43
|
@lefteq = lefteq
|
44
44
|
@righteq = righteq
|
data/lib/rubychem/version.rb
CHANGED
data/rubychem-1.0.2.gem
ADDED
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.
|
4
|
+
version: 1.0.3
|
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:
|
12
|
+
date: 2013-02-05 00:00:00.000000000 Z
|
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
|
@@ -20,7 +20,6 @@ executables: []
|
|
20
20
|
extensions: []
|
21
21
|
extra_rdoc_files: []
|
22
22
|
files:
|
23
|
-
- .DS_Store
|
24
23
|
- .gitignore
|
25
24
|
- Gemfile
|
26
25
|
- Gemfile.lock
|
@@ -32,15 +31,16 @@ files:
|
|
32
31
|
- features/support/env.rb
|
33
32
|
- features/user_starts_program.feature
|
34
33
|
- features/user_submits_compound.feature
|
35
|
-
- lib/.DS_Store
|
36
34
|
- lib/benchmark.rb
|
37
35
|
- lib/rubychem.rb
|
38
36
|
- lib/rubychem/comments.rb
|
37
|
+
- lib/rubychem/lewis.rb
|
39
38
|
- lib/rubychem/molecule.rb
|
40
39
|
- lib/rubychem/valence.rb
|
41
40
|
- lib/rubychem/version.rb
|
42
41
|
- lib/rubychem_rspec.rb
|
43
42
|
- rubychem-1.0.1.gem
|
43
|
+
- rubychem-1.0.2.gem
|
44
44
|
- rubychem.gemspec
|
45
45
|
- spec/rubychem/ruby_chem_spec.rb
|
46
46
|
- spec/spec_helper.rb
|
@@ -64,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
64
|
version: '0'
|
65
65
|
requirements: []
|
66
66
|
rubyforge_project: rubychem
|
67
|
-
rubygems_version: 1.8.
|
67
|
+
rubygems_version: 1.8.15
|
68
68
|
signing_key:
|
69
69
|
specification_version: 3
|
70
70
|
summary: A ruby chemistry library
|