chemruby 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README +120 -0
- data/Rakefile +195 -0
- data/ext/extconf.rb +4 -0
- data/ext/subcomp.c +416 -0
- data/lib/chem.rb +130 -0
- data/lib/chem/appl.rb +1 -0
- data/lib/chem/appl/chem3dole.rb +36 -0
- data/lib/chem/appl/tinker/nucleic.rb +40 -0
- data/lib/chem/appl/tinker/tinker_reader.rb +43 -0
- data/lib/chem/data.rb +4 -0
- data/lib/chem/data/atomic_weight.rb +124 -0
- data/lib/chem/data/character.rb +2 -0
- data/lib/chem/data/electronegativity.rb +14 -0
- data/lib/chem/data/periodic_table.rb +6 -0
- data/lib/chem/data/prime_numbers.rb +1 -0
- data/lib/chem/data/vdw_radii.rb +1 -0
- data/lib/chem/db.rb +64 -0
- data/lib/chem/db/cansmi.rb +234 -0
- data/lib/chem/db/cdx.rb +1525 -0
- data/lib/chem/db/eps.rb +164 -0
- data/lib/chem/db/g98.rb +909 -0
- data/lib/chem/db/gspan.rb +130 -0
- data/lib/chem/db/iupac.rb +5 -0
- data/lib/chem/db/iupac/a_1.rb +46 -0
- data/lib/chem/db/iupac/iuparser.rb +226 -0
- data/lib/chem/db/iupac/iuparser.ry +97 -0
- data/lib/chem/db/iupac/postfix.rb +2 -0
- data/lib/chem/db/kcf.rb +390 -0
- data/lib/chem/db/kcf_glycan.rb +19 -0
- data/lib/chem/db/kegg.rb +516 -0
- data/lib/chem/db/linucs/linparser.rb +144 -0
- data/lib/chem/db/linucs/linucs.ry +53 -0
- data/lib/chem/db/mdl.rb +379 -0
- data/lib/chem/db/molconnz.rb +12 -0
- data/lib/chem/db/mopac.rb +88 -0
- data/lib/chem/db/msi.rb +107 -0
- data/lib/chem/db/pdb_dic.rb +115 -0
- data/lib/chem/db/pdf.rb +131 -0
- data/lib/chem/db/pubchem.rb +113 -0
- data/lib/chem/db/rmagick.rb +70 -0
- data/lib/chem/db/sdf.rb +37 -0
- data/lib/chem/db/smbl.rb +88 -0
- data/lib/chem/db/smiles.rb +2 -0
- data/lib/chem/db/smiles/smiles.ry +203 -0
- data/lib/chem/db/smiles/smiparser.rb +375 -0
- data/lib/chem/db/swf.rb +74 -0
- data/lib/chem/db/sybyl.rb +150 -0
- data/lib/chem/db/tinker.rb +77 -0
- data/lib/chem/db/types/type_cansmi.rb +9 -0
- data/lib/chem/db/types/type_cdx.rb +24 -0
- data/lib/chem/db/types/type_gspan.rb +31 -0
- data/lib/chem/db/types/type_kcf.rb +28 -0
- data/lib/chem/db/types/type_kcf_glycan.rb +26 -0
- data/lib/chem/db/types/type_kegg.rb +92 -0
- data/lib/chem/db/types/type_mdl.rb +31 -0
- data/lib/chem/db/types/type_pdf.rb +33 -0
- data/lib/chem/db/types/type_png.rb +31 -0
- data/lib/chem/db/types/type_rxn.rb +25 -0
- data/lib/chem/db/types/type_sdf.rb +25 -0
- data/lib/chem/db/types/type_sybyl.rb +30 -0
- data/lib/chem/db/types/type_xyz.rb +26 -0
- data/lib/chem/db/vector.rb +128 -0
- data/lib/chem/db/xyz.rb +39 -0
- data/lib/chem/model.rb +119 -0
- data/lib/chem/model/skeleton.rb +37 -0
- data/lib/chem/utils.rb +11 -0
- data/lib/chem/utils/geometry.rb +27 -0
- data/lib/chem/utils/graph_db.rb +146 -0
- data/lib/chem/utils/math.rb +17 -0
- data/lib/chem/utils/prop.rb +123 -0
- data/lib/chem/utils/sssr.rb +101 -0
- data/lib/chem/utils/sub.rb +78 -0
- data/lib/chem/utils/transform.rb +110 -0
- data/lib/chem/utils/traverse.rb +37 -0
- data/lib/chem/utils/ullmann.rb +134 -0
- data/lib/graph.rb +41 -0
- data/lib/graph/cluster.rb +20 -0
- data/lib/graph/morgan.rb +38 -0
- data/sample/frequent_subgraph.rb +46 -0
- data/sample/images/ex1.rb +11 -0
- data/sample/images/ex2.rb +4 -0
- data/sample/images/ex3.rb +5 -0
- data/sample/images/ex4.rb +17 -0
- data/sample/images/ex5.rb +10 -0
- data/sample/images/mol/adenine.mol +26 -0
- data/sample/images/mol/atp.mol +69 -0
- data/sample/images/temp/ex5.mol +344 -0
- data/sample/kegg_db.rb +116 -0
- data/setup.rb +1551 -0
- data/test/all.rb +6 -0
- data/test/coord_test.rb +17 -0
- data/test/ctab_test.rb +31 -0
- data/test/data/A_21.tar.gz +0 -0
- data/test/data/A_21/aceanthrylene.cdx +0 -0
- data/test/data/A_21/aceanthrylene.mol +40 -0
- data/test/data/A_21/acenaphthylene.cdx +0 -0
- data/test/data/A_21/acenaphthylene.mol +31 -0
- data/test/data/A_21/acephenanthrylene.cdx +0 -0
- data/test/data/A_21/acephenanthrylene.mol +40 -0
- data/test/data/A_21/anthracene.cdx +0 -0
- data/test/data/A_21/anthracene.mol +35 -0
- data/test/data/A_21/as-indacene.cdx +0 -0
- data/test/data/A_21/as-indacene.mol +31 -0
- data/test/data/A_21/azulene.cdx +0 -0
- data/test/data/A_21/azulene.mol +26 -0
- data/test/data/A_21/biphenylene.cdx +0 -0
- data/test/data/A_21/biphenylene.mol +31 -0
- data/test/data/A_21/chrysene.cdx +0 -0
- data/test/data/A_21/chrysene.mol +44 -0
- data/test/data/A_21/coronen.cdx +0 -0
- data/test/data/A_21/coronen.mol +59 -0
- data/test/data/A_21/fluoranthene.cdx +0 -0
- data/test/data/A_21/fluoranthene.mol +40 -0
- data/test/data/A_21/fluorene.cdx +0 -0
- data/test/data/A_21/fluorene.mol +33 -0
- data/test/data/A_21/heptacene.cdx +0 -0
- data/test/data/A_21/heptacene.mol +71 -0
- data/test/data/A_21/heptalene.cdx +0 -0
- data/test/data/A_21/heptalene.mol +30 -0
- data/test/data/A_21/heptaphene.cdx +0 -0
- data/test/data/A_21/heptaphene.mol +71 -0
- data/test/data/A_21/hexacene.cdx +0 -0
- data/test/data/A_21/hexacene.mol +62 -0
- data/test/data/A_21/hexaphene.cdx +0 -0
- data/test/data/A_21/hexaphene.mol +62 -0
- data/test/data/A_21/indene.cdx +0 -0
- data/test/data/A_21/indene.mol +24 -0
- data/test/data/A_21/iupac.txt +41 -0
- data/test/data/A_21/naphthacene.cdx +0 -0
- data/test/data/A_21/naphthacene.mol +44 -0
- data/test/data/A_21/naphthalene.cdx +0 -0
- data/test/data/A_21/naphthalene.mol +26 -0
- data/test/data/A_21/ovalene.cdx +0 -0
- data/test/data/A_21/ovalene.mol +78 -0
- data/test/data/A_21/pentacene.cdx +0 -0
- data/test/data/A_21/pentacene.mol +53 -0
- data/test/data/A_21/pentalene.cdx +0 -0
- data/test/data/A_21/pentalene.mol +22 -0
- data/test/data/A_21/pentaphene.cdx +0 -0
- data/test/data/A_21/pentaphene.mol +53 -0
- data/test/data/A_21/perylene.cdx +0 -0
- data/test/data/A_21/perylene.mol +49 -0
- data/test/data/A_21/phenalene.cdx +0 -0
- data/test/data/A_21/phenalene.mol +33 -0
- data/test/data/A_21/phenanthrene.cdx +0 -0
- data/test/data/A_21/phenanthrene.mol +35 -0
- data/test/data/A_21/picene.cdx +0 -0
- data/test/data/A_21/picene.mol +53 -0
- data/test/data/A_21/pleiadene.cdx +0 -0
- data/test/data/A_21/pleiadene.mol +44 -0
- data/test/data/A_21/pyranthrene.cdx +0 -0
- data/test/data/A_21/pyranthrene.mol +72 -0
- data/test/data/A_21/pyrene.cdx +0 -0
- data/test/data/A_21/pyrene.mol +40 -0
- data/test/data/A_21/rubicene.cdx +0 -0
- data/test/data/A_21/rubicene.mol +63 -0
- data/test/data/A_21/s-indacene.cdx +0 -0
- data/test/data/A_21/s-indacene.mol +31 -0
- data/test/data/A_21/tetraphenylene.cdx +0 -0
- data/test/data/A_21/tetraphenylene.mol +57 -0
- data/test/data/A_21/trinaphthylene.cdx +0 -0
- data/test/data/A_21/trinaphthylene.mol +71 -0
- data/test/data/A_21/triphenylene.cdx +0 -0
- data/test/data/A_21/triphenylene.mol +44 -0
- data/test/data/C00147.kcf +25 -0
- data/test/data/G00147.kcf +13 -0
- data/test/data/atp.mol +69 -0
- data/test/data/cyclohexane.mol +17 -0
- data/test/data/cyclohexane.ps +485 -0
- data/test/data/fullerene.mol +155 -0
- data/test/data/glycan +33 -0
- data/test/data/hypericin.cdx +0 -0
- data/test/data/hypericin.cdxml +596 -0
- data/test/data/hypericin.chm +0 -0
- data/test/data/hypericin.ct +85 -0
- data/test/data/hypericin.f1d +0 -0
- data/test/data/hypericin.f1q +0 -0
- data/test/data/hypericin.gif +0 -0
- data/test/data/hypericin.mol +88 -0
- data/test/data/hypericin.mol2 +159 -0
- data/test/data/hypericin.msm +123 -0
- data/test/data/hypericin.pdf +359 -0
- data/test/data/hypericin.png +0 -0
- data/test/data/hypericin.ps +0 -0
- data/test/data/hypericin.skc +0 -0
- data/test/data/hypericin2.gif +0 -0
- data/test/data/hypericin2.ps +0 -0
- data/test/data/kegg/genomes/hsa/hsa_enzyme.list +4 -0
- data/test/data/kegg/genomes/hsa/hsa_pfam.list +4 -0
- data/test/data/kegg/ligand/mol/C00147.mol +26 -0
- data/test/data/kegg/ligand/reaction +14 -0
- data/test/data/kegg/ligand/reaction.lst +1 -0
- data/test/data/kegg/ligand/reaction_mapformula.lst +3 -0
- data/test/data/reaction +14 -0
- data/test/data/reaction.lst +1 -0
- data/test/data/reaction_mapformula.lst +3 -0
- data/test/data/rxn/C00001.mol +6 -0
- data/test/data/rxn/C00011.mol +10 -0
- data/test/data/rxn/C00014.mol +6 -0
- data/test/data/rxn/C01010.mol +18 -0
- data/test/data/rxn/sample.rxn +50 -0
- data/test/data/rxn/substitution.rxn +45 -0
- data/test/data/test.eps +0 -0
- data/test/data/test.mol +28 -0
- data/test/data/test.sdf +143 -0
- data/test/data/test.skc +0 -0
- data/test/data/test.xyz +4 -0
- data/test/data/test_lf.sdf +143 -0
- data/test/heavy_test_pubchem.rb +16 -0
- data/test/multiple_test.rb +22 -0
- data/test/test_adj.rb +54 -0
- data/test/test_canonical_smiles.rb +46 -0
- data/test/test_cdx.rb +32 -0
- data/test/test_chem.rb +18 -0
- data/test/test_cluster.rb +19 -0
- data/test/test_db.rb +11 -0
- data/test/test_eps.rb +24 -0
- data/test/test_geometry.rb +11 -0
- data/test/test_gspan.rb +28 -0
- data/test/test_iupac.rb +36 -0
- data/test/test_kcf.rb +24 -0
- data/test/test_kcf_glycan.rb +10 -0
- data/test/test_kegg.rb +118 -0
- data/test/test_linucs.rb +21 -0
- data/test/test_mdl.rb +45 -0
- data/test/test_mol2.rb +62 -0
- data/test/test_morgan.rb +21 -0
- data/test/test_pdf.rb +12 -0
- data/test/test_prop.rb +86 -0
- data/test/test_rmagick.rb +15 -0
- data/test/test_sbdb.rb +23 -0
- data/test/test_sdf.rb +30 -0
- data/test/test_smiles.rb +84 -0
- data/test/test_sssr.rb +18 -0
- data/test/test_sub.rb +47 -0
- data/test/test_subcomp.rb +37 -0
- data/test/test_traverse.rb +29 -0
- data/test/test_writer.rb +13 -0
- data/test/test_xyz.rb +15 -0
- data/test/type_test.rb +25 -0
- metadata +290 -0
data/lib/chem.rb
ADDED
@@ -0,0 +1,130 @@
|
|
1
|
+
#
|
2
|
+
# Chem module. See documentation for the file chem.rb for an overview
|
3
|
+
#
|
4
|
+
# $Id: chem.rb 158 2006-02-09 07:16:48Z tanaka $
|
5
|
+
#
|
6
|
+
# == Introduction
|
7
|
+
#
|
8
|
+
# Chem module is a facade of ChemRuby. You will find all the input format
|
9
|
+
# that ChemRuby support can be invoked via Chem module.
|
10
|
+
#
|
11
|
+
# == Examples
|
12
|
+
#
|
13
|
+
# === Example 1: Parse molecular file
|
14
|
+
#
|
15
|
+
# require 'chem'
|
16
|
+
#
|
17
|
+
# mol = Chem.open_mol("/usr/local/foo/mol/C00147.mol")
|
18
|
+
#
|
19
|
+
# ===
|
20
|
+
|
21
|
+
|
22
|
+
require 'stringio'
|
23
|
+
|
24
|
+
require 'chem/data'
|
25
|
+
require 'chem/utils'
|
26
|
+
require 'chem/model'
|
27
|
+
require 'chem/appl'
|
28
|
+
require 'chem/db'
|
29
|
+
|
30
|
+
require 'tempfile'
|
31
|
+
|
32
|
+
module Chem
|
33
|
+
|
34
|
+
autoload :MDL, 'chem/db/mdl.rb'
|
35
|
+
autoload :CDX, 'chem/db/cdx.rb'
|
36
|
+
autoload :G98, 'chem/db/g98.rb'
|
37
|
+
autoload :GSpan, 'chem/db/gspan.rb'
|
38
|
+
|
39
|
+
module_function
|
40
|
+
|
41
|
+
# returns first entry
|
42
|
+
def find_first str
|
43
|
+
p str
|
44
|
+
end
|
45
|
+
|
46
|
+
# format_class = Chem.autodetect("file.mol")
|
47
|
+
#
|
48
|
+
# Automatically detect file type and returns
|
49
|
+
# appropriate class to parse it
|
50
|
+
def self.autodetect file
|
51
|
+
ChemTypeRegistry.find{|format| format.detect_file file}
|
52
|
+
end
|
53
|
+
|
54
|
+
# Makes possible to open chemical files.
|
55
|
+
# Guesses the file type based on the extension of the file name.
|
56
|
+
#
|
57
|
+
# Examples : So if the file name is "benzene.mol",
|
58
|
+
#
|
59
|
+
# mol = Chem.open_mol("benzene.mol") # returns MDLMolecule object
|
60
|
+
#
|
61
|
+
def open_mol file, format_type = nil
|
62
|
+
format = nil
|
63
|
+
if format_type == nil
|
64
|
+
format = Chem.autodetect(file)
|
65
|
+
else
|
66
|
+
format = ChemTypeRegistry.find{|format| format.detect_type format_type}
|
67
|
+
end
|
68
|
+
raise NotImplementedError unless format
|
69
|
+
return format.parse(file) if format
|
70
|
+
end
|
71
|
+
|
72
|
+
alias :parse_file :open_mol
|
73
|
+
module_function :parse_file
|
74
|
+
|
75
|
+
#
|
76
|
+
def self.save(array, filename)
|
77
|
+
format = autodetect filename
|
78
|
+
format.save(array, filename)
|
79
|
+
end
|
80
|
+
|
81
|
+
def parse_smiles smiles
|
82
|
+
require 'chem/db/smiles'
|
83
|
+
require 'chem/db/smiles/smiparser'
|
84
|
+
::SmilesParser.parse_smiles(smiles)
|
85
|
+
end
|
86
|
+
|
87
|
+
def open_kegg dir
|
88
|
+
require 'chem/db/kegg'
|
89
|
+
Chem::KEGG::KeggDirectory.new(dir)
|
90
|
+
end
|
91
|
+
|
92
|
+
module Molecule
|
93
|
+
|
94
|
+
# Saves files for arbitrary format.
|
95
|
+
# file type is automatically detected by file extensions.
|
96
|
+
#
|
97
|
+
# You can optionally pass parameters as second argument.
|
98
|
+
# = Options
|
99
|
+
# :type:: => :png # Explicit file type
|
100
|
+
#
|
101
|
+
def save(filename, params = {}, &block)
|
102
|
+
|
103
|
+
format_type = params[:type]
|
104
|
+
format = ChemTypeRegistry.find{|format| format.detect_type format_type}
|
105
|
+
|
106
|
+
unless format_type
|
107
|
+
format = ChemTypeRegistry.find{|format| format.detect_file filename}
|
108
|
+
else
|
109
|
+
format = ChemTypeRegistry.find{|format| format.detect_type format_type}
|
110
|
+
end
|
111
|
+
|
112
|
+
unless format
|
113
|
+
raise(NotImplementedError)
|
114
|
+
end
|
115
|
+
format.save(self, filename, params)
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
# Syntax sugar for Chem.parse_smiles("smiles_string")
|
123
|
+
# Returns molecular object.
|
124
|
+
# Example
|
125
|
+
# SMILES("C1CCCC1")
|
126
|
+
def SMILES smiles
|
127
|
+
Chem.parse_smiles(smiles)
|
128
|
+
end
|
129
|
+
|
130
|
+
|
data/lib/chem/appl.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require 'win32ole'
|
4
|
+
controle = WIN32OLE.new('Chem3D.Control')
|
5
|
+
application = WIN32OLE.new('Chem3D.Application')
|
6
|
+
documents = application.documents
|
7
|
+
#cd = WIN32OLE.new('ChemDraw.Application')
|
8
|
+
#bounds = WIN32OLE.new('Chem3D.Bounds')
|
9
|
+
|
10
|
+
#documents.application.visible = true
|
11
|
+
|
12
|
+
error = open("error.txt", "w")
|
13
|
+
|
14
|
+
Dir.glob('/home/nobuya/src/mol/mol/C*.mol').each do |file|
|
15
|
+
/(C\d+).mol/ =~ file
|
16
|
+
input = 'c:\\cygwin\\home\\nobuya\\src\\mol\\mol\\' + $1 + '.mol'
|
17
|
+
output = 'c:\\cygwin\\home\\nobuya\\mop\\' + $1 + '.mop'
|
18
|
+
|
19
|
+
puts input
|
20
|
+
document = documents.open(input)
|
21
|
+
if document
|
22
|
+
document.saveAs(output)
|
23
|
+
document.close
|
24
|
+
else
|
25
|
+
error.puts(input)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
__END__
|
30
|
+
p document = documents.open('c:\cygwin\home\nobuya\src\mol\mol\C00001.mol')
|
31
|
+
p documents.Item(0)
|
32
|
+
p document.stericEnergy
|
33
|
+
document.saveAs('c:\cygwin\home\nobuya\xyz\C00001.xyz')
|
34
|
+
|
35
|
+
|
36
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#
|
2
|
+
# chem/appl/tinker/nucleic.rb - Tinker/nucleic wrapper
|
3
|
+
#
|
4
|
+
#
|
5
|
+
# $Id: nucleic.rb 128 2006-02-03 02:53:22Z tanaka $
|
6
|
+
#
|
7
|
+
|
8
|
+
# = Chem::TINKER
|
9
|
+
# Tinker protein wrapper.
|
10
|
+
# Example :
|
11
|
+
# #!/usr/bin/env ruby
|
12
|
+
# require 'chem'
|
13
|
+
#
|
14
|
+
# === SEE ALSO
|
15
|
+
# * http://dasher.wustl.edu/tinker/
|
16
|
+
|
17
|
+
|
18
|
+
module Chem
|
19
|
+
|
20
|
+
class TinkerNucleic
|
21
|
+
|
22
|
+
def initialize(cmd_line)
|
23
|
+
@cmd_line = cmd_line + ' -stdout'
|
24
|
+
end
|
25
|
+
|
26
|
+
def exec
|
27
|
+
begin
|
28
|
+
@io = IO.popen(@cmd_line, "w+")
|
29
|
+
@result = @io.read
|
30
|
+
return @result
|
31
|
+
ensure
|
32
|
+
@io.close
|
33
|
+
end
|
34
|
+
end
|
35
|
+
attr_reader :io, :result
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#!/usr/local/bin/ruby
|
2
|
+
|
3
|
+
|
4
|
+
if __FILE__ == $0
|
5
|
+
def make_nucleic
|
6
|
+
nucleic = "gtggcgatctttccgaaagcgatgactggagcgaagaaccaaagcagtgacatttgtctgatgccgcacgtaggcctgataagacgcggacagcgtcgcatcaggcatcttgtgcaaatgtcggatgcggcgtga"
|
7
|
+
require 'bio'
|
8
|
+
open("|nucleic", "w") do |out|
|
9
|
+
out.puts "nnn"
|
10
|
+
out.puts "Generated by Ruby"
|
11
|
+
out.puts "amber98.prm"
|
12
|
+
out.puts
|
13
|
+
nucleic.each_byte do |c|
|
14
|
+
out.puts c.chr
|
15
|
+
end
|
16
|
+
out.puts
|
17
|
+
sleep(1)
|
18
|
+
out.puts "Y"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
# make_nucleic
|
22
|
+
# sleep(1)
|
23
|
+
mol = TinkerReader.new(open('nnn.xyz', 'r')).mol
|
24
|
+
require 'pov_writer'
|
25
|
+
pov = PovWriter.new
|
26
|
+
output = open("nucleic.pov", 'w')
|
27
|
+
output.puts pov.atom('O', 0.90, 0.00, 0.00)
|
28
|
+
output.puts pov.atom('H', 0.50, 0.50, 0.90)
|
29
|
+
output.puts pov.atom('N', 0.50, 0.00, 0.50)
|
30
|
+
output.puts pov.atom('C', 0.50, 0.50, 0.50)
|
31
|
+
output.puts pov.atom('S', 0.50, 0.50, 0.10)
|
32
|
+
output.puts pov.atom('P', 0.50, 0.50, 0.10)
|
33
|
+
mol.atoms.each do |index, atom|
|
34
|
+
output.puts "object {atom_#{atom.element} translate <#{atom.x}, #{atom.y}, #{atom.z}>}"
|
35
|
+
end
|
36
|
+
mol.bonds.each do |bond|
|
37
|
+
output.puts pov.bond(bond.b, bond.e)
|
38
|
+
end
|
39
|
+
# output.puts(pov.helix(mol))
|
40
|
+
output.puts pov.light
|
41
|
+
output.puts pov.camera(120, -50, -100, 120, 0, -100)
|
42
|
+
output.close
|
43
|
+
end
|
data/lib/chem/data.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
# Table of atomic weight
|
2
|
+
# extracted from http://www.chem.qmul.ac.uk/iupac/AtWt/index.html
|
3
|
+
|
4
|
+
module Chem
|
5
|
+
AtomicWeight = {
|
6
|
+
:H => 1.00794,
|
7
|
+
:He => 4.002602,
|
8
|
+
:Li => 6.941,
|
9
|
+
:Be => 9.012182,
|
10
|
+
:B => 10.811,
|
11
|
+
:C => 12.0107,
|
12
|
+
:N => 14.0067,
|
13
|
+
:O => 15.9994,
|
14
|
+
:F => 18.9984032,
|
15
|
+
:Ne => 20.1797,
|
16
|
+
:Na => 22.989770,
|
17
|
+
:Mg => 24.3050,
|
18
|
+
:Al => 26.981538,
|
19
|
+
:Si => 28.0855,
|
20
|
+
:P => 30.973761,
|
21
|
+
:S => 32.065,
|
22
|
+
:Cl => 35.453,
|
23
|
+
:Ar => 39.948,
|
24
|
+
:K => 39.0983,
|
25
|
+
:Ca => 40.078,
|
26
|
+
:Sc => 44.955910,
|
27
|
+
:Ti => 47.867,
|
28
|
+
:V => 50.9415,
|
29
|
+
:Cr => 51.9961,
|
30
|
+
:Mn => 54.938049,
|
31
|
+
:Fe => 55.845,
|
32
|
+
:Co => 58.933200,
|
33
|
+
:Ni => 58.6934,
|
34
|
+
:Cu => 63.546,
|
35
|
+
:Zn => 65.409,
|
36
|
+
:Ga => 69.723,
|
37
|
+
:Ge => 72.64,
|
38
|
+
:As => 74.92160,
|
39
|
+
:Se => 78.96,
|
40
|
+
:Br => 79.904,
|
41
|
+
:Kr => 83.798,
|
42
|
+
:Rb => 85.4678,
|
43
|
+
:Sr => 87.62,
|
44
|
+
:Y => 88.90585,
|
45
|
+
:Zr => 91.224,
|
46
|
+
:Nb => 92.90638,
|
47
|
+
:Mo => 95.94,
|
48
|
+
:Tc => 98,
|
49
|
+
:Ru => 101.07,
|
50
|
+
:Rh => 102.90550,
|
51
|
+
:Pd => 106.42,
|
52
|
+
:Ag => 107.8682,
|
53
|
+
:Cd => 112.411,
|
54
|
+
:In => 114.818,
|
55
|
+
:Sn => 118.710,
|
56
|
+
:Sb => 121.760,
|
57
|
+
:Te => 127.60,
|
58
|
+
:I => 126.90447,
|
59
|
+
:Xe => 131.293,
|
60
|
+
:Cs => 132.90545,
|
61
|
+
:Ba => 137.327,
|
62
|
+
:La => 138.9055,
|
63
|
+
:Ce => 140.116,
|
64
|
+
:Pr => 140.90765,
|
65
|
+
:Nd => 144.24,
|
66
|
+
:Pm => 145,
|
67
|
+
:Sm => 150.36,
|
68
|
+
:Eu => 151.964,
|
69
|
+
:Gd => 157.25,
|
70
|
+
:Tb => 158.92534,
|
71
|
+
:Dy => 162.500,
|
72
|
+
:Ho => 164.93032,
|
73
|
+
:Er => 167.259,
|
74
|
+
:Tm => 168.93421,
|
75
|
+
:Yb => 173.04,
|
76
|
+
:Lu => 174.967,
|
77
|
+
:Hf => 178.49,
|
78
|
+
:Ta => 180.9479,
|
79
|
+
:W => 183.84,
|
80
|
+
:Re => 186.207,
|
81
|
+
:Os => 190.23,
|
82
|
+
:Ir => 192.217,
|
83
|
+
:Pt => 195.078,
|
84
|
+
:Au => 196.96655,
|
85
|
+
:Hg => 200.59,
|
86
|
+
:Tl => 204.3833,
|
87
|
+
:Pb => 207.2,
|
88
|
+
:Bi => 208.98038,
|
89
|
+
:Po => 209,
|
90
|
+
:At => 210,
|
91
|
+
:Rn => 222,
|
92
|
+
:Fr => 223,
|
93
|
+
:Ra => 226,
|
94
|
+
:Ac => 227,
|
95
|
+
:Th => 232.0381,
|
96
|
+
:Pa => 231.03588,
|
97
|
+
:U => 238.02891,
|
98
|
+
:Np => 237,
|
99
|
+
:Pu => 244,
|
100
|
+
:Am => 243,
|
101
|
+
:Cm => 247,
|
102
|
+
:Bk => 247,
|
103
|
+
:Cf => 251,
|
104
|
+
:Es => 252,
|
105
|
+
:Fm => 257,
|
106
|
+
:Md => 258,
|
107
|
+
:No => 259,
|
108
|
+
:Lr => 262,
|
109
|
+
:Rf => 261,
|
110
|
+
:Db => 262,
|
111
|
+
:Sg => 266,
|
112
|
+
:Bh => 264,
|
113
|
+
:Hs => 277,
|
114
|
+
:Mt => 268,
|
115
|
+
:Ds => 281,
|
116
|
+
:Rg => 272,
|
117
|
+
:Uub=> 285,
|
118
|
+
:Uut=> 284,
|
119
|
+
:Uuq=> 289,
|
120
|
+
:Uup=> 288,
|
121
|
+
#116 Uuh Ununhexium see Note above
|
122
|
+
#118 Uuo Ununoctium see Note above
|
123
|
+
}
|
124
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Table of Electro negativity
|
2
|
+
ElectroNegativity = {:H => 2.20, :He => 0, :Li => 0.98, :Be => 1.57, :B => 2.04, :C => 2.55, :N => 3.04, :O => 3.44, :F => 3.98,
|
3
|
+
:Ne => 0, :Na => 0.93, :Mg => 1.31, :Al => 1.61, :Si => 1.90, :P => 2.19, :S => 2.58, :Cl => 3.16,
|
4
|
+
:Ar => 0, :K => 0.82, :Ca => 1.00, :Sc => 1.36, :Ti => 1.54, :V => 1.63, :Cr => 1.66, :Mn => 1.55,
|
5
|
+
:Fe => 1.83, :Co => 1.88, :Ni => 1.91, :Cu => 1.90, :Zn => 1.65, :Ga => 1.81, :Ge => 2.01, :As => 2.18,
|
6
|
+
:Se => 2.55, :Br => 2.96, :Kr => 3.00, :Rb => 0.82, :Sr => 0.95, :Y => 1.22, :Zr => 1.33, :Nb => 1.6,
|
7
|
+
:Mo => 2.16, :Tc => 1.9, :Ru => 2.2, :Rh => 2.28, :Pd => 2.20, :Ag => 1.93, :Cd => 1.69, :In => 1.78,
|
8
|
+
:Sn => 1.96, :Sb => 2.05, :Te => 2.1, :I => 2.66, :Xe => 2.6, :Cs => 0.79, :Ba => 0.89, :Lu => 1.27,
|
9
|
+
:Hf => 1.3, :Ta => 1.5, :W => 2.36, :Re => 1.9, :Os => 2.2, :Ir => 2.20, :Pt => 2.28, :Au => 2.54,
|
10
|
+
:Hg => 2.00, :Tl => 1.62, :Pb => 2.33, :Bi => 2.02, :Po => 2.0, :At => 2.2, :Rn => 0, :Fr => 0.7,
|
11
|
+
:Ra => 0.9, :Lr => 0, :Rf => 0, :Db => 0, :Sg => 0, :Bh => 0, :Hs => 0, :Mt => 0,
|
12
|
+
:Ds => 0, :Rg => 0, :Uub => 0, :Uut => 0, :Uuq => 0, :Uup => 0, :Uuh => 0, :Uus => 0,
|
13
|
+
:Uuo => 0,
|
14
|
+
:R => 2.55, :* => 2.55}# special atoms are tree as carbon
|
@@ -0,0 +1,6 @@
|
|
1
|
+
|
2
|
+
module Chem
|
3
|
+
Element2Number = {:Bk=>97, :Si=>14, :In=>49, :Fr=>87, :V=>23, :Na=>11, :Tb=>65, :Po=>84, :Pd=>46, :Al=>13, :Ho=>67, :Ba=>56, :As=>33, :Rn=>86, :Nb=>41, :Hg=>80, :P=>15, :Bi=>83, :Be=>4, :Ru=>44, :S=>16, :O=>8, :Ra=>88, :Es=>99, :Xe=>54, :He=>2, :N=>7, :Am=>95, :Pr=>59, :Er=>68, :Au=>79, :Rh=>45, :Ce=>58, :Tm=>69, :Gd=>64, :Ir=>77, :Sr=>38, :La=>57, :Cm=>96, :Ca=>20, :C=>6, :Sm=>62, :Hf=>72, :Ag=>47, :At=>85, :F=>9, :Tc=>43, :Zn=>30, :Lu=>71, :B=>5, :Np=>93, :Ga=>31, :XX=>101, :Sn=>50, :Os=>76, :Eu=>63, :Dy=>66, :Yb=>70, :K=>19, :Tl=>81, :I=>53, :Ar=>18, :Th=>90, :Zr=>40, :Pt=>78, :Fe=>26, :Ge=>32, :Cr=>24, :Cf=>98, :Kr=>36, :Rb=>37, :ZZ=>103, :Ta=>73, :W=>74, :Sc=>21, :Mn=>25, :Pu=>94, :Mg=>12, :Se=>34, :Ti=>22, :Cd=>48, :Sb=>51, :Fm=>100, :Cs=>55, :Nd=>60, :Co=>27, :Pb=>82, :Cl=>17, :Cu=>29, :Y=>39, :Re=>75, :U=>92, :Pa=>91, :Mo=>42, :H=>1, :D=>0, :Te=>52, :Li=>3, :Br=>35, :YY=>102, :Pm=>61, :Ac=>89, :Ni=>28, :Ne=>10}
|
4
|
+
|
5
|
+
Number2Element = [:D, :H, :He, :Li, :Be, :B, :C, :N, :O, :F, :Ne, :Na, :Mg, :Al, :Si, :P, :S, :Cl, :Ar, :K, :Ca, :Sc, :Ti, :V, :Cr, :Mn, :Fe, :Co, :Ni, :Cu, :Zn, :Ga, :Ge, :As, :Se, :Br, :Kr, :Rb, :Sr, :Y, :Zr, :Nb, :Mo, :Tc, :Ru, :Rh, :Pd, :Ag, :Cd, :In, :Sn, :Sb, :Te, :I, :Xe, :Cs, :Ba, :La, :Ce, :Pr, :Nd, :Pm, :Sm, :Eu, :Gd, :Tb, :Dy, :Ho, :Er, :Tm, :Yb, :Lu, :Hf, :Ta, :W, :Re, :Os, :Ir, :Pt, :Au, :Hg, :Tl, :Pb, :Bi, :Po, :At, :Rn, :Fr, :Ra, :Ac, :Th, :Pa, :U, :Np, :Pu, :Am, :Cm, :Bk, :Cf, :Es, :Fm, :XX, :YY, :ZZ]
|
6
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
PrimeNumber = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639, 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939, 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361, 6367, 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, 6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103, 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499, 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919]
|
@@ -0,0 +1 @@
|
|
1
|
+
$vdw={"Ag"=>1.72, "Ar"=>1.88, "As"=>1.85, "Au"=>1.66, "Br"=>1.85, "C"=>1.70, "Cd"=>1.58, "Cl"=>1.75, "Cu"=>1.40, "F"=>1.47, "Ga"=>1.87, "H"=>1.20, "He"=>1.40, "Hg"=>1.55, "I"=>1.98, "In"=>1.93, "K"=>2.75, "Kr"=>2.02, "Li"=>1.82, "Mg"=>1.73, "N"=>1.55, "Na"=>2.27, "Ne"=>1.54, "Ni"=>1.63, "O"=>1.52, "P"=>1.80, "Pb"=>2.02, "Pd"=>1.63, "Pt"=>1.72, "S"=>1.80, "Se"=>1.90, "Si"=>2.10, "Sn"=>2.17, "Te"=>2.06, "Tl"=>1.96, "U"=>1.86, "Xe"=>2.16, "Zn"=>1.39}
|
data/lib/chem/db.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
|
2
|
+
#require 'chem/db/smiles'
|
3
|
+
|
4
|
+
module Chem
|
5
|
+
|
6
|
+
ChemTypeRegistry = []
|
7
|
+
|
8
|
+
module Db
|
9
|
+
module_function
|
10
|
+
|
11
|
+
|
12
|
+
# Load type files
|
13
|
+
# User would not call this method
|
14
|
+
def load # :nodoc
|
15
|
+
$LOAD_PATH.each do |path|
|
16
|
+
dir = File.join(path, 'chem/db/types')
|
17
|
+
next unless File.directory?(dir)
|
18
|
+
Dir.entries(dir).each do |entry|
|
19
|
+
if File.extname(entry) == ".rb" and not /^_/.match(entry)
|
20
|
+
begin
|
21
|
+
require(File.join(dir, entry))
|
22
|
+
rescue LoadError => e
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
Chem::Db::load
|
34
|
+
|
35
|
+
__END__
|
36
|
+
# Following script is obsolete
|
37
|
+
# auto.rb is maintained manually
|
38
|
+
#
|
39
|
+
# if $0 == __FILE__
|
40
|
+
# $: << ".."
|
41
|
+
# $: << "../../ext"
|
42
|
+
# require 'chem'
|
43
|
+
# require 'find'
|
44
|
+
|
45
|
+
# open("db/auto.rb", "w") do |out|
|
46
|
+
|
47
|
+
# out.puts "["
|
48
|
+
# puts "List all classes that require autoload"
|
49
|
+
# Find.find("db/") do |file|
|
50
|
+
# Find.prune if /\.svn/.match(file) or /~/.match(file) or /\.ry/.match(file)
|
51
|
+
# next if File.directory?(file)
|
52
|
+
# open(file) do |input|
|
53
|
+
# input.each do |line|
|
54
|
+
# if m = / class +([^ ]+)/.match(line)
|
55
|
+
# out.puts " [:%-30s , 'chem/%s']," % [m[1].chop, file.strip]
|
56
|
+
# end
|
57
|
+
# end
|
58
|
+
# end
|
59
|
+
# end
|
60
|
+
# out.puts "].each do |mod, file|"
|
61
|
+
# out.puts " Chem.autoload mod, file"
|
62
|
+
# out.puts "end"
|
63
|
+
# end
|
64
|
+
# end
|