00001 #ifndef CCTBX_ELTBX_CHEMICAL_ELEMENTS_H
00002 #define CCTBX_ELTBX_CHEMICAL_ELEMENTS_H
00003
00004 #include <set>
00005 #include <string>
00006
00007 namespace cctbx { namespace eltbx { namespace chemical_elements {
00008
00009 static const char* proper_caps[] = {
00010 "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg",
00011 "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr",
00012 "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br",
00013 "Kr", "Rb", "Sr", "Y", "Zr", "Nb", "Mo", "Tc", "Ru", "Rh", "Pd",
00014 "Ag", "Cd", "In", "Sn", "Sb", "Te", "I", "Xe", "Cs", "Ba", "La",
00015 "Ce", "Pr", "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er",
00016 "Tm", "Yb", "Lu", "Hf", "Ta", "W", "Re", "Os", "Ir", "Pt", "Au",
00017 "Hg", "Tl", "Pb", "Bi", "Po", "At", "Rn", "Fr", "Ra", "Ac", "Th",
00018 "Pa", "U", "Np", "Pu", "Am", "Cm", "Bk", "Cf", "Es", "Fm", "Md",
00019 "No", "Lr", "Rf", "Db", "Sg", "Bh", "Hs", "Mt", "Ds", "Rg", 0
00020 };
00021
00022 static const char* proper_upper[] = {
00023 "H", "HE", "LI", "BE", "B", "C", "N", "O", "F", "NE", "NA", "MG",
00024 "AL", "SI", "P", "S", "CL", "AR", "K", "CA", "SC", "TI", "V", "CR",
00025 "MN", "FE", "CO", "NI", "CU", "ZN", "GA", "GE", "AS", "SE", "BR",
00026 "KR", "RB", "SR", "Y", "ZR", "NB", "MO", "TC", "RU", "RH", "PD",
00027 "AG", "CD", "IN", "SN", "SB", "TE", "I", "XE", "CS", "BA", "LA",
00028 "CE", "PR", "ND", "PM", "SM", "EU", "GD", "TB", "DY", "HO", "ER",
00029 "TM", "YB", "LU", "HF", "TA", "W", "RE", "OS", "IR", "PT", "AU",
00030 "HG", "TL", "PB", "BI", "PO", "AT", "RN", "FR", "RA", "AC", "TH",
00031 "PA", "U", "NP", "PU", "AM", "CM", "BK", "CF", "ES", "FM", "MD",
00032 "NO", "LR", "RF", "DB", "SG", "BH", "HS", "MT", "DS", "RG", 0
00033 };
00034
00035 template <typename StringType>
00036 inline
00037 void
00038 initialize_set(
00039 std::set<StringType>& name_set,
00040 const char** names)
00041 {
00042 if (name_set.size() != 0) return;
00043 for(const char** n=names; *n; n++) name_set.insert(StringType(*n));
00044 }
00045
00046 inline
00047 std::set<std::string> const&
00048 proper_caps_set()
00049 {
00050 static std::set<std::string> result;
00051 initialize_set(result, proper_caps);
00052 return result;
00053 }
00054
00055 inline
00056 std::set<std::string> const&
00057 proper_upper_set()
00058 {
00059 static std::set<std::string> result;
00060 initialize_set(result, proper_upper);
00061 return result;
00062 }
00063
00064 inline
00065 std::set<std::string> const&
00066 proper_and_isotopes_upper_set()
00067 {
00068 static std::set<std::string> result;
00069 if (result.size() == 0) {
00070 initialize_set(result, proper_upper);
00071 result.insert("D");
00072 result.insert("T");
00073 }
00074 return result;
00075 }
00076
00077 }}}
00078
00079 #endif // CCTBX_ELTBX_CHEMICAL_ELEMENTS_H