chemruby 0.9.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README +120 -0
- data/Rakefile +195 -0
- data/ext/extconf.rb +4 -0
- data/ext/subcomp.c +416 -0
- data/lib/chem.rb +130 -0
- data/lib/chem/appl.rb +1 -0
- data/lib/chem/appl/chem3dole.rb +36 -0
- data/lib/chem/appl/tinker/nucleic.rb +40 -0
- data/lib/chem/appl/tinker/tinker_reader.rb +43 -0
- data/lib/chem/data.rb +4 -0
- data/lib/chem/data/atomic_weight.rb +124 -0
- data/lib/chem/data/character.rb +2 -0
- data/lib/chem/data/electronegativity.rb +14 -0
- data/lib/chem/data/periodic_table.rb +6 -0
- data/lib/chem/data/prime_numbers.rb +1 -0
- data/lib/chem/data/vdw_radii.rb +1 -0
- data/lib/chem/db.rb +64 -0
- data/lib/chem/db/cansmi.rb +234 -0
- data/lib/chem/db/cdx.rb +1525 -0
- data/lib/chem/db/eps.rb +164 -0
- data/lib/chem/db/g98.rb +909 -0
- data/lib/chem/db/gspan.rb +130 -0
- data/lib/chem/db/iupac.rb +5 -0
- data/lib/chem/db/iupac/a_1.rb +46 -0
- data/lib/chem/db/iupac/iuparser.rb +226 -0
- data/lib/chem/db/iupac/iuparser.ry +97 -0
- data/lib/chem/db/iupac/postfix.rb +2 -0
- data/lib/chem/db/kcf.rb +390 -0
- data/lib/chem/db/kcf_glycan.rb +19 -0
- data/lib/chem/db/kegg.rb +516 -0
- data/lib/chem/db/linucs/linparser.rb +144 -0
- data/lib/chem/db/linucs/linucs.ry +53 -0
- data/lib/chem/db/mdl.rb +379 -0
- data/lib/chem/db/molconnz.rb +12 -0
- data/lib/chem/db/mopac.rb +88 -0
- data/lib/chem/db/msi.rb +107 -0
- data/lib/chem/db/pdb_dic.rb +115 -0
- data/lib/chem/db/pdf.rb +131 -0
- data/lib/chem/db/pubchem.rb +113 -0
- data/lib/chem/db/rmagick.rb +70 -0
- data/lib/chem/db/sdf.rb +37 -0
- data/lib/chem/db/smbl.rb +88 -0
- data/lib/chem/db/smiles.rb +2 -0
- data/lib/chem/db/smiles/smiles.ry +203 -0
- data/lib/chem/db/smiles/smiparser.rb +375 -0
- data/lib/chem/db/swf.rb +74 -0
- data/lib/chem/db/sybyl.rb +150 -0
- data/lib/chem/db/tinker.rb +77 -0
- data/lib/chem/db/types/type_cansmi.rb +9 -0
- data/lib/chem/db/types/type_cdx.rb +24 -0
- data/lib/chem/db/types/type_gspan.rb +31 -0
- data/lib/chem/db/types/type_kcf.rb +28 -0
- data/lib/chem/db/types/type_kcf_glycan.rb +26 -0
- data/lib/chem/db/types/type_kegg.rb +92 -0
- data/lib/chem/db/types/type_mdl.rb +31 -0
- data/lib/chem/db/types/type_pdf.rb +33 -0
- data/lib/chem/db/types/type_png.rb +31 -0
- data/lib/chem/db/types/type_rxn.rb +25 -0
- data/lib/chem/db/types/type_sdf.rb +25 -0
- data/lib/chem/db/types/type_sybyl.rb +30 -0
- data/lib/chem/db/types/type_xyz.rb +26 -0
- data/lib/chem/db/vector.rb +128 -0
- data/lib/chem/db/xyz.rb +39 -0
- data/lib/chem/model.rb +119 -0
- data/lib/chem/model/skeleton.rb +37 -0
- data/lib/chem/utils.rb +11 -0
- data/lib/chem/utils/geometry.rb +27 -0
- data/lib/chem/utils/graph_db.rb +146 -0
- data/lib/chem/utils/math.rb +17 -0
- data/lib/chem/utils/prop.rb +123 -0
- data/lib/chem/utils/sssr.rb +101 -0
- data/lib/chem/utils/sub.rb +78 -0
- data/lib/chem/utils/transform.rb +110 -0
- data/lib/chem/utils/traverse.rb +37 -0
- data/lib/chem/utils/ullmann.rb +134 -0
- data/lib/graph.rb +41 -0
- data/lib/graph/cluster.rb +20 -0
- data/lib/graph/morgan.rb +38 -0
- data/sample/frequent_subgraph.rb +46 -0
- data/sample/images/ex1.rb +11 -0
- data/sample/images/ex2.rb +4 -0
- data/sample/images/ex3.rb +5 -0
- data/sample/images/ex4.rb +17 -0
- data/sample/images/ex5.rb +10 -0
- data/sample/images/mol/adenine.mol +26 -0
- data/sample/images/mol/atp.mol +69 -0
- data/sample/images/temp/ex5.mol +344 -0
- data/sample/kegg_db.rb +116 -0
- data/setup.rb +1551 -0
- data/test/all.rb +6 -0
- data/test/coord_test.rb +17 -0
- data/test/ctab_test.rb +31 -0
- data/test/data/A_21.tar.gz +0 -0
- data/test/data/A_21/aceanthrylene.cdx +0 -0
- data/test/data/A_21/aceanthrylene.mol +40 -0
- data/test/data/A_21/acenaphthylene.cdx +0 -0
- data/test/data/A_21/acenaphthylene.mol +31 -0
- data/test/data/A_21/acephenanthrylene.cdx +0 -0
- data/test/data/A_21/acephenanthrylene.mol +40 -0
- data/test/data/A_21/anthracene.cdx +0 -0
- data/test/data/A_21/anthracene.mol +35 -0
- data/test/data/A_21/as-indacene.cdx +0 -0
- data/test/data/A_21/as-indacene.mol +31 -0
- data/test/data/A_21/azulene.cdx +0 -0
- data/test/data/A_21/azulene.mol +26 -0
- data/test/data/A_21/biphenylene.cdx +0 -0
- data/test/data/A_21/biphenylene.mol +31 -0
- data/test/data/A_21/chrysene.cdx +0 -0
- data/test/data/A_21/chrysene.mol +44 -0
- data/test/data/A_21/coronen.cdx +0 -0
- data/test/data/A_21/coronen.mol +59 -0
- data/test/data/A_21/fluoranthene.cdx +0 -0
- data/test/data/A_21/fluoranthene.mol +40 -0
- data/test/data/A_21/fluorene.cdx +0 -0
- data/test/data/A_21/fluorene.mol +33 -0
- data/test/data/A_21/heptacene.cdx +0 -0
- data/test/data/A_21/heptacene.mol +71 -0
- data/test/data/A_21/heptalene.cdx +0 -0
- data/test/data/A_21/heptalene.mol +30 -0
- data/test/data/A_21/heptaphene.cdx +0 -0
- data/test/data/A_21/heptaphene.mol +71 -0
- data/test/data/A_21/hexacene.cdx +0 -0
- data/test/data/A_21/hexacene.mol +62 -0
- data/test/data/A_21/hexaphene.cdx +0 -0
- data/test/data/A_21/hexaphene.mol +62 -0
- data/test/data/A_21/indene.cdx +0 -0
- data/test/data/A_21/indene.mol +24 -0
- data/test/data/A_21/iupac.txt +41 -0
- data/test/data/A_21/naphthacene.cdx +0 -0
- data/test/data/A_21/naphthacene.mol +44 -0
- data/test/data/A_21/naphthalene.cdx +0 -0
- data/test/data/A_21/naphthalene.mol +26 -0
- data/test/data/A_21/ovalene.cdx +0 -0
- data/test/data/A_21/ovalene.mol +78 -0
- data/test/data/A_21/pentacene.cdx +0 -0
- data/test/data/A_21/pentacene.mol +53 -0
- data/test/data/A_21/pentalene.cdx +0 -0
- data/test/data/A_21/pentalene.mol +22 -0
- data/test/data/A_21/pentaphene.cdx +0 -0
- data/test/data/A_21/pentaphene.mol +53 -0
- data/test/data/A_21/perylene.cdx +0 -0
- data/test/data/A_21/perylene.mol +49 -0
- data/test/data/A_21/phenalene.cdx +0 -0
- data/test/data/A_21/phenalene.mol +33 -0
- data/test/data/A_21/phenanthrene.cdx +0 -0
- data/test/data/A_21/phenanthrene.mol +35 -0
- data/test/data/A_21/picene.cdx +0 -0
- data/test/data/A_21/picene.mol +53 -0
- data/test/data/A_21/pleiadene.cdx +0 -0
- data/test/data/A_21/pleiadene.mol +44 -0
- data/test/data/A_21/pyranthrene.cdx +0 -0
- data/test/data/A_21/pyranthrene.mol +72 -0
- data/test/data/A_21/pyrene.cdx +0 -0
- data/test/data/A_21/pyrene.mol +40 -0
- data/test/data/A_21/rubicene.cdx +0 -0
- data/test/data/A_21/rubicene.mol +63 -0
- data/test/data/A_21/s-indacene.cdx +0 -0
- data/test/data/A_21/s-indacene.mol +31 -0
- data/test/data/A_21/tetraphenylene.cdx +0 -0
- data/test/data/A_21/tetraphenylene.mol +57 -0
- data/test/data/A_21/trinaphthylene.cdx +0 -0
- data/test/data/A_21/trinaphthylene.mol +71 -0
- data/test/data/A_21/triphenylene.cdx +0 -0
- data/test/data/A_21/triphenylene.mol +44 -0
- data/test/data/C00147.kcf +25 -0
- data/test/data/G00147.kcf +13 -0
- data/test/data/atp.mol +69 -0
- data/test/data/cyclohexane.mol +17 -0
- data/test/data/cyclohexane.ps +485 -0
- data/test/data/fullerene.mol +155 -0
- data/test/data/glycan +33 -0
- data/test/data/hypericin.cdx +0 -0
- data/test/data/hypericin.cdxml +596 -0
- data/test/data/hypericin.chm +0 -0
- data/test/data/hypericin.ct +85 -0
- data/test/data/hypericin.f1d +0 -0
- data/test/data/hypericin.f1q +0 -0
- data/test/data/hypericin.gif +0 -0
- data/test/data/hypericin.mol +88 -0
- data/test/data/hypericin.mol2 +159 -0
- data/test/data/hypericin.msm +123 -0
- data/test/data/hypericin.pdf +359 -0
- data/test/data/hypericin.png +0 -0
- data/test/data/hypericin.ps +0 -0
- data/test/data/hypericin.skc +0 -0
- data/test/data/hypericin2.gif +0 -0
- data/test/data/hypericin2.ps +0 -0
- data/test/data/kegg/genomes/hsa/hsa_enzyme.list +4 -0
- data/test/data/kegg/genomes/hsa/hsa_pfam.list +4 -0
- data/test/data/kegg/ligand/mol/C00147.mol +26 -0
- data/test/data/kegg/ligand/reaction +14 -0
- data/test/data/kegg/ligand/reaction.lst +1 -0
- data/test/data/kegg/ligand/reaction_mapformula.lst +3 -0
- data/test/data/reaction +14 -0
- data/test/data/reaction.lst +1 -0
- data/test/data/reaction_mapformula.lst +3 -0
- data/test/data/rxn/C00001.mol +6 -0
- data/test/data/rxn/C00011.mol +10 -0
- data/test/data/rxn/C00014.mol +6 -0
- data/test/data/rxn/C01010.mol +18 -0
- data/test/data/rxn/sample.rxn +50 -0
- data/test/data/rxn/substitution.rxn +45 -0
- data/test/data/test.eps +0 -0
- data/test/data/test.mol +28 -0
- data/test/data/test.sdf +143 -0
- data/test/data/test.skc +0 -0
- data/test/data/test.xyz +4 -0
- data/test/data/test_lf.sdf +143 -0
- data/test/heavy_test_pubchem.rb +16 -0
- data/test/multiple_test.rb +22 -0
- data/test/test_adj.rb +54 -0
- data/test/test_canonical_smiles.rb +46 -0
- data/test/test_cdx.rb +32 -0
- data/test/test_chem.rb +18 -0
- data/test/test_cluster.rb +19 -0
- data/test/test_db.rb +11 -0
- data/test/test_eps.rb +24 -0
- data/test/test_geometry.rb +11 -0
- data/test/test_gspan.rb +28 -0
- data/test/test_iupac.rb +36 -0
- data/test/test_kcf.rb +24 -0
- data/test/test_kcf_glycan.rb +10 -0
- data/test/test_kegg.rb +118 -0
- data/test/test_linucs.rb +21 -0
- data/test/test_mdl.rb +45 -0
- data/test/test_mol2.rb +62 -0
- data/test/test_morgan.rb +21 -0
- data/test/test_pdf.rb +12 -0
- data/test/test_prop.rb +86 -0
- data/test/test_rmagick.rb +15 -0
- data/test/test_sbdb.rb +23 -0
- data/test/test_sdf.rb +30 -0
- data/test/test_smiles.rb +84 -0
- data/test/test_sssr.rb +18 -0
- data/test/test_sub.rb +47 -0
- data/test/test_subcomp.rb +37 -0
- data/test/test_traverse.rb +29 -0
- data/test/test_writer.rb +13 -0
- data/test/test_xyz.rb +15 -0
- data/test/type_test.rb +25 -0
- metadata +290 -0
data/test/test_linucs.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#
|
2
|
+
# test_adj.rb - Test for adjacency
|
3
|
+
#
|
4
|
+
#
|
5
|
+
# $Id: test_linucs.rb 127 2006-02-03 02:47:57Z tanaka $
|
6
|
+
#
|
7
|
+
|
8
|
+
require 'test/all'
|
9
|
+
|
10
|
+
require 'chem'
|
11
|
+
require 'chem/db/linucs/linparser'
|
12
|
+
|
13
|
+
class LinucsTest < Test::Unit::TestCase
|
14
|
+
|
15
|
+
def test_linucs
|
16
|
+
assert(true)
|
17
|
+
# parser = LinucsParser.new
|
18
|
+
# parser.parse("[][Asn]{[(4+1)][b-D-GlcpNAc]{[(4+1)][b-D-GlcpNAc]{[(4+1)][b-D-Manp]{[(3+1)][a-D-Manp]{[(2+1)][a-D-Manp]{[(2+1)][a-D-Manp]{}}}[(6+1)][a-D-Manp]{[(3+1)][a-D-Manp]{[(2+1)][a-D-Manp]{}}[(6+1)][a-D-Manp]{[(2+1)][a-D-Manp]{}}}}}}}")
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/test/test_mdl.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# $Id: test_mdl.rb 151 2006-02-08 08:21:08Z tanaka $
|
2
|
+
|
3
|
+
# Tests to ensure functionality
|
4
|
+
|
5
|
+
require 'test/all'
|
6
|
+
|
7
|
+
require 'test/type_test'
|
8
|
+
require 'test/ctab_test'
|
9
|
+
require 'test/coord_test'
|
10
|
+
|
11
|
+
require 'chem'
|
12
|
+
|
13
|
+
class MDLTest < Test::Unit::TestCase
|
14
|
+
|
15
|
+
include Chem::TypeTest
|
16
|
+
include Chem::CtabTest
|
17
|
+
include Chem::CoordTest
|
18
|
+
|
19
|
+
def setup
|
20
|
+
(@entries = []).push(Chem.open_mol($data_dir + "hypericin.mol"))
|
21
|
+
@parser = Chem::MDL::MdlMolecule
|
22
|
+
@file_type = Chem::Type::MdlMolType
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_to_mdl
|
26
|
+
@entries[0].save(File.join(%w(temp save_test.mol)))
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_bond_stereo
|
30
|
+
mol = Chem.open_mol($data_dir + "atp.mol")
|
31
|
+
types = mol.edges.inject({}){|ret, (b, a1, a2)| ret[b.stereo] ||= 0 ; ret[b.stereo] += 1 ; ret}
|
32
|
+
assert_equal(2, types[:down])
|
33
|
+
assert_equal(2, types[:up])
|
34
|
+
assert_equal(29, types[:not_stereo])
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_bond_type
|
38
|
+
mol = Chem.open_mol($data_dir + "atp.mol")
|
39
|
+
types = mol.edges.inject({}){|ret, (b, a1, a2)| ret[b.bond_type] ||= 0 ; ret[b.bond_type] += 1 ; ret}
|
40
|
+
assert_equal(7, types[:double])
|
41
|
+
assert_equal(26, types[:single])
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
data/test/test_mol2.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
# $Id: test_mdl.rb 84 2005-12-01 10:01:04Z tanaka $
|
2
|
+
|
3
|
+
# Tests to ensure functionality
|
4
|
+
|
5
|
+
require 'test/all'
|
6
|
+
|
7
|
+
require 'test/type_test'
|
8
|
+
require 'test/ctab_test'
|
9
|
+
require 'test/coord_test'
|
10
|
+
|
11
|
+
require 'chem'
|
12
|
+
|
13
|
+
class SybylTest < Test::Unit::TestCase
|
14
|
+
|
15
|
+
include Chem::TypeTest
|
16
|
+
include Chem::CtabTest
|
17
|
+
# include Chem::CoordTest
|
18
|
+
|
19
|
+
def setup
|
20
|
+
(@entries = []).push(Chem.open_mol($data_dir + "hypericin.mol2"))
|
21
|
+
@parser = Chem::Sybyl::SybylMolecule
|
22
|
+
@file_type = Chem::Type::SybylType
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_counts_line
|
26
|
+
mol = @entries[0]
|
27
|
+
assert_equal(67, mol.n_atoms)
|
28
|
+
assert_equal(70, mol.n_bonds)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_atom
|
32
|
+
atom = Chem::Sybyl::SybylAtom.new(" 60 H60 -4.920329 -2.301872 1.618476 H 1 <1> 0.024481 ")
|
33
|
+
assert_equal(:H, atom.element)
|
34
|
+
assert_in_delta(-4.920329, atom.x, 0.0001)
|
35
|
+
assert_in_delta(-2.301872, atom.y, 0.0001)
|
36
|
+
assert_in_delta( 1.618476, atom.z, 0.0001)
|
37
|
+
atom2 = Chem::Sybyl::SybylAtom.new(" 1 C1 -3.262565 -0.588014 -0.082185 C.3 1 <1> -0.020001 ")
|
38
|
+
assert_equal(:C, atom2.element)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_save_sybyl_atom
|
42
|
+
atom = Chem::SkeletonAtom.new
|
43
|
+
atom.x = -3.262565
|
44
|
+
atom.y = -0.588014
|
45
|
+
atom.z = -0.082185
|
46
|
+
|
47
|
+
assert_equal(" 1", atom.to_sybyl[0..7])
|
48
|
+
# assert_equal("", atom.to_sybyl[
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_bond
|
52
|
+
bond = Chem::Sybyl::SybylBond.new(" 1 10 13 1 ")
|
53
|
+
assert_equal(10, bond.b)
|
54
|
+
assert_equal(13, bond.e)
|
55
|
+
assert_equal( 1, bond.v)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_mol
|
59
|
+
assert_equal((0..66).to_a, @entries[0].match_by_ullmann(@entries[0]))
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
data/test/test_morgan.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# $Id: test_mdl.rb 37 2005-09-23 22:58:24Z tanaka $
|
2
|
+
|
3
|
+
# Tests to ensure functionality
|
4
|
+
|
5
|
+
require 'test/all'
|
6
|
+
|
7
|
+
require 'chem'
|
8
|
+
|
9
|
+
class MorganTest < Test::Unit::TestCase
|
10
|
+
|
11
|
+
def test_morgan
|
12
|
+
mol = Chem.open_mol(File.join($data_dir, "hypericin.mol"))
|
13
|
+
ec, tec, priority = mol.morgan#_index
|
14
|
+
require 'set'
|
15
|
+
assert_equal(Set.new([82, 123, 184, 216, 164, 120, 227, 216, 164, 153,
|
16
|
+
184, 123, 82, 120, 184, 216, 227, 216, 184, 123,
|
17
|
+
82, 120, 164, 153, 164, 120, 82, 123, 40, 42, 51,
|
18
|
+
40, 42, 42, 40, 51, 40, 42]), Set.new(ec.values))
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/test/test_pdf.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
|
2
|
+
require 'chem'
|
3
|
+
|
4
|
+
class PDFTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_pdf
|
7
|
+
mol = Chem.open_mol($data_dir + "hypericin.mol")
|
8
|
+
mol.nodes.each{|node| node.visible = true unless node.element == :C}
|
9
|
+
Chem.save(mol, File.join(%w(temp temp.pdf)))
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
data/test/test_prop.rb
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
# $Id: test_prop.rb 73 2005-11-16 09:16:15Z tanaka $
|
2
|
+
|
3
|
+
require 'test/all'
|
4
|
+
|
5
|
+
require 'chem'
|
6
|
+
|
7
|
+
class PropTest < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def test_electro_negativity
|
10
|
+
assert_equal(3.16, SMILES("Cl").nodes[0].electro_negativity)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_natural_bond_order
|
14
|
+
assert_equal(4, SMILES("C").nodes[0].natural_bond_order)
|
15
|
+
assert_equal(3, SMILES("N").nodes[0].natural_bond_order)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_oxidation_number
|
19
|
+
mgcl2 = SMILES("ClMgCl")
|
20
|
+
mg = mgcl2.nodes.find{|n| n.element == :Mg}
|
21
|
+
assert(2, mgcl2.oxidation_number(mg))
|
22
|
+
|
23
|
+
get_en = lambda{|smiles|
|
24
|
+
mol = SMILES(smiles)
|
25
|
+
c = mol.nodes.find{|atom| atom.element == :C}
|
26
|
+
mol.oxidation_number(c)
|
27
|
+
}
|
28
|
+
assert_equal(-4, get_en.call("HC(H)(H)H"))
|
29
|
+
assert_equal(-2, get_en.call("HC(H)(H)F"))
|
30
|
+
assert_equal(0, get_en.call("HC(H)(F)F"))
|
31
|
+
assert_equal(-2, get_en.call("HC(H)(H)OH"))
|
32
|
+
assert_equal(0, get_en.call("HC(H)=O"))
|
33
|
+
assert_equal(2, get_en.call("HC(=O)OH"))
|
34
|
+
assert_equal(4, get_en.call("O=C=O"))
|
35
|
+
|
36
|
+
# implicit hydrogen atom
|
37
|
+
assert_equal(-4, get_en.call("C"))
|
38
|
+
assert_equal(2, get_en.call("C(=O)O"))
|
39
|
+
# partially implicit
|
40
|
+
assert_equal(0, get_en.call("C(H)(F)F"))
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_n_hydrogen
|
45
|
+
ch4 = SMILES("C")
|
46
|
+
assert_equal(4, ch4.n_hydrogen(ch4.nodes[0]))
|
47
|
+
hcooh = SMILES("C(=O)O")
|
48
|
+
c = hcooh.nodes.find{|n| n.element == :C}
|
49
|
+
assert_equal(1, hcooh.n_hydrogen(c))
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_composition
|
53
|
+
comp = Chem.open_mol($data_dir + "rxn/C01010.mol").composition
|
54
|
+
assert_equal(2, comp[:C])
|
55
|
+
assert_equal(2, comp[:N])
|
56
|
+
assert_equal(3, comp[:O])
|
57
|
+
end
|
58
|
+
|
59
|
+
# return 1 if self.composition > to.composition
|
60
|
+
# return 0 if self.composition == to.composition
|
61
|
+
# return -1 if self.composition < to.composition
|
62
|
+
# return false if self.composition <> to.composition
|
63
|
+
def test_subset_in_composition
|
64
|
+
comp1 = Chem.parse_smiles("CCNOC")
|
65
|
+
comp2 = Chem.parse_smiles("CCCCC")
|
66
|
+
comp3 = Chem.parse_smiles("CNOCC")
|
67
|
+
comp4 = Chem.parse_smiles("CNOC")
|
68
|
+
comp5 = Chem.parse_smiles("CCC")
|
69
|
+
comp6 = Chem.parse_smiles("CNNOC")
|
70
|
+
comp7 = Chem.parse_smiles("ClOO")
|
71
|
+
|
72
|
+
# different species
|
73
|
+
assert_equal(false, comp2.subset_in_composition?(comp3))
|
74
|
+
assert_equal(false, comp7.subset_in_composition?(comp1))
|
75
|
+
assert_equal(1, comp3.subset_in_composition?(comp5))
|
76
|
+
assert_equal(-1, comp5.subset_in_composition?(comp3))
|
77
|
+
|
78
|
+
# same species
|
79
|
+
assert_equal(0, comp1.subset_in_composition?(comp3))
|
80
|
+
assert_equal(1, comp3.subset_in_composition?(comp4))
|
81
|
+
assert_equal(-1, comp4.subset_in_composition?(comp3))
|
82
|
+
assert_equal(false, comp3.subset_in_composition?(comp6))
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'chem'
|
2
|
+
|
3
|
+
class RMagickTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_rmagick
|
9
|
+
mol = Chem.open_mol($data_dir + "hypericin.mol")
|
10
|
+
mol.nodes.each{|node| node.visible = true unless node.element == :C}
|
11
|
+
mol.save(File.join(%w(temp save_test.png)))
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
data/test/test_sbdb.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# $Id: test_sbdb.rb 135 2006-02-06 05:48:56Z tanaka $
|
2
|
+
|
3
|
+
require 'test/all'
|
4
|
+
|
5
|
+
require 'chem'
|
6
|
+
require 'chem/utils/ullmann'
|
7
|
+
|
8
|
+
class SBDBTest < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def test_create_db
|
11
|
+
|
12
|
+
# db = GraphDB.new("kegg")
|
13
|
+
# mol = Chem.parse_file($data_dir + "cyclohexane.mol")
|
14
|
+
|
15
|
+
# db.insert(mol)
|
16
|
+
|
17
|
+
# db.select(mol)
|
18
|
+
|
19
|
+
# assert(true)
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/test/test_sdf.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# $Id: test_sdf.rb 151 2006-02-08 08:21:08Z tanaka $
|
2
|
+
|
3
|
+
require 'test/type_test'
|
4
|
+
require 'chem/db/types/type_sdf'
|
5
|
+
|
6
|
+
require 'test/multiple_test'
|
7
|
+
|
8
|
+
class SdfTest < Test::Unit::TestCase
|
9
|
+
|
10
|
+
include Chem::MultipleTest
|
11
|
+
|
12
|
+
def setup
|
13
|
+
@entries = Chem.open_mol($data_dir + "test.sdf")
|
14
|
+
@file_type = Chem::Type::SdfType
|
15
|
+
@mod = Chem::MDL::SdfParser
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_autodetection
|
19
|
+
assert_equal(Chem::Type::SdfType, Chem::autodetect($data_dir + "test.sdf"))
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_sdf_file
|
23
|
+
assert_equal(2, @entries.to_a.length)
|
24
|
+
@entries.each do |mol|
|
25
|
+
assert_not_nil(mol)
|
26
|
+
end
|
27
|
+
assert_equal(2, Chem.open_mol($data_dir + "test_lf.sdf").to_a.length)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
data/test/test_smiles.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
# $Id: test_smiles.rb 124 2006-01-16 09:15:20Z tanaka $
|
2
|
+
require 'chem/db/smiles'
|
3
|
+
|
4
|
+
require 'test/all'
|
5
|
+
|
6
|
+
require 'test/ctab_test'
|
7
|
+
|
8
|
+
|
9
|
+
class SmilesTest < Test::Unit::TestCase
|
10
|
+
|
11
|
+
include Chem::CtabTest
|
12
|
+
|
13
|
+
def test_cubane
|
14
|
+
Chem.parse_smiles("C12C3C4C1C5C2C3C45")
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_atom_types
|
18
|
+
[
|
19
|
+
["H" , {:element => :H}],
|
20
|
+
["C" , {:element => :C, :is_aromatic => false, :mass => 12.0107}],
|
21
|
+
["c" , {:element => :C, :is_aromatic => true}],
|
22
|
+
["se" , {:element => :Se, :is_aromatic => true}],
|
23
|
+
["[235U]" , {:element => :U, :mass => 235.0}],
|
24
|
+
["[nH]" , {:element => :N, :is_aromatic => true}], # Hydrogen
|
25
|
+
["[OH3+]" , {:element => :O, :hydrogen_count => 3}],
|
26
|
+
["[Fe2+]" , {:element => :Fe, :charge => 2}],
|
27
|
+
["[Fe++]" , {:element => :Fe, :charge => 2}],
|
28
|
+
["[13CH4]", {:element => :C, :hydrogen_count => 4, :mass => 13}],
|
29
|
+
["[2H]" , {:element => :H, :mass => 2}],
|
30
|
+
# ["[C@H]" , {:element => :H}],
|
31
|
+
# ["[C@@H]" , {:element => :H}],
|
32
|
+
].each do |sm, prop|
|
33
|
+
mol = SMILES(sm)
|
34
|
+
prop.each do |key, val|
|
35
|
+
assert_equal(val, mol.nodes[0].send(key))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def setup
|
41
|
+
@entries = []
|
42
|
+
|
43
|
+
[
|
44
|
+
"C",
|
45
|
+
"[Au]",
|
46
|
+
"[235U]",
|
47
|
+
"CC",
|
48
|
+
"CCC",
|
49
|
+
"C=O",
|
50
|
+
"C=CC=C",
|
51
|
+
"C#N",
|
52
|
+
"CC(C)C(=O)O",
|
53
|
+
"O=Cl(=O)(=O)[O-]", # Cl(=O)(=O)(=O)[O-]
|
54
|
+
"CCCC(C(=O)O)CCC", # 4-heptanoic acid
|
55
|
+
# Ring
|
56
|
+
"C1CCCCC1", # Cyclohexane
|
57
|
+
"C1=CCCCC1", # cyclohexene
|
58
|
+
"c12c(cccc1)cccc2", # naphthalene
|
59
|
+
"c1ccccc1c2ccccc2", # biphenyl
|
60
|
+
"C12C3C4C1C5C4C3C25", # Cubane
|
61
|
+
# Isotopic specification
|
62
|
+
"[C]", # elemental carbon
|
63
|
+
"[12C]", # elemental carbon-12
|
64
|
+
"[13C]", # elemental carbon-13
|
65
|
+
"[13CH4]", # C-13 methane
|
66
|
+
# Specifying double-bond configuration
|
67
|
+
'F/C=C/F', # trans-difluoroethene
|
68
|
+
'F\C=C\F', # trans-difluoroethene
|
69
|
+
'F/C=C\F', # cis-difluoroethene
|
70
|
+
'F\C=C/F', # cis-difluoroethene
|
71
|
+
# Specifying tetrahedral chirality
|
72
|
+
"N[C@@H](C)C(=O)O", # L-alanine
|
73
|
+
"N[C@H](C)C(=O)O", # D-alanine
|
74
|
+
"O[C@H]1CCCC[C@H]1O", # cis-resorcinol
|
75
|
+
"C1C[C@H]2CCCC[C@H]CC1", #cis-decaline
|
76
|
+
# http://pubchem.ncbi.nlm.nih.gov/summary/summary.cgi?cid=043383,niaid
|
77
|
+
"C1=CC2=C3C(=C1)C=CC4=C3C(=CC5=C4[C@H]([C@H](C=C5)O)O)C=C2",
|
78
|
+
"NC(Cc1c[nH]c2cc[se]c12)C(O)=O", # pointed out by Dr. ktaz
|
79
|
+
].each do |smiles|
|
80
|
+
@entries.push(Chem.parse_smiles(smiles))
|
81
|
+
end
|
82
|
+
# mass : NUMBER
|
83
|
+
end
|
84
|
+
end
|
data/test/test_sssr.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# $Id: test_sssr.rb 65 2005-10-25 17:17:36Z tanaka $
|
2
|
+
|
3
|
+
require 'chem/utils/sssr'
|
4
|
+
|
5
|
+
require 'test/all'
|
6
|
+
require 'test/ctab_test'
|
7
|
+
|
8
|
+
class SssrTest < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def setup
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_coronen
|
14
|
+
coronen = Chem.open_mol($data_dir + '/A_21/coronen.mol')
|
15
|
+
coronen.find_sssr
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
data/test/test_sub.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# $Id: test_sub.rb 65 2005-10-25 17:17:36Z tanaka $
|
2
|
+
|
3
|
+
require 'chem'
|
4
|
+
|
5
|
+
require 'test/all'
|
6
|
+
|
7
|
+
class SubTest < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@cyclohexane = Chem.open_mol($data_dir + 'cyclohexane.mol')
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_induced_subgraph
|
14
|
+
sub = @cyclohexane.induced_sub(@cyclohexane.nodes[0..2])
|
15
|
+
assert_equal(sub.nodes.length, 3)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_minus
|
19
|
+
sub = @cyclohexane.induced_sub(@cyclohexane.nodes[0..2])
|
20
|
+
sub2 = @cyclohexane - sub
|
21
|
+
assert_equal(sub2.nodes.length, 3)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_connection
|
25
|
+
mol = Chem.parse_smiles("CCCC.NNNNN")
|
26
|
+
mol2 = Chem.parse_smiles("CCCCNNNNN")
|
27
|
+
assert_equal(false, mol.connected?)
|
28
|
+
assert(mol2.connected?)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_divide
|
32
|
+
mol = Chem.parse_smiles("CC.N1NN1.OOOO")
|
33
|
+
ary = mol.divide
|
34
|
+
ary.each do |mol|
|
35
|
+
case mol.nodes[0].element
|
36
|
+
when :C
|
37
|
+
assert_equal(2, mol.nodes.length)
|
38
|
+
when :N
|
39
|
+
assert_equal(3, mol.nodes.length)
|
40
|
+
when :O
|
41
|
+
assert_equal(4, mol.nodes.length)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|