Module: Chem

Defined in:
lib/chem.rb,
lib/chem/db.rb,
lib/chem/db/gd.rb,
lib/chem/model.rb,
lib/chem/utils.rb,
lib/chem/db/cdx.rb,
lib/chem/db/cml.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/pdb.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/opsin.rb,
lib/chem/db/sybyl.rb,
lib/chem/db/cansmi.rb,
lib/chem/db/tinker.rb,
lib/chem/db/vector.rb,
lib/chem/utils/cdk.rb,
lib/chem/utils/net.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_rpair.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/openbabel.rb,
lib/chem/utils/transform.rb,
lib/chem/db/types/type_gd.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_rdf.rb,
lib/chem/db/types/type_rxn.rb,
lib/chem/db/types/type_sdf.rb,
lib/chem/db/types/type_xyz.rb,
lib/chem/utils/fingerprint.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,
ext/subcomp.c

Overview

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

Defined Under Namespace

Modules: Atom, Bond, CDK, CDX, Db, G98, KCF, KCFRPairType, KEGG, MDL, MSI, Molecule, Mopac7, NetUtils, OpenBabel, PDB, Reaction, SMBL, Sybyl, TINKER, Transform, Type, Writer, XYZ Classes: BitMatrix, CMLAtom, CMLBond, CMLMolecule, CompoundDB, GDWriter, GSpan, GSpanAtom, GSpanBond, GSpanMolecule, KEGGException, NCBI, OpsinMolecule, PDFWriter, PdbDic, RMagickWriter, ReactionSkeleton, Ring, SWFWriter, SkeletonAtom, SmilesAtom, SmilesBond, SmilesMol, TinkerNucleic

Constant Summary collapse

DefaultDataDir =
File.join(ENV["HOME"], "data")
ChemTypeRegistry =
[]
HierarchicElementCounts =

Section 1.

{
  :H => [
    [4, 0],
    [8, 1],
    [16, 2],
    [32, 3]],
  :Li => [
    [ 1, 4],
    [ 2, 5]],
  :B => [
    [ 1, 6],
    [ 2, 7],
    [ 4, 8]],
  :C => [
    [ 2, 9],
    [ 4, 10],
    [ 8, 11],
    [ 16, 12],
    [ 32, 13]],
  :N => [
    [ 1, 14],
    [ 2, 15],
    [ 4, 16],
    [ 8, 17]],
  :O => [
    [ 1, 18],
    [ 2, 19],
    [ 4, 20],
    [ 8, 21],
    [ 16, 22]],
  :F => [
    [ 1, 23],
    [ 2, 24],
    [ 4, 25]],
  :Na => [
    [ 1, 26],
    [ 2, 27]],
  :Si => [
    [ 1, 28],
    [ 2, 29]],
  :P => [
    [ 1, 30],
    [ 2, 31],
    [ 4, 32]],
  :S => [
    [ 1, 33],
    [ 2, 34],
    [ 4, 35],
    [ 8, 36]],
  :Cl => [
    [ 1, 37],
    [ 2, 38],
    [ 4, 39],
    [ 8, 40]],
  :K => [
    [ 1, 41],
    [ 2, 42]],
  :Br => [
    [ 1, 43],
    [ 2, 44],
    [ 4, 45]],
  :I => [
    [ 1, 46],
    [ 2, 47],
    [ 4, 48]],
  :Be => [[ 1, 49 ]],
  :Mg => [[ 1, 50]],
  :Al => [[ 1, 51]],
  :Ca => [[ 1, 52]],
  :Sc => [[ 1, 53]],
  :Ti => [[ 1, 54]],
  :V => [[ 1, 55]],
  :Cr => [[ 1, 56]],
  :Mn => [[ 1, 57]],
  :Fe => [[ 1, 58]],
  :Co => [[ 1, 59]],
  :Ni => [[ 1, 60]],
  :Cu => [[ 1, 61]],
  :Zn => [[ 1, 62]],
  :Ga => [[ 1, 63]],
  :Ge => [[ 1, 64]],
  :As => [[ 1, 65]],
  :Se => [[ 1, 66]],
  :Kr => [[ 1, 67]],
  :Rb => [[ 1, 68]],
  :Sr => [[ 1, 69]],
  :Y => [[ 1, 70]],
  :Zr => [[ 1, 71]],
  :Nb => [[ 1, 72]],
  :Mo => [[ 1, 73]],
  :Ru => [[ 1, 74]],
  :Rh => [[ 1, 75]],
  :Pd => [[ 1, 76]],
  :Ag => [[ 1, 77]],
  :Cd => [[ 1, 78]],
  :In => [[ 1, 79]],
  :Sn => [[ 1, 80]],
  :Sb => [[ 1, 81]],
  :Te => [[ 1, 82]],
  :Xe => [[ 1, 83]],
  :Cs => [[ 1, 84]],
  :Ba => [[ 1, 85]],
  :Lu => [[ 1, 86]],
  :Hf => [[ 1, 87]],
  :Ta => [[ 1, 88]],
  :W => [[ 1, 89]],
  :Re => [[ 1, 90]],
  :Os => [[ 1, 91]],
  :Ir => [[ 1, 92]],
  :Pt => [[ 1, 93]],
  :Au => [[ 1, 94]],
  :Hg => [[ 1, 95]],
  :Tl => [[ 1, 96]],
  :Pb => [[ 1, 97]],
  :Bi => [[ 1, 98]],
  :La => [[ 1, 99]],
  :Ce => [[ 1, 100]],
  :Pr => [[ 1, 101]],
  :Nd => [[ 1, 102]],
  :Pm => [[ 1, 103]],
  :Sm => [[ 1, 104]],
  :Eu => [[ 1, 105]],
  :Gd => [[ 1, 106]],
  :Tb => [[ 1, 107]],
  :Dy => [[ 1, 108]],
  :Ho => [[ 1, 109]],
  :Er => [[ 1, 110]],
  :Tm => [[ 1, 111]],
  :Yb => [[ 1, 112]],
  :Tc => [[ 1, 113]],
  :U => [[ 1, 114]],
}
Section3 =

