chemruby 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (241) hide show
  1. data/README +120 -0
  2. data/Rakefile +195 -0
  3. data/ext/extconf.rb +4 -0
  4. data/ext/subcomp.c +416 -0
  5. data/lib/chem.rb +130 -0
  6. data/lib/chem/appl.rb +1 -0
  7. data/lib/chem/appl/chem3dole.rb +36 -0
  8. data/lib/chem/appl/tinker/nucleic.rb +40 -0
  9. data/lib/chem/appl/tinker/tinker_reader.rb +43 -0
  10. data/lib/chem/data.rb +4 -0
  11. data/lib/chem/data/atomic_weight.rb +124 -0
  12. data/lib/chem/data/character.rb +2 -0
  13. data/lib/chem/data/electronegativity.rb +14 -0
  14. data/lib/chem/data/periodic_table.rb +6 -0
  15. data/lib/chem/data/prime_numbers.rb +1 -0
  16. data/lib/chem/data/vdw_radii.rb +1 -0
  17. data/lib/chem/db.rb +64 -0
  18. data/lib/chem/db/cansmi.rb +234 -0
  19. data/lib/chem/db/cdx.rb +1525 -0
  20. data/lib/chem/db/eps.rb +164 -0
  21. data/lib/chem/db/g98.rb +909 -0
  22. data/lib/chem/db/gspan.rb +130 -0
  23. data/lib/chem/db/iupac.rb +5 -0
  24. data/lib/chem/db/iupac/a_1.rb +46 -0
  25. data/lib/chem/db/iupac/iuparser.rb +226 -0
  26. data/lib/chem/db/iupac/iuparser.ry +97 -0
  27. data/lib/chem/db/iupac/postfix.rb +2 -0
  28. data/lib/chem/db/kcf.rb +390 -0
  29. data/lib/chem/db/kcf_glycan.rb +19 -0
  30. data/lib/chem/db/kegg.rb +516 -0
  31. data/lib/chem/db/linucs/linparser.rb +144 -0
  32. data/lib/chem/db/linucs/linucs.ry +53 -0
  33. data/lib/chem/db/mdl.rb +379 -0
  34. data/lib/chem/db/molconnz.rb +12 -0
  35. data/lib/chem/db/mopac.rb +88 -0
  36. data/lib/chem/db/msi.rb +107 -0
  37. data/lib/chem/db/pdb_dic.rb +115 -0
  38. data/lib/chem/db/pdf.rb +131 -0
  39. data/lib/chem/db/pubchem.rb +113 -0
  40. data/lib/chem/db/rmagick.rb +70 -0
  41. data/lib/chem/db/sdf.rb +37 -0
  42. data/lib/chem/db/smbl.rb +88 -0
  43. data/lib/chem/db/smiles.rb +2 -0
  44. data/lib/chem/db/smiles/smiles.ry +203 -0
  45. data/lib/chem/db/smiles/smiparser.rb +375 -0
  46. data/lib/chem/db/swf.rb +74 -0
  47. data/lib/chem/db/sybyl.rb +150 -0
  48. data/lib/chem/db/tinker.rb +77 -0
  49. data/lib/chem/db/types/type_cansmi.rb +9 -0
  50. data/lib/chem/db/types/type_cdx.rb +24 -0
  51. data/lib/chem/db/types/type_gspan.rb +31 -0
  52. data/lib/chem/db/types/type_kcf.rb +28 -0
  53. data/lib/chem/db/types/type_kcf_glycan.rb +26 -0
  54. data/lib/chem/db/types/type_kegg.rb +92 -0
  55. data/lib/chem/db/types/type_mdl.rb +31 -0
  56. data/lib/chem/db/types/type_pdf.rb +33 -0
  57. data/lib/chem/db/types/type_png.rb +31 -0
  58. data/lib/chem/db/types/type_rxn.rb +25 -0
  59. data/lib/chem/db/types/type_sdf.rb +25 -0
  60. data/lib/chem/db/types/type_sybyl.rb +30 -0
  61. data/lib/chem/db/types/type_xyz.rb +26 -0
  62. data/lib/chem/db/vector.rb +128 -0
  63. data/lib/chem/db/xyz.rb +39 -0
  64. data/lib/chem/model.rb +119 -0
  65. data/lib/chem/model/skeleton.rb +37 -0
  66. data/lib/chem/utils.rb +11 -0
  67. data/lib/chem/utils/geometry.rb +27 -0
  68. data/lib/chem/utils/graph_db.rb +146 -0
  69. data/lib/chem/utils/math.rb +17 -0
  70. data/lib/chem/utils/prop.rb +123 -0
  71. data/lib/chem/utils/sssr.rb +101 -0
  72. data/lib/chem/utils/sub.rb +78 -0
  73. data/lib/chem/utils/transform.rb +110 -0
  74. data/lib/chem/utils/traverse.rb +37 -0
  75. data/lib/chem/utils/ullmann.rb +134 -0
  76. data/lib/graph.rb +41 -0
  77. data/lib/graph/cluster.rb +20 -0
  78. data/lib/graph/morgan.rb +38 -0
  79. data/sample/frequent_subgraph.rb +46 -0
  80. data/sample/images/ex1.rb +11 -0
  81. data/sample/images/ex2.rb +4 -0
  82. data/sample/images/ex3.rb +5 -0
  83. data/sample/images/ex4.rb +17 -0
  84. data/sample/images/ex5.rb +10 -0
  85. data/sample/images/mol/adenine.mol +26 -0
  86. data/sample/images/mol/atp.mol +69 -0
  87. data/sample/images/temp/ex5.mol +344 -0
  88. data/sample/kegg_db.rb +116 -0
  89. data/setup.rb +1551 -0
  90. data/test/all.rb +6 -0
  91. data/test/coord_test.rb +17 -0
  92. data/test/ctab_test.rb +31 -0
  93. data/test/data/A_21.tar.gz +0 -0
  94. data/test/data/A_21/aceanthrylene.cdx +0 -0
  95. data/test/data/A_21/aceanthrylene.mol +40 -0
  96. data/test/data/A_21/acenaphthylene.cdx +0 -0
  97. data/test/data/A_21/acenaphthylene.mol +31 -0
  98. data/test/data/A_21/acephenanthrylene.cdx +0 -0
  99. data/test/data/A_21/acephenanthrylene.mol +40 -0
  100. data/test/data/A_21/anthracene.cdx +0 -0
  101. data/test/data/A_21/anthracene.mol +35 -0
  102. data/test/data/A_21/as-indacene.cdx +0 -0
  103. data/test/data/A_21/as-indacene.mol +31 -0
  104. data/test/data/A_21/azulene.cdx +0 -0
  105. data/test/data/A_21/azulene.mol +26 -0
  106. data/test/data/A_21/biphenylene.cdx +0 -0
  107. data/test/data/A_21/biphenylene.mol +31 -0
  108. data/test/data/A_21/chrysene.cdx +0 -0
  109. data/test/data/A_21/chrysene.mol +44 -0
  110. data/test/data/A_21/coronen.cdx +0 -0
  111. data/test/data/A_21/coronen.mol +59 -0
  112. data/test/data/A_21/fluoranthene.cdx +0 -0
  113. data/test/data/A_21/fluoranthene.mol +40 -0
  114. data/test/data/A_21/fluorene.cdx +0 -0
  115. data/test/data/A_21/fluorene.mol +33 -0
  116. data/test/data/A_21/heptacene.cdx +0 -0
  117. data/test/data/A_21/heptacene.mol +71 -0
  118. data/test/data/A_21/heptalene.cdx +0 -0
  119. data/test/data/A_21/heptalene.mol +30 -0
  120. data/test/data/A_21/heptaphene.cdx +0 -0
  121. data/test/data/A_21/heptaphene.mol +71 -0
  122. data/test/data/A_21/hexacene.cdx +0 -0
  123. data/test/data/A_21/hexacene.mol +62 -0
  124. data/test/data/A_21/hexaphene.cdx +0 -0
  125. data/test/data/A_21/hexaphene.mol +62 -0
  126. data/test/data/A_21/indene.cdx +0 -0
  127. data/test/data/A_21/indene.mol +24 -0
  128. data/test/data/A_21/iupac.txt +41 -0
  129. data/test/data/A_21/naphthacene.cdx +0 -0
  130. data/test/data/A_21/naphthacene.mol +44 -0
  131. data/test/data/A_21/naphthalene.cdx +0 -0
  132. data/test/data/A_21/naphthalene.mol +26 -0
  133. data/test/data/A_21/ovalene.cdx +0 -0
  134. data/test/data/A_21/ovalene.mol +78 -0
  135. data/test/data/A_21/pentacene.cdx +0 -0
  136. data/test/data/A_21/pentacene.mol +53 -0
  137. data/test/data/A_21/pentalene.cdx +0 -0
  138. data/test/data/A_21/pentalene.mol +22 -0
  139. data/test/data/A_21/pentaphene.cdx +0 -0
  140. data/test/data/A_21/pentaphene.mol +53 -0
  141. data/test/data/A_21/perylene.cdx +0 -0
  142. data/test/data/A_21/perylene.mol +49 -0
  143. data/test/data/A_21/phenalene.cdx +0 -0
  144. data/test/data/A_21/phenalene.mol +33 -0
  145. data/test/data/A_21/phenanthrene.cdx +0 -0
  146. data/test/data/A_21/phenanthrene.mol +35 -0
  147. data/test/data/A_21/picene.cdx +0 -0
  148. data/test/data/A_21/picene.mol +53 -0
  149. data/test/data/A_21/pleiadene.cdx +0 -0
  150. data/test/data/A_21/pleiadene.mol +44 -0
  151. data/test/data/A_21/pyranthrene.cdx +0 -0
  152. data/test/data/A_21/pyranthrene.mol +72 -0
  153. data/test/data/A_21/pyrene.cdx +0 -0
  154. data/test/data/A_21/pyrene.mol +40 -0
  155. data/test/data/A_21/rubicene.cdx +0 -0
  156. data/test/data/A_21/rubicene.mol +63 -0
  157. data/test/data/A_21/s-indacene.cdx +0 -0
  158. data/test/data/A_21/s-indacene.mol +31 -0
  159. data/test/data/A_21/tetraphenylene.cdx +0 -0
  160. data/test/data/A_21/tetraphenylene.mol +57 -0
  161. data/test/data/A_21/trinaphthylene.cdx +0 -0
  162. data/test/data/A_21/trinaphthylene.mol +71 -0
  163. data/test/data/A_21/triphenylene.cdx +0 -0
  164. data/test/data/A_21/triphenylene.mol +44 -0
  165. data/test/data/C00147.kcf +25 -0
  166. data/test/data/G00147.kcf +13 -0
  167. data/test/data/atp.mol +69 -0
  168. data/test/data/cyclohexane.mol +17 -0
  169. data/test/data/cyclohexane.ps +485 -0
  170. data/test/data/fullerene.mol +155 -0
  171. data/test/data/glycan +33 -0
  172. data/test/data/hypericin.cdx +0 -0
  173. data/test/data/hypericin.cdxml +596 -0
  174. data/test/data/hypericin.chm +0 -0
  175. data/test/data/hypericin.ct +85 -0
  176. data/test/data/hypericin.f1d +0 -0
  177. data/test/data/hypericin.f1q +0 -0
  178. data/test/data/hypericin.gif +0 -0
  179. data/test/data/hypericin.mol +88 -0
  180. data/test/data/hypericin.mol2 +159 -0
  181. data/test/data/hypericin.msm +123 -0
  182. data/test/data/hypericin.pdf +359 -0
  183. data/test/data/hypericin.png +0 -0
  184. data/test/data/hypericin.ps +0 -0
  185. data/test/data/hypericin.skc +0 -0
  186. data/test/data/hypericin2.gif +0 -0
  187. data/test/data/hypericin2.ps +0 -0
  188. data/test/data/kegg/genomes/hsa/hsa_enzyme.list +4 -0
  189. data/test/data/kegg/genomes/hsa/hsa_pfam.list +4 -0
  190. data/test/data/kegg/ligand/mol/C00147.mol +26 -0
  191. data/test/data/kegg/ligand/reaction +14 -0
  192. data/test/data/kegg/ligand/reaction.lst +1 -0
  193. data/test/data/kegg/ligand/reaction_mapformula.lst +3 -0
  194. data/test/data/reaction +14 -0
  195. data/test/data/reaction.lst +1 -0
  196. data/test/data/reaction_mapformula.lst +3 -0
  197. data/test/data/rxn/C00001.mol +6 -0
  198. data/test/data/rxn/C00011.mol +10 -0
  199. data/test/data/rxn/C00014.mol +6 -0
  200. data/test/data/rxn/C01010.mol +18 -0
  201. data/test/data/rxn/sample.rxn +50 -0
  202. data/test/data/rxn/substitution.rxn +45 -0
  203. data/test/data/test.eps +0 -0
  204. data/test/data/test.mol +28 -0
  205. data/test/data/test.sdf +143 -0
  206. data/test/data/test.skc +0 -0
  207. data/test/data/test.xyz +4 -0
  208. data/test/data/test_lf.sdf +143 -0
  209. data/test/heavy_test_pubchem.rb +16 -0
  210. data/test/multiple_test.rb +22 -0
  211. data/test/test_adj.rb +54 -0
  212. data/test/test_canonical_smiles.rb +46 -0
  213. data/test/test_cdx.rb +32 -0
  214. data/test/test_chem.rb +18 -0
  215. data/test/test_cluster.rb +19 -0
  216. data/test/test_db.rb +11 -0
  217. data/test/test_eps.rb +24 -0
  218. data/test/test_geometry.rb +11 -0
  219. data/test/test_gspan.rb +28 -0
  220. data/test/test_iupac.rb +36 -0
  221. data/test/test_kcf.rb +24 -0
  222. data/test/test_kcf_glycan.rb +10 -0
  223. data/test/test_kegg.rb +118 -0
  224. data/test/test_linucs.rb +21 -0
  225. data/test/test_mdl.rb +45 -0
  226. data/test/test_mol2.rb +62 -0
  227. data/test/test_morgan.rb +21 -0
  228. data/test/test_pdf.rb +12 -0
  229. data/test/test_prop.rb +86 -0
  230. data/test/test_rmagick.rb +15 -0
  231. data/test/test_sbdb.rb +23 -0
  232. data/test/test_sdf.rb +30 -0
  233. data/test/test_smiles.rb +84 -0
  234. data/test/test_sssr.rb +18 -0
  235. data/test/test_sub.rb +47 -0
  236. data/test/test_subcomp.rb +37 -0
  237. data/test/test_traverse.rb +29 -0
  238. data/test/test_writer.rb +13 -0
  239. data/test/test_xyz.rb +15 -0
  240. data/test/type_test.rb +25 -0
  241. 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
+
@@ -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
@@ -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,11 @@
1
+ #
2
+ # 1. open file with Chem.open_mol
3
+ # 2. save the object with Molecule#save
4
+ # 3. No step 3 !
5
+
6
+ require 'chem'
7
+
8
+ mol = Chem.open_mol("mol/atp.mol")
9
+
10
+ mol.save("temp/ex1.png")
11
+
@@ -0,0 +1,4 @@
1
+ require 'chem'
2
+
3
+ mol = Chem.open_mol("mol/atp.mol")
4
+ mol.save("temp/ex2.png", :size => [300, 150])
@@ -0,0 +1,5 @@
1
+ require 'chem'
2
+
3
+ mol = Chem.open_mol("mol/atp.mol")
4
+ mol.nodes.each{|node| node.visible = true unless node.element == :C}
5
+ mol.save("temp/ex3.png")
@@ -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,10 @@
1
+ require 'chem'
2
+
3
+ mol = Chem.open_mol("mol/atp.mol")
4
+
5
+ mol.nodes.each do |node|
6
+ node.visible = true unless node.element == :C
7
+ end
8
+
9
+ mol.save("temp/ex5.png", :size => [350, 350])
10
+
@@ -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