periodic_table.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:12k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: periodic_table.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 18:28:55  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: periodic_table.cpp,v 1000.2 2004/06/01 18:28:55 gouriano Exp $
  10. * ===========================================================================
  11. *
  12. *                            PUBLIC DOMAIN NOTICE
  13. *               National Center for Biotechnology Information
  14. *
  15. *  This software/database is a "United States Government Work" under the
  16. *  terms of the United States Copyright Act.  It was written as part of
  17. *  the author's official duties as a United States Government employee and
  18. *  thus cannot be copyrighted.  This software/database is freely available
  19. *  to the public for use. The National Library of Medicine and the U.S.
  20. *  Government have not placed any restriction on its use or reproduction.
  21. *
  22. *  Although all reasonable efforts have been taken to ensure the accuracy
  23. *  and reliability of the software and data, the NLM and the U.S.
  24. *  Government do not and cannot warrant the performance or results that
  25. *  may be obtained by using this software or data. The NLM and the U.S.
  26. *  Government disclaim all warranties, express or implied, including
  27. *  warranties of performance, merchantability or fitness for any particular
  28. *  purpose.
  29. *
  30. *  Please cite the author in any work or product based on this material.
  31. *
  32. * ===========================================================================
  33. *
  34. * Authors:  Paul Thiessen
  35. *
  36. * File Description:
  37. *      Classes to information about atomic elements
  38. *
  39. * ===========================================================================
  40. */
  41. #ifdef _MSC_VER
  42. #pragma warning(disable:4018)   // disable signed/unsigned mismatch warning in MSVC
  43. #endif
  44. #include <ncbi_pch.hpp>
  45. #include <corelib/ncbistd.hpp>
  46. #include "periodic_table.hpp"
  47. USING_NCBI_SCOPE;
  48. BEGIN_SCOPE(Cn3D)
  49. PeriodicTableClass PeriodicTable; // one global copy for now
  50. const Element* PeriodicTableClass::GetElement(int Z) const
  51. {
  52.     ZMapType::const_iterator i = ZMap.find(Z);
  53.     if (i != ZMap.end())
  54.         return (*i).second;
  55.     else
  56.         return NULL;
  57. }
  58. void PeriodicTableClass::AddElement(int Z, const char * name,
  59.                                     const char * symbol,
  60.                                     double r, double g, double b,
  61.                                     double v)
  62. {
  63.     ZMapType::const_iterator i = ZMap.find(Z);
  64.     if (i != ZMap.end()) delete const_cast<Element*>((*i).second);
  65.     ZMap[Z] = new Element(name,symbol,r,g,b,v);
  66. }
  67. // defaults; can be overridden later on
  68. PeriodicTableClass::PeriodicTableClass(void)
  69. {
  70.     //      atomic number      name    symbol       color (rgb)     vdW radius
  71.     AddElement(    1,      "Hydrogen",   "H",     0.8,  0.8,  0.8,     1.2  );
  72.     AddElement(    2,        "Helium",  "He",     0.8, 0.37, 0.08,    1.22  );
  73.     AddElement(    3,       "Lithium",  "Li",     0.7,  0.7,  0.7,    1.52  );
  74.     AddElement(    4,     "Beryllium",  "Be",     0.8, 0.37, 0.08,     1.7  );
  75.     AddElement(    5,         "Boron",   "B",     0.9,  0.4,    0,    2.08  );
  76.     AddElement(    6,        "Carbon",   "C",     0.3,  0.3,  0.3,    1.85  );
  77.     AddElement(    7,      "Nitrogen",   "N",     0.2,  0.2,  0.8,    1.54  );
  78.     AddElement(    8,        "Oxygen",   "O",     0.8,  0.2,  0.2,     1.4  );
  79.     AddElement(    9,      "Fluorine",   "F",     0.7, 0.85, 0.45,    1.35  );
  80.     AddElement(   10,          "Neon",  "Ne",     0.8, 0.37, 0.08,     1.6  );
  81.     AddElement(   11,        "Sodium",  "Na",     0.6,  0.6,  0.6,    2.31  );
  82.     AddElement(   12,     "Magnesium",  "Mg",     0.4,  0.4,  0.4,     1.7  );
  83.     AddElement(   13,      "Aluminum",  "Al",     0.4,  0.4,  0.4,    2.05  );
  84.     AddElement(   14,       "Silicon",  "Si",     0.7,    0,  0.1,       2  );
  85.     AddElement(   15,    "Phosphorus",   "P",     0.1,  0.7,  0.3,     1.4  );
  86.     AddElement(   16,        "Sulfur",   "S",    0.95,  0.9,  0.2,    1.85  );
  87.     AddElement(   17,      "Chlorine",  "Cl",    0.15,  0.5,  0.1,    1.81  );
  88.     AddElement(   18,         "Argon",  "Ar",     0.8, 0.37, 0.08,    1.91  );
  89.     AddElement(   19,     "Potassium",   "K",     0.8,  0.5,  0.7,    2.31  );
  90.     AddElement(   20,       "Calcium",  "Ca",     0.8,  0.8,  0.7,   1.973  );
  91.     AddElement(   21,      "Scandium",  "Sc",     0.5,  0.5,  0.5,     1.7  );
  92.     AddElement(   22,      "Titanium",  "Ti",     0.5,  0.5,  0.5,     1.7  );
  93.     AddElement(   23,      "Vanadium",   "V",     0.5,  0.5,  0.5,     1.7  );
  94.     AddElement(   24,      "Chromium",  "Cr",     0.5,  0.5,  0.5,     1.7  );
  95.     AddElement(   25,     "Manganese",  "Mn",     0.5,  0.5,  0.5,     1.7  );
  96.     AddElement(   26,          "Iron",  "Fe",     0.7,    0,  0.1,     1.7  );
  97.     AddElement(   27,        "Cobalt",  "Co",     0.5,  0.5,  0.5,     1.7  );
  98.     AddElement(   28,        "Nickel",  "Ni",     0.5,  0.5,  0.5,     1.7  );
  99.     AddElement(   29,        "Copper",  "Cu",     0.5,  0.5,  0.5,     1.7  );
  100.     AddElement(   30,          "Zinc",  "Zn",     0.5,  0.5,  0.5,     1.7  );
  101.     AddElement(   31,       "Gallium",  "Ga",     0.5,  0.5,  0.5,     1.7  );
  102.     AddElement(   32,     "Germanium",  "Ge",     0.5,  0.5,  0.5,     1.7  );
  103.     AddElement(   33,       "Arsenic",  "As",     0.4,  0.8,  0.1,       2  );
  104.     AddElement(   34,      "Selenium",  "Se",     0.8,  0.8,  0.1,       2  );
  105.     AddElement(   35,       "Bromine",  "Br",     0.5, 0.08, 0.12,     2.1  );
  106.     AddElement(   36,       "Krypton",  "Kr",     0.8, 0.37, 0.08,     1.7  );
  107.     AddElement(   37,      "Rubidium",  "Rb",     0.5,  0.5,  0.5,     1.7  );
  108.     AddElement(   38,     "Strontium",  "Sr",     0.5,  0.5,  0.5,     1.7  );
  109.     AddElement(   39,       "Yttrium",   "Y",     0.5,  0.5,  0.5,     1.7  );
  110.     AddElement(   40,     "Zirconium",  "Zr",     0.5,  0.5,  0.5,     1.7  );
  111.     AddElement(   41,       "Niobium",  "Nb",     0.5,  0.5,  0.5,     1.7  );
  112.     AddElement(   42,    "Molybdenum",  "Mo",     0.5,  0.5,  0.5,     1.7  );
  113.     AddElement(   43,    "Technetium",  "Tc",     0.5,  0.5,  0.5,     1.7  );
  114.     AddElement(   44,     "Ruthenium",  "Ru",     0.5,  0.5,  0.5,     1.7  );
  115.     AddElement(   45,       "Rhodium",  "Rh",     0.5,  0.5,  0.5,     1.7  );
  116.     AddElement(   46,     "Palladium",  "Pd",     0.5,  0.5,  0.5,     1.7  );
  117.     AddElement(   47,        "Silver",  "Ag",     0.5,  0.5,  0.5,     1.7  );
  118.     AddElement(   48,       "Cadmium",  "Cd",     0.5,  0.5,  0.5,     1.7  );
  119.     AddElement(   49,        "Indium",  "In",     0.5,  0.5,  0.5,     1.7  );
  120.     AddElement(   50,           "Tin",  "Sn",     0.5,  0.5,  0.5,     1.7  );
  121.     AddElement(   51,      "Antimony",  "Sb",     0.5,  0.5,  0.5,     2.2  );
  122.     AddElement(   52,     "Tellurium",  "Te",     0.5,  0.5,  0.5,     2.2  );
  123.     AddElement(   53,        "Iodine",   "I",     0.5,  0.1,  0.5,    2.15  );
  124.     AddElement(   54,         "Xenon",  "Xe",     0.5,  0.5,  0.5,     1.7  );
  125.     AddElement(   55,        "Cesium",  "Cs",     0.5,  0.5,  0.5,     1.7  );
  126.     AddElement(   56,        "Barium",  "Ba",     0.5,  0.5,  0.5,     1.7  );
  127.     AddElement(   57,     "Lanthanum",  "La",     0.5,  0.5,  0.5,     1.7  );
  128.     AddElement(   58,        "Cerium",  "Ce",     0.5,  0.5,  0.5,     1.7  );
  129.     AddElement(   59,  "Praseodymium",  "Pr",     0.5,  0.5,  0.5,     1.7  );
  130.     AddElement(   60,     "Neodymium",  "Nd",     0.5,  0.5,  0.5,     1.7  );
  131.     AddElement(   61,    "Promethium",  "Pm",     0.5,  0.5,  0.5,     1.7  );
  132.     AddElement(   62,      "Samarium",  "Sm",     0.5,  0.5,  0.5,     1.7  );
  133.     AddElement(   63,      "Europium",  "Eu",     0.5,  0.5,  0.5,     1.7  );
  134.     AddElement(   64,    "Gadolinium",  "Gd",     0.5,  0.5,  0.5,     1.7  );
  135.     AddElement(   65,       "Terbium",  "Tb",     0.5,  0.5,  0.5,     1.7  );
  136.     AddElement(   66,    "Dysprosium",  "Dy",     0.5,  0.5,  0.5,     1.7  );
  137.     AddElement(   67,       "Holmium",  "Ho",     0.5,  0.5,  0.5,     1.7  );
  138.     AddElement(   68,        "Erbium",  "Er",     0.5,  0.5,  0.5,     1.7  );
  139.     AddElement(   69,       "Thulium",  "Tm",     0.5,  0.5,  0.5,     1.7  );
  140.     AddElement(   70,     "Ytterbium",  "Yb",     0.5,  0.5,  0.5,     1.7  );
  141.     AddElement(   71,      "Lutetium",  "Lu",     0.5,  0.5,  0.5,     1.7  );
  142.     AddElement(   72,       "Hafnium",  "Hf",     0.5,  0.5,  0.5,     1.7  );
  143.     AddElement(   73,      "Tantalum",  "Ta",     0.5,  0.5,  0.5,     1.7  );
  144.     AddElement(   74,      "Tungsten",   "W",     0.5,  0.5,  0.5,     1.7  );
  145.     AddElement(   75,       "Rhenium",  "Re",     0.5,  0.5,  0.5,     1.7  );
  146.     AddElement(   76,        "Osmium",  "Os",     0.5,  0.5,  0.5,     1.7  );
  147.     AddElement(   77,       "Iridium",  "Ir",     0.5,  0.5,  0.5,     1.7  );
  148.     AddElement(   78,      "Platinum",  "Pt",     0.5,  0.5,  0.5,     1.7  );
  149.     AddElement(   79,          "Gold",  "Au",     0.5,  0.5,  0.5,     1.7  );
  150.     AddElement(   80,       "Mercury",  "Hg",     0.5,  0.5,  0.5,     1.7  );
  151.     AddElement(   81,      "Thallium",  "Tl",     0.5,  0.5,  0.5,     1.7  );
  152.     AddElement(   82,          "Lead",  "Pb",     0.5,  0.5,  0.5,     1.7  );
  153.     AddElement(   83,       "Bismuth",  "Bi",     0.5,  0.5,  0.5,     1.7  );
  154.     AddElement(   84,      "Polonium",  "Po",     0.5,  0.5,  0.5,     1.7  );
  155.     AddElement(   85,      "Astatine",  "At",     0.5,  0.5,  0.5,     1.7  );
  156.     AddElement(   86,         "Radon",  "Rn",     0.5,  0.5,  0.5,     1.7  );
  157.     AddElement(   87,      "Francium",  "Fr",     0.5,  0.5,  0.5,     1.7  );
  158.     AddElement(   88,        "Radium",  "Ra",     0.5,  0.5,  0.5,     1.7  );
  159.     AddElement(   89,      "Actinium",  "Ac",     0.5,  0.5,  0.5,     1.7  );
  160.     AddElement(   90,       "Thorium",  "Th",     0.5,  0.5,  0.5,     1.7  );
  161.     AddElement(   91,  "Protactinium",  "Pa",     0.5,  0.5,  0.5,     1.7  );
  162.     AddElement(   92,       "Uranium",   "U",     0.5,  0.5,  0.5,     1.7  );
  163.     AddElement(   93,     "Neptunium",  "Np",     0.5,  0.5,  0.5,     1.7  );
  164.     AddElement(   94,     "Plutonium",  "Pu",     0.5,  0.5,  0.5,     1.7  );
  165.     AddElement(   95,     "Americium",  "Am",     0.5,  0.5,  0.5,     1.7  );
  166.     AddElement(   96,        "Curium",  "Cm",     0.5,  0.5,  0.5,     1.7  );
  167.     AddElement(   97,     "Berkelium",  "Bk",     0.5,  0.5,  0.5,     1.7  );
  168.     AddElement(   98,   "Californium",  "Cf",     0.5,  0.5,  0.5,     1.7  );
  169.     AddElement(   99,   "Einsteinium",  "Es",     0.5,  0.5,  0.5,     1.7  );
  170.     AddElement(  100,       "Fermium",  "Fm",     0.5,  0.5,  0.5,     1.7  );
  171.     AddElement(  101,   "Mendelevium",  "Md",     0.5,  0.5,  0.5,     1.7  );
  172.     AddElement(  102,      "Nobelium",  "No",     0.5,  0.5,  0.5,     1.7  );
  173.     AddElement(  103,    "Lawrencium",  "Lr",     0.5,  0.5,  0.5,     1.7  );
  174.     AddElement(  254,         "other",   "?",     0.4,  0.4,  0.4,     1.6  );
  175.     AddElement(  255,       "unknown",   "?",     0.4,  0.4,  0.4,     1.6  );
  176. }
  177. PeriodicTableClass::~PeriodicTableClass(void)
  178. {
  179.     ZMapType::const_iterator i, ie = ZMap.end();
  180.     for (i=ZMap.begin(); i!=ie; ++i)
  181.         if ((*i).second) delete const_cast<Element*>((*i).second);
  182. }
  183. END_SCOPE(Cn3D)
  184. /*
  185. * ---------------------------------------------------------------------------
  186. * $Log: periodic_table.cpp,v $
  187. * Revision 1000.2  2004/06/01 18:28:55  gouriano
  188. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.6
  189. *
  190. * Revision 1.6  2004/05/21 21:41:39  gorelenk
  191. * Added PCH ncbi_pch.hpp
  192. *
  193. * Revision 1.5  2004/03/15 18:27:12  thiessen
  194. * prefer prefix vs. postfix ++/-- operators
  195. *
  196. * Revision 1.4  2004/02/19 17:05:01  thiessen
  197. * remove cn3d/ from include paths; add pragma to disable annoying msvc warning
  198. *
  199. * Revision 1.3  2003/02/03 19:20:04  thiessen
  200. * format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros
  201. *
  202. * Revision 1.2  2000/08/03 15:12:23  thiessen
  203. * add skeleton of style and show/hide managers
  204. *
  205. * Revision 1.1  2000/07/12 23:27:50  thiessen
  206. * now draws basic CPK model
  207. *
  208. */