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.
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