Section 3

{
  'H-Li'  => 263,
  'Li-Li' => 264,
  'B-Li'  => 265,
  'C-Li'  => 266,
  'Li-O'  => 267,
  'F-Li'  => 268,
  'Li-P'  => 269,
  'Li-S'  => 270,
  'Cl-Li' => 271,
  'B-H'   => 272,
  'B-B'   => 273,
  'B-C'   => 274,
  'B-N'   => 275,
  'B-O'   => 276,
  'B-F'   => 277,
  'B-Si'  => 278,
  'B-P'   => 279,
  'B-S'   => 280,
  'B-Cl'  => 281,
  'B-Br'  => 282,
  'C-H'   => 283,
  'C-C'   => 284,
  'C-N'   => 285,
  'C-O'   => 286,
  'C-F'   => 287,
  'C-Na'  => 288,
  'C-Mg'  => 289,
  'Al-C'  => 290,
  'C-Si'  => 291,
  'C-P'   => 292,
  'C-S'   => 293,
  'C-Cl'  => 294,
  'As-C'  => 295,
  'C-Se'  => 296,
  'Br-C'  => 297,
  'C-I'   => 298,
  'H-N'   => 299,
  'N-N'   => 300,
  'N-O'   => 301,
  'F-N'   => 302,
  'N-Si'  => 303,
  'N-P'   => 304,
  'N-S'   => 305,
  'Cl-N'  => 306,
  'Br-N'  => 307,
  'H-O'   => 308,
  'O-O'   => 309,
  'Mg-O'  => 310,
  'Na-O'  => 311,
  'Al-O'  => 312,
  'O-Si'  => 313,
  'O-P'   => 314,
  'K-O'   => 315,
  'F-P'   => 316,
  'F-S'   => 317,
  'Al-H'  => 318,
  'Al-Cl' => 319,
  'H-Si'  => 320,
  'Si-Si' => 321,
  'Cl-Si' => 322,
  'H-P'   => 323,
  'P-P'   => 324,
  'As-H'  => 325,
  'As-As' => 326,
}
Section4 =

Section 4 Simple atom nearest neighbors

{
  :C => [
    ["-Br", "-C", 327],
    ["-Br", "-C", "-C", 328],
    ["-Br", "-H", 329],
    ["-Br", "~C", 330],
    ["-Br", "~N", 331],
    ["-C", "-C", 332],
    ["-C", "-C", "-C", 333],
    ["-C", "-C", "-C", "-C", 334],
    ["-C", "-C", "-C", "-H", 335],
    ["-C", "-C", "-C", "-N", 336],
    ["-C", "-C", "-C", "-O", 337],
    ["-C", "-C", "-H", "-N", 338],
    ["-C", "-C", "-H", "-O", 339],
    ["-C", "-C", "-N", 340],
    ["-C", "-C", "-O", 341],
    ["-C", "-Cl", 342],
    ["-C", "-Cl", "-H", 343],
    ["-C", "-H", 344],
    ["-C", "-H", "-N", 345],
    ["-C", "-H", "-O", 346],
    ["-C", "-H", "-O", "-O", 347],
    ["-C", "-H", "-P", 348],
    ["-C", "-H", "-S", 349],
    ["-C", "-I", 350],
    ["-C", "-N", 351],
    ["-C", "-O", 352],
    ["-C", "-S", 353],
    ["-C", "-Si", 354],
    ["-C", "~C", 355],
    ["-C", "~C", "~C", 356],
    ["-C", "~C", "~N", 357],
    ["-C", "~N", 358],
    ["-C", "~N", "~N", 359],
    ["-Cl", "-Cl", 360],
    ["-Cl", "-H", 361],
    ["-Cl", "~C", 362],
    ["-F", "-F", 363],
    ["-F", "~C", 364],
    ["-H", "-N", 365],
    ["-H", "-O", 366],
    ["-H", "-O", "-O", 367],
    ["-H", "-S", 368],
    ["-H", "-Si", 369],
    ["-H", "~C", 370],
    ["-H", "~C", "~C", 371],
    ["-H", "~C", "~N", 372],
    ["-H", "~N", 373],
    ["-H", "-H", "-H", 374],
    ["-N", "-N", 375],
    ["-N", "~C", 376],
    ["-N", "~C", "~C", 377],
    ["-N", "~C", "~N", 378],
    ["-N", "~N", 379],
    ["-O", "-O", 380],
    ["-O", "~C", 381],
    ["-O", "~C", "~C", 382],
    ["-S", "~C", 383],
    ["~C", "~C", 384],
    ["~C", "~C", "~C", 385],
    ["~C", "~C", "~N", 386],
    ["~C", "~N", 387],
    ["~C", "~N", "~N", 388],
    ["~N", "~N", 389]],
  :N => [
    ["-C", "-C", 390],
    ["-C", "-C", "-C", 391],
    ["-C", "-C", "-H", 392],
    ["-C", "-H", 393],
    ["-C", "-H", "-N", 394],
    ["-C", "-O", 395],
    ["-C", "~C", 396],
    ["-C", "~C", "~C", 397],
    ["-H", "-N", 398],
    ["-H", "~C", 399],
    ["-H", "~C", "~C", 400],
    ["-O", "-O", 401],
    ["-O", "~O", 402],
    ["~C", "~C", 403],
    ["~C", "~C", "~C", 404]],
  :O => [
    ["-C", "-C", 405],
    ["-C", "-H", 406],
    ["-C", "-P", 407],
    ["-H", "-S", 408],
    ["~C", "~C", 409]],
  :P => [
    ["-C", "-C", 410],
    ["-O", "-O", 411]],
  :S => [
    ["-C", "-C", 412],
    ["-C", "-H", 413],
    ["-C", "-O", 414]],
  :Si => [
    ["-C", "-C", 415]
  ]
}
Section6 =

