eulim 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,110 +1,110 @@
1
- symbol,name,atomic_number,atomic_weight
2
- H,Hydrogen,1,1.0079
3
- He,Helium,2,4.002602
4
- Li,Lithium,3,6.941
5
- Be,Beryllium,4,9.012182
6
- B,Boron,5,10.811
7
- C,Carbon,6,12.0107
8
- N,Nitrogen,7,14.0067
9
- O,Oxygen,8,15.9996
10
- F,Fluorine,9,18.9984
11
- Ne,Neon,10,20.1797
12
- Na,Sodium,11,22.9897
13
- Mg,Magnesium,12,24.305
14
- Al,Aluminium,13,26.9815
15
- Si,Silicon,14,28.0855
16
- P,Phosphorus,15,30.9738
17
- S,Sulfur,16,32.065
18
- Cl,Chlorine,17,35.453
19
- Ar,Argon,18,39.948
20
- K,Potassium,19,39.0983
21
- Ca,Calcium,20,40.078
22
- Sc,Scandium,21,44.9559
23
- Ti,Titanium,22,47.867
24
- V,Vanadium,23,50.9415
25
- Cr,Chromium,24,51.9961
26
- Mn,Manganese,25,54.938
27
- Fe,Iron,26,55.845
28
- Co,Cobalt,27,58.9332
29
- Ni,Nickel,28,58.6934
30
- Cu,Copper,29,63.546
31
- Zn,Zinc,30,65.39
32
- Ga,Gallium,31,69.723
33
- Ge,Germanium,32,72.64
34
- As,Arsenic,33,74.9216
35
- Se,Selenium,34,78.96
36
- Br,Bromine,35,79.904
37
- Kr,Krypton,36,83.3
38
- Rb,Rubidium,37,85.4678
39
- Sr,Strontium,38,87.62
40
- Y,Yttrium,39,88.9059
41
- Zr,Zirconium,40,91.224
42
- Nb,Niobium,41,92.9064
43
- Mo,Molybdenum,42,95.94
44
- Tc,Technitium,43,98
45
- Ru,Ruthenium,44,101.07
46
- Rh,Rhodium,45,102.9055
47
- Pd,Palladium,46,106.42
48
- Ag,Silver,47,107.8682
49
- Cd,Cadmiuim,48,112.411
50
- In,Indium,49,114.818
51
- Sn,Tin,50,118.71
52
- Sb,Antimony,51,121.76
53
- Te,Tellurium,52,127.6
54
- I,Iodine,53,126.9045
55
- Xe,Xenon,54,131.293
56
- Cs,Cesium,55,132.9055
57
- Ba,Barium,56,137.327
58
- La,Lanthanum,57,138.9055
59
- Ce,Cerium,58,140.116
60
- Pr,Praseodymium,59,140.9077
61
- Nd,Neodymium,60,144.24
62
- Pm,Promethium,61,145
63
- Sm,Samarium,62,150.36
64
- Eu,Europium,63,151.964
65
- Gd,Gadolium,64,157.25
66
- Tb,Terbium,65,158.9253
67
- Dy,Dysprosium,66,162.5
68
- Ho,Holmium,67,164.9303
69
- Er,Erbium,68,167.259
70
- Tm,Thulium,69,168.9342
71
- Yb,Ytterbium,70,173.04
72
- Lu,Lutetium,71,174.967
73
- Hf,Hafnium,72,178.49
74
- Ta,Tantalum,73,180.9479
75
- W,Tungsten,74,183.84
76
- Re,Rhenium,75,186.207
77
- Os,Osmium,76,190.23
78
- Ir,Iridium,77,192.217
79
- Pt,Platinum,78,195.078
80
- Au,Gold,79,196.9665
81
- Hg,Mercury,80,200.59
82
- Tl,Thallium,81,204.3833
83
- Pb,Lead,82,207.2
84
- Bi,Bismuth,83,208.9804
85
- Po,Polonium,84,209
86
- At,Astatine,85,210
87
- Rn,Radon,86,222
88
- Fr,Francium,87,223
89
- Ra,Radium,88,226
90
- Ac,Actinium,89,227
91
- Th,Thorium,90,232.0381
92
- Pa,Protactinium,91,231.0359
93
- U,Uranium,92,238.0289
94
- Np,Neptunum,93,237
95
- Pu,Plutonium,94,244
96
- Am,Americium,95,243
97
- Cm,Curium,96,247
98
- Bk,Berkilium,97,247
99
- Cf,Californium,98,251
100
- Es,Einsteinium,99,252
101
- Fm,Fermium,100,257
102
- Md,Mendelevium,101,258
103
- No,Nobelium,102,259
104
- Lr,Lawrencium,103,262
105
- Rf,Rutherfordium,104,261
106
- Db,Dubnium,105,262
107
- Sg,Seaborgium,106,266
108
- Bh,Bohrium,107,264
109
- Hs,Hassium,108,277
1
+ symbol,name,atomic_number,atomic_weight
2
+ H,Hydrogen,1,1.0079
3
+ He,Helium,2,4.002602
4
+ Li,Lithium,3,6.941
5
+ Be,Beryllium,4,9.012182
6
+ B,Boron,5,10.811
7
+ C,Carbon,6,12.0107
8
+ N,Nitrogen,7,14.0067
9
+ O,Oxygen,8,15.9996
10
+ F,Fluorine,9,18.9984
11
+ Ne,Neon,10,20.1797
12
+ Na,Sodium,11,22.9897
13
+ Mg,Magnesium,12,24.305
14
+ Al,Aluminium,13,26.9815
15
+ Si,Silicon,14,28.0855
16
+ P,Phosphorus,15,30.9738
17
+ S,Sulfur,16,32.065
18
+ Cl,Chlorine,17,35.453
19
+ Ar,Argon,18,39.948
20
+ K,Potassium,19,39.0983
21
+ Ca,Calcium,20,40.078
22
+ Sc,Scandium,21,44.9559
23
+ Ti,Titanium,22,47.867
24
+ V,Vanadium,23,50.9415
25
+ Cr,Chromium,24,51.9961
26
+ Mn,Manganese,25,54.938
27
+ Fe,Iron,26,55.845
28
+ Co,Cobalt,27,58.9332
29
+ Ni,Nickel,28,58.6934
30
+ Cu,Copper,29,63.546
31
+ Zn,Zinc,30,65.39
32
+ Ga,Gallium,31,69.723
33
+ Ge,Germanium,32,72.64
34
+ As,Arsenic,33,74.9216
35
+ Se,Selenium,34,78.96
36
+ Br,Bromine,35,79.904
37
+ Kr,Krypton,36,83.3
38
+ Rb,Rubidium,37,85.4678
39
+ Sr,Strontium,38,87.62
40
+ Y,Yttrium,39,88.9059
41
+ Zr,Zirconium,40,91.224
42
+ Nb,Niobium,41,92.9064
43
+ Mo,Molybdenum,42,95.94
44
+ Tc,Technitium,43,98
45
+ Ru,Ruthenium,44,101.07
46
+ Rh,Rhodium,45,102.9055
47
+ Pd,Palladium,46,106.42
48
+ Ag,Silver,47,107.8682
49
+ Cd,Cadmiuim,48,112.411
50
+ In,Indium,49,114.818
51
+ Sn,Tin,50,118.71
52
+ Sb,Antimony,51,121.76
53
+ Te,Tellurium,52,127.6
54
+ I,Iodine,53,126.9045
55
+ Xe,Xenon,54,131.293
56
+ Cs,Cesium,55,132.9055
57
+ Ba,Barium,56,137.327
58
+ La,Lanthanum,57,138.9055
59
+ Ce,Cerium,58,140.116
60
+ Pr,Praseodymium,59,140.9077
61
+ Nd,Neodymium,60,144.24
62
+ Pm,Promethium,61,145
63
+ Sm,Samarium,62,150.36
64
+ Eu,Europium,63,151.964
65
+ Gd,Gadolium,64,157.25
66
+ Tb,Terbium,65,158.9253
67
+ Dy,Dysprosium,66,162.5
68
+ Ho,Holmium,67,164.9303
69
+ Er,Erbium,68,167.259
70
+ Tm,Thulium,69,168.9342
71
+ Yb,Ytterbium,70,173.04
72
+ Lu,Lutetium,71,174.967
73
+ Hf,Hafnium,72,178.49
74
+ Ta,Tantalum,73,180.9479
75
+ W,Tungsten,74,183.84
76
+ Re,Rhenium,75,186.207
77
+ Os,Osmium,76,190.23
78
+ Ir,Iridium,77,192.217
79
+ Pt,Platinum,78,195.078
80
+ Au,Gold,79,196.9665
81
+ Hg,Mercury,80,200.59
82
+ Tl,Thallium,81,204.3833
83
+ Pb,Lead,82,207.2
84
+ Bi,Bismuth,83,208.9804
85
+ Po,Polonium,84,209
86
+ At,Astatine,85,210
87
+ Rn,Radon,86,222
88
+ Fr,Francium,87,223
89
+ Ra,Radium,88,226
90
+ Ac,Actinium,89,227
91
+ Th,Thorium,90,232.0381
92
+ Pa,Protactinium,91,231.0359
93
+ U,Uranium,92,238.0289
94
+ Np,Neptunum,93,237
95
+ Pu,Plutonium,94,244
96
+ Am,Americium,95,243
97
+ Cm,Curium,96,247
98
+ Bk,Berkilium,97,247
99
+ Cf,Californium,98,251
100
+ Es,Einsteinium,99,252
101
+ Fm,Fermium,100,257
102
+ Md,Mendelevium,101,258
103
+ No,Nobelium,102,259
104
+ Lr,Lawrencium,103,262
105
+ Rf,Rutherfordium,104,261
106
+ Db,Dubnium,105,262
107
+ Sg,Seaborgium,106,266
108
+ Bh,Bohrium,107,264
109
+ Hs,Hassium,108,277
110
110
  Mt,Meitnerium,109,268
