chemruby 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +120 -0
 - data/Rakefile +195 -0
 - data/ext/extconf.rb +4 -0
 - data/ext/subcomp.c +416 -0
 - data/lib/chem.rb +130 -0
 - data/lib/chem/appl.rb +1 -0
 - data/lib/chem/appl/chem3dole.rb +36 -0
 - data/lib/chem/appl/tinker/nucleic.rb +40 -0
 - data/lib/chem/appl/tinker/tinker_reader.rb +43 -0
 - data/lib/chem/data.rb +4 -0
 - data/lib/chem/data/atomic_weight.rb +124 -0
 - data/lib/chem/data/character.rb +2 -0
 - data/lib/chem/data/electronegativity.rb +14 -0
 - data/lib/chem/data/periodic_table.rb +6 -0
 - data/lib/chem/data/prime_numbers.rb +1 -0
 - data/lib/chem/data/vdw_radii.rb +1 -0
 - data/lib/chem/db.rb +64 -0
 - data/lib/chem/db/cansmi.rb +234 -0
 - data/lib/chem/db/cdx.rb +1525 -0
 - data/lib/chem/db/eps.rb +164 -0
 - data/lib/chem/db/g98.rb +909 -0
 - data/lib/chem/db/gspan.rb +130 -0
 - data/lib/chem/db/iupac.rb +5 -0
 - data/lib/chem/db/iupac/a_1.rb +46 -0
 - data/lib/chem/db/iupac/iuparser.rb +226 -0
 - data/lib/chem/db/iupac/iuparser.ry +97 -0
 - data/lib/chem/db/iupac/postfix.rb +2 -0
 - data/lib/chem/db/kcf.rb +390 -0
 - data/lib/chem/db/kcf_glycan.rb +19 -0
 - data/lib/chem/db/kegg.rb +516 -0
 - data/lib/chem/db/linucs/linparser.rb +144 -0
 - data/lib/chem/db/linucs/linucs.ry +53 -0
 - data/lib/chem/db/mdl.rb +379 -0
 - data/lib/chem/db/molconnz.rb +12 -0
 - data/lib/chem/db/mopac.rb +88 -0
 - data/lib/chem/db/msi.rb +107 -0
 - data/lib/chem/db/pdb_dic.rb +115 -0
 - data/lib/chem/db/pdf.rb +131 -0
 - data/lib/chem/db/pubchem.rb +113 -0
 - data/lib/chem/db/rmagick.rb +70 -0
 - data/lib/chem/db/sdf.rb +37 -0
 - data/lib/chem/db/smbl.rb +88 -0
 - data/lib/chem/db/smiles.rb +2 -0
 - data/lib/chem/db/smiles/smiles.ry +203 -0
 - data/lib/chem/db/smiles/smiparser.rb +375 -0
 - data/lib/chem/db/swf.rb +74 -0
 - data/lib/chem/db/sybyl.rb +150 -0
 - data/lib/chem/db/tinker.rb +77 -0
 - data/lib/chem/db/types/type_cansmi.rb +9 -0
 - data/lib/chem/db/types/type_cdx.rb +24 -0
 - data/lib/chem/db/types/type_gspan.rb +31 -0
 - data/lib/chem/db/types/type_kcf.rb +28 -0
 - data/lib/chem/db/types/type_kcf_glycan.rb +26 -0
 - data/lib/chem/db/types/type_kegg.rb +92 -0
 - data/lib/chem/db/types/type_mdl.rb +31 -0
 - data/lib/chem/db/types/type_pdf.rb +33 -0
 - data/lib/chem/db/types/type_png.rb +31 -0
 - data/lib/chem/db/types/type_rxn.rb +25 -0
 - data/lib/chem/db/types/type_sdf.rb +25 -0
 - data/lib/chem/db/types/type_sybyl.rb +30 -0
 - data/lib/chem/db/types/type_xyz.rb +26 -0
 - data/lib/chem/db/vector.rb +128 -0
 - data/lib/chem/db/xyz.rb +39 -0
 - data/lib/chem/model.rb +119 -0
 - data/lib/chem/model/skeleton.rb +37 -0
 - data/lib/chem/utils.rb +11 -0
 - data/lib/chem/utils/geometry.rb +27 -0
 - data/lib/chem/utils/graph_db.rb +146 -0
 - data/lib/chem/utils/math.rb +17 -0
 - data/lib/chem/utils/prop.rb +123 -0
 - data/lib/chem/utils/sssr.rb +101 -0
 - data/lib/chem/utils/sub.rb +78 -0
 - data/lib/chem/utils/transform.rb +110 -0
 - data/lib/chem/utils/traverse.rb +37 -0
 - data/lib/chem/utils/ullmann.rb +134 -0
 - data/lib/graph.rb +41 -0
 - data/lib/graph/cluster.rb +20 -0
 - data/lib/graph/morgan.rb +38 -0
 - data/sample/frequent_subgraph.rb +46 -0
 - data/sample/images/ex1.rb +11 -0
 - data/sample/images/ex2.rb +4 -0
 - data/sample/images/ex3.rb +5 -0
 - data/sample/images/ex4.rb +17 -0
 - data/sample/images/ex5.rb +10 -0
 - data/sample/images/mol/adenine.mol +26 -0
 - data/sample/images/mol/atp.mol +69 -0
 - data/sample/images/temp/ex5.mol +344 -0
 - data/sample/kegg_db.rb +116 -0
 - data/setup.rb +1551 -0
 - data/test/all.rb +6 -0
 - data/test/coord_test.rb +17 -0
 - data/test/ctab_test.rb +31 -0
 - data/test/data/A_21.tar.gz +0 -0
 - data/test/data/A_21/aceanthrylene.cdx +0 -0
 - data/test/data/A_21/aceanthrylene.mol +40 -0
 - data/test/data/A_21/acenaphthylene.cdx +0 -0
 - data/test/data/A_21/acenaphthylene.mol +31 -0
 - data/test/data/A_21/acephenanthrylene.cdx +0 -0
 - data/test/data/A_21/acephenanthrylene.mol +40 -0
 - data/test/data/A_21/anthracene.cdx +0 -0
 - data/test/data/A_21/anthracene.mol +35 -0
 - data/test/data/A_21/as-indacene.cdx +0 -0
 - data/test/data/A_21/as-indacene.mol +31 -0
 - data/test/data/A_21/azulene.cdx +0 -0
 - data/test/data/A_21/azulene.mol +26 -0
 - data/test/data/A_21/biphenylene.cdx +0 -0
 - data/test/data/A_21/biphenylene.mol +31 -0
 - data/test/data/A_21/chrysene.cdx +0 -0
 - data/test/data/A_21/chrysene.mol +44 -0
 - data/test/data/A_21/coronen.cdx +0 -0
 - data/test/data/A_21/coronen.mol +59 -0
 - data/test/data/A_21/fluoranthene.cdx +0 -0
 - data/test/data/A_21/fluoranthene.mol +40 -0
 - data/test/data/A_21/fluorene.cdx +0 -0
 - data/test/data/A_21/fluorene.mol +33 -0
 - data/test/data/A_21/heptacene.cdx +0 -0
 - data/test/data/A_21/heptacene.mol +71 -0
 - data/test/data/A_21/heptalene.cdx +0 -0
 - data/test/data/A_21/heptalene.mol +30 -0
 - data/test/data/A_21/heptaphene.cdx +0 -0
 - data/test/data/A_21/heptaphene.mol +71 -0
 - data/test/data/A_21/hexacene.cdx +0 -0
 - data/test/data/A_21/hexacene.mol +62 -0
 - data/test/data/A_21/hexaphene.cdx +0 -0
 - data/test/data/A_21/hexaphene.mol +62 -0
 - data/test/data/A_21/indene.cdx +0 -0
 - data/test/data/A_21/indene.mol +24 -0
 - data/test/data/A_21/iupac.txt +41 -0
 - data/test/data/A_21/naphthacene.cdx +0 -0
 - data/test/data/A_21/naphthacene.mol +44 -0
 - data/test/data/A_21/naphthalene.cdx +0 -0
 - data/test/data/A_21/naphthalene.mol +26 -0
 - data/test/data/A_21/ovalene.cdx +0 -0
 - data/test/data/A_21/ovalene.mol +78 -0
 - data/test/data/A_21/pentacene.cdx +0 -0
 - data/test/data/A_21/pentacene.mol +53 -0
 - data/test/data/A_21/pentalene.cdx +0 -0
 - data/test/data/A_21/pentalene.mol +22 -0
 - data/test/data/A_21/pentaphene.cdx +0 -0
 - data/test/data/A_21/pentaphene.mol +53 -0
 - data/test/data/A_21/perylene.cdx +0 -0
 - data/test/data/A_21/perylene.mol +49 -0
 - data/test/data/A_21/phenalene.cdx +0 -0
 - data/test/data/A_21/phenalene.mol +33 -0
 - data/test/data/A_21/phenanthrene.cdx +0 -0
 - data/test/data/A_21/phenanthrene.mol +35 -0
 - data/test/data/A_21/picene.cdx +0 -0
 - data/test/data/A_21/picene.mol +53 -0
 - data/test/data/A_21/pleiadene.cdx +0 -0
 - data/test/data/A_21/pleiadene.mol +44 -0
 - data/test/data/A_21/pyranthrene.cdx +0 -0
 - data/test/data/A_21/pyranthrene.mol +72 -0
 - data/test/data/A_21/pyrene.cdx +0 -0
 - data/test/data/A_21/pyrene.mol +40 -0
 - data/test/data/A_21/rubicene.cdx +0 -0
 - data/test/data/A_21/rubicene.mol +63 -0
 - data/test/data/A_21/s-indacene.cdx +0 -0
 - data/test/data/A_21/s-indacene.mol +31 -0
 - data/test/data/A_21/tetraphenylene.cdx +0 -0
 - data/test/data/A_21/tetraphenylene.mol +57 -0
 - data/test/data/A_21/trinaphthylene.cdx +0 -0
 - data/test/data/A_21/trinaphthylene.mol +71 -0
 - data/test/data/A_21/triphenylene.cdx +0 -0
 - data/test/data/A_21/triphenylene.mol +44 -0
 - data/test/data/C00147.kcf +25 -0
 - data/test/data/G00147.kcf +13 -0
 - data/test/data/atp.mol +69 -0
 - data/test/data/cyclohexane.mol +17 -0
 - data/test/data/cyclohexane.ps +485 -0
 - data/test/data/fullerene.mol +155 -0
 - data/test/data/glycan +33 -0
 - data/test/data/hypericin.cdx +0 -0
 - data/test/data/hypericin.cdxml +596 -0
 - data/test/data/hypericin.chm +0 -0
 - data/test/data/hypericin.ct +85 -0
 - data/test/data/hypericin.f1d +0 -0
 - data/test/data/hypericin.f1q +0 -0
 - data/test/data/hypericin.gif +0 -0
 - data/test/data/hypericin.mol +88 -0
 - data/test/data/hypericin.mol2 +159 -0
 - data/test/data/hypericin.msm +123 -0
 - data/test/data/hypericin.pdf +359 -0
 - data/test/data/hypericin.png +0 -0
 - data/test/data/hypericin.ps +0 -0
 - data/test/data/hypericin.skc +0 -0
 - data/test/data/hypericin2.gif +0 -0
 - data/test/data/hypericin2.ps +0 -0
 - data/test/data/kegg/genomes/hsa/hsa_enzyme.list +4 -0
 - data/test/data/kegg/genomes/hsa/hsa_pfam.list +4 -0
 - data/test/data/kegg/ligand/mol/C00147.mol +26 -0
 - data/test/data/kegg/ligand/reaction +14 -0
 - data/test/data/kegg/ligand/reaction.lst +1 -0
 - data/test/data/kegg/ligand/reaction_mapformula.lst +3 -0
 - data/test/data/reaction +14 -0
 - data/test/data/reaction.lst +1 -0
 - data/test/data/reaction_mapformula.lst +3 -0
 - data/test/data/rxn/C00001.mol +6 -0
 - data/test/data/rxn/C00011.mol +10 -0
 - data/test/data/rxn/C00014.mol +6 -0
 - data/test/data/rxn/C01010.mol +18 -0
 - data/test/data/rxn/sample.rxn +50 -0
 - data/test/data/rxn/substitution.rxn +45 -0
 - data/test/data/test.eps +0 -0
 - data/test/data/test.mol +28 -0
 - data/test/data/test.sdf +143 -0
 - data/test/data/test.skc +0 -0
 - data/test/data/test.xyz +4 -0
 - data/test/data/test_lf.sdf +143 -0
 - data/test/heavy_test_pubchem.rb +16 -0
 - data/test/multiple_test.rb +22 -0
 - data/test/test_adj.rb +54 -0
 - data/test/test_canonical_smiles.rb +46 -0
 - data/test/test_cdx.rb +32 -0
 - data/test/test_chem.rb +18 -0
 - data/test/test_cluster.rb +19 -0
 - data/test/test_db.rb +11 -0
 - data/test/test_eps.rb +24 -0
 - data/test/test_geometry.rb +11 -0
 - data/test/test_gspan.rb +28 -0
 - data/test/test_iupac.rb +36 -0
 - data/test/test_kcf.rb +24 -0
 - data/test/test_kcf_glycan.rb +10 -0
 - data/test/test_kegg.rb +118 -0
 - data/test/test_linucs.rb +21 -0
 - data/test/test_mdl.rb +45 -0
 - data/test/test_mol2.rb +62 -0
 - data/test/test_morgan.rb +21 -0
 - data/test/test_pdf.rb +12 -0
 - data/test/test_prop.rb +86 -0
 - data/test/test_rmagick.rb +15 -0
 - data/test/test_sbdb.rb +23 -0
 - data/test/test_sdf.rb +30 -0
 - data/test/test_smiles.rb +84 -0
 - data/test/test_sssr.rb +18 -0
 - data/test/test_sub.rb +47 -0
 - data/test/test_subcomp.rb +37 -0
 - data/test/test_traverse.rb +29 -0
 - data/test/test_writer.rb +13 -0
 - data/test/test_xyz.rb +15 -0
 - data/test/type_test.rb +25 -0
 - metadata +290 -0
 
    
        data/lib/chem.rb
    ADDED
    
    | 
         @@ -0,0 +1,130 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Chem module.  See documentation for the file chem.rb for an overview
         
     | 