Section 6 Simple SMARTS patterns

{
  "C-C-C#C" => 460,
  "O-C-C=N" => 461,
  "O-C-C=O" => 462,
  "N:C-S-[#1]" => 463,
  "N-C-C=C" => 464,
  "O=S-C-C" => 465,
  "N#C-C=C" => 466,
  "C=N-N-C" => 467,
  "O=S-C-N" => 468,
  "S-S-C:C" => 469,
  "C:C-C=C" => 470,
  "S:C:C:C" => 471,
  "C:N:C-C" => 472,
  "S-C:N:C" => 473,
  "S:C:C:N" => 474,
  "S-C=N-C" => 475,
  "C-O-C=C" => 476,
  "N-N-C:C" => 477,
  "S-C=N-[#1]" => 478,
  "S-C-S-C" => 479,
  "C:S:C-C" => 480,
  "O-S-C:C" => 481,
  "C:N-C:C" => 482,
  "N-S-C:C" => 483,
  "N-C:N:C" => 484,
  "N:C:C:N" => 485,
  "N-C:N:N" => 486,
  "N-C=N-C" => 487,
  "N-C=N-[#1]" => 488,
  "N-C-S-C" => 489,
  "C-C-C=C" => 490,
  "C-N:C-[#1]" => 491,
  "N-C:O:C" => 492,
  "O=C-C:C" => 493,
  "O=C-C:N" => 494,
  "C-N-C:C" => 495,
  "N:N-C-[#1]" => 496,
  "O-C:C:N" => 497,
  "O-C=C-C" => 498,
  "N-C:C:N" => 499,
  "C-S-C:C" => 500,
  "Cl-C:C-C" => 501,
  "N-C=C-[#1]" => 502,
  "Cl-C:C-[#1]" => 503,
  "N:C:N-C" => 504,
  "Cl-C:C-O" => 505,
  "C-C:N:C" => 506,
  "C-C-S-C" => 507,
  "S=C-N-C" => 508,
  "Br-C:C-C" => 509,
  "[#1]-N-N-[#1]" => 510,
  "S=C-N-[#1]" => 511,
  "C-[As]-O-[#1]" => 512,
  "S:C:C-[#1]" => 513,
  "O-N-C-C" => 514,
  "N-N-C-C" => 515,
  "[#1]-C=C-[#1]" => 516,
  "N-N-C-N" => 517,
  "O=C-N-N" => 518,
  "N=C-N-C" => 519,
  "C=C-C:C" => 520,
  "C:N-C-[#1]" => 521,
  "C-N-N-[#1]" => 522,
  "N:C:C-C" => 523,
  "C-C=C-C" => 524,
  "[As]-C:C-[#1]" => 525,
  "Cl-C:C-Cl" => 526,
  "C:C:N-[#1]" => 527,
  "[#1]-N-C-[#1]" => 528,
  "Cl-C-C-Cl" => 529,
  "N:C-C:C" => 530,
  "S-C:C-C" => 531,
  "S-C:C-[#1]" => 532,
  "S-C:C-N" => 533,
  "S-C:C-O" => 534,
  "O=C-C-C" => 535,
  "O=C-C-N" => 536,
  "O=C-C-O" => 537,
  "N=C-C-C" => 538,
  "N=C-C-[#1]" => 539,
  "C-N-C-[#1]" => 540,
  "O-C:C-C" => 541,
  "O-C:C-[#1]" => 542,
  "O-C:C-N" => 543,
  "O-C:C-O" => 544,
  "N-C:C-C" => 545,
  "N-C:C-[#1]" => 546,
  "N-C:C-N" => 547,
  "O-C-C:C" => 548,
  "N-C-C:C" => 549,
  "Cl-C-C-C" => 550,
  "Cl-C-C-O" => 551,
  "C:C-C:C" => 552,
  "O=C-C=C" => 553,
  "Br-C-C-C" => 554,
  "N=C-C=C" => 555,
  "C=C-C-C" => 556,
  "N:C-O-[#1]" => 557,
  "O=N-C:C" => 558,
  "O-C-N-[#1]" => 559,
  "N-C-N-C" => 560,
  "Cl-C-C=O" => 561,
  "Br-C-C=O" => 562,
  "O-C-O-C" => 563,
  "C=C-C=C" => 564,
  "C:C-O-C" => 565,
  "O-C-C-N" => 566,
  "O-C-C-O" => 567,
  "N#C-C-C" => 568,
  "N-C-C-N" => 569,
  "C:C-C-C" => 570,
  "[#1]-C-O-[#1]" => 571,
  "N:C:N:C" => 572,
  "O-C-C=C" => 573,
  "O-C-C:C-C" => 574,
  "O-C-C:C-O" => 575,
  "N=C-C:C-[#1]" => 576,
  "C:C-N-C:C" => 577,
  "C-C:C-C:C" => 578,
  "O=C-C-C-C" => 579,
  "O=C-C-C-N" => 580,
  "O=C-C-C-O" => 581,
  "C-C-C-C-C" => 582,
  "Cl-C:C-O-C" => 583,
  "C:C-C=C-C" => 584,
  "C-C:C-N-C" => 585,
  "C-S-C-C-C" => 586,
  "N-C:C-O-[#1]" => 587,
  "O=C-C-C=O" => 588,
  "C-C:C-O-C" => 589,
  "C-C:C-O-[#1]" => 590,
  "Cl-C-C-C-C" => 591,
  "N-C-C-C-C" => 592,
  "N-C-C-C-N" => 593,
  "C-O-C-C=C" => 594,
  "C:C-C-C-C" => 595,
  "N=C-N-C-C" => 596,
  "O=C-C-C:C" => 597,
  "Cl-C:C:C-C" => 598,
  "[#1]-C-C=C-[#1]" => 599,
  "N-C:C:C-C" => 600,
  "N-C:C:C-N" => 601,
  "O=C-C-N-C" => 602,
  "C-C:C:C-C" => 603,
  "C-O-C-C:C" => 604,
  "O=C-C-O-C" => 605,
  "O-C:C-C-C" => 606,
  "N-C-C-C:C" => 607,
  "C-C-C-C:C" => 608,
  "Cl-C-C-N-C" => 609,
  "C-O-C-O-C" => 610,
  "N-C-C-N-C" => 611,
  "N-C-O-C-C" => 612,
  "C-N-C-C-C" => 613,
  "C-C-O-C-C" => 614,
  "N-C-C-O-C" => 615,
  "C:C:N:N:C" => 616,
  "C-C-C-O-[#1]" => 617,
  "C:C-C-C:C" => 618,
  "O-C-C=C-C" => 619,
  "C:C-O-C-C" => 620,
  "N-C:C:C:N" => 621,
  "O=C-O-C:C" => 622,
  "O=C-C:C-C" => 623,
  "O=C-C:C-N" => 624,
  "O=C-C:C-O" => 625,
  "C-O-C:C-C" => 626,
  "O=[As]-C:C:C" => 627,
  "C-N-C-C:C" => 628,
  "S-C:C:C-N" => 629,
  "O-C:C-O-C" => 630,
  "O-C:C-O-[#1]" => 631,
  "C-C-O-C:C" => 632,
  "N-C-C:C-C" => 633,
  "C-C-C:C-C" => 634,
  "N-N-C-N-[#1]" => 635,
  "C-N-C-N-C" => 636,
  "O-C-C-C-C" => 637,
  "O-C-C-C-N" => 638,
  "O-C-C-C-O" => 639,
  "C=C-C-C-C" => 640,
  "O-C-C-C=C" => 641,
  "O-C-C-C=O" => 642,
  "[#1]-C-C-N-[#1]" => 643,
  "C-C=N-N-C" => 644,
  "O=C-N-C-C" => 645,
  "O=C-N-C-[#1]" => 646,
  "O=C-N-C-N" => 647,
  "O=N-C:C-N" => 648,
  "O=N-C:C-O" => 649,
  "O=C-N-C=O" => 650,
  "O-C:C:C-C" => 651,
  "O-C:C:C-N" => 652,
  "O-C:C:C-O" => 653,
  "N-C-N-C-C" => 654,
  "O-C-C-C:C" => 655,
  "C-C-N-C-C" => 656,
  "C-N-C:C-C" => 657,
  "C-C-S-C-C" => 658,
  "O-C-C-N-C" => 659,
  "C-C=C-C-C" => 660,
  "O-C-O-C-C" => 661,
  "O-C-C-O-C" => 662,
  "O-C-C-O-[#1]" => 663,
  "C-C=C-C=C" => 664,
  "N-C:C-C-C" => 665,
  "C=C-C-O-C" => 666,
  "C=C-C-O-[#1]" => 667,
  "C-C:C-C-C" => 668,
  "Cl-C:C-C=O" => 669,
  "Br-C:C:C-C" => 670,
  "O=C-C=C-C" => 671,
  "O=C-C=C-[#1]" => 672,
  "O=C-C=C-N" => 673,
  "N-C-N-C:C" => 674,
  "Br-C-C-C:C" => 675,
  "N#C-C-C-C" => 676,
  "C-C=C-C:C" => 677,
  "C-C-C=C-C" => 678,
  "C-C-C-C-C-C" => 679,
  "O-C-C-C-C-C" => 680,
  "O-C-C-C-C-O" => 681,
  "O-C-C-C-C-N" => 682,
  "N-C-C-C-C-C" => 683,
  "O=C-C-C-C-C" => 684,
  "O=C-C-C-C-N" => 685,
  "O=C-C-C-C-O" => 686,
  "O=C-C-C-C=O" => 687,
  "C-C-C-C-C-C-C" => 688,
  "O-C-C-C-C-C-C" => 689,
  "O-C-C-C-C-C-O" => 690,
  "O-C-C-C-C-C-N" => 691,
  "O=C-C-C-C-C-C" => 692,
  "O=C-C-C-C-C-O" => 693,
  "O=C-C-C-C-C=O" => 694,
  "O=C-C-C-C-C-N" => 695,
  "C-C-C-C-C-C-C-C" => 696,
  "C-C-C-C-C-C(C)-C" => 697,
  "O-C-C-C-C-C-C-C" => 698,
  "O-C-C-C-C-C(C)-C" => 699,
  "O-C-C-C-C-C-O-C" => 700,
  "O-C-C-C-C-C(O)-C" => 701,
  "O-C-C-C-C-C-N-C" => 702,
  "O-C-C-C-C-C(N)-C" => 703,
  "O=C-C-C-C-C-C-C" => 704,
  "O=C-C-C-C-C(O)-C" => 705,
  "O=C-C-C-C-C(=O)-C" => 706,
  "O=C-C-C-C-C(N)-C" => 707,
  "C-C(C)-C-C" => 708,
  "C-C(C)-C-C-C" => 709,
  "C-C-C(C)-C-C" => 710,
  "C-C(C)(C)-C-C" => 711,
  "C-C(C)-C(C)-C" => 712,
}
Section7 =

