chemruby 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
@@ -0,0 +1,134 @@
|
|
1
|
+
#
|
2
|
+
# = chem/utils/subgraph.rb - Subgraph isomorphism
|
3
|
+
#
|
4
|
+
# Author:: Nobuya Tanaka <tanaka@chemruby.org>
|
5
|
+
#
|
6
|
+
# Copyright:: Copyright (c) 2001, 2005 ChemRuby project
|
7
|
+
#
|
8
|
+
# $Id: ullmann.rb 139 2006-02-07 07:39:20Z tanaka $
|
9
|
+
#
|
10
|
+
|
11
|
+
require 'subcomp'
|
12
|
+
|
13
|
+
$ARC = 4 # for 32-bit computer
|
14
|
+
|
15
|
+
module Graph
|
16
|
+
|
17
|
+
def adj_matrix
|
18
|
+
n_long = (nodes.length - 1) / 32 + 1
|
19
|
+
mat = Array.new(n_long * @nodes.length, 0)
|
20
|
+
nodes.each_with_index do |node, idx|
|
21
|
+
adjacent_to(node).each do |bond, node|
|
22
|
+
keta = nodes.index(node) / 32
|
23
|
+
mat[idx * n_long + keta] += 1 << (nodes.index(node) - keta * 32)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
mat.pack("L*")
|
27
|
+
end
|
28
|
+
|
29
|
+
def match_by_adj_mat mat, len
|
30
|
+
m = Array.new("0xff", 100).pack("c*")
|
31
|
+
subcomp_match_by_ullmann(mat, len, self.adjacency_list, self.nodes.length, m)
|
32
|
+
end
|
33
|
+
|
34
|
+
def match_by_ullmann other, &block
|
35
|
+
if other.nodes.length == 1
|
36
|
+
self.nodes.find{|node| node.element == other.nodes[0].element}
|
37
|
+
end
|
38
|
+
subcomp_match_by_ullmann(adj_matrix, nodes.length, other.adjacency_list, other.nodes.length, other.matchable(self, &block))
|
39
|
+
end
|
40
|
+
alias match match_by_ullmann
|
41
|
+
|
42
|
+
# returns match correspondences without duplicate
|
43
|
+
def match_exhaustively other
|
44
|
+
correspond = {}
|
45
|
+
result = []
|
46
|
+
while true
|
47
|
+
match = self.match_by_ullmann(other) do |a, b|
|
48
|
+
a.element == b.element and not (correspond[a] and correspond[a].include? b)
|
49
|
+
end
|
50
|
+
break if not match
|
51
|
+
result.push(match)
|
52
|
+
match.each_with_index do |n, m|
|
53
|
+
(correspond[other.nodes[n]] ||=[]).push @nodes[m]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
result
|
57
|
+
end
|
58
|
+
|
59
|
+
def matchable other, exlucde = {}
|
60
|
+
n_long = (other.nodes.length - 1) / 32 + 1
|
61
|
+
mat = Array.new(n_long * @nodes.length, 0)
|
62
|
+
@nodes.each_with_index do |node, index|
|
63
|
+
other.nodes.each_with_index do |n, idx|
|
64
|
+
if node.element == n.element
|
65
|
+
keta = idx / 32
|
66
|
+
mat[index * n_long + keta] += 1 << (idx - keta * 32)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
mat.pack("L*")
|
71
|
+
end
|
72
|
+
|
73
|
+
#obsolete
|
74
|
+
def matchable_old other, exlucde = {}
|
75
|
+
n_long = (other.nodes.length - 1) / 32 + 1
|
76
|
+
row_unit = n_long * ( 32 / 8)
|
77
|
+
r = "\0" * 10000
|
78
|
+
if block_given?
|
79
|
+
@nodes.each_with_index do |node, index|
|
80
|
+
other.nodes.each_with_index do |o_node, idx|
|
81
|
+
if yield(node, o_node)
|
82
|
+
col_byte = idx / 8
|
83
|
+
col_bit = idx - col_byte * 8
|
84
|
+
r[index * row_unit + col_byte] += (1 << col_bit)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
else
|
89
|
+
@nodes.each_with_index do |node, index|
|
90
|
+
other.nodes.each_with_index do |o_node, idx|
|
91
|
+
if node.element == o_node.element or node.element == :R or o_node.element == :R
|
92
|
+
col_byte = idx / 8
|
93
|
+
col_bit = idx - col_byte * 8
|
94
|
+
r[index * row_unit + col_byte] += (1 << col_bit)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
r
|
100
|
+
end
|
101
|
+
|
102
|
+
def adjacency_list
|
103
|
+
ret = []
|
104
|
+
@nodes.each do |node|
|
105
|
+
r = []
|
106
|
+
self.adjacent_to(node).each do |bond, to|
|
107
|
+
r << @nodes.index(to)
|
108
|
+
end
|
109
|
+
ret << r
|
110
|
+
end
|
111
|
+
ret
|
112
|
+
end
|
113
|
+
|
114
|
+
# Obsolete!?
|
115
|
+
def connection
|
116
|
+
self_adj = []
|
117
|
+
@nodes.each do |node|
|
118
|
+
i = 0
|
119
|
+
self.adjacent_to(node).each do |bond, to|
|
120
|
+
i += 1<< @nodes.index(to)
|
121
|
+
end
|
122
|
+
self_adj << i
|
123
|
+
end
|
124
|
+
self_adj
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
module Chem
|
130
|
+
module Molecule
|
131
|
+
include Graph
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
data/lib/graph.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
#
|
2
|
+
# graph.rb - Graph
|
3
|
+
#
|
4
|
+
# Copyright (C) 2003-2005 TANAKA Nobuya <tanaka@chemruby.net>
|
5
|
+
#
|
6
|
+
# $Id: graph.rb 61 2005-10-12 09:17:39Z tanaka $
|
7
|
+
#
|
8
|
+
|
9
|
+
|
10
|
+
require 'graph/morgan'
|
11
|
+
require 'graph/cluster'
|
12
|
+
|
13
|
+
module Graph
|
14
|
+
|
15
|
+
attr_accessor :nodes, :edges, :adjacencies
|
16
|
+
|
17
|
+
def each
|
18
|
+
@nodes.each do |atom|
|
19
|
+
yield atom
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def adjacent_to(atom)
|
24
|
+
# instance_eval "alias :tmp_adjacent_to :adjacent_to"
|
25
|
+
# instance_eval "alias :adjacent_to :adjacencies"
|
26
|
+
if @adjacencies == nil
|
27
|
+
@adjacencies = {}
|
28
|
+
@edges.each do |bond, atom_a, atom_b|
|
29
|
+
(@adjacencies[atom_a] ||= []).push([bond, atom_b])
|
30
|
+
(@adjacencies[atom_b] ||= []).push([bond, atom_a])
|
31
|
+
end
|
32
|
+
end
|
33
|
+
@adjacencies[atom] ||= []
|
34
|
+
@adjacencies[atom]
|
35
|
+
end
|
36
|
+
|
37
|
+
def adjacencies(atom)
|
38
|
+
@adjacencies[atom] ||= []
|
39
|
+
@adjacencies[atom]
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
module Graph
|
3
|
+
|
4
|
+
def clustering_coefficient
|
5
|
+
cc = {} # clustering coefficient
|
6
|
+
@nodes.each do |node|
|
7
|
+
c = 0
|
8
|
+
adj = adjacent_to(node)
|
9
|
+
adj_nodes = adj.collect{|e, n| n}
|
10
|
+
adj.each do |ed, nd|
|
11
|
+
adjacent_to(nd).each do |e, n|
|
12
|
+
c += 1 if adj_nodes.include?(n)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
cc[node] = c
|
16
|
+
end
|
17
|
+
cc
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
data/lib/graph/morgan.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
|
2
|
+
module Graph
|
3
|
+
def morgan
|
4
|
+
ec = {} # extended connectivity
|
5
|
+
tec = {} # trial extended connectivity
|
6
|
+
|
7
|
+
@nodes.each{ |a| tec[a] = 1 }
|
8
|
+
|
9
|
+
k = 0
|
10
|
+
k2 = k + 1
|
11
|
+
|
12
|
+
while k2 > k
|
13
|
+
k = k2
|
14
|
+
@nodes.each{ |a| ec[a] = tec[a] }
|
15
|
+
|
16
|
+
@nodes.each do |a|
|
17
|
+
tec[a] = adjacent_to(a).inject(0){|ret, (b, n)| ret + ec[n]}
|
18
|
+
end
|
19
|
+
k2 = @nodes.collect{|a| tec[a]}.uniq.length
|
20
|
+
end
|
21
|
+
|
22
|
+
# calc morgan tree
|
23
|
+
max = @nodes.max{|a, b| tec[a] <=> tec[b]}
|
24
|
+
|
25
|
+
queue = [ max ]
|
26
|
+
traversed = [ max ]
|
27
|
+
|
28
|
+
while from = queue.shift
|
29
|
+
adjacent_to(from).sort{|(b1, n), (b2, m)| tec[m] <=> tec[n]}.each do |bond, atom|
|
30
|
+
unless traversed.include?(atom)
|
31
|
+
queue.push(atom)
|
32
|
+
traversed.push(atom)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
[ec, tec, traversed]
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
|
2
|
+
$: << "/home/tanaka/proj/chemruby/lib/"
|
3
|
+
$: << "/home/tanaka/proj/chemruby/ext/"
|
4
|
+
|
5
|
+
require 'chem'
|
6
|
+
|
7
|
+
# Load
|
8
|
+
puts "Load molecules"
|
9
|
+
|
10
|
+
mols = []
|
11
|
+
|
12
|
+
Dir.glob("mol/*.mol") do |file
|
13
|
+
mols.push Chem.open_mol(filename) if File.exist?(filename)
|
14
|
+
print "."
|
15
|
+
end
|
16
|
+
|
17
|
+
puts
|
18
|
+
puts "Load completed!"
|
19
|
+
|
20
|
+
# Calculate with gSpan
|
21
|
+
|
22
|
+
filename = "temp/temp.gspan.#{Process.pid}.0"
|
23
|
+
filename.succ! while File.exist?(filename)
|
24
|
+
# KADOWAKi suggested to removed .fp extension
|
25
|
+
#filename = filename + ".fp"
|
26
|
+
Chem.save(mols, filename)
|
27
|
+
|
28
|
+
system("gSpan #{filename} -o -s32")
|
29
|
+
freqs = Chem.open_mol("#{filename}.fp")
|
30
|
+
|
31
|
+
# Save Image
|
32
|
+
|
33
|
+
puts
|
34
|
+
puts "Now save images in temp/"
|
35
|
+
|
36
|
+
|
37
|
+
mols.each_with_index do |mol, i|
|
38
|
+
m = mol.match_by_ullmann(freqs[10])
|
39
|
+
if m
|
40
|
+
m.each do |index|
|
41
|
+
mol.nodes[index].visible = true
|
42
|
+
end
|
43
|
+
# need rmagick or use pdf
|
44
|
+
mol.save(File.join("temp", "mol_#{i}.png"))
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'chem'
|
2
|
+
|
3
|
+
mol = Chem.open_mol("mol/atp.mol")
|
4
|
+
mol.nodes.each do |node|
|
5
|
+
|
6
|
+
node.visible = true unless node.element == :C
|
7
|
+
|
8
|
+
case node.element
|
9
|
+
when :O
|
10
|
+
node.color = [1, 0, 0]
|
11
|
+
when :N
|
12
|
+
node.color = [0, 0, 1]
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
mol.save("temp/ex4.png")
|
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
-ISIS- 02070623312D
|
3
|
+
|
4
|
+
10 11 0 0 0 0 0 0 0 0999 V2000
|
5
|
+
-0.6276 -3.3023 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
6
|
+
0.0872 -3.7152 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
7
|
+
0.8037 -3.3019 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
8
|
+
0.8008 -2.4713 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
9
|
+
-0.0861 -1.2557 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
10
|
+
-0.9059 -1.1709 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
11
|
+
-1.2399 -1.9245 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
12
|
+
-0.6264 -2.4750 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
13
|
+
0.0867 -2.0617 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
14
|
+
-1.3424 -3.7143 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
15
|
+
8 9 1 0 0 0 0
|
16
|
+
1 2 1 0 0 0 0
|
17
|
+
8 1 2 0 0 0 0
|
18
|
+
6 7 2 0 0 0 0
|
19
|
+
2 3 2 0 0 0 0
|
20
|
+
3 4 1 0 0 0 0
|
21
|
+
5 6 1 0 0 0 0
|
22
|
+
7 8 1 0 0 0 0
|
23
|
+
9 5 1 0 0 0 0
|
24
|
+
4 9 2 0 0 0 0
|
25
|
+
1 10 1 0 0 0 0
|
26
|
+
M END
|
@@ -0,0 +1,69 @@
|
|
1
|
+
|
2
|
+
-ISIS- 02070623502D
|
3
|
+
|
4
|
+
31 33 0 0 0 0 0 0 0 0999 V2000
|
5
|
+
2.4776 -1.7290 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
6
|
+
0.6787 -1.6299 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
7
|
+
1.6694 0.2591 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
8
|
+
-0.3254 -0.5277 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
9
|
+
2.3200 -0.2785 0.0000 C 0 0 2 0 0 0 0 0 0 0 0 0
|
10
|
+
2.0257 -1.0363 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
|
11
|
+
1.1912 -0.9888 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
|
12
|
+
0.9734 -0.1896 0.0000 C 0 0 1 0 0 0 0 0 0 0 0 0
|
13
|
+
0.2042 0.1028 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
14
|
+
4.4581 0.1598 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
15
|
+
5.1745 0.5731 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
16
|
+
5.1716 1.4037 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
17
|
+
4.4563 1.8128 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
18
|
+
2.9639 1.6550 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
19
|
+
2.4765 0.9902 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
20
|
+
2.9582 0.3213 0.0000 N 0 0 3 0 0 0 0 0 0 0 0 0
|
21
|
+
3.7432 0.5727 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
22
|
+
3.7468 1.3970 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
23
|
+
4.4519 2.6378 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0
|
24
|
+
-1.1542 -0.5208 0.0000 P 0 0 3 0 0 0 0 0 0 0 0 0
|
25
|
+
-1.9792 -0.5208 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
26
|
+
-1.1583 0.3042 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
27
|
+
-1.1583 -1.3458 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
28
|
+
-2.8042 -0.5167 0.0000 P 0 0 3 0 0 0 0 0 0 0 0 0
|
29
|
+
-3.6292 -0.5125 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
30
|
+
-2.8000 0.3083 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
31
|
+
-2.8083 -1.3417 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
32
|
+
-4.4542 -0.5125 0.0000 P 0 0 3 0 0 0 0 0 0 0 0 0
|
33
|
+
-5.2792 -0.5125 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
34
|
+
-4.4542 0.3125 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
35
|
+
-4.4542 -1.3375 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0
|
36
|
+
8 9 1 1 0 0 0
|
37
|
+
9 4 1 0 0 0 0
|
38
|
+
6 1 1 6 0 0 0
|
39
|
+
14 15 2 0 0 0 0
|
40
|
+
16 17 1 0 0 0 0
|
41
|
+
18 14 1 0 0 0 0
|
42
|
+
15 16 1 0 0 0 0
|
43
|
+
5 16 1 1 0 0 0
|
44
|
+
7 2 1 6 0 0 0
|
45
|
+
13 19 1 0 0 0 0
|
46
|
+
4 20 1 0 0 0 0
|
47
|
+
17 10 1 0 0 0 0
|
48
|
+
20 21 1 0 0 0 0
|
49
|
+
8 3 1 0 0 0 0
|
50
|
+
20 22 2 0 0 0 0
|
51
|
+
10 11 2 0 0 0 0
|
52
|
+
20 23 1 0 0 0 0
|
53
|
+
8 7 1 0 0 0 0
|
54
|
+
21 24 1 0 0 0 0
|
55
|
+
11 12 1 0 0 0 0
|
56
|
+
24 25 1 0 0 0 0
|
57
|
+
3 5 1 0 0 0 0
|
58
|
+
24 26 2 0 0 0 0
|
59
|
+
12 13 2 0 0 0 0
|
60
|
+
24 27 1 0 0 0 0
|
61
|
+
13 18 1 0 0 0 0
|
62
|
+
25 28 1 0 0 0 0
|
63
|
+
17 18 2 0 0 0 0
|
64
|
+
28 29 1 0 0 0 0
|
65
|
+
7 6 1 0 0 0 0
|
66
|
+
28 30 2 0 0 0 0
|
67
|
+
5 6 1 0 0 0 0
|
68
|
+
28 31 1 0 0 0 0
|
69
|
+
M END
|
@@ -0,0 +1,344 @@
|
|
1
|
+
%PDF-1.3
|
2
|
+
1 0 obj
|
3
|
+
<< /Type /Catalog
|
4
|
+
/Outlines 2 0 R
|
5
|
+
/Pages 3 0 R
|
6
|
+
>>
|
7
|
+
endobj
|
8
|
+
2 0 obj
|
9
|
+
<< /Type /Outlines
|
10
|
+
/Count 0
|
11
|
+
>>
|
12
|
+
endobj
|
13
|
+
3 0 obj
|
14
|
+
<< /Type /Pages
|
15
|
+
/Kids [ 4 0 R]
|
16
|
+
/Count 1
|
17
|
+
>>
|
18
|
+
endobj
|
19
|
+
4 0 obj
|
20
|
+
<< /Type /Page
|
21
|
+
/Parent 3 0 R
|
22
|
+
/MediaBox [ 0 0 180 200]
|
23
|
+
/Contents 5 0 R
|
24
|
+
/Resources << /ProcSet 6 0 R
|
25
|
+
/Font << /F1 7 0 R >>
|
26
|
+
>>
|
27
|
+
>>
|
28
|
+
endobj
|
29
|
+
5 0 obj
|
30
|
+
<< /Length 4837 >> stream
|
31
|
+
q
|
32
|
+
1 0 0 1 0 0 cm
|
33
|
+
0 0 0 RG
|
34
|
+
180 200 m
|
35
|
+
180 0 l
|
36
|
+
S
|
37
|
+
0 0 0 RG
|
38
|
+
180 200 m
|
39
|
+
0 200 l
|
40
|
+
S
|
41
|
+
0 0 0 RG
|
42
|
+
180 0 m
|
43
|
+
0 0 l
|
44
|
+
S
|
45
|
+
0 0 0 RG
|
46
|
+
0 200 m
|
47
|
+
0 0 l
|
48
|
+
S
|
49
|
+
0 0 0 RG
|
50
|
+
105.699704410878 33.5614184451438 m
|
51
|
+
93.9266479810976 38.0367716693611 l
|
52
|
+
S
|
53
|
+
0 0 0 RG
|
54
|
+
93.9266479810976 38.0367716693611 m
|
55
|
+
89.4226057913852 32.6746141908609 l
|
56
|
+
S
|
57
|
+
0 0 0 RG
|
58
|
+
121.805772118963 20.6021791327473 m
|
59
|
+
125.662605778785 14.6901882583086 l
|
60
|
+
S
|
61
|
+
0 0 0 RG
|
62
|
+
132.854366139953 57.2778449086428 m
|
63
|
+
128.705530099391 51.6189483149507 l
|
64
|
+
S
|
65
|
+
0 0 0 RG
|
66
|
+
133.63464489293 55.1413382172321 m
|
67
|
+
130.977797334915 51.5174722825411 l
|
68
|
+
S
|
69
|
+
0 0 0 RG
|
70
|
+
141.411411337585 43.0890187034509 m
|
71
|
+
148.093115356285 45.2288663344079 l
|
72
|
+
S
|
73
|
+
0 0 0 RG
|
74
|
+
148.148215464381 57.8452605297646 m
|
75
|
+
141.484114243071 60.0413751230689 l
|
76
|
+
S
|
77
|
+
0 0 0 RG
|
78
|
+
128.705530099391 51.6189483149507 m
|
79
|
+
132.805712592976 45.92533803893 l
|
80
|
+
S
|
81
|
+
0 0 0 RG
|
82
|
+
126.310205955786 32.2007518868917 m
|
83
|
+
131.99757112809 37.5459126990947 l
|
84
|
+
S
|
85
|
+
0 0 0 RG
|
86
|
+
109.033260950668 21.3291944478988 m
|
87
|
+
104.685859473014 15.8909133019003 l
|
88
|
+
S
|
89
|
+
0 0 0 RG
|
90
|
+
159.007528434908 64.2093230148177 m
|
91
|
+
158.970050100252 71.2365107628273 l
|
92
|
+
S
|
93
|
+
0 0 0 RG
|
94
|
+
80.2210039159597 28.4332199658457 m
|
95
|
+
78.7353464671583 28.4455884943167 l
|
96
|
+
S
|
97
|
+
0 0 0 RG
|
98
|
+
148.093115356285 45.2288663344079 m
|
99
|
+
154.185783603773 41.7099647826 l
|
100
|
+
S
|
101
|
+
0 0 0 RG
|
102
|
+
67.5355405263208 28.4922085003396 m
|
103
|
+
66.1084324210566 28.4922085003396 l
|
104
|
+
S
|
105
|
+
0 0 0 RG
|
106
|
+
105.699704410878 33.5614184451438 m
|
107
|
+
111.645707449576 37.3947109213847 l
|
108
|
+
S
|
109
|
+
0 0 0 RG
|
110
|
+
73.107710566959 34.0921393475342 m
|
111
|
+
73.1006175847959 35.5193857584091 l
|
112
|
+
S
|
113
|
+
0 0 0 RG
|
114
|
+
71.2073690610807 35.3454372229276 m
|
115
|
+
71.2128266590949 34.2472620127497 l
|
116
|
+
S
|
117
|
+
0 0 0 RG
|
118
|
+
163.885740315237 41.7075967097456 m
|
119
|
+
170.0 45.2349885686408 l
|
120
|
+
S
|
121
|
+
0 0 0 RG
|
122
|
+
164.033362688177 43.984914788512 m
|
123
|
+
167.954638070731 46.2471469431876 l
|
124
|
+
S
|
125
|
+
0 0 0 RG
|
126
|
+
73.107710566959 22.892277653145 m
|
127
|
+
73.1006175847959 21.4650312422701 l
|
128
|
+
S
|
129
|
+
0 0 0 RG
|
130
|
+
105.699704410878 33.5614184451438 m
|
131
|
+
109.033260950668 21.3291944478988 l
|
132
|
+
S
|
133
|
+
0 0 0 RG
|
134
|
+
54.908501573862 28.5200384597014 m
|
135
|
+
53.4812551629871 28.5271314418645 l
|
136
|
+
S
|
137
|
+
0 0 0 RG
|
138
|
+
170.0 45.2349885686408 m
|
139
|
+
169.97516581363 52.3478420855159 l
|
140
|
+
S
|
141
|
+
0 0 0 RG
|
142
|
+
42.281396882977 28.5834701227025 m
|
143
|
+
40.8541436433438 28.5907361391952 l
|
144
|
+
S
|
145
|
+
0 0 0 RG
|
146
|
+
120.669296129847 36.8619156164101 m
|
147
|
+
126.310205955786 32.2007518868917 l
|
148
|
+
S
|
149
|
+
0 0 0 RG
|
150
|
+
47.9098330372686 34.1548888340419 m
|
151
|
+
47.9170990537613 35.582142073675 l
|
152
|
+
S
|
153
|
+
0 0 0 RG
|
154
|
+
46.0221951674235 35.427242163485 m
|
155
|
+
46.0166044920272 34.3290737820653 l
|
156
|
+
S
|
157
|
+
0 0 0 RG
|
158
|
+
165.09449807507 60.7280154798113 m
|
159
|
+
159.007528434908 64.2093230148177 l
|
160
|
+
S
|
161
|
+
0 0 0 RG
|
162
|
+
163.060462279131 59.711954180941 m
|
163
|
+
159.163109712351 61.9409587036169 l
|
164
|
+
S
|
165
|
+
0 0 0 RG
|
166
|
+
47.8534943564307 22.9550305540317 m
|
167
|
+
47.8464013742675 21.5277841431568 l
|
168
|
+
S
|
169
|
+
0 0 0 RG
|
170
|
+
159.007528434908 64.2093230148177 m
|
171
|
+
148.148215464381 57.8452605297646 l
|
172
|
+
S
|
173
|
+
0 0 0 RG
|
174
|
+
29.6542162105283 28.6192448606713 m
|
175
|
+
28.2271081052642 28.6192448606713 l
|
176
|
+
S
|
177
|
+
0 0 0 RG
|
178
|
+
148.093115356285 45.2288663344079 m
|
179
|
+
148.148215464381 57.8452605297646 l
|
180
|
+
S
|
181
|
+
0 0 0 RG
|
182
|
+
146.206166237791 46.4987707701579 m
|
183
|
+
146.250246324268 56.5918861264433 l
|
184
|
+
S
|
185
|
+
0 0 0 RG
|
186
|
+
17.0271081052642 28.6192448606713 m
|
187
|
+
15.6 28.6192448606713 l
|
188
|
+
S
|
189
|
+
0 0 0 RG
|
190
|
+
109.033260950668 21.3291944478988 m
|
191
|
+
121.805772118963 20.6021791327473 l
|
192
|
+
S
|
193
|
+
0 0 0 RG
|
194
|
+
22.6271081052642 34.2192448606713 m
|
195
|
+
22.6271081052642 35.6463529659355 l
|
196
|
+
S
|
197
|
+
0 0 0 RG
|
198
|
+
20.7330418894745 35.4819556711978 m
|
199
|
+
20.7330418894745 34.3836421554091 l
|
200
|
+
S
|
201
|
+
0 0 0 RG
|
202
|
+
126.310205955786 32.2007518868917 m
|
203
|
+
121.805772118963 20.6021791327473 l
|
204
|
+
S
|
205
|
+
0 0 0 RG
|
206
|
+
22.6271081052642 23.0192448606713 m
|
207
|
+
22.6271081052642 21.5921367554072 l
|
208
|
+
S
|
209
|
+
BT
|
210
|
+
/F1 12.0 Tf
|
211
|
+
1 0 0 1 123.922366243531 5.2 Tm
|
212
|
+
(O) Tj
|
213
|
+
ET
|
214
|
+
BT
|
215
|
+
/F1 12.0 Tf
|
216
|
+
1 0 0 1 96.3891483398223 6.71678353118991 Tm
|
217
|
+
(O) Tj
|
218
|
+
ET
|
219
|
+
BT
|
220
|
+
/F1 12.0 Tf
|
221
|
+
1 0 0 1 111.552391976047 35.6290346958493 Tm
|
222
|
+
(O) Tj
|
223
|
+
ET
|
224
|
+
BT
|
225
|
+
/F1 12.0 Tf
|
226
|
+
1 0 0 1 81.0208098567971 23.5865999598228 Tm
|
227
|
+
(O) Tj
|
228
|
+
ET
|
229
|
+
BT
|
230
|
+
/F1 12.0 Tf
|
231
|
+
1 0 0 1 154.235078488956 34.109190047543 Tm
|
232
|
+
(N) Tj
|
233
|
+
ET
|
234
|
+
BT
|
235
|
+
/F1 12.0 Tf
|
236
|
+
1 0 0 1 165.155613801812 53.1478079531649 Tm
|
237
|
+
(N) Tj
|
238
|
+
ET
|
239
|
+
BT
|
240
|
+
/F1 12.0 Tf
|
241
|
+
1 0 0 1 131.365472512125 56.9941016099563 Tm
|
242
|
+
(N) Tj
|
243
|
+
ET
|
244
|
+
BT
|
245
|
+
/F1 12.0 Tf
|
246
|
+
1 0 0 1 131.278230674307 36.5810421190583 Tm
|
247
|
+
(N) Tj
|
248
|
+
ET
|
249
|
+
BT
|
250
|
+
/F1 12.0 Tf
|
251
|
+
1 0 0 1 154.140183858347 72.0364311200819 Tm
|
252
|
+
(N) Tj
|
253
|
+
ET
|
254
|
+
BT
|
255
|
+
/F1 12.0 Tf
|
256
|
+
1 0 0 1 68.3355405263208 23.6922085003396 Tm
|
257
|
+
(P) Tj
|
258
|
+
ET
|
259
|
+
BT
|
260
|
+
/F1 12.0 Tf
|
261
|
+
1 0 0 1 55.7084324210567 23.6922085003396 Tm
|
262
|
+
(O) Tj
|
263
|
+
ET
|
264
|
+
BT
|
265
|
+
/F1 12.0 Tf
|
266
|
+
1 0 0 1 68.2727876254341 36.3193166056037 Tm
|
267
|
+
(O) Tj
|
268
|
+
ET
|
269
|
+
BT
|
270
|
+
/F1 12.0 Tf
|
271
|
+
1 0 0 1 68.2727876254341 11.0651003950754 Tm
|
272
|
+
(O) Tj
|
273
|
+
ET
|
274
|
+
BT
|
275
|
+
/F1 12.0 Tf
|
276
|
+
1 0 0 1 43.0813243157925 23.7549614012264 Tm
|
277
|
+
(P) Tj
|
278
|
+
ET
|
279
|
+
BT
|
280
|
+
/F1 12.0 Tf
|
281
|
+
1 0 0 1 30.4542162105283 23.8192448606713 Tm
|
282
|
+
(O) Tj
|
283
|
+
ET
|
284
|
+
BT
|
285
|
+
/F1 12.0 Tf
|
286
|
+
1 0 0 1 43.1456077752375 36.3820695064905 Tm
|
287
|
+
(O) Tj
|
288
|
+
ET
|
289
|
+
BT
|
290
|
+
/F1 12.0 Tf
|
291
|
+
1 0 0 1 43.0185714149057 11.1278532959622 Tm
|
292
|
+
(O) Tj
|
293
|
+
ET
|
294
|
+
BT
|
295
|
+
/F1 12.0 Tf
|
296
|
+
1 0 0 1 17.8271081052642 23.8192448606713 Tm
|
297
|
+
(P) Tj
|
298
|
+
ET
|
299
|
+
BT
|
300
|
+
/F1 12.0 Tf
|
301
|
+
1 0 0 1 5.2 23.8192448606713 Tm
|
302
|
+
(O) Tj
|
303
|
+
ET
|
304
|
+
BT
|
305
|
+
/F1 12.0 Tf
|
306
|
+
1 0 0 1 17.8271081052642 36.4463529659355 Tm
|
307
|
+
(O) Tj
|
308
|
+
ET
|
309
|
+
BT
|
310
|
+
/F1 12.0 Tf
|
311
|
+
1 0 0 1 17.8271081052642 11.1921367554072 Tm
|
312
|
+
(O) Tj
|
313
|
+
ET
|
314
|
+
Q
|
315
|
+
endstream
|
316
|
+
endobj
|
317
|
+
6 0 obj
|
318
|
+
[ /PDF /Text ]
|
319
|
+
endobj
|
320
|
+
7 0 obj
|
321
|
+
<< /Type /Font
|
322
|
+
/Subtype /Type1
|
323
|
+
/Name /F1
|
324
|
+
/BaseFont /Helvetica
|
325
|
+
/Encoding /MacRomanEncoding
|
326
|
+
>>
|
327
|
+
endobj
|
328
|
+
xref
|
329
|
+
0 8
|
330
|
+
0000000000 65535 f
|
331
|
+
0000000009 00000 n
|
332
|
+
0000000074 00000 n
|
333
|
+
0000000120 00000 n
|
334
|
+
0000000179 00000 n
|
335
|
+
0000000364 00000 n
|
336
|
+
0000000466 00000 n
|
337
|
+
0000000496 00000 n
|
338
|
+
trailer
|
339
|
+
<< /Size 8
|
340
|
+
/Root 1 0 R
|
341
|
+
>>
|
342
|
+
startxref
|
343
|
+
625
|
344
|
+
%%EOF
|