| 
      
 3 
     | 
    
         
            +
            #
         
     | 
| 
      
 4 
     | 
    
         
            +
            # $Id: chem.rb 158 2006-02-09 07:16:48Z tanaka $
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # == Introduction
         
     | 
| 
      
 7 
     | 
    
         
            +
            #
         
     | 
| 
      
 8 
     | 
    
         
            +
            # Chem module is a facade of ChemRuby. You will find all the input format
         
     | 
| 
      
 9 
     | 
    
         
            +
            # that ChemRuby support can be invoked via Chem module.
         
     | 
| 
      
 10 
     | 
    
         
            +
            #
         
     | 
| 
      
 11 
     | 
    
         
            +
            # == Examples
         
     | 
| 
      
 12 
     | 
    
         
            +
            #
         
     | 
| 
      
 13 
     | 
    
         
            +
            # === Example 1: Parse molecular file
         
     | 
| 
      
 14 
     | 
    
         
            +
            #
         
     | 
| 
      
 15 
     | 
    
         
            +
            #   require 'chem'
         
     | 
| 
      
 16 
     | 
    
         
            +
            #
         
     | 
| 
      
 17 
     | 
    
         
            +
            #   mol = Chem.open_mol("/usr/local/foo/mol/C00147.mol")
         
     | 