Section 7: Complex SMARTS patterns

{
  "Cc1ccc(C)cc1" => 713,
  "Cc1ccc(O)cc1" => 714,
  "Cc1ccc(S)cc1" => 715,
  "Cc1ccc(N)cc1" => 716,
  "Cc1ccc(Cl)cc1" => 717,
  "Cc1ccc(Br)cc1" => 718,
  "Oc1ccc(O)cc1" => 719,
  "Oc1ccc(S)cc1" => 720,
  "Oc1ccc(N)cc1" => 721,
  "Oc1ccc(Cl)cc1" => 722,
  "Oc1ccc(Br)cc1" => 723,
  "Sc1ccc(S)cc1" => 724,
  "Sc1ccc(N)cc1" => 725,
  "Sc1ccc(Cl)cc1" => 726,
  "Sc1ccc(Br)cc1" => 727,
  "Nc1ccc(N)cc1" => 728,
  "Nc1ccc(Cl)cc1" => 729,
  "Nc1ccc(Br)cc1" => 730,
  "Clc1ccc(Cl)cc1" => 731,
  "Clc1ccc(Br)cc1" => 732,
  "Brc1ccc(Br)cc1" => 733,
  "Cc1cc(C)ccc1" => 734,
  "Cc1cc(O)ccc1" => 735,
  "Cc1cc(S)ccc1" => 736,
  "Cc1cc(N)ccc1" => 737,
  "Cc1cc(Cl)ccc1" => 738,
  "Cc1cc(Br)ccc1" => 739,
  "Oc1cc(O)ccc1" => 740,
  "Oc1cc(S)ccc1" => 741,
  "Oc1cc(N)ccc1" => 742,
  "Oc1cc(Cl)ccc1" => 743,
  "Oc1cc(Br)ccc1" => 744,
  "Sc1cc(S)ccc1" => 745,
  "Sc1cc(N)ccc1" => 746,
  "Sc1cc(Cl)ccc1" => 747,
  "Sc1cc(Br)ccc1" => 748,
  "Nc1cc(N)ccc1" => 749,
  "Nc1cc(Cl)ccc1" => 750,
  "Nc1cc(Br)ccc1" => 751,
  "Clc1cc(Cl)ccc1" => 752,
  "Clc1cc(Br)ccc1" => 753,
  "Brc1cc(Br)ccc1" => 754,
  "Cc1c(C)cccc1" => 755,
  "Cc1c(O)cccc1" => 756,
  "Cc1c(S)cccc1" => 757,
  "Cc1c(N)cccc1" => 758,
  "Cc1c(Cl)cccc1" => 759,
  "Cc1c(Br)cccc1" => 760,
  "Oc1c(O)cccc1" => 761,
  "Oc1c(S)cccc1" => 762,
  "Oc1c(N)cccc1" => 763,
  "Oc1c(Cl)cccc1" => 764,
  "Oc1c(Br)cccc1" => 765,
  "Sc1c(S)cccc1" => 766,
  "Sc1c(N)cccc1" => 767,
  "Sc1c(Cl)cccc1" => 768,
  "Sc1c(Br)cccc1" => 769,
  "Nc1c(N)cccc1" => 770,
  "Nc1c(Cl)cccc1" => 771,
  "Nc1c(Br)cccc1" => 772,
  "Clc1c(Cl)cccc1" => 773,
  "Clc1c(Br)cccc1" => 774,
  "Brc1c(Br)cccc1" => 775,
  "CC1CCC(C)CC1" => 776,
  "CC1CCC(O)CC1" => 777,
  "CC1CCC(S)CC1" => 778,
  "CC1CCC(N)CC1" => 779,
  "CC1CCC(Cl)CC1" => 780,
  "CC1CCC(Br)CC1" => 781,
  "OC1CCC(O)CC1" => 782,
  "OC1CCC(S)CC1" => 783,
  "OC1CCC(N)CC1" => 784,
  "OC1CCC(Cl)CC1" => 785,
  "OC1CCC(Br)CC1" => 786,
  "SC1CCC(S)CC1" => 787,
  "SC1CCC(N)CC1" => 788,
  "SC1CCC(Cl)CC1" => 789,
  "SC1CCC(Br)CC1" => 790,
  "NC1CCC(N)CC1" => 791,
  "NC1CCC(Cl)CC1" => 792,
  "NC1CCC(Br)CC1" => 793,
  "ClC1CCC(Cl)CC1" => 794,
  "ClC1CCC(Br)CC1" => 795,
  "BrC1CCC(Br)CC1" => 796,
  "CC1CC(C)CCC1" => 797,
  "CC1CC(O)CCC1" => 798,
  "CC1CC(S)CCC1" => 799,
  "CC1CC(N)CCC1" => 800,
  "CC1CC(Cl)CCC1" => 801,
  "CC1CC(Br)CCC1" => 802,
  "OC1CC(O)CCC1" => 803,
  "OC1CC(S)CCC1" => 804,
  "OC1CC(N)CCC1" => 805,
  "OC1CC(Cl)CCC1" => 806,
  "OC1CC(Br)CCC1" => 807,
  "SC1CC(S)CCC1" => 808,
  "SC1CC(N)CCC1" => 809,
  "SC1CC(Cl)CCC1" => 810,
  "SC1CC(Br)CCC1" => 811,
  "NC1CC(N)CCC1" => 812,
  "NC1CC(Cl)CCC1" => 813,
  "NC1CC(Br)CCC1" => 814,
  "ClC1CC(Cl)CCC1" => 815,
  "ClC1CC(Br)CCC1" => 816,
  "BrC1CC(Br)CCC1" => 817,
  "CC1C(C)CCCC1" => 818,
  "CC1C(O)CCCC1" => 819,
  "CC1C(S)CCCC1" => 820,
  "CC1C(N)CCCC1" => 821,
  "CC1C(Cl)CCCC1" => 822,
  "CC1C(Br)CCCC1" => 823,
  "OC1C(O)CCCC1" => 824,
  "OC1C(S)CCCC1" => 825,
  "OC1C(N)CCCC1" => 826,
  "OC1C(Cl)CCCC1" => 827,
  "OC1C(Br)CCCC1" => 828,
  "SC1C(S)CCCC1" => 829,
  "SC1C(N)CCCC1" => 830,
  "SC1C(Cl)CCCC1" => 831,
  "SC1C(Br)CCCC1" => 832,
  "NC1C(N)CCCC1" => 833,
  "NC1C(Cl)CCCC1" => 834,
  "NC1C(Br)CCCC1" => 835,
  "ClC1C(Cl)CCCC1" => 836,
  "ClC1C(Br)CCCC1" => 837,
  "BrC1C(Br)CCCC1" => 838,
  "CC1CC(C)CC1" => 839,
  "CC1CC(O)CC1" => 840,
  "CC1CC(S)CC1" => 841,
  "CC1CC(N)CC1" => 842,
  "CC1CC(Cl)CC1" => 843,
  "CC1CC(Br)CC1" => 844,
  "OC1CC(O)CC1" => 845,
  "OC1CC(S)CC1" => 846,
  "OC1CC(N)CC1" => 847,
  "OC1CC(Cl)CC1" => 848,
  "OC1CC(Br)CC1" => 849,
  "SC1CC(S)CC1" => 850,
  "SC1CC(N)CC1" => 851,
  "SC1CC(Cl)CC1" => 852,
  "SC1CC(Br)CC1" => 853,
  "NC1CC(N)CC1" => 854,
  "NC1CC(Cl)CC1" => 855,
  "NC1CC(Br)CC1" => 856,
  "ClC1CC(Cl)CC1" => 857,
  "ClC1CC(Br)CC1" => 858,
  "BrC1CC(Br)CC1" => 859,
  "CC1C(C)CCC1" => 860,
  "CC1C(O)CCC1" => 861,
  "CC1C(S)CCC1" => 862,
  "CC1C(N)CCC1" => 863,
  "CC1C(Cl)CCC1" => 864,
  "CC1C(Br)CCC1" => 865,
  "OC1C(O)CCC1" => 866,
  "OC1C(S)CCC1" => 867,
  "OC1C(N)CCC1" => 868,
  "OC1C(Cl)CCC1" => 869,
  "OC1C(Br)CCC1" => 870,
  "SC1C(S)CCC1" => 871,
  "SC1C(N)CCC1" => 872,
  "SC1C(Cl)CCC1" => 873,
  "SC1C(Br)CCC1" => 874,
  "NC1C(N)CCC1" => 875,
  "NC1C(Cl)CC1" => 876,
  "NC1C(Br)CCC1" => 877,
  "ClC1C(Cl)CCC1" => 878,
  "ClC1C(Br)CCC1" => 879,
  "BrC1C(Br)CCC1" => 880,
}
PubChemSubsKey =
[
  ">= 4 H",
  ">= 8 H",
  ">= 16 H",
  ">= 32 H",
  ">= 1 Li",
  ">= 2 Li",
  ">= 1 B",
  ">= 2 B",
  ">= 4 B",
  ">= 2 C",
  ">= 4 C",
  ">= 8 C",
  ">= 16 C",
  ">= 32 C",
  ">= 1 N",
  ">= 2 N",
  ">= 4 N",
  ">= 8 N",
  ">= 1 O",
  ">= 2 O",
  ">= 4 O",
  ">= 8 O",
  ">= 16 O",
  ">= 1 F",
  ">= 2 F",
  ">= 4 F",
  ">= 1 Na",
  ">= 2 Na",
  ">= 1 Si",
  ">= 2 Si",
  ">= 1 P",
  ">= 2 P",
  ">= 4 P",
  ">= 1 S",
  ">= 2 S",
  ">= 4 S",
  ">= 8 S",
  ">= 1 Cl",
  ">= 2 Cl",
  ">= 4 Cl",
  ">= 8 Cl",
  ">= 1 K",
  ">= 2 K",
  ">= 1 Br",
  ">= 2 Br",
  ">= 4 Br",
  ">= 1 I",
  ">= 2 I",
  ">= 4 I",
  ">= 1 Be",
  ">= 1 Mg",
  ">= 1 Al",
  ">= 1 Ca",
  ">= 1 Sc",
  ">= 1 Ti",
  ">= 1 V",
  ">= 1 Cr",
  ">= 1 Mn",
  ">= 1 Fe",
  ">= 1 Co",
  ">= 1 Ni",
  ">= 1 Cu",
  ">= 1 Zn",
  ">= 1 Ga",
  ">= 1 Ge",
  ">= 1 As",
  ">= 1 Se",
  ">= 1 Kr",
  ">= 1 Rb",
  ">= 1 Sr",
  ">= 1 Y",
  ">= 1 Zr",
  ">= 1 Nb",
  ">= 1 Mo",
  ">= 1 Ru",
  ">= 1 Rh",
  ">= 1 Pd",
  ">= 1 Ag",
  ">= 1 Cd",
  ">= 1 In",
  ">= 1 Sn",
  ">= 1 Sb",
  ">= 1 Te",
  ">= 1 Xe",
  ">= 1 Cs",
  ">= 1 Ba",
  ">= 1 Lu",
  ">= 1 Hf",
  ">= 1 Ta",
  ">= 1 W",
  ">= 1 Re",
  ">= 1 Os",
  ">= 1 Ir",
  ">= 1 Pt",
  ">= 1 Au",
  ">= 1 Hg",
  ">= 1 Tl",
  ">= 1 Pb",
  ">= 1 Bi",
  ">= 1 La",
  ">= 1 Ce",
  ">= 1 Pr",
  ">= 1 Nd",
  ">= 1 Pm",
  ">= 1 Sm",
  ">= 1 Eu",
  ">= 1 Gd",
  ">= 1 Tb",
  ">= 1 Dy",
  ">= 1 Ho",
  ">= 1 Er",
  ">= 1 Tm",
  ">= 1 Yb",
  ">= 1 Tc",
  ">= 1 U",
  ">= 1 any ring size 3",
  ">= 1 saturated carbon-only ring size 3",
  ">= 1 saturated nitrogen-containing ring size 3",
  ">= 1 saturated heteroatom-containing ring size 3",
  ">= 1 unsaturated or aromatic carbon-only ring size 3",
  ">= 1 unsaturated or aromatic nitrogen-containing ring size 3",
  ">= 1 unsaturated or aromatic heteroatom-containing ring size 3",
  ">= 2 any ring size 3",
  ">= 2 saturated carbon-only ring size 3",
  ">= 2 saturated nitrogen-containing ring size 3",
  ">= 2 saturated heteroatom-containing ring size 3",
  ">= 2 unsaturated or aromatic carbon-only ring size 3",
  ">= 2 unsaturated or aromatic nitrogen-containing ring size 3",
  ">= 2 unsaturated or aromatic heteroatom-containing ring size 3",
  ">= 1 any ring size 4",
  ">= 1 saturated carbon-only ring size 4",
  ">= 1 saturated nitrogen-containing ring size 4",
  ">= 1 saturated heteroatom-containing ring size 4",
  ">= 1 unsaturated or aromatic carbon-only ring size 4",
  ">= 1 unsaturated or aromatic nitrogen-containing ring size 4",
  ">= 1 unsaturated or aromatic heteroatom-containing ring size 4",
  ">= 2 any ring size 4",
  ">= 2 saturated carbon-only ring size 4",
  ">= 2 saturated nitrogen-containing ring size 4",
  ">= 2 saturated heteroatom-containing ring size 4",
  ">= 2 unsaturated or aromatic carbon-only ring size 4",
  ">= 2 unsaturated or aromatic nitrogen-containing ring size 4",
  ">= 2 unsaturated or aromatic heteroatom-containing ring size 4",
  ">= 1 any ring size 5",
  ">= 1 saturated carbon-only ring size 5",
  ">= 1 saturated nitrogen-containing ring size 5",
  ">= 1 saturated heteroatom-containing ring size 5",
  ">= 1 unsaturated or aromatic carbon-only ring size 5",
  ">= 1 unsaturated or aromatic nitrogen-containing ring size 5",
  ">= 1 unsaturated or aromatic heteroatom-containing ring size 5",
  ">= 2 any ring size 5",
  ">= 2 saturated carbon-only ring size 5",
  ">= 2 saturated nitrogen-containing ring size 5",
  ">= 2 saturated heteroatom-containing ring size 5",
  ">= 2 unsaturated or aromatic carbon-only ring size 5",
  ">= 2 unsaturated or aromatic nitrogen-containing ring size 5",
  ">= 2 unsaturated or aromatic heteroatom-containing ring size 5",
  ">= 3 any ring size 5",
  ">= 3 saturated carbon-only ring size 5",
  ">= 3 saturated nitrogen-containing ring size 5",
  ">= 3 saturated heteroatom-containing ring size 5",
  ">= 3 unsaturated or aromatic carbon-only ring size 5",
  ">= 3 unsaturated or aromatic nitrogen-containing ring size 5",
  ">= 3 unsaturated or aromatic heteroatom-containing ring size 5",
  ">= 4 any ring size 5",
  ">= 4 saturated carbon-only ring size 5",
  ">= 4 saturated nitrogen-containing ring size 5",
  ">= 4 saturated heteroatom-containing ring size 5",
  ">= 4 unsaturated or aromatic carbon-only ring size 5",
  ">= 4 unsaturated or aromatic nitrogen-containing ring size 5",
  ">= 4 unsaturated or aromatic heteroatom-containing ring size 5",
  ">= 5 any ring size 5",
  ">= 5 saturated carbon-only ring size 5",
  ">= 5 saturated nitrogen-containing ring size 5",
  ">= 5 saturated heteroatom-containing ring size 5",
  ">= 5 unsaturated or aromatic carbon-only ring size 5",
  ">= 5 unsaturated or aromatic nitrogen-containing ring size 5",
  ">= 5 unsaturated or aromatic heteroatom-containing ring size 5",
  ">= 1 any ring size 6",
  ">= 1 saturated carbon-only ring size 6",
  ">= 1 saturated nitrogen-containing ring size 6",
  ">= 1 saturated heteroatom-containing ring size 6",
  ">= 1 unsaturated or aromatic carbon-only ring size 6",
  ">= 1 unsaturated or aromatic nitrogen-containing ring size 6",
  ">= 1 unsaturated or aromatic heteroatom-containing ring size 6",
  ">= 2 any ring size 6",
  ">= 2 saturated carbon-only ring size 6",
  ">= 2 saturated nitrogen-containing ring size 6",
  ">= 2 saturated heteroatom-containing ring size 6",
  ">= 2 unsaturated or aromatic carbon-only ring size 6",
  ">= 2 unsaturated or aromatic nitrogen-containing ring size 6",
  ">= 2 unsaturated or aromatic heteroatom-containing ring size 6",
  ">= 3 any ring size 6",
  ">= 3 saturated carbon-only ring size 6",
  ">= 3 saturated nitrogen-containing ring size 6",
  ">= 3 saturated heteroatom-containing ring size 6",
  ">= 3 unsaturated or aromatic carbon-only ring size 6",
  ">= 3 unsaturated or aromatic nitrogen-containing ring size 6",
  ">= 3 unsaturated or aromatic heteroatom-containing ring size 6",
  ">= 4 any ring size 6",
  ">= 4 saturated carbon-only ring size 6",
  ">= 4 saturated nitrogen-containing ring size 6",
  ">= 4 saturated heteroatom-containing ring size 6",
  ">= 4 unsaturated or aromatic carbon-only ring size 6",
  ">= 4 unsaturated or aromatic nitrogen-containing ring size 6",
  ">= 4 unsaturated or aromatic heteroatom-containing ring size 6",
  ">= 5 any ring size 6",
  ">= 5 saturated carbon-only ring size 6",
  ">= 5 saturated nitrogen-containing ring size 6",
  ">= 5 saturated heteroatom-containing ring size 6",
  ">= 5 unsaturated or aromatic carbon-only ring size 6",
  ">= 5 unsaturated or aromatic nitrogen-containing ring size 6",
  ">= 5 unsaturated or aromatic heteroatom-containing ring size 6",
  ">= 1 any ring size 7",
  ">= 1 saturated carbon-only ring size 7",
  ">= 1 saturated nitrogen-containing ring size 7",
  ">= 1 saturated heteroatom-containing ring size 7",
  ">= 1 unsaturated or aromatic carbon-only ring size 7",
  ">= 1 unsaturated or aromatic nitrogen-containing ring size 7",
  ">= 1 unsaturated or aromatic heteroatom-containing ring size 7",
  ">= 2 any ring size 7",
  ">= 2 saturated carbon-only ring size 7",
  ">= 2 saturated nitrogen-containing ring size 7",
  ">= 2 saturated heteroatom-containing ring size 7",
  ">= 2 unsaturated or aromatic carbon-only ring size 7",
  ">= 2 unsaturated or aromatic nitrogen-containing ring size 7",
  ">= 2 unsaturated or aromatic heteroatom-containing ring size 7",
  ">= 1 any ring size 8",
  ">= 1 saturated carbon-only ring size 8",
  ">= 1 saturated nitrogen-containing ring size 8",
  ">= 1 saturated heteroatom-containing ring size 8",
  ">= 1 unsaturated or aromatic carbon-only ring size 8",
  ">= 1 unsaturated or aromatic nitrogen-containing ring size 8",
  ">= 1 unsaturated or aromatic heteroatom-containing ring size 8",
  ">= 2 any ring size 8",
  ">= 2 saturated carbon-only ring size 8",
  ">= 2 saturated nitrogen-containing ring size 8",
  ">= 2 saturated heteroatom-containing ring size 8",
  ">= 2 unsaturated or aromatic carbon-only ring size 8",
  ">= 2 unsaturated or aromatic nitrogen-containing ring size 8",
  ">= 2 unsaturated or aromatic heteroatom-containing ring size 8",
  ">= 1 any ring size 9",
  ">= 1 saturated carbon-only ring size 9",
  ">= 1 saturated nitrogen-containing ring size 9",
  ">= 1 saturated heteroatom-containing ring size 9",
  ">= 1 unsaturated or aromatic carbon-only ring size 9",
  ">= 1 unsaturated or aromatic nitrogen-containing ring size 9",
  ">= 1 unsaturated or aromatic heteroatom-containing ring size 9",
  ">= 1 any ring size 10",
  ">= 1 saturated carbon-only ring size 10",
  ">= 1 saturated nitrogen-containing ring size 10",
  ">= 1 saturated heteroatom-containing ring size 10",
  ">= 1 unsaturated or aromatic carbon-only ring size 10",
  ">= 1 unsaturated or aromatic nitrogen-containing ring size 10",
  ">= 1 unsaturated or aromatic heteroatom-containing ring size 10",
  ">= 1 aromatic ring",
  ">= 1 hetero-aromatic ring",
  ">= 2 aromatic rings",
  ">= 2 hetero-aromatic rings",
  ">= 3 aromatic rings",
  ">= 3 hetero-aromatic rings",
  ">= 4 aromatic rings",
  ">= 4 hetero-aromatic rings",
]
RingSizeBaseNum =
{
  3 =>  115,
  4 =>  129,
  5 =>  143,
  6 =>  178,
  7 =>  213,
  8 =>  227,
  9 =>  241,
  10 => 248,
}
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



