From b94d9b456f24321d481a9483ecf76cf67ad66eab Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Wed, 13 Aug 2025 13:07:49 -0400 Subject: [PATCH] feat(species-lookup): added function to get species from a and z --- meson.build | 2 +- .../fourdst/composition/atomicSpecies.h | 3 + .../include/fourdst/composition/elements.h | 248 ++++++++++++++++++ .../include/fourdst/composition/species.h | 7 + src/composition/meson.build | 8 +- tests/composition/compositionTest.cpp | 4 + utils/atomic/format.py | 7 + 7 files changed, 277 insertions(+), 2 deletions(-) create mode 100644 src/composition/include/fourdst/composition/elements.h diff --git a/meson.build b/meson.build index eb488bf..dc299fd 100644 --- a/meson.build +++ b/meson.build @@ -18,7 +18,7 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # *********************************************************************** # -project('libcomposition', 'cpp', version: 'v1.5.2', default_options: ['cpp_std=c++23'], meson_version: '>=1.5.0') +project('libcomposition', 'cpp', version: 'v1.6.0', default_options: ['cpp_std=c++23'], meson_version: '>=1.5.0') # Add default visibility for all C++ targets add_project_arguments('-fvisibility=default', language: 'cpp') diff --git a/src/composition/include/fourdst/composition/atomicSpecies.h b/src/composition/include/fourdst/composition/atomicSpecies.h index cfac407..958dc46 100644 --- a/src/composition/include/fourdst/composition/atomicSpecies.h +++ b/src/composition/include/fourdst/composition/atomicSpecies.h @@ -1,9 +1,12 @@ #pragma once + + #include #include #include #include + /** * @namespace fourdst::atomic * @brief Contains classes and functions related to atomic data, such as properties of atomic species. diff --git a/src/composition/include/fourdst/composition/elements.h b/src/composition/include/fourdst/composition/elements.h new file mode 100644 index 0000000..acd3912 --- /dev/null +++ b/src/composition/include/fourdst/composition/elements.h @@ -0,0 +1,248 @@ +#pragma once + +#include +#include +#include + +namespace fourdst::atomic { + static const std::unordered_map element_symbol_map = { + {1u, "H"}, + {2u, "He"}, + {3u, "Li"}, + {4u, "Be"}, + {5u, "B"}, + {6u, "C"}, + {7u, "N"}, + {8u, "O"}, + {9u, "F"}, + {10u, "Ne"}, + {11u, "Na"}, + {12u, "Mg"}, + {13u, "Al"}, + {14u, "Si"}, + {15u, "P"}, + {16u, "S"}, + {17u, "Cl"}, + {18u, "Ar"}, + {19u, "K"}, + {20u, "Ca"}, + {21u, "Sc"}, + {22u, "Ti"}, + {23u, "V"}, + {24u, "Cr"}, + {25u, "Mn"}, + {26u, "Fe"}, + {27u, "Co"}, + {28u, "Ni"}, + {29u, "Cu"}, + {30u, "Zn"}, + {31u, "Ga"}, + {32u, "Ge"}, + {33u, "As"}, + {34u, "Se"}, + {35u, "Br"}, + {36u, "Kr"}, + {37u, "Rb"}, + {38u, "Sr"}, + {39u, "Y"}, + {40u, "Zr"}, + {41u, "Nb"}, + {42u, "Mo"}, + {43u, "Tc"}, + {44u, "Ru"}, + {45u, "Rh"}, + {46u, "Pd"}, + {47u, "Ag"}, + {48u, "Cd"}, + {49u, "In"}, + {50u, "Sn"}, + {51u, "Sb"}, + {52u, "Te"}, + {53u, "I"}, + {54u, "Xe"}, + {55u, "Cs"}, + {56u, "Ba"}, + {57u, "La"}, + {58u, "Ce"}, + {59u, "Pr"}, + {60u, "Nd"}, + {61u, "Pm"}, + {62u, "Sm"}, + {63u, "Eu"}, + {64u, "Gd"}, + {65u, "Tb"}, + {66u, "Dy"}, + {67u, "Ho"}, + {68u, "Er"}, + {69u, "Tm"}, + {70u, "Yb"}, + {71u, "Lu"}, + {72u, "Hf"}, + {73u, "Ta"}, + {74u, "W"}, + {75u, "Re"}, + {76u, "Os"}, + {77u, "Ir"}, + {78u, "Pt"}, + {79u, "Au"}, + {80u, "Hg"}, + {81u, "Tl"}, + {82u, "Pb"}, + {83u, "Bi"}, + {84u, "Po"}, + {85u, "At"}, + {86u, "Rn"}, + {87u, "Fr"}, + {88u, "Ra"}, + {89u, "Ac"}, + {90u, "Th"}, + {91u, "Pa"}, + {92u, "U"}, + {93u, "Np"}, + {94u, "Pu"}, + {95u, "Am"}, + {96u, "Cm"}, + {97u, "Bk"}, + {98u, "Cf"}, + {99u, "Es"}, + {100u, "Fm"}, + {101u, "Md"}, + {102u, "No"}, + {103u, "Lr"}, + {104u, "Rf"}, + {105u, "Db"}, + {106u, "Sg"}, + {107u, "Bh"}, + {108u, "Hs"}, + {109u, "Mt"}, + {110u, "Ds"}, + {111u, "Rg"}, + {112u, "Cn"}, + {113u, "Nh"}, + {114u, "Fl"}, + {115u, "Mc"}, + {116u, "Lv"}, + {117u, "Ts"}, + {118u, "Og"} + }; + static const std::unordered_map symbol_element_map = { + {"H", 1u}, + {"He", 2u}, + {"Li", 3u}, + {"Be", 4u}, + {"B", 5u}, + {"C", 6u}, + {"N", 7u}, + {"O", 8u}, + {"F", 9u}, + {"Ne", 10u}, + {"Na", 11u}, + {"Mg", 12u}, + {"Al", 13u}, + {"Si", 14u}, + {"P", 15u}, + {"S", 16u}, + {"Cl", 17u}, + {"Ar", 18u}, + {"K", 19u}, + {"Ca", 20u}, + {"Sc", 21u}, + {"Ti", 22u}, + {"V", 23u}, + {"Cr", 24u}, + {"Mn", 25u}, + {"Fe", 26u}, + {"Co", 27u}, + {"Ni", 28u}, + {"Cu", 29u}, + {"Zn", 30u}, + {"Ga", 31u}, + {"Ge", 32u}, + {"As", 33u}, + {"Se", 34u}, + {"Br", 35u}, + {"Kr", 36u}, + {"Rb", 37u}, + {"Sr", 38u}, + {"Y", 39u}, + {"Zr", 40u}, + {"Nb", 41u}, + {"Mo", 42u}, + {"Tc", 43u}, + {"Ru", 44u}, + {"Rh", 45u}, + {"Pd", 46u}, + {"Ag", 47u}, + {"Cd", 48u}, + {"In", 49u}, + {"Sn", 50u}, + {"Sb", 51u}, + {"Te", 52u}, + {"I", 53u}, + {"Xe", 54u}, + {"Cs", 55u}, + {"Ba", 56u}, + {"La", 57u}, + {"Ce", 58u}, + {"Pr", 59u}, + {"Nd", 60u}, + {"Pm", 61u}, + {"Sm", 62u}, + {"Eu", 63u}, + {"Gd", 64u}, + {"Tb", 65u}, + {"Dy", 66u}, + {"Ho", 67u}, + {"Er", 68u}, + {"Tm", 69u}, + {"Yb", 70u}, + {"Lu", 71u}, + {"Hf", 72u}, + {"Ta", 73u}, + {"W", 74u}, + {"Re", 75u}, + {"Os", 76u}, + {"Ir", 77u}, + {"Pt", 78u}, + {"Au", 79u}, + {"Hg", 80u}, + {"Tl", 81u}, + {"Pb", 82u}, + {"Bi", 83u}, + {"Po", 84u}, + {"At", 85u}, + {"Rn", 86u}, + {"Fr", 87u}, + {"Ra", 88u}, + {"Ac", 89u}, + {"Th", 90u}, + {"Pa", 91u}, + {"U", 92u}, + {"Np", 93u}, + {"Pu", 94u}, + {"Am", 95u}, + {"Cm", 96u}, + {"Bk", 97u}, + {"Cf", 98u}, + {"Es", 99u}, + {"Fm", 100u}, + {"Md", 101u}, + {"No", 102u}, + {"Lr", 103u}, + {"Rf", 104u}, + {"Db", 105u}, + {"Sg", 106u}, + {"Bh", 107u}, + {"Hs", 108u}, + {"Mt", 109u}, + {"Ds", 110u}, + {"Rg", 111u}, + {"Cn", 112u}, + {"Nh", 113u}, + {"Fl", 114u}, + {"Mc", 115u}, + {"Lv", 116u}, + {"Ts", 117u}, + {"Og", 118u} + }; +}; diff --git a/src/composition/include/fourdst/composition/species.h b/src/composition/include/fourdst/composition/species.h index 995f4c2..40c0059 100644 --- a/src/composition/include/fourdst/composition/species.h +++ b/src/composition/include/fourdst/composition/species.h @@ -16,6 +16,7 @@ #include #include // Required for std::numeric_limits #include "fourdst/composition/atomicSpecies.h" +#include "fourdst/composition/elements.h" namespace fourdst::atomic { static const Species n_1("n-1", "n", 1, 1, 0, 1, 0.0, "B-", 782.347, 609.8, "/2+*", "-=100", 1.0086649159, 0.00047); @@ -7137,6 +7138,12 @@ namespace fourdst::atomic { {"Og-294", Og_294}, {"Og-295", Og_295}, }; + + inline Species az_to_species(const int a, const int z) { + const std::string element_symbol = element_symbol_map.at(static_cast(z)); + const std::string species_symbol = element_symbol + "-" + std::to_string(a); + return species.at(species_symbol); + }; }; // namespace fourdst::atomic #ifndef SERIF_SPECIES_N_1 #define SERIF_SPECIES_N_1 diff --git a/src/composition/meson.build b/src/composition/meson.build index af706d6..11c9413 100644 --- a/src/composition/meson.build +++ b/src/composition/meson.build @@ -45,6 +45,12 @@ composition_dep = declare_dependency( composition_headers = files( 'include/fourdst/composition/composition.h', 'include/fourdst/composition/atomicSpecies.h', - 'include/fourdst/composition/species.h' + 'include/fourdst/composition/species.h', + 'include/fourdst/composition/elements.h' ) install_headers(composition_headers, subdir : 'fourdst/fourdst/composition') + +composition_exception_headers = files( + 'include/fourdst/composition/exceptions/exceptions_composition.h', +) +install_headers(composition_exception_headers, subdir : 'fourdst/fourdst/composition/exceptions') diff --git a/tests/composition/compositionTest.cpp b/tests/composition/compositionTest.cpp index 069f179..a2b8a5e 100644 --- a/tests/composition/compositionTest.cpp +++ b/tests/composition/compositionTest.cpp @@ -429,3 +429,7 @@ TEST_F(compositionTest, getRegisteredSpecies) { EXPECT_EQ(*it1, fourdst::atomic::H_1); } +TEST_F(compositionTest, getSpeciesFromAZ) { + EXPECT_EQ(fourdst::atomic::O_12, fourdst::atomic::az_to_species(12, 8)); +} + diff --git a/utils/atomic/format.py b/utils/atomic/format.py index bf3c610..0ed5ce1 100644 --- a/utils/atomic/format.py +++ b/utils/atomic/format.py @@ -222,6 +222,7 @@ def formatHeader(dataFrame): #include #include // Required for std::numeric_limits #include "fourdst/composition/atomicSpecies.h" +#include "fourdst/composition/elements.h" namespace fourdst::atomic {{ // Instantiate all species as static const objects. @@ -231,6 +232,12 @@ namespace fourdst::atomic {{ static const std::unordered_map species = {{ {'\n '.join([f'{{"{row["el"].strip()}-{row["a"]}", {mkInstanceName(row)}}},' for index, row in dataFrame.iterrows()])} }}; + Species az_to_species(const int a, const int z) {{ + const std::string element_symbol = element_symbol_map.at(static_cast(z)); + const std::string species_symbol = element_symbol + "-" + std::to_string(a); + return species.at(species_symbol); + }}; + }}; // namespace fourdst::atomic """ return header