Module: Chem

Defined in:
lib/chem/db.rb,
lib/chem.rb,
lib/chem/model.rb,
lib/chem/db/cdx.rb,
lib/chem/db/eps.rb,
lib/chem/db/g98.rb,
lib/chem/db/kcf.rb,
lib/chem/db/mdl.rb,
lib/chem/db/msi.rb,
lib/chem/db/pdf.rb,
lib/chem/db/sdf.rb,
lib/chem/db/swf.rb,
lib/chem/db/xyz.rb,
lib/chem/db/kegg.rb,
lib/chem/db/smbl.rb,
lib/chem/db/gspan.rb,
lib/chem/db/mopac.rb,
lib/chem/db/sybyl.rb,
lib/chem/db/cansmi.rb,
lib/chem/db/tinker.rb,
lib/chem/db/vector.rb,
lib/chem/utils/sub.rb,
lib/chem/db/pdb_dic.rb,
lib/chem/db/pubchem.rb,
lib/chem/db/rmagick.rb,
lib/chem/utils/prop.rb,
lib/chem/utils/sssr.rb,
lib/chem/db/kcf_glycan.rb,
lib/chem/utils/ullmann.rb,
lib/chem/model/skeleton.rb,
lib/chem/utils/geometry.rb,
lib/chem/utils/traverse.rb,
lib/chem/utils/transform.rb,
lib/chem/db/types/type_cdx.rb,
lib/chem/db/types/type_kcf.rb,
lib/chem/db/types/type_mdl.rb,
lib/chem/db/types/type_pdf.rb,
lib/chem/db/types/type_png.rb,
lib/chem/db/types/type_rxn.rb,
lib/chem/db/types/type_sdf.rb,
lib/chem/db/types/type_xyz.rb,
lib/chem/data/atomic_weight.rb,
lib/chem/db/types/type_kegg.rb,
lib/chem/appl/tinker/nucleic.rb,
lib/chem/data/periodic_table.rb,
lib/chem/db/smiles/smiparser.rb,
lib/chem/db/types/type_gspan.rb,
lib/chem/db/types/type_sybyl.rb,
lib/chem/db/types/type_cansmi.rb,
lib/chem/db/types/type_kcf_glycan.rb

Overview

Table of atomic weight extracted from www.chem.qmul.ac.uk/iupac/AtWt/index.html

Defined Under Namespace

Modules: Atom, Bond, CDX, Db, G98, KEGG, MDL, MSI, Molecule, Mopac7, PubChem, Reaction, SMBL, Sybyl, TINKER, Transform, Type, Writer, XYZ Classes: GSpan, GSpanAtom, GSpanBond, GSpanMolecule, PDFWriter, PdbDic, RMagickWriter, ReactionSkeleton, Ring, SWFWriter, SkeletonAtom, SmilesAtom, SmilesBond, SmilesMol, TinkerNucleic

Constant Summary collapse