| 
      
 18 
     | 
    
         
            +
            #
         
     | 
| 
      
 19 
     | 
    
         
            +
            # === 
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            require 'stringio'
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            require 'chem/data'
         
     | 
| 
      
 25 
     | 
    
         
            +
            require 'chem/utils'
         
     | 
| 
      
 26 
     | 
    
         
            +
            require 'chem/model'
         
     | 
| 
      
 27 
     | 
    
         
            +
            require 'chem/appl'
         
     | 
| 
      
 28 
     | 
    
         
            +
            require 'chem/db'
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            require 'tempfile'
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            module Chem
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              autoload   :MDL,   'chem/db/mdl.rb'
         
     | 
| 
      
 35 
     | 
    
         
            +
              autoload   :CDX,   'chem/db/cdx.rb'
         
     | 
| 
      
 36 
     | 
    
         
            +
              autoload   :G98,   'chem/db/g98.rb'
         
     | 
| 
      
 37 
     | 
    
         
            +
              autoload   :GSpan, 'chem/db/gspan.rb'
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
              module_function
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
              # returns first entry
         
     | 
| 
      
 42 
     | 
    
         
            +
              def find_first str
         
     | 
| 
      
 43 
     | 
    
         
            +
                p str
         
     | 
| 
      
 44 
     | 
    
         
            +
              end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
              # format_class = Chem.autodetect("file.mol")
         
     | 
| 
      
 47 
     | 
    
         
            +
              #
         
     | 
| 
      
 48 
     | 
    
         
            +
              # Automatically detect file type and returns
         
     | 
| 
      
 49 
     | 
    
         
            +
              # appropriate class to parse it 
         
     | 
| 
      
 50 
     | 
    
         
            +
              def self.autodetect file
         
     | 
| 
      
 51 
     | 
    
         
            +
                ChemTypeRegistry.find{|format| format.detect_file file}
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
              # Makes possible to open chemical files.
         
     | 
| 
      
 55 
     | 
    
         
            +
              # Guesses the file type based on the extension of the file name.
         
     | 
| 
      
 56 
     | 
    
         
            +
              #
         
     | 
| 
      
 57 
     | 
    
         
            +
              # Examples : So if the file name is "benzene.mol",
         
     | 
| 
      
 58 
     | 
    
         
            +
              # 
         
     | 
| 
      
 59 
     | 
    
         
            +
              # mol = Chem.open_mol("benzene.mol") # returns MDLMolecule object
         
     | 
| 
      
 60 
     | 
    
         
            +
              #
         
     | 
| 
      
 61 
     | 
    
         
            +
              def open_mol file, format_type = nil
         
     | 
| 
      
 62 
     | 
    
         
            +
                format = nil
         
     | 
| 
      
 63 
     | 
    
         
            +
                if format_type == nil
         
     | 
| 
      
 64 
     | 
    
         
            +
                  format = Chem.autodetect(file)
         
     | 
| 
      
 65 
     | 
    
         
            +
                else
         
     | 
| 
      
 66 
     | 
    
         
            +
                  format = ChemTypeRegistry.find{|format| format.detect_type format_type}
         
     | 
| 
      
 67 
     | 
    
         
            +
                end
         
     | 
| 
      
 68 
     | 
    
         
            +
                raise NotImplementedError unless format
         
     | 
| 
      
 69 
     | 
    
         
            +
                return format.parse(file) if format
         
     | 
| 
      
 70 
     | 
    
         
            +
              end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
              alias :parse_file :open_mol
         
     | 
| 
      
 73 
     | 
    
         
            +
              module_function :parse_file
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
              # 
         
     | 
| 
      
 76 
     | 
    
         
            +
              def self.save(array, filename)
         
     | 
| 
      
 77 
     | 
    
         
            +
                format = autodetect filename
         
     | 
| 
      
 78 
     | 
    
         
            +
                format.save(array, filename)
         
     | 
| 
      
 79 
     | 
    
         
            +
              end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
              def parse_smiles smiles
         
     | 
| 
      
 82 
     | 
    
         
            +
                require 'chem/db/smiles'
         
     | 
| 
      
 83 
     | 
    
         
            +
                require 'chem/db/smiles/smiparser'
         
     | 
| 
      
 84 
     | 
    
         
            +
                ::SmilesParser.parse_smiles(smiles)
         
     | 
| 
      
 85 
     | 
    
         
            +
              end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
              def open_kegg dir
         
     | 
| 
      
 88 
     | 
    
         
            +
                require 'chem/db/kegg'
         
     | 
| 
      
 89 
     | 
    
         
            +
                Chem::KEGG::KeggDirectory.new(dir)
         
     | 
| 
      
 90 
     | 
    
         
            +
              end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
              module Molecule
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                # Saves files for arbitrary format.
         
     | 
| 
      
 95 
     | 
    
         
            +
                # file type is automatically detected by file extensions.
         
     | 
| 
      
 96 
     | 
    
         
            +
                # 
         
     | 
| 
      
 97 
     | 
    
         
            +
                # You can optionally pass parameters as second argument.
         
     | 
| 
      
 98 
     | 
    
         
            +
                # = Options
         
     | 
| 
      
 99 
     | 
    
         
            +
                # :type::     => :png # Explicit file type
         
     | 
| 
      
 100 
     | 
    
         
            +
                #
         
     | 
| 
      
 101 
     | 
    
         
            +
                def save(filename, params = {}, &block)
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                  format_type = params[:type]
         
     | 
| 
      
 104 
     | 
    
         
            +
                  format = ChemTypeRegistry.find{|format| format.detect_type format_type}
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                  unless format_type
         
     | 
| 
      
 107 
     | 
    
         
            +
                    format = ChemTypeRegistry.find{|format| format.detect_file filename}
         
     | 
| 
      
 108 
     | 
    
         
            +
                  else
         
     | 
| 
      
 109 
     | 
    
         
            +
                    format = ChemTypeRegistry.find{|format| format.detect_type format_type}
         
     | 
| 
      
 110 
     | 
    
         
            +
                  end
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                  unless format
         
     | 
| 
      
 113 
     | 
    
         
            +
                    raise(NotImplementedError)
         
     | 
| 
      
 114 
     | 
    
         
            +
                  end
         
     | 
| 
      
 115 
     | 
    
         
            +
                  format.save(self, filename, params)
         
     | 
| 
      
 116 
     | 
    
         
            +
                end
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
              end
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
            end
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
            # Syntax sugar for Chem.parse_smiles("smiles_string")
         
     | 
| 
      
 123 
     | 
    
         
            +
            # Returns molecular object.
         
     | 
| 
      
 124 
     | 
    
         
            +
            # Example
         
     | 
| 
      
 125 
     | 
    
         
            +
            # SMILES("C1CCCC1")
         
     | 
| 
      
 126 
     | 
    
         
            +
            def SMILES smiles
         
     | 
| 
      
 127 
     | 
    
         
            +
              Chem.parse_smiles(smiles)
         
     | 
| 
      
 128 
     | 
    
         
            +
            end
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
              
         
     | 
    
        data/lib/chem/appl.rb
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/bin/ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'win32ole'
         
     | 
| 
      
 4 
     | 
    
         
            +
            controle = WIN32OLE.new('Chem3D.Control')
         
     | 
| 
      
 5 
     | 
    
         
            +
            application = WIN32OLE.new('Chem3D.Application')
         
     | 
| 
      
 6 
     | 
    
         
            +
            documents = application.documents
         
     | 
| 
      
 7 
     | 
    
         
            +
            #cd = WIN32OLE.new('ChemDraw.Application')
         
     | 
| 
      
 8 
     | 
    
         
            +
            #bounds = WIN32OLE.new('Chem3D.Bounds')
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            #documents.application.visible = true
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            error = open("error.txt", "w")
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            Dir.glob('/home/nobuya/src/mol/mol/C*.mol').each do |file|
         
     | 
| 
      
 15 
     | 
    
         
            +
              /(C\d+).mol/ =~ file
         
     | 
| 
      
 16 
     | 
    
         
            +
              input = 'c:\\cygwin\\home\\nobuya\\src\\mol\\mol\\' + $1 + '.mol'
         
     | 
| 
      
 17 
     | 
    
         
            +
              output = 'c:\\cygwin\\home\\nobuya\\mop\\' + $1 + '.mop'
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              puts input
         
     | 
| 
      
 20 
     | 
    
         
            +
              document = documents.open(input)
         
     | 
| 
      
 21 
     | 
    
         
            +
              if document
         
     | 
| 
      
 22 
     | 
    
         
            +
                document.saveAs(output)
         
     | 
| 
      
 23 
     | 
    
         
            +
                document.close
         
     | 
| 
      
 24 
     | 
    
         
            +
              else
         
     | 
| 
      
 25 
     | 
    
         
            +
                error.puts(input)
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
            end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            __END__
         
     | 
| 
      
 30 
     | 
    
         
            +
            p document = documents.open('c:\cygwin\home\nobuya\src\mol\mol\C00001.mol')
         
     | 
| 
      
 31 
     | 
    
         
            +
            p documents.Item(0)
         
     | 
| 
      
 32 
     | 
    
         
            +
            p document.stericEnergy
         
     | 
| 
      
 33 
     | 
    
         
            +
            document.saveAs('c:\cygwin\home\nobuya\xyz\C00001.xyz')
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #
         
     | 
| 
      
 2 
     | 
    
         
            +
            # chem/appl/tinker/nucleic.rb - Tinker/nucleic wrapper
         
     | 
| 
      
 3 
     | 
    
         
            +
            # 
         
     | 
| 
      
 4 
     | 
    
         
            +
            #
         
     | 
| 
      
 5 
     | 
    
         
            +
            #  $Id: nucleic.rb 128 2006-02-03 02:53:22Z tanaka $
         
     | 
| 
      
 6 
     | 
    
         
            +
            #
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            # = Chem::TINKER
         
     | 
| 
      
 9 
     | 
    
         
            +
            # Tinker protein wrapper.
         
     | 
| 
      
 10 
     | 
    
         
            +
            # Example : 
         
     | 
| 
      
 11 
     | 
    
         
            +
            #   #!/usr/bin/env ruby
         
     | 
| 
      
 12 
     | 
    
         
            +
            #   require 'chem'
         
     | 
| 
      
 13 
     | 
    
         
            +
            #
         
     | 
| 
      
 14 
     | 
    
         
            +
            # === SEE ALSO
         
     | 
| 
      
 15 
     | 
    
         
            +
            # * http://dasher.wustl.edu/tinker/
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            module Chem
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              class TinkerNucleic
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                def initialize(cmd_line)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  @cmd_line = cmd_line + ' -stdout'
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                def exec
         
     | 
| 
      
 27 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 28 
     | 
    
         
            +
            	@io = IO.popen(@cmd_line, "w+")
         
     | 
| 
      
 29 
     | 
    
         
            +
            	@result = @io.read
         
     | 
| 
      
 30 
     | 
    
         
            +
            	return @result
         
     | 
| 
      
 31 
     | 
    
         
            +
                  ensure
         
     | 
| 
      
 32 
     | 
    
         
            +
            	@io.close
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
                attr_reader :io, :result
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,43 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #!/usr/local/bin/ruby
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            if __FILE__ == $0
         
     | 
| 
      
 5 
     | 
    
         
            +
              def make_nucleic
         
     | 
| 
      
 6 
     | 
    
         
            +
                nucleic = "gtggcgatctttccgaaagcgatgactggagcgaagaaccaaagcagtgacatttgtctgatgccgcacgtaggcctgataagacgcggacagcgtcgcatcaggcatcttgtgcaaatgtcggatgcggcgtga"
         
     | 
| 
      
 7 
     | 
    
         
            +
                require 'bio'
         
     | 
| 
      
 8 
     | 
    
         
            +
                open("|nucleic", "w") do |out|
         
     | 
| 
      
 9 
     | 
    
         
            +
                  out.puts "nnn"
         
     | 
| 
      
 10 
     | 
    
         
            +
                  out.puts "Generated by Ruby"
         
     | 
| 
      
 11 
     | 
    
         
            +
                  out.puts "amber98.prm"
         
     | 
| 
      
 12 
     | 
    
         
            +
                  out.puts
         
     | 
| 
      
 13 
     | 
    
         
            +
                  nucleic.each_byte do |c|
         
     | 
| 
      
 14 
     | 
    
         
            +
                    out.puts c.chr
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
      
 16 
     | 
    
         
            +
                  out.puts
         
     | 
| 
      
 17 
     | 
    
         
            +
                  sleep(1)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  out.puts "Y"
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
            #  make_nucleic
         
     | 
| 
      
 22 
     | 
    
         
            +
            #  sleep(1)
         
     | 
| 
      
 23 
     | 
    
         
            +
              mol = TinkerReader.new(open('nnn.xyz', 'r')).mol
         
     | 
| 
      
 24 
     | 
    
         
            +
              require 'pov_writer'
         
     | 
| 
      
 25 
     | 
    
         
            +
              pov = PovWriter.new
         
     | 
| 
      
 26 
     | 
    
         
            +
              output = open("nucleic.pov", 'w')
         
     | 
| 
      
 27 
     | 
    
         
            +
              output.puts pov.atom('O', 0.90, 0.00, 0.00)
         
     | 
| 
      
 28 
     | 
    
         
            +
              output.puts pov.atom('H', 0.50, 0.50, 0.90)
         
     | 
| 
      
 29 
     | 
    
         
            +
              output.puts pov.atom('N', 0.50, 0.00, 0.50)
         
     | 
| 
      
 30 
     | 
    
         
            +
              output.puts pov.atom('C', 0.50, 0.50, 0.50)
         
     | 
| 
      
 31 
     | 
    
         
            +
              output.puts pov.atom('S', 0.50, 0.50, 0.10)
         
     | 
| 
      
 32 
     | 
    
         
            +
              output.puts pov.atom('P', 0.50, 0.50, 0.10)
         
     | 
| 
      
 33 
     | 
    
         
            +
              mol.atoms.each do |index, atom|
         
     | 
| 
      
 34 
     | 
    
         
            +
                output.puts "object {atom_#{atom.element} translate <#{atom.x}, #{atom.y}, #{atom.z}>}"
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
              mol.bonds.each do |bond|
         
     | 
| 
      
 37 
     | 
    
         
            +
                output.puts pov.bond(bond.b, bond.e)
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
            #  output.puts(pov.helix(mol))
         
     | 
| 
      
 40 
     | 
    
         
            +
              output.puts pov.light
         
     | 
| 
      
 41 
     | 
    
         
            +
              output.puts pov.camera(120, -50, -100, 120, 0, -100)
         
     | 
| 
      
 42 
     | 
    
         
            +
              output.close
         
     | 
| 
      
 43 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/chem/data.rb
    ADDED
    
    
| 
         @@ -0,0 +1,124 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Table of atomic weight
         
     | 
| 
      
 2 
     | 
    
         
            +
            # extracted from http://www.chem.qmul.ac.uk/iupac/AtWt/index.html
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Chem
         
     | 
| 
      
 5 
     | 
    
         
            +
              AtomicWeight = {
         
     | 
| 
      
 6 
     | 
    
         
            +
                :H => 1.00794,
         
     | 
| 
      
 7 
     | 
    
         
            +
                :He => 4.002602,
         
     | 
| 
      
 8 
     | 
    
         
            +
                :Li => 6.941,
         
     | 
| 
      
 9 
     | 
    
         
            +
                :Be => 9.012182,
         
     | 
| 
      
 10 
     | 
    
         
            +
                :B  => 10.811,
         
     | 
| 
      
 11 
     | 
    
         
            +
                :C  => 12.0107,
         
     | 
| 
      
 12 
     | 
    
         
            +
                :N  => 14.0067,
         
     | 
| 
      
 13 
     | 
    
         
            +
                :O  => 15.9994,
         
     | 
| 
      
 14 
     | 
    
         
            +
                :F  => 18.9984032,
         
     | 
| 
      
 15 
     | 
    
         
            +
                :Ne => 20.1797,
         
     | 
| 
      
 16 
     | 
    
         
            +
                :Na => 22.989770,
         
     | 
| 
      
 17 
     | 
    
         
            +
                :Mg => 24.3050,
         
     | 
| 
      
 18 
     | 
    
         
            +
                :Al => 26.981538,
         
     | 
| 
      
 19 
     | 
    
         
            +
                :Si => 28.0855,
         
     | 
| 
      
 20 
     | 
    
         
            +
                :P  => 30.973761,
         
     | 
| 
      
 21 
     | 
    
         
            +
                :S  => 32.065,
         
     | 
| 
      
 22 
     | 
    
         
            +
                :Cl => 35.453,
         
     | 
| 
      
 23 
     | 
    
         
            +
                :Ar => 39.948,
         
     | 
| 
      
 24 
     | 
    
         
            +
                :K  => 39.0983,
         
     | 
| 
      
 25 
     | 
    
         
            +
                :Ca => 40.078,
         
     | 
| 
      
 26 
     | 
    
         
            +
                :Sc => 44.955910,
         
     | 
| 
      
 27 
     | 
    
         
            +
                :Ti => 47.867,
         
     | 
| 
      
 28 
     | 
    
         
            +
                :V  => 50.9415,
         
     | 
| 
      
 29 
     | 
    
         
            +
                :Cr => 51.9961,
         
     | 
| 
      
 30 
     | 
    
         
            +
                :Mn => 54.938049,
         
     | 
| 
      
 31 
     | 
    
         
            +
                :Fe => 55.845,
         
     | 
| 
      
 32 
     | 
    
         
            +
                :Co => 58.933200,
         
     | 
| 
      
 33 
     | 
    
         
            +
                :Ni => 58.6934,
         
     | 
| 
      
 34 
     | 
    
         
            +
                :Cu => 63.546,
         
     | 
| 
      
 35 
     | 
    
         
            +
                :Zn => 65.409,
         
     | 
| 
      
 36 
     | 
    
         
            +
                :Ga => 69.723,
         
     | 
| 
      
 37 
     | 
    
         
            +
                :Ge => 72.64,
         
     | 
| 
      
 38 
     | 
    
         
            +
                :As => 74.92160,
         
     | 
| 
      
 39 
     | 
    
         
            +
                :Se => 78.96,
         
     | 
| 
      
 40 
     | 
    
         
            +
                :Br => 79.904,
         
     | 
| 
      
 41 
     | 
    
         
            +
                :Kr => 83.798,
         
     | 
| 
      
 42 
     | 
    
         
            +
                :Rb => 85.4678,
         
     | 
| 
      
 43 
     | 
    
         
            +
                :Sr => 87.62,
         
     | 
| 
      
 44 
     | 
    
         
            +
                :Y  => 88.90585,
         
     | 
| 
      
 45 
     | 
    
         
            +
                :Zr => 91.224,
         
     | 
| 
      
 46 
     | 
    
         
            +
                :Nb => 92.90638,
         
     | 
| 
      
 47 
     | 
    
         
            +
                :Mo => 95.94,
         
     | 
| 
      
 48 
     | 
    
         
            +
                :Tc => 98,
         
     | 
| 
      
 49 
     | 
    
         
            +
                :Ru => 101.07,
         
     | 
| 
      
 50 
     | 
    
         
            +
                :Rh => 102.90550,
         
     | 
| 
      
 51 
     | 
    
         
            +
                :Pd => 106.42,
         
     | 
| 
      
 52 
     | 
    
         
            +
                :Ag => 107.8682,
         
     | 
| 
      
 53 
     | 
    
         
            +
                :Cd => 112.411,
         
     | 
| 
      
 54 
     | 
    
         
            +
                :In => 114.818,
         
     | 
| 
      
 55 
     | 
    
         
            +
                :Sn => 118.710,
         
     | 
| 
      
 56 
     | 
    
         
            +
                :Sb => 121.760,
         
     | 
| 
      
 57 
     | 
    
         
            +
                :Te => 127.60,
         
     | 
| 
      
 58 
     | 
    
         
            +
                :I  => 126.90447,
         
     | 
| 
      
 59 
     | 
    
         
            +
                :Xe => 131.293,
         
     | 
| 
      
 60 
     | 
    
         
            +
                :Cs => 132.90545,
         
     | 
| 
      
 61 
     | 
    
         
            +
                :Ba => 137.327,
         
     | 
| 
      
 62 
     | 
    
         
            +
                :La => 138.9055,
         
     | 
| 
      
 63 
     | 
    
         
            +
                :Ce => 140.116,
         
     | 
| 
      
 64 
     | 
    
         
            +
                :Pr => 140.90765,
         
     | 
| 
      
 65 
     | 
    
         
            +
                :Nd => 144.24,
         
     | 
| 
      
 66 
     | 
    
         
            +
                :Pm => 145,
         
     | 
| 
      
 67 
     | 
    
         
            +
                :Sm => 150.36,
         
     | 
| 
      
 68 
     | 
    
         
            +
                :Eu => 151.964,
         
     | 
| 
      
 69 
     | 
    
         
            +
                :Gd => 157.25,
         
     | 
| 
      
 70 
     | 
    
         
            +
                :Tb => 158.92534,
         
     | 
| 
      
 71 
     | 
    
         
            +
                :Dy => 162.500,
         
     | 
| 
      
 72 
     | 
    
         
            +
                :Ho => 164.93032,
         
     | 
| 
      
 73 
     | 
    
         
            +
                :Er => 167.259,
         
     | 
| 
      
 74 
     | 
    
         
            +
                :Tm => 168.93421,
         
     | 
| 
      
 75 
     | 
    
         
            +
                :Yb => 173.04,
         
     | 
| 
      
 76 
     | 
    
         
            +
                :Lu => 174.967,
         
     | 
| 
      
 77 
     | 
    
         
            +
                :Hf => 178.49,
         
     | 
| 
      
 78 
     | 
    
         
            +
                :Ta => 180.9479,
         
     | 
| 
      
 79 
     | 
    
         
            +
                :W  => 183.84,
         
     | 
| 
      
 80 
     | 
    
         
            +
                :Re => 186.207,
         
     | 
| 
      
 81 
     | 
    
         
            +
                :Os => 190.23,
         
     | 
| 
      
 82 
     | 
    
         
            +
                :Ir => 192.217,
         
     | 
| 
      
 83 
     | 
    
         
            +
                :Pt => 195.078,
         
     | 
| 
      
 84 
     | 
    
         
            +
                :Au => 196.96655,
         
     | 
| 
      
 85 
     | 
    
         
            +
                :Hg => 200.59,
         
     | 
| 
      
 86 
     | 
    
         
            +
                :Tl => 204.3833,
         
     | 
| 
      
 87 
     | 
    
         
            +
                :Pb => 207.2,
         
     | 
| 
      
 88 
     | 
    
         
            +
                :Bi => 208.98038,
         
     | 
| 
      
 89 
     | 
    
         
            +
                :Po => 209,
         
     | 
| 
      
 90 
     | 
    
         
            +
                :At => 210,
         
     | 
| 
      
 91 
     | 
    
         
            +
                :Rn => 222,
         
     | 
| 
      
 92 
     | 
    
         
            +
                :Fr => 223,
         
     | 
| 
      
 93 
     | 
    
         
            +
                :Ra => 226,
         
     | 
| 
      
 94 
     | 
    
         
            +
                :Ac => 227,
         
     | 
| 
      
 95 
     | 
    
         
            +
                :Th => 232.0381,
         
     | 
| 
      
 96 
     | 
    
         
            +
                :Pa => 231.03588,
         
     | 
| 
      
 97 
     | 
    
         
            +
                :U  => 238.02891,
         
     | 
| 
      
 98 
     | 
    
         
            +
                :Np => 237,
         
     | 
| 
      
 99 
     | 
    
         
            +
                :Pu => 244,
         
     | 
| 
      
 100 
     | 
    
         
            +
                :Am => 243,
         
     | 
| 
      
 101 
     | 
    
         
            +
                :Cm => 247,
         
     | 
| 
      
 102 
     | 
    
         
            +
                :Bk => 247,
         
     | 
| 
      
 103 
     | 
    
         
            +
                :Cf => 251,
         
     | 
| 
      
 104 
     | 
    
         
            +
                :Es => 252,
         
     | 
| 
      
 105 
     | 
    
         
            +
                :Fm => 257,
         
     | 
| 
      
 106 
     | 
    
         
            +
                :Md => 258,
         
     | 
| 
      
 107 
     | 
    
         
            +
                :No => 259,
         
     | 
| 
      
 108 
     | 
    
         
            +
                :Lr => 262,
         
     | 
| 
      
 109 
     | 
    
         
            +
                :Rf => 261,
         
     | 
| 
      
 110 
     | 
    
         
            +
                :Db => 262,
         
     | 
| 
      
 111 
     | 
    
         
            +
                :Sg => 266,
         
     | 
| 
      
 112 
     | 
    
         
            +
                :Bh => 264,
         
     | 
| 
      
 113 
     | 
    
         
            +
                :Hs => 277,
         
     | 
| 
      
 114 
     | 
    
         
            +
                :Mt => 268,
         
     | 
| 
      
 115 
     | 
    
         
            +
                :Ds => 281,
         
     | 
| 
      
 116 
     | 
    
         
            +
                :Rg => 272,
         
     | 
| 
      
 117 
     | 
    
         
            +
                :Uub=> 285,
         
     | 
| 
      
 118 
     | 
    
         
            +
                :Uut=> 284,
         
     | 
| 
      
 119 
     | 
    
         
            +
                :Uuq=> 289,
         
     | 
| 
      
 120 
     | 
    
         
            +
                :Uup=> 288,
         
     | 
| 
      
 121 
     | 
    
         
            +
                #116   Uuh    Ununhexium                  see Note above 
         
     | 
| 
      
 122 
     | 
    
         
            +
                #118   Uuo    Ununoctium                  see Note above 
         
     | 
| 
      
 123 
     | 
    
         
            +
              }
         
     | 
| 
      
 124 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,14 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Table of Electro negativity
         
     | 
| 
      
 2 
     | 
    
         
            +
            ElectroNegativity = {:H => 2.20, :He => 0, :Li => 0.98, :Be => 1.57, :B => 2.04, :C => 2.55, :N => 3.04, :O => 3.44, :F => 3.98,
         
     | 
| 
      
 3 
     | 
    
         
            +
              :Ne => 0, :Na => 0.93, :Mg => 1.31, :Al => 1.61, :Si => 1.90, :P => 2.19, :S => 2.58, :Cl => 3.16,
         
     | 
| 
      
 4 
     | 
    
         
            +
              :Ar => 0, :K => 0.82, :Ca => 1.00, :Sc => 1.36, :Ti => 1.54, :V => 1.63, :Cr => 1.66, :Mn => 1.55,
         
     | 
| 
      
 5 
     | 
    
         
            +
              :Fe => 1.83, :Co => 1.88, :Ni => 1.91, :Cu => 1.90, :Zn => 1.65, :Ga => 1.81, :Ge => 2.01, :As => 2.18,
         
     | 
| 
      
 6 
     | 
    
         
            +
              :Se => 2.55, :Br => 2.96, :Kr => 3.00, :Rb => 0.82, :Sr => 0.95, :Y => 1.22, :Zr => 1.33, :Nb => 1.6,
         
     | 
| 
      
 7 
     | 
    
         
            +
              :Mo => 2.16, :Tc => 1.9, :Ru => 2.2, :Rh => 2.28, :Pd => 2.20, :Ag => 1.93, :Cd => 1.69, :In => 1.78,
         
     | 
| 
      
 8 
     | 
    
         
            +
              :Sn => 1.96, :Sb => 2.05, :Te => 2.1, :I => 2.66, :Xe => 2.6, :Cs => 0.79, :Ba => 0.89, :Lu => 1.27,
         
     | 
| 
      
 9 
     | 
    
         
            +
              :Hf => 1.3, :Ta => 1.5, :W => 2.36, :Re => 1.9, :Os => 2.2, :Ir => 2.20, :Pt => 2.28, :Au => 2.54,
         
     | 
| 
      
 10 
     | 
    
         
            +
              :Hg => 2.00, :Tl => 1.62, :Pb => 2.33, :Bi => 2.02, :Po => 2.0, :At => 2.2, :Rn => 0, :Fr => 0.7,
         
     | 
| 
      
 11 
     | 
    
         
            +
              :Ra => 0.9, :Lr => 0, :Rf => 0, :Db => 0, :Sg => 0, :Bh => 0, :Hs => 0, :Mt => 0,
         
     | 
| 
      
 12 
     | 
    
         
            +
              :Ds => 0, :Rg => 0, :Uub => 0, :Uut => 0, :Uuq => 0, :Uup => 0, :Uuh => 0, :Uus => 0,
         
     | 
| 
      
 13 
     | 
    
         
            +
              :Uuo => 0,
         
     | 
| 
      
 14 
     | 
    
         
            +
              :R => 2.55, :* => 2.55}# special atoms are tree as carbon
         
     | 
| 
         @@ -0,0 +1,6 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            module Chem
         
     | 
| 
      
 3 
     | 
    
         
            +
              Element2Number = {:Bk=>97, :Si=>14, :In=>49, :Fr=>87, :V=>23, :Na=>11, :Tb=>65, :Po=>84, :Pd=>46, :Al=>13, :Ho=>67, :Ba=>56, :As=>33, :Rn=>86, :Nb=>41, :Hg=>80, :P=>15, :Bi=>83, :Be=>4, :Ru=>44, :S=>16, :O=>8, :Ra=>88, :Es=>99, :Xe=>54, :He=>2, :N=>7, :Am=>95, :Pr=>59, :Er=>68, :Au=>79, :Rh=>45, :Ce=>58, :Tm=>69, :Gd=>64, :Ir=>77, :Sr=>38, :La=>57, :Cm=>96, :Ca=>20, :C=>6, :Sm=>62, :Hf=>72, :Ag=>47, :At=>85, :F=>9, :Tc=>43, :Zn=>30, :Lu=>71, :B=>5, :Np=>93, :Ga=>31, :XX=>101, :Sn=>50, :Os=>76, :Eu=>63, :Dy=>66, :Yb=>70, :K=>19, :Tl=>81, :I=>53, :Ar=>18, :Th=>90, :Zr=>40, :Pt=>78, :Fe=>26, :Ge=>32, :Cr=>24, :Cf=>98, :Kr=>36, :Rb=>37, :ZZ=>103, :Ta=>73, :W=>74, :Sc=>21, :Mn=>25, :Pu=>94, :Mg=>12, :Se=>34, :Ti=>22, :Cd=>48, :Sb=>51, :Fm=>100, :Cs=>55, :Nd=>60, :Co=>27, :Pb=>82, :Cl=>17, :Cu=>29, :Y=>39, :Re=>75, :U=>92, :Pa=>91, :Mo=>42, :H=>1, :D=>0, :Te=>52, :Li=>3, :Br=>35, :YY=>102, :Pm=>61, :Ac=>89, :Ni=>28, :Ne=>10}
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              Number2Element = [:D, :H, :He, :Li, :Be, :B, :C, :N, :O, :F, :Ne, :Na, :Mg, :Al, :Si, :P, :S, :Cl, :Ar, :K, :Ca, :Sc, :Ti, :V, :Cr, :Mn, :Fe, :Co, :Ni, :Cu, :Zn, :Ga, :Ge, :As, :Se, :Br, :Kr, :Rb, :Sr, :Y, :Zr, :Nb, :Mo, :Tc, :Ru, :Rh, :Pd, :Ag, :Cd, :In, :Sn, :Sb, :Te, :I, :Xe, :Cs, :Ba, :La, :Ce, :Pr, :Nd, :Pm, :Sm, :Eu, :Gd, :Tb, :Dy, :Ho, :Er, :Tm, :Yb, :Lu, :Hf, :Ta, :W, :Re, :Os, :Ir, :Pt, :Au, :Hg, :Tl, :Pb, :Bi, :Po, :At, :Rn, :Fr, :Ra, :Ac, :Th, :Pa, :U, :Np, :Pu, :Am, :Cm, :Bk, :Cf, :Es, :Fm, :XX, :YY, :ZZ]
         
     | 