56
57
58
# File 'lib/chem.rb', line 56

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

.data_dirObject



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

def self.data_dir
  DefaultDataDir
end

.db_search(database_name, q_mol, block) ⇒ Object



456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
# File 'ext/subcomp.c', line 456

static VALUE
db_search(VALUE self, VALUE database_name, VALUE q_mol, VALUE block)
{
  char * filename;
  struct CompoundDB db;
  struct Query query;

  filename = StringValuePtr(database_name);

  if(strlen(filename) > 40){
    rb_raise(rb_eException, "length of database name must less than 40!");
  }

  query_setup(q_mol, & query);

  db.mat = db_file_open(filename, ".mat");
  db.idx = db_file_open(filename, ".idx");
  db.typ = db_file_open(filename, ".typ");

  db_load(& db, & query);

  query_free(& query);

  fclose(db.mat);
  fclose(db.idx);
  fclose(db.typ);
}

.match_by_ullmann(q_mol, t_mol) ⇒ Object



517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
# File 'ext/subcomp.c', line 517

static VALUE
mol_by_mol(VALUE self, VALUE q_mol, VALUE t_mol)
{
  struct Query  query;
  struct Target target;
  struct State  state;
  VALUE result;

  target.max_length = 0;
  state.max_length = 0;

  query_setup(  q_mol, & query  );
  target_setup( t_mol, & target );

  state_allocate(& state, & query, & target);

  if(rb_block_given_p() == Qtrue){
    state_setup_block(& state);
  }
  else{
    state_setup(& state, & query, & target);
  }

  search_by_ullmann(& state, & query, & target);
  result = state_get_result(& state);

  query_free(& query);
  target_free(& target);
  state_free(& state);

  return result;
}

.open_kegg(dir) ⇒ Object



95
96
97
98
# File 'lib/chem.rb', line 95

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, load

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)


67
68
69
70
71
72
73
74
75
76
# File 'lib/chem.rb', line 67

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

.opsin_parse(iupac_name) ⇒ Object



4
5
6
# File 'lib/chem/db/opsin.rb', line 4

def self.opsin_parse(iupac_name)
  OpsinMolecule.new(iupac_name)
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



89
90
91
92
93
# File 'lib/chem.rb', line 89

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

.save(array, filename, params = {}) ⇒ Object



84
85
86
87
# File 'lib/chem.rb', line 84

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

.search_net(term, options) ⇒ Object



21
22
23
24
25
26
27
28
# File 'lib/chem/utils/net.rb', line 21

def self.search_net(term, options)
  case options[:db]
  when :pubmed
    Chem::NCBI::ESearch.query(term, options)
  when :pubchem
    Chem::NCBI::ESearch.query(term, options)
  end
end