ChemTypeRegistry =
[]
AtomicWeight =
{
  :H => 1.00794,
  :He => 4.002602,
  :Li => 6.941,
  :Be => 9.012182,
  :B  => 10.811,
  :C  => 12.0107,
  :N  => 14.0067,
  :O  => 15.9994,
  :F  => 18.9984032,
  :Ne => 20.1797,
  :Na => 22.989770,
  :Mg => 24.3050,
  :Al => 26.981538,
  :Si => 28.0855,
  :P  => 30.973761,
  :S  => 32.065,
  :Cl => 35.453,
  :Ar => 39.948,
  :K  => 39.0983,
  :Ca => 40.078,
  :Sc => 44.955910,
  :Ti => 47.867,
  :V  => 50.9415,
  :Cr => 51.9961,
  :Mn => 54.938049,
  :Fe => 55.845,
  :Co => 58.933200,
  :Ni => 58.6934,
  :Cu => 63.546,
  :Zn => 65.409,
  :Ga => 69.723,
  :Ge => 72.64,
  :As => 74.92160,
  :Se => 78.96,
  :Br => 79.904,
  :Kr => 83.798,
  :Rb => 85.4678,
  :Sr => 87.62,
  :Y  => 88.90585,
  :Zr => 91.224,
  :Nb => 92.90638,
  :Mo => 95.94,
  :Tc => 98,
  :Ru => 101.07,
  :Rh => 102.90550,
  :Pd => 106.42,
  :Ag => 107.8682,
  :Cd => 112.411,
  :In => 114.818,
  :Sn => 118.710,
  :Sb => 121.760,
  :Te => 127.60,
  :I  => 126.90447,
  :Xe => 131.293,
  :Cs => 132.90545,
  :Ba => 137.327,
  :La => 138.9055,
  :Ce => 140.116,
  :Pr => 140.90765,
  :Nd => 144.24,
  :Pm => 145,
  :Sm => 150.36,
  :Eu => 151.964,
  :Gd => 157.25,
  :Tb => 158.92534,
  :Dy => 162.500,
  :Ho => 164.93032,
  :Er => 167.259,
  :Tm => 168.93421,
  :Yb => 173.04,
  :Lu => 174.967,
  :Hf => 178.49,
  :Ta => 180.9479,
  :W  => 183.84,
  :Re => 186.207,
  :Os => 190.23,
  :Ir => 192.217,
  :Pt => 195.078,
  :Au => 196.96655,
  :Hg => 200.59,
  :Tl => 204.3833,
  :Pb => 207.2,
  :Bi => 208.98038,
  :Po => 209,
  :At => 210,
  :Rn => 222,
  :Fr => 223,
  :Ra => 226,
  :Ac => 227,
  :Th => 232.0381,
  :Pa => 231.03588,
  :U  => 238.02891,
  :Np => 237,
  :Pu => 244,
  :Am => 243,
  :Cm => 247,
  :Bk => 247,
  :Cf => 251,
  :Es => 252,
  :Fm => 257,
  :Md => 258,
  :No => 259,
  :Lr => 262,
  :Rf => 261,
  :Db => 262,
  :Sg => 266,
  :Bh => 264,
  :Hs => 277,
  :Mt => 268,
  :Ds => 281,
  :Rg => 272,
  :Uub=> 285,
  :Uut=> 284,
  :Uuq=> 289,
  :Uup=> 288,
  #116   Uuh    Ununhexium                  see Note above 
  #118   Uuo    Ununoctium                  see Note above 
}
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}
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]

Class Method Summary collapse

Class Method Details

.autodetect(file) ⇒ Object

format_class = Chem.autodetect(“file.mol”)

Automatically detect file type and returns appropriate class to parse it



50
51
52
# File 'lib/chem.rb', line 50

def self.autodetect file
  ChemTypeRegistry.find{|format| format.detect_file file}
end

.find_first(str) ⇒ Object

returns first entry



42
43
44
# File 'lib/chem.rb', line 42

def find_first str
  p str
end

.open_kegg(dir) ⇒ Object



87
88
89
90
# File 'lib/chem.rb', line 87

def open_kegg dir
  require 'chem/db/kegg'
  Chem::KEGG::KeggDirectory.new(dir)
end

.open_mol(file, format_type = nil) ⇒ Object Also known as: parse_file

Makes possible to open chemical files. Guesses the file type based on the extension of the file name.

Examples : So if the file name is “benzene.mol”,

mol = Chem.open_mol(“benzene.mol”) # returns MDLMolecule object

Raises:

  • (NotImplementedError)


61
62
63
64
65
66
67
68
69
70
# File 'lib/chem.rb', line 61

def open_mol file, format_type = nil
  format = nil
  if format_type == nil
    format = Chem.autodetect(file)
  else
    format = ChemTypeRegistry.find{|format| format.detect_type format_type}
  end
  raise NotImplementedError unless format
  return format.parse(file) if format
end

.parse_gspan(file) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/chem/db/gspan.rb', line 103

def self.parse_gspan file
  t = "t"[0]
  v = "v"[0]
  e = "e"[0]

  mols = []
  mol = GSpanMolecule.new

  open(file).each do |line|
    case line[0]
    when t
      mol = GSpanMolecule.new
      mols.push(mol)
    when v
      mol.nodes.push(GSpanAtom.parse_line(line))
    when e
      ary = line.split
      node1 = mol.nodes[ary[1].to_i]
      node2 = mol.nodes[ary[2].to_i]
      mol.edges.push([GSpanBond.new(ary[3].to_i), node1, node2])
    else
    end
  end
  mols
end

.parse_smiles(smiles) ⇒ Object



81
82
83
84
85
# File 'lib/chem.rb', line 81

def parse_smiles smiles
  require 'chem/db/smiles'
  require 'chem/db/smiles/smiparser'
  ::SmilesParser.parse_smiles(smiles)
end

.save(array, filename) ⇒ Object



76
77
78
79
# File 'lib/chem.rb', line 76

def self.save(array, filename)
  format = autodetect filename
  format.save(array, filename)
end