| 
      
 6 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            PrimeNumber = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639, 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939, 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361, 6367, 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, 6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103, 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499, 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919]
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            $vdw={"Ag"=>1.72, "Ar"=>1.88, "As"=>1.85, "Au"=>1.66, "Br"=>1.85, "C"=>1.70, "Cd"=>1.58, "Cl"=>1.75, "Cu"=>1.40, "F"=>1.47, "Ga"=>1.87, "H"=>1.20, "He"=>1.40, "Hg"=>1.55, "I"=>1.98, "In"=>1.93, "K"=>2.75, "Kr"=>2.02, "Li"=>1.82, "Mg"=>1.73, "N"=>1.55, "Na"=>2.27, "Ne"=>1.54, "Ni"=>1.63, "O"=>1.52, "P"=>1.80, "Pb"=>2.02, "Pd"=>1.63, "Pt"=>1.72, "S"=>1.80, "Se"=>1.90, "Si"=>2.10, "Sn"=>2.17, "Te"=>2.06, "Tl"=>1.96, "U"=>1.86, "Xe"=>2.16, "Zn"=>1.39}
         
     | 
    
        data/lib/chem/db.rb
    ADDED
    
    | 
         @@ -0,0 +1,64 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
             
     | 
| 
      
 2 
     | 
    
         
            +
            #require 'chem/db/smiles'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Chem
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              ChemTypeRegistry = []
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              module Db
         
     | 
| 
      
 9 
     | 
    
         
            +
                module_function
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                # Load type files
         
     | 
| 
      
 13 
     | 
    
         
            +
                # User would not call this method
         
     | 
| 
      
 14 
     | 
    
         
            +
                def load # :nodoc
         
     | 
| 
      
 15 
     | 
    
         
            +
                  $LOAD_PATH.each do |path|
         
     | 
| 
      
 16 
     | 
    
         
            +
                    dir = File.join(path, 'chem/db/types')
         
     | 
| 
      
 17 
     | 
    
         
            +
                    next unless File.directory?(dir)
         
     | 
| 
      
 18 
     | 
    
         
            +
                    Dir.entries(dir).each do |entry|
         
     | 
| 
      
 19 
     | 
    
         
            +
                      if File.extname(entry) == ".rb" and not /^_/.match(entry)
         
     | 
| 
      
 20 
     | 
    
         
            +
                        begin
         
     | 
| 
      
 21 
     | 
    
         
            +
                          require(File.join(dir, entry))
         
     | 
| 
      
 22 
     | 
    
         
            +
                        rescue LoadError => e
         
     | 
| 
      
 23 
     | 
    
         
            +
                        end
         
     | 
| 
      
 24 
     | 
    
         
            +
                      end
         
     | 
| 
      
 25 
     | 
    
         
            +
                    end
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            Chem::Db::load
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            __END__
         
     | 
| 
      
 36 
     | 
    
         
            +
            # Following script is obsolete
         
     | 
| 
      
 37 
     | 
    
         
            +
            # auto.rb is maintained manually
         
     | 
| 
      
 38 
     | 
    
         
            +
            #
         
     | 
| 
      
 39 
     | 
    
         
            +
            # if $0 == __FILE__
         
     | 
| 
      
 40 
     | 
    
         
            +
            #   $: << ".."
         
     | 
| 
      
 41 
     | 
    
         
            +
            #   $: << "../../ext"
         
     | 
| 
      
 42 
     | 
    
         
            +
            #   require 'chem'
         
     | 
| 
      
 43 
     | 
    
         
            +
            #   require 'find'
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
            #   open("db/auto.rb", "w") do |out|
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
            #     out.puts "["
         
     | 
| 
      
 48 
     | 
    
         
            +
            #     puts "List all classes that require autoload"
         
     | 
| 
      
 49 
     | 
    
         
            +
            #     Find.find("db/") do |file|
         
     | 
| 
      
 50 
     | 
    
         
            +
            #       Find.prune if /\.svn/.match(file) or /~/.match(file) or /\.ry/.match(file)
         
     | 
| 
      
 51 
     | 
    
         
            +
            #       next if File.directory?(file)
         
     | 
| 
      
 52 
     | 
    
         
            +
            #       open(file) do |input|
         
     | 
| 
      
 53 
     | 
    
         
            +
            #         input.each do |line|
         
     | 
| 
      
 54 
     | 
    
         
            +
            #           if m = / class +([^ ]+)/.match(line)
         
     | 
| 
      
 55 
     | 
    
         
            +
            #             out.puts "  [:%-30s , 'chem/%s']," % [m[1].chop, file.strip]
         
     | 
| 
      
 56 
     | 
    
         
            +
            #           end
         
     | 
| 
      
 57 
     | 
    
         
            +
            #         end
         
     | 
| 
      
 58 
     | 
    
         
            +
            #       end
         
     | 
| 
      
 59 
     | 
    
         
            +
            #     end
         
     | 
| 
      
 60 
     | 
    
         
            +
            #     out.puts "].each do |mod, file|"
         
     | 
| 
      
 61 
     | 
    
         
            +
            #     out.puts "  Chem.autoload mod, file"
         
     | 
| 
      
 62 
     | 
    
         
            +
            #     out.puts "end"
         
     | 
| 
      
 63 
     | 
    
         
            +
            #   end
         
     | 
| 
      
 64 
     | 
    
         
            +
            # end
         
     |