@@ -1,73 +1,82 @@
1
- module Eulim
2
- module Chemistry
3
- # This class has functionality for reaction
4
- # Ex: check for balanced rxn, validity of a rxn
5
- class Reaction
6
- attr_accessor :equation, :is_valid, :is_balanced, :species
7
- def initialize(arg)
8
- @equation = arg
9
- @species = build_species
10
- @is_valid = valid_rxn?
11
- @is_balanced = balanced_rxn?
12
- end
13
-
14
- private
15
-
16
- def build_species
17
- r = {}
18
- result = {}
19
- r[:reactants], r[:products] = @equation.split('>>')
20
- r.each do |type, _type_species|
21
- result[type] = {}
22
- r[type].split('+').each do |specie|
23
- result[type].merge!(get_specie_info(specie))
24
- end
25
- end
26
- result
27
- end
28
-
29
- def get_specie_info(specie)
30
- specie = specie.strip
31
- sc = get_stoichiometry specie
32
- offset = sc.zero? ? 0 : sc.to_s.length
33
- specie_str = specie[offset..specie.length]
34
- {
35
- specie_str => {
36
- compound: Compound.new(specie_str),
37
- stoichiometry: sc.zero? ? 1 : sc
38
- }
39
- }
40
- end
41
-
42
- def balanced_rxn?
43
- bal = { reactants: {}, products: {} }
44
- @species.each do |type, type_species|
45
- type_species.each do |_specie, s_info|
46
- s_info[:compound].constituents.each do |sym, c_info|
47
- bal[type][sym] ||= 0
48
- bal[type][sym] += c_info[:atom_count] * s_info[:stoichiometry]
49
- end
50
- end
51
- end
52
- bal[:products] == bal[:reactants]
53
- end
54
-
55
- def valid_rxn?
56
- valid = {}
57
- @species.each do |type, type_species|
58
- valid[type] = []
59
- type_species.each do |_specie, info|
60
- info[:compound].constituents.each do |symbol, _count|
61
- valid[type] << symbol
62
- end
63
- end
64
- end
65
- valid[:reactants].sort.uniq == valid[:products].sort.uniq
66
- end
67
-
68
- def get_stoichiometry(specie)
69
- specie.match(/^\d*/).to_a.first.to_i
70
- end
71
- end
72
- end
73
- end
1
+ module Eulim
2
+ module Chemistry
3
+ # This class has functionality for reaction
4
+ # Ex: check for balanced rxn, validity of a rxn
5
+ class Reaction
6
+ attr_accessor :equation, :is_valid, :is_balanced, :species
7
+
8
+ STATES = { '(s)' => 'solid', '(l)' => 'liquid', '(g)' => 'gaseous', '(aq)' => 'aqueous', "" => 'liquid' }
9
+
10
+ def initialize(arg)
11
+ @equation = arg
12
+ @species = build_species
13
+ @is_valid = valid_rxn?
14
+ @is_balanced = balanced_rxn?
15
+ end
16
+
17
+ # private
18
+
19
+ def build_species
20
+ r = {}
21
+ result = {}
22
+ r[:reactants], r[:products] = @equation.split('>>')
23
+ r.each do |type, _type_species|
24
+ result[type] = {}
25
+ r[type].split('+').each do |specie|
26
+ result[type].merge!(get_specie_info(specie.strip))
27
+ end
28
+ end
29
+ result
30
+ end
31
+
32
+ def get_specie_info(specie)
33
+ sc = get_stoichiometry specie
34
+ st = get_state specie
35
+ offset_sc = sc.zero? ? 0 : sc.to_s.length
36
+ offset_st = st.empty? ? 0 : st.length
37
+ specie_str = specie[offset_sc..(specie.length - offset_st -1)]
38
+ {
39
+ specie_str => {
40
+ compound: Compound.new(specie_str),
41
+ stoichiometry: sc.zero? ? 1 : sc,
42
+ state: STATES[st]
43
+ }
44
+ }
45
+ end
46
+
47
+ def balanced_rxn?
48
+ bal = { reactants: {}, products: {} }
49
+ @species.each do |type, type_species|
50
+ type_species.each do |_specie, s_info|
51
+ s_info[:compound].constituents.each do |sym, c_info|
52
+ bal[type][sym] ||= 0
53
+ bal[type][sym] += c_info[:atom_count] * s_info[:stoichiometry]
54
+ end
55
+ end
56
+ end
57
+ bal[:products] == bal[:reactants]
58
+ end
59
+
60
+ def valid_rxn?
61
+ valid = {}
62
+ @species.each do |type, type_species|
63
+ valid[type] = []
64
+ type_species.each do |_specie, info|
65
+ info[:compound].constituents.each do |symbol, _count|
66
+ valid[type] << symbol
67
+ end
68
+ end
69
+ end
70
+ valid[:reactants].sort.uniq == valid[:products].sort.uniq
71
+ end
72
+
73
+ def get_stoichiometry(specie)
74
+ specie.match(/^\d*/).to_a.first.to_i
75
+ end
76
+
77
+ def get_state(specie)
78
+ specie.match(/\((s|l|g|aq)\)$/).to_s
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,18 @@
1
+ module Eulim
2
+ module Chemistry
3
+ # This class is for mixture of compounds/elements
4
+ class Substance
5
+ attr_accessor :species
6
+ def initialize(args)
7
+ @species = {}
8
+ tt_wt_p = args.inject(0) { |sum, arg| sum + arg.last }
9
+ args.each do |specie, wt_p|
10
+ @species.merge! specie => {
11
+ compound: Compound.new(specie),
12
+ weight_percent: wt_p.to_f / tt_wt_p * 100
13
+ }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,6 +1,6 @@
1
- module Eulim
2
- # This module will contain all physical structures
3
- # Ex: pipes, sheets, walls, bridges, etc
4
- module Structures
5
- end
6
- end
1
+ module Eulim
2
+ # This module will contain all physical structures
3
+ # Ex: pipes, sheets, walls, bridges, etc
4
+ module Structures
5
+ end
6
+ end
@@ -1,13 +1,13 @@
1
- module Eulim
2
- module Structures
3
- # This is the class for Pipe
4
- # It inherits from Structure
5
- class Pipe < Structure
6
- def initialize(*args) end
7
-
8
- def self.requirements
9
- 'gimme radius, length, thickness, material...'
10
- end
11
- end
12
- end
13
- end
1
+ module Eulim
2
+ module Structures
3
+ # This is the class for Pipe
4
+ # It inherits from Structure
5
+ class Pipe < Structure
6
+ def initialize(*args) end
7
+
8
+ def self.requirements
9
+ 'gimme radius, length, thickness, material...'
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,12 +1,12 @@
1
- module Eulim
2
- module Structures
3
- # This is the base class for all structures
4
- class Structure
5
- def initialize(*args) end
6
-
7
- def self.requirements
8
- 'gimme some stuff.'
9
- end
10
- end
11
- end
12
- end
1
+ module Eulim
2
+ module Structures
3
+ # This is the base class for all structures
4
+ class Structure
5
+ def initialize(*args) end
6
+
7
+ def self.requirements
8
+ 'gimme some stuff.'
9
+ end
10
+ end
11
+ end
12
+ end