rcdk 0.1.0 → 0.2.0
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 +2 -5
- data/Rakefile +15 -3
- data/java/{cdk-20060714.jar → lib/cdk-20060714.jar} +0 -0
- data/java/lib/structure-cdk-0.1.2.jar +0 -0
- data/lib/rcdk.rb +7 -9
- data/lib/util.rb +160 -0
- data/test/test.rb +97 -15
- metadata +5 -3
data/README
CHANGED
@@ -7,12 +7,9 @@ Java, from Ruby.
|
|
7
7
|
|
8
8
|
require 'rubygems'
|
9
9
|
require_gem 'rcdk'
|
10
|
+
require 'util'
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
parser = SmilesParser.new
|
14
|
-
smiles = 'c1ccccc1'
|
15
|
-
mol = parser.parseSmiles(smiles)
|
12
|
+
mol = RCDK::Util::Lang.read_smiles('c1ccccc1')
|
16
13
|
|
17
14
|
puts mol.getAtomCount # =>6
|
18
15
|
|
data/Rakefile
CHANGED
@@ -26,23 +26,27 @@ require 'rake/testtask'
|
|
26
26
|
require 'rake/rdoctask'
|
27
27
|
require 'rake/gempackagetask'
|
28
28
|
|
29
|
-
PKG_VERSION = "0.
|
29
|
+
PKG_VERSION = "0.2.0"
|
30
30
|
|
31
31
|
PKG_FILES = FileList[
|
32
32
|
"Rakefile", "README",
|
33
33
|
"lib/**/*.rb",
|
34
34
|
"test/**/*",
|
35
|
-
"java/*.jar"
|
35
|
+
"java/lib/*.jar"
|
36
36
|
]
|
37
37
|
|
38
38
|
desc "Default task"
|
39
39
|
task :default => [:test]
|
40
40
|
|
41
|
+
|
42
|
+
task :dist => [:rdoc]
|
43
|
+
|
41
44
|
desc "Clean up"
|
42
45
|
task :clean do
|
43
46
|
rm_rf "dist"
|
44
47
|
rm_rf "doc"
|
45
48
|
rm_rf "pkg"
|
49
|
+
rm_rf "output"
|
46
50
|
end
|
47
51
|
|
48
52
|
desc "Create the source distribution"
|
@@ -50,13 +54,17 @@ task :dist do
|
|
50
54
|
rm_rf "dist"
|
51
55
|
|
52
56
|
mkdir "dist"
|
57
|
+
mkdir "dist/doc"
|
53
58
|
mkdir "dist/lib"
|
54
59
|
mkdir "dist/java"
|
60
|
+
mkdir "dist/java/lib"
|
61
|
+
mkdir "dist/java/src"
|
55
62
|
mkdir "dist/test"
|
56
63
|
|
64
|
+
mv Dir.glob('doc/*'), 'dist/doc'
|
57
65
|
cp_r Dir.glob('*.rb'), 'dist'
|
58
66
|
cp_r Dir.glob('lib/*.rb'), 'dist/lib'
|
59
|
-
cp_r Dir.glob('java/*.jar'), 'dist/java'
|
67
|
+
cp_r Dir.glob('java/lib/*.jar'), 'dist/java/lib'
|
60
68
|
cp_r Dir.glob('test/*.rb'), 'dist/test'
|
61
69
|
cp 'Rakefile', 'dist'
|
62
70
|
cp 'README', 'dist'
|
@@ -64,6 +72,10 @@ task :dist do
|
|
64
72
|
end
|
65
73
|
|
66
74
|
Rake::TestTask.new do |t|
|
75
|
+
|
76
|
+
rm_rf "output"
|
77
|
+
mkdir "output"
|
78
|
+
|
67
79
|
t.libs << "test"
|
68
80
|
t.test_files = FileList['test/test*.rb']
|
69
81
|
t.verbose = true
|
File without changes
|
Binary file
|
data/lib/rcdk.rb
CHANGED
@@ -15,20 +15,18 @@
|
|
15
15
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
16
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
17
17
|
# Lesser General Public License for more details.
|
18
|
-
#
|
19
|
-
# You should have received a copy of the GNU Lesser General Public
|
20
|
-
# License along with this library; if not, write to the Free
|
21
|
-
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor
|
22
|
-
# Boston, MA 02111-1301, USA.
|
23
18
|
|
24
19
|
require 'java'
|
25
20
|
|
26
|
-
RCDK_VERSION = '0.
|
21
|
+
RCDK_VERSION = '0.2.0'
|
27
22
|
CDK_VERSION = '20060714'
|
23
|
+
STRUCTURE_CDK_VERSION = '0.1.2'
|
28
24
|
|
29
25
|
Java::Classpath.add(Gem.dir + File::SEPARATOR +
|
30
|
-
|
31
|
-
|
32
|
-
|
26
|
+
File.join('gems', 'rcdk-' + RCDK_VERSION, 'java', 'lib', 'cdk-' +
|
27
|
+
CDK_VERSION + '.jar'))
|
33
28
|
|
29
|
+
Java::Classpath.add(Gem.dir + File::SEPARATOR +
|
30
|
+
File.join('gems', 'rcdk-' + RCDK_VERSION, 'java', 'lib', 'structure-cdk-' +
|
31
|
+
STRUCTURE_CDK_VERSION + '.jar'))
|
34
32
|
|
data/lib/util.rb
ADDED
@@ -0,0 +1,160 @@
|
|
1
|
+
# =============================================
|
2
|
+
# RCDK - The Chemistry Development Kit for Ruby
|
3
|
+
# =============================================
|
4
|
+
#
|
5
|
+
# Project Info: http://rcdk.rubyforge.org
|
6
|
+
#
|
7
|
+
# Copyright (C) 2006 Richard L. Apodaca
|
8
|
+
#
|
9
|
+
# This library is free software; you can redistribute it and/or
|
10
|
+
# modify it under the terms of the GNU Lesser General Public
|
11
|
+
# License version 2.1 as published by the Free Software
|
12
|
+
# Foundation.
|
13
|
+
#
|
14
|
+
# This library is distributed in the hope that it will be useful,
|
15
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
17
|
+
# Lesser General Public License for more details.
|
18
|
+
|
19
|
+
require 'rcdk'
|
20
|
+
|
21
|
+
StringReader = import 'java.io.StringReader'
|
22
|
+
StringWriter = import 'java.io.StringWriter'
|
23
|
+
|
24
|
+
Molecule = import 'org.openscience.cdk.Molecule'
|
25
|
+
MDLReader = import 'org.openscience.cdk.io.MDLReader'
|
26
|
+
MDLWriter = import 'org.openscience.cdk.io.MDLWriter'
|
27
|
+
SmilesParser = import 'org.openscience.cdk.smiles.SmilesParser'
|
28
|
+
SmilesGenerator = import 'org.openscience.cdk.smiles.SmilesGenerator'
|
29
|
+
DefaultChemObjectBuilder = import 'org.openscience.cdk.DefaultChemObjectBuilder'
|
30
|
+
StructureDiagramGenerator = import 'org.openscience.cdk.layout.StructureDiagramGenerator'
|
31
|
+
|
32
|
+
ImageKit = import 'net.sf.structure.cdk.util.ImageKit'
|
33
|
+
|
34
|
+
# The Ruby Chemistry Development Kit.
|
35
|
+
module RCDK
|
36
|
+
|
37
|
+
# Convenience methods for working with the CDK.
|
38
|
+
module Util
|
39
|
+
|
40
|
+
# Molecular language translation. Currently molfile and SMILES
|
41
|
+
# are implemented.
|
42
|
+
class Lang
|
43
|
+
@@mdl_reader = MDLReader.new
|
44
|
+
@@mdl_writer = MDLWriter.new
|
45
|
+
@@smiles_parser = SmilesParser.new
|
46
|
+
@@smiles_generator = SmilesGenerator.new(DefaultChemObjectBuilder.getInstance)
|
47
|
+
|
48
|
+
# Returns a CDK <tt>Molecule</tt> given the String-based molfile
|
49
|
+
# <tt>molfile</tt>.
|
50
|
+
def self.read_molfile(molfile)
|
51
|
+
reader =
|
52
|
+
StringReader.new_with_sig('Ljava.lang.String;', molfile)
|
53
|
+
|
54
|
+
@@mdl_reader.setReader(reader)
|
55
|
+
@@mdl_reader.read(Molecule.new)
|
56
|
+
end
|
57
|
+
|
58
|
+
# Returns a String-based molfile by parsing the CDK <tt>molecule</tt>.
|
59
|
+
def self.get_molfile(molecule)
|
60
|
+
writer = StringWriter.new
|
61
|
+
|
62
|
+
@@mdl_writer.setWriter(writer)
|
63
|
+
@@mdl_writer.writeMolecule(molecule)
|
64
|
+
@@mdl_writer.close
|
65
|
+
|
66
|
+
writer.toString
|
67
|
+
end
|
68
|
+
|
69
|
+
# Returns a CDK <tt>Molecule</tt> by parsing <tt>smiles</tt>.
|
70
|
+
def self.read_smiles(smiles)
|
71
|
+
@@smiles_parser.parseSmiles(smiles)
|
72
|
+
end
|
73
|
+
|
74
|
+
# Returns a SMILES string based on the structure of the indicated
|
75
|
+
# CDK <tt>molecule</tt>.
|
76
|
+
def self.get_smiles(molecule)
|
77
|
+
@@smiles_generator.createSMILES(molecule)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Returns a SMILES string by parsing the <tt>molfile</tt> string.
|
81
|
+
def self.molfile_to_smiles(molfile)
|
82
|
+
get_smiles(read_molfile(molfile))
|
83
|
+
end
|
84
|
+
|
85
|
+
# Returns a molfiles STRING by parsing <tt>smiles</tt>.
|
86
|
+
def self.smiles_to_molfile(smiles)
|
87
|
+
get_molfile(read_smiles(smiles))
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
# 2-D coordinate generation.
|
93
|
+
class XY
|
94
|
+
@@sdg = StructureDiagramGenerator.new
|
95
|
+
|
96
|
+
# Assigns 2-D coordinates to the indicated <tt>molfile</tt> string.
|
97
|
+
def self.coordinate_molfile(molfile)
|
98
|
+
mol = coordinate_molecule(Lang.read_molfile(molfile))
|
99
|
+
|
100
|
+
Lang.get_molfile(mol)
|
101
|
+
end
|
102
|
+
|
103
|
+
# Assigns 2-D coordinates to the indicated CDK <tt>molecule</tt>.
|
104
|
+
def self.coordinate_molecule(molecule)
|
105
|
+
@@sdg.setMolecule(molecule)
|
106
|
+
@@sdg.generateCoordinates
|
107
|
+
@@sdg.getMolecule
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# Raster and SVG 2-D molecular images.
|
112
|
+
class Image
|
113
|
+
|
114
|
+
# Writes a <tt>width</tt> by <tt>height</tt> PNG image to
|
115
|
+
# <tt>path_to_png</tt> using <tt>molfile</tt>.
|
116
|
+
def self.molfile_to_png(molfile, path_to_png, width, height)
|
117
|
+
ImageKit.writePNG(Lang.read_molfile(molfile), width, height, path_to_png)
|
118
|
+
end
|
119
|
+
|
120
|
+
# Writes a <tt>width</tt> by <tt>height</tt> SVG document to
|
121
|
+
# <tt>path_to_svg</tt> using <tt>molfile</tt>.
|
122
|
+
def self.molfile_to_svg(molfile, path_to_svg, width, height)
|
123
|
+
ImageKit.writeSVG(Lang.read_molfile(molfile), width, height, path_to_svg)
|
124
|
+
end
|
125
|
+
|
126
|
+
# Writes a <tt>width</tt> by <tt>height</tt> JPG image to
|
127
|
+
# <tt>path_to_jpg</tt> using <tt>molfile</tt>.
|
128
|
+
def self.molfile_to_jpg(molfile, path_to_jpg, width, height)
|
129
|
+
ImageKit.writeJPG(Lang.read_molfile(molfile), width, height, path_to_jpg)
|
130
|
+
end
|
131
|
+
|
132
|
+
# Writes a <tt>width</tt> by <tt>height</tt> PNG image to
|
133
|
+
# <tt>path_to_png</tt> using <tt>smiles</tt>. Coordinates are automatically
|
134
|
+
# assigned.
|
135
|
+
def self.smiles_to_png(smiles, path_to_png, width, height)
|
136
|
+
mol = XY.coordinate_molecule(Lang.read_smiles(smiles))
|
137
|
+
|
138
|
+
ImageKit.writePNG(mol, width, height, path_to_png)
|
139
|
+
end
|
140
|
+
|
141
|
+
# Writes a <tt>width</tt> by <tt>height</tt> SVG document to
|
142
|
+
# <tt>path_to_svg</tt> using <tt>smiles</tt>. Coordinates are automatically
|
143
|
+
# assigned.
|
144
|
+
def self.smiles_to_svg(smiles, path_to_svg, width, height)
|
145
|
+
mol = XY.coordinate_molecule(Lang.read_smiles(smiles))
|
146
|
+
|
147
|
+
ImageKit.writeSVG(mol, width, height, path_to_svg)
|
148
|
+
end
|
149
|
+
|
150
|
+
# Writes a <tt>width</tt> by <tt>height</tt> JPG image to
|
151
|
+
# <tt>path_to_jpg</tt> using <tt>smiles</tt>. Coordinates are automatically
|
152
|
+
# assigned.
|
153
|
+
def self.smiles_to_jpg(smiles, path_to_jpg, width, height)
|
154
|
+
mol = XY.coordinate_molecule(Lang.read_smiles(smiles))
|
155
|
+
|
156
|
+
ImageKit.writeJPG(mol, width, height, path_to_jpg)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
data/test/test.rb
CHANGED
@@ -15,33 +15,115 @@
|
|
15
15
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
16
16
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
17
17
|
# Lesser General Public License for more details.
|
18
|
-
#
|
19
|
-
# You should have received a copy of the GNU Lesser General Public
|
20
|
-
# License along with this library; if not, write to the Free
|
21
|
-
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor
|
22
|
-
# Boston, MA 02111-1301, USA.
|
23
18
|
|
24
19
|
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
25
20
|
|
21
|
+
|
26
22
|
require 'rcdk'
|
27
23
|
require 'test/unit'
|
28
24
|
|
29
|
-
Java::Classpath.
|
25
|
+
Java::Classpath.clear!
|
26
|
+
Java::Classpath.add(File.join('java', 'lib', 'cdk-' + CDK_VERSION + '.jar'))
|
27
|
+
Java::Classpath.add(File.join('java', 'lib', 'structure-cdk-' + STRUCTURE_CDK_VERSION + '.jar'))
|
28
|
+
|
29
|
+
require 'util'
|
30
|
+
|
31
|
+
include RCDK::Util
|
30
32
|
|
31
|
-
|
33
|
+
MoleculeFactory = import 'org.openscience.cdk.templates.MoleculeFactory'
|
32
34
|
|
33
|
-
# A very simple test suite.
|
35
|
+
# A very simple test suite. Woefully incomplete. Just exercises the API.
|
34
36
|
class BasicTest < Test::Unit::TestCase
|
35
37
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
38
|
+
def setup
|
39
|
+
@benzene =
|
40
|
+
"c1ccccc1
|
41
|
+
JME 2004.10 Thu Jun 01 18:20:16 EDT 2006
|
42
|
+
|
43
|
+
6 6 0 0 0 0 0 0 0 0999 V2000
|
44
|
+
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
45
|
+
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
46
|
+
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
47
|
+
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
48
|
+
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
49
|
+
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
|
50
|
+
1 2 2 0 0 0 0
|
51
|
+
1 3 1 0 0 0 0
|
52
|
+
2 4 1 0 0 0 0
|
53
|
+
3 5 2 0 0 0 0
|
54
|
+
4 6 2 0 0 0 0
|
55
|
+
5 6 1 0 0 0 0
|
56
|
+
M END"
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_read_molfile
|
60
|
+
mol = Lang.read_molfile(@benzene)
|
43
61
|
|
44
62
|
assert_equal(6, mol.getAtomCount)
|
45
63
|
end
|
64
|
+
|
65
|
+
def test_write_molfile
|
66
|
+
molecule = MoleculeFactory.makeIndole
|
67
|
+
molfile = Lang.get_molfile(molecule)
|
68
|
+
|
69
|
+
assert_not_equal(0, molfile.length)
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_read_smiles
|
73
|
+
molecule = Lang.read_smiles('c1ccccc1')
|
74
|
+
|
75
|
+
assert_equal(6, molecule.getAtomCount)
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_write_smiles
|
79
|
+
smiles = Lang.get_smiles(MoleculeFactory.makeBenzene)
|
80
|
+
|
81
|
+
assert_equal('c1ccccc1', smiles)
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_molfile_to_smiles
|
85
|
+
smiles = Lang.molfile_to_smiles(@benzene)
|
86
|
+
|
87
|
+
assert_equal('c1ccccc1', smiles)
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_smiles_to_molfile
|
91
|
+
molfile = Lang.smiles_to_molfile('c1ccccc1')
|
92
|
+
|
93
|
+
assert_not_equal(0, molfile.length)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_coordinate_molecule
|
97
|
+
indole = MoleculeFactory.makeIndole
|
98
|
+
XY.coordinate_molecule(indole)
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_coordinate_molfile
|
102
|
+
molfile = XY.coordinate_molfile(XY.coordinate_molfile(@benzene))
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_molfile_to_png
|
106
|
+
Image.molfile_to_png(XY.coordinate_molfile(@benzene), 'output/benzene.png', 200, 200)
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_molfile_to_svg
|
110
|
+
Image.molfile_to_svg(XY.coordinate_molfile(@benzene), 'output/benzene.svg', 200, 200)
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_molfile_to_jpg
|
114
|
+
Image.molfile_to_jpg(XY.coordinate_molfile(@benzene), 'output/benzene.jpg', 200, 200)
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_smiles_to_png
|
118
|
+
Image.smiles_to_png('Clc1ccccc1', 'output/chlorobenzene.png', 200, 200)
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_smiles_to_svg
|
122
|
+
Image.smiles_to_svg('Clc1ccccc1', 'output/chlorobenzene.svg', 200, 200)
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_smiles_to_jpg
|
126
|
+
Image.smiles_to_jpg('Clc1ccccc1', 'output/chlrobenzene.jpg', 200, 200)
|
127
|
+
end
|
46
128
|
end
|
47
129
|
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rcdk
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2006-09-
|
6
|
+
version: 0.2.0
|
7
|
+
date: 2006-09-24 00:00:00 -07:00
|
8
8
|
summary: A Ruby wrapper for the Chemistry Development Kit
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -33,8 +33,10 @@ files:
|
|
33
33
|
- README
|
34
34
|
- lib/rcdk.rb
|
35
35
|
- lib/java.rb
|
36
|
+
- lib/util.rb
|
36
37
|
- test/test.rb
|
37
|
-
- java/cdk-20060714.jar
|
38
|
+
- java/lib/cdk-20060714.jar
|
39
|
+
- java/lib/structure-cdk-0.1.2.jar
|
38
40
|
test_files: []
|
39
41
|
|
40
42
|
rdoc_options: []
|