From 2f1077c02d0bd23d5e1cfb09925f56f0290af086 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Fri, 10 Oct 2025 09:12:40 -0400 Subject: [PATCH] fix(weakRates): major progress in resolving bugs bigs were introduced by the interface change from accepting raw molar abundance vectors to using the composition vector. This commit resolves many of these, including preformant ways to report that a species is not present in the composition and unified index lookups using composition object tooling. BREAKING CHANGE: --- src/include/gridfire/engine/engine_graph.h | 48 +- .../gridfire/exceptions/error_engine.h | 45 +- .../gridfire/expectations/expected_engine.h | 2 +- .../partition/composite/partition_composite.h | 3 +- src/include/gridfire/reaction/weak/weak.h | 71 +- .../reaction/weak/weak_interpolator.h | 10 +- .../gridfire/reaction/weak/weak_types.h | 48 +- .../solver/strategies/CVODE_solver_strategy.h | 10 +- src/include/gridfire/utils/logging.h | 5 +- src/lib/engine/engine_graph.cpp | 134 +- src/lib/engine/procedures/construction.cpp | 85 +- src/lib/engine/procedures/priming.cpp | 2 +- src/lib/engine/views/engine_multiscale.cpp | 52 +- src/lib/partition/partition_ground.cpp | 4 +- .../partition_rauscher_thielemann.cpp | 12 +- src/lib/reaction/weak/weak.cpp | 122 +- src/lib/reaction/weak/weak_interpolator.cpp | 256 +- .../strategies/CVODE_solver_strategy.cpp | 4 +- subprojects/fourdst.wrap | 2 +- tests/graphnet_sandbox/WeakReactionsGraph.svg | 17411 ++++++++++++++++ tests/graphnet_sandbox/main.cpp | 2 +- 21 files changed, 17953 insertions(+), 375 deletions(-) create mode 100644 tests/graphnet_sandbox/WeakReactionsGraph.svg diff --git a/src/include/gridfire/engine/engine_graph.h b/src/include/gridfire/engine/engine_graph.h index ef972995..71ce37e5 100644 --- a/src/include/gridfire/engine/engine_graph.h +++ b/src/include/gridfire/engine/engine_graph.h @@ -18,6 +18,7 @@ #include #include #include +#include #include @@ -707,6 +708,7 @@ namespace gridfire { * @param rho Density in g/cm^3. * @param Ye * @param mue + * @param speciesIDLookup * @return Molar flow rate for the reaction (e.g., mol/g/s). * * This method computes the net rate at which the given reaction proceeds @@ -716,14 +718,17 @@ namespace gridfire { T calculateMolarReactionFlow( const reaction::Reaction &reaction, const std::vector& Y, - const T T9, - const T rho, T Ye, T mue + T T9, + T rho, + T Ye, + T mue, + const std::function(const fourdst::atomic::Species &)>&speciesIDLookup ) const; template T calculateReverseMolarReactionFlow( - const T T9, - const T rho, + T T9, + T rho, std::vector screeningFactors, const std::vector& Y, size_t reactionIndex, @@ -739,6 +744,7 @@ namespace gridfire { * @param rho Density in g/cm^3. * @param Ye * @param mue + * @param speciesLookup * @return StepDerivatives containing dY/dt and energy generation rate. * * This method calculates the time derivatives of all species and the @@ -748,7 +754,10 @@ namespace gridfire { [[nodiscard]] StepDerivatives calculateAllDerivatives( const std::vector& Y_in, T T9, - T rho, T Ye, T mue + T rho, + T Ye, + T mue, + std::function(const fourdst::atomic::Species &)> speciesLookup ) const; // /** @@ -869,7 +878,8 @@ namespace gridfire { const T T9, const T rho, const T Ye, - const T mue + const T mue, + const std::function(const fourdst::atomic::Species &)> speciesLookup ) const { std::vector screeningFactors = m_screeningModel->calculateScreeningFactors( m_reactions, @@ -913,16 +923,21 @@ namespace gridfire { const T N_A = static_cast(m_constants.Na); // Avogadro's number in mol^-1 const T c = static_cast(m_constants.c); // Speed of light in cm/s - // TODO: It may be prudent to introduce assertions here which validate units but will be removed in release builds (to ensure that unit inconsistencies do not creep in during future development) - // libconstants already has units built in so this should be straightforward. - // --- SINGLE LOOP OVER ALL REACTIONS --- for (size_t reactionIndex = 0; reactionIndex < m_reactions.size(); ++reactionIndex) { const auto& reaction = m_reactions[reactionIndex]; // 1. Calculate forward reaction rate const T forwardMolarReactionFlow = screeningFactors[reactionIndex] * - calculateMolarReactionFlow(reaction, Y, T9, rho, Ye, mue); + calculateMolarReactionFlow( + reaction, + Y, + T9, + rho, + Ye, + mue, + speciesLookup + ); // 2. Calculate reverse reaction rate T reverseMolarFlow = static_cast(0.0); @@ -965,7 +980,8 @@ namespace gridfire { const T T9, const T rho, const T Ye, - const T mue + const T mue, + const std::function(const fourdst::atomic::Species &)>& speciesIDLookup ) const { // --- Pre-setup (flags to control conditionals in an AD safe / branch aware manner) --- @@ -989,10 +1005,12 @@ namespace gridfire { // --- Loop through each unique reactant species and calculate the molar concentration for that species then multiply that into the accumulator --- for (const auto& [species_name, count] : reactant_counts) { // --- Resolve species to molar abundance --- - // PERF: Could probably optimize out this lookup - const auto species_it = m_speciesToIndexMap.find(m_networkSpeciesMap.at(species_name)); - const size_t species_index = species_it->second; - const T Yi = Y[species_index]; + // TODO: We need some way to handle the case when a species in the reaction is not part of the composition being tracked + const std::optional species_index = speciesIDLookup(m_networkSpeciesMap.at(species_name)); + if (!species_index.has_value()) { + return static_cast(0.0); // If any reactant is not present, the reaction cannot proceed + } + const T Yi = Y[species_index.value()]; // --- If count is > 1 , we need to raise the molar concentration to the power of count since there are really count bodies in that reaction --- molar_concentration_product *= CppAD::pow(Yi, static_cast(count)); // ni^count diff --git a/src/include/gridfire/exceptions/error_engine.h b/src/include/gridfire/exceptions/error_engine.h index b7516b0f..b4fecd84 100644 --- a/src/include/gridfire/exceptions/error_engine.h +++ b/src/include/gridfire/exceptions/error_engine.h @@ -2,6 +2,7 @@ #include #include +#include #include namespace gridfire::exceptions { @@ -17,41 +18,41 @@ namespace gridfire::exceptions { int m_total_steps; double m_eps_nuc; }; - explicit StaleEngineTrigger(const state &s) - : m_state(s) {} + explicit StaleEngineTrigger(state s) + : m_state(std::move(s)) {} - const char* what() const noexcept override{ + [[nodiscard]] const char* what() const noexcept override{ return "Engine reports stale state. This means that the caller should trigger a update of the engine state before continuing with the integration. If you as an end user are seeing this error, it is likely a bug in the code that should be reported. Please provide the input parameters and the context in which this error occurred. Thank you for your help!"; } - state getState() const { + [[nodiscard]] state getState() const { return m_state; } - size_t numSpecies() const { + [[nodiscard]] size_t numSpecies() const { return m_state.m_Y.size(); } - size_t totalSteps() const { + [[nodiscard]] size_t totalSteps() const { return m_state.m_total_steps; } - double energy() const { + [[nodiscard]] double energy() const { return m_state.m_eps_nuc; } - double getMolarAbundance(const size_t index) const { + [[nodiscard]] double getMolarAbundance(const size_t index) const { if (index > m_state.m_Y.size() - 1) { throw std::out_of_range("Index out of bounds for molar abundance vector."); } return m_state.m_Y[index]; } - double temperature() const { + [[nodiscard]] double temperature() const { return m_state.m_T9 * 1e9; // Convert T9 back to Kelvin } - double density() const { + [[nodiscard]] double density() const { return m_state.m_rho; } private: @@ -61,10 +62,10 @@ namespace gridfire::exceptions { class StaleEngineError final : public EngineError { public: - explicit StaleEngineError(const std::string& message) - : m_message(message) {} + explicit StaleEngineError(std::string message) + : m_message(std::move(message)) {} - const char* what() const noexcept override { + [[nodiscard]] const char* what() const noexcept override { return m_message.c_str(); } @@ -74,10 +75,10 @@ namespace gridfire::exceptions { class FailedToPartitionEngineError final : public EngineError { public: - explicit FailedToPartitionEngineError(const std::string& message) - : m_message(message) {} + explicit FailedToPartitionEngineError(std::string message) + : m_message(std::move(message)) {} - const char* what() const noexcept override { + [[nodiscard]] const char* what() const noexcept override { return m_message.c_str(); } private: @@ -86,10 +87,10 @@ namespace gridfire::exceptions { class NetworkResizedError final : public EngineError { public: - explicit NetworkResizedError(const std::string& message) - : m_message(message) {} + explicit NetworkResizedError(std::string message) + : m_message(std::move(message)) {} - const char* what() const noexcept override { + [[nodiscard]] const char* what() const noexcept override { return m_message.c_str(); } private: @@ -98,10 +99,10 @@ namespace gridfire::exceptions { class UnableToSetNetworkReactionsError final : public EngineError { public: - explicit UnableToSetNetworkReactionsError(const std::string& message) - : m_message(message) {} + explicit UnableToSetNetworkReactionsError(std::string message) + : m_message(std::move(message)) {} - const char* what() const noexcept override { + [[nodiscard]] const char* what() const noexcept override { return m_message.c_str(); } diff --git a/src/include/gridfire/expectations/expected_engine.h b/src/include/gridfire/expectations/expected_engine.h index 6c11daf6..dee766de 100644 --- a/src/include/gridfire/expectations/expected_engine.h +++ b/src/include/gridfire/expectations/expected_engine.h @@ -42,7 +42,7 @@ namespace gridfire::expectations { } }; - struct StaleEngineError : EngineError { + struct StaleEngineError final : EngineError { StaleEngineErrorTypes staleType; explicit StaleEngineError(const StaleEngineErrorTypes sType) diff --git a/src/include/gridfire/partition/composite/partition_composite.h b/src/include/gridfire/partition/composite/partition_composite.h index 585b775a..133149a1 100644 --- a/src/include/gridfire/partition/composite/partition_composite.h +++ b/src/include/gridfire/partition/composite/partition_composite.h @@ -6,7 +6,6 @@ #include "fourdst/logging/logging.h" #include -#include #include #include @@ -99,6 +98,6 @@ namespace gridfire::partition { * @return Unique pointer to a new PartitionFunction instance of the given type. * @throws std::runtime_error If the given type is not recognized. + */ - [[nodiscard]] std::unique_ptr selectPartitionFunction(const BasePartitionType type) const; + [[nodiscard]] std::unique_ptr selectPartitionFunction(BasePartitionType type) const; }; } \ No newline at end of file diff --git a/src/include/gridfire/reaction/weak/weak.h b/src/include/gridfire/reaction/weak/weak.h index 582bd196..d0865352 100644 --- a/src/include/gridfire/reaction/weak/weak.h +++ b/src/include/gridfire/reaction/weak/weak.h @@ -1,6 +1,6 @@ #pragma once -#define GRIDFIRE_WEAK_REACTION_LIB_SENTINEL -60.0 +#define GRIDFIRE_WEAK_REACTION_LIB_SENTINEL (-60.0) #include "gridfire/reaction/reaction.h" #include "gridfire/reaction/weak/weak_types.h" @@ -541,21 +541,74 @@ namespace gridfire::rates::weak { m_atomic(ax, ay); rateConstant = static_cast(ay[0]); } else { // The case where T is of type double - const std::expected result = m_interpolator.get_rates( + std::expected result = m_interpolator.get_rates( static_cast(m_reactant_a), static_cast(m_reactant_z), T9, - log_rhoYe, - mue + log_rhoYe ); + // TODO: Clean this up. When a bit of code needs this many comments to make it clear it is bad code if (!result.has_value()) { - const InterpolationErrorType type = result.error().type; - const std::string msg = std::format( - "Failed to interpolate weak rate for (A={}, Z={}) at T9={}, log10(rho*Ye)={}, mu_e={} with error: {}", - m_reactant.name(), m_reactant_a, m_reactant_z, T9, log_rhoYe, mue, InterpolationErrorTypeMap.at(type) + bool okayToClamp = true; + const auto&[errorType, boundsErrorInfo] = result.error(); + + // The logic here is + // 1. If there is any bounds error in T9 then we do not allow clamping. T9 should be a large enough grid + // that the user should not be asking for values outside the grid. + // 2. If there is no bounds error in T9, but there is a bounds error in log_rhoYe, then we only allow + // clamping if the query value is below the minimum of the grid. If it is above the maximum + // of the grid, then we do not allow clamping. The reason for this is that at high density, + // screening and other effects can make a significant difference to the rates, and + // the user should be aware that they are asking for a value outside the grid. + + // There are a couple of safety asserts in here that are only active in debug builds. These are to + // ensure that our assumptions about the error information are correct. These should really never + // be triggered, but if they are, they will help us to identify any issues. + if (errorType == InterpolationErrorType::BOUNDS_ERROR) { + assert(boundsErrorInfo.has_value()); // must be true if type is BOUNDS_ERROR, removed in release builds + + if (boundsErrorInfo->contains(TableAxes::T9)) { + okayToClamp = false; + } else { + assert(boundsErrorInfo->contains(TableAxes::LOG_RHOYE)); // must be true if T9 is not, removed in release builds + const BoundsErrorInfo& boundsError = boundsErrorInfo->at(TableAxes::LOG_RHOYE); + + if (boundsError.queryValue > boundsError.axisMaxValue) { + okayToClamp = false; + } + + assert(boundsError.queryValue < boundsError.axisMinValue); // Given the above logic, this must be true, removed in release builds + } + } + + if (!okayToClamp) { + const InterpolationErrorType type = result.error().type; + const std::string msg = std::format( + "Failed to interpolate weak rate for {} (A={}, Z={}) at T9={}, log10(rho*Ye)={}, with error: {}. Clamping disallowed due to either query value being out of bounds in T9 or being above the maximum in log10(rho*Ye).", + m_reactant.name(), m_reactant_a, m_reactant_z, T9, log_rhoYe, InterpolationErrorTypeMap.at(type) + ); + throw std::runtime_error(msg); + } + + // In the case we get here the error was a bounds error in log_rhoYe and the query value was below the minimum of the grid + // so the solution is to clamp the query value to the minimum of the grid and try again. + result = m_interpolator.get_rates( + static_cast(m_reactant_a), + static_cast(m_reactant_z), + T9, + boundsErrorInfo->at(TableAxes::LOG_RHOYE).axisMinValue ); - throw std::runtime_error(msg); + + // Check the result again. If it fails this time then we have a real problem and we throw. + if (!result.has_value()) { + const InterpolationErrorType type = result.error().type; + const std::string msg = std::format( + "After clamping, failed to interpolate weak rate for {} (A={}, Z={}) at T9={}, log10(rho*Ye)={}, with error: {}", + m_reactant.name(), m_reactant_a, m_reactant_z, T9, log_rhoYe, InterpolationErrorTypeMap.at(type) + ); + throw std::runtime_error(msg); + } } const WeakRatePayload payload = result.value(); const double logRate = get_log_rate_from_payload(payload); diff --git a/src/include/gridfire/reaction/weak/weak_interpolator.h b/src/include/gridfire/reaction/weak/weak_interpolator.h index c5fdc63a..e1a7af52 100644 --- a/src/include/gridfire/reaction/weak/weak_interpolator.h +++ b/src/include/gridfire/reaction/weak/weak_interpolator.h @@ -2,6 +2,7 @@ #include "gridfire/reaction/weak/weak_types.h" #include "fourdst/composition/atomicSpecies.h" +#include "fourdst/logging/logging.h" #include #include @@ -66,7 +67,6 @@ namespace gridfire::rates::weak { * @param Z Proton number of the isotope. * @param t9 Temperature in GK (10^9 K). * @param log_rhoYe Log10 of rho*Ye (cgs density times electron fraction). - * @param mu_e Electron chemical potential (MeV). * @return expected: payload on success; * InterpolationError::UNKNOWN_SPECIES_ERROR if (A,Z) not present; or * InterpolationError::BOUNDS_ERROR if any coordinate is outside the table @@ -84,8 +84,7 @@ namespace gridfire::rates::weak { uint16_t A, uint8_t Z, double t9, - double log_rhoYe, - double mu_e + double log_rhoYe ) const; /** @@ -100,7 +99,6 @@ namespace gridfire::rates::weak { * @param Z Proton number of the isotope. * @param t9 Temperature in GK (10^9 K). * @param log_rhoYe Log10 of rho*Ye (cgs density times electron fraction). - * @param mu_e Electron chemical potential (MeV). * @return expected: derivative payload on success; * otherwise an InterpolationError as described above. * @par Example @@ -114,10 +112,10 @@ namespace gridfire::rates::weak { uint16_t A, uint8_t Z, double t9, - double log_rhoYe, - double mu_e + double log_rhoYe ) const; private: + quill::Logger* m_logger = fourdst::logging::LogManager::getInstance().getLogger("log"); /** * @brief Pack (A,Z) into a 32-bit key used for the internal map. * diff --git a/src/include/gridfire/reaction/weak/weak_types.h b/src/include/gridfire/reaction/weak/weak_types.h index 793d4585..7ac3fa90 100644 --- a/src/include/gridfire/reaction/weak/weak_types.h +++ b/src/include/gridfire/reaction/weak/weak_types.h @@ -93,18 +93,18 @@ namespace gridfire::rates::weak { }; /** - * @brief Partial derivatives of the log10() fields w.r.t. (T9, log10(rho*Ye), mu_e). + * @brief Partial derivatives of the log10() fields w.r.t. (T9, log10(rho*Ye)). * - * Array ordering is [d/dT9, d/dlogRhoYe, d/dMuE] for each corresponding field. + * Array ordering is [d/dT9, d/dlogRhoYe] for each corresponding field. */ struct WeakRateDerivatives { // Each array holds [d/dT9, d/dlogRhoYe, d/dMuE] - std::array d_log_beta_plus; - std::array d_log_electron_capture; - std::array d_log_neutrino_loss_ec; - std::array d_log_beta_minus; - std::array d_log_positron_capture; - std::array d_log_antineutrino_loss_bd; + std::array d_log_beta_plus; + std::array d_log_electron_capture; + std::array d_log_neutrino_loss_ec; + std::array d_log_beta_minus; + std::array d_log_positron_capture; + std::array d_log_antineutrino_loss_bd; }; /** @@ -133,6 +133,19 @@ namespace gridfire::rates::weak { LOG_RHOYE, ///< log10(rho*Ye). MUE ///< Electron chemical potential (MeV). }; +} + +// This need to be here to avoid compiler issues related to the order of specialization +namespace std { + template <> + struct hash { + std::size_t operator()(gridfire::rates::weak::TableAxes t) const noexcept { + return std::hash()(static_cast(t)); + } + }; +} + +namespace gridfire::rates::weak { /** * @brief Detailed bounds information for a BOUNDS_ERROR. @@ -154,20 +167,20 @@ namespace gridfire::rates::weak { std::optional> boundsErrorInfo = std::nullopt; }; + /** - * @brief Regular 3D grid and payloads for a single isotope (A,Z). + * @brief Regular 2D grid and payloads for a single isotope (A,Z). * * Axes are monotonically increasing per dimension. Data vector is laid out in * row-major order with index computed as: - * index = ((i_t9 * rhoYe_axis.size() + j_rhoYe) * mue_axis.size()) + k_mue + * + * index = i_t9 * N_rhoYe + j_rhoYe + * */ struct IsotopeGrid { - std::vector t9_axis; ///< Unique sorted T9 grid. - std::vector rhoYe_axis;///< Unique sorted log10(rho*Ye) grid. - std::vector mue_axis; ///< Unique sorted mu_e grid. - - // index = ((i_t9 * rhoYe_axis.size() + j_rhoYe) * mue_axis.size()) + k_mue - std::vector data; ///< Payloads at each grid node. + std::vector t9_axis; ///< Unique sorted T9 grid. + std::vector rhoYe_axis; ///< Unique sorted log10(rho*Ye) grid. + std::vector data; ///< MuE axis for each (T9, log_rhoYe) pair (the table is ragged in mu_e). This is also where the payloads are stored. }; /** @@ -216,4 +229,5 @@ namespace gridfire::rates::weak { return os; } }; -} \ No newline at end of file +} + diff --git a/src/include/gridfire/solver/strategies/CVODE_solver_strategy.h b/src/include/gridfire/solver/strategies/CVODE_solver_strategy.h index be986cda..6917a1e7 100644 --- a/src/include/gridfire/solver/strategies/CVODE_solver_strategy.h +++ b/src/include/gridfire/solver/strategies/CVODE_solver_strategy.h @@ -21,11 +21,15 @@ // Include headers for linear solvers and N_Vectors // We will use preprocessor directives to select the correct ones -#include // For CVDls (serial dense linear solver) #include #include #include +// These are the possible N_Vector implementations. We use the compiler defines to select the most appropriate one for the build. +// If none are defined, we default to serial. + +// For precompiled binaries we will need to ensure that we have versions built for all three types (ideally with some runtime +// checks that will fail gracefully if the user tries to use an unsupported type). #ifdef SUNDIALS_HAVE_OPENMP #include #endif @@ -103,7 +107,7 @@ namespace gridfire::solver { * if present after a step, it is rethrown for upstream handling. * - Prints/collects diagnostics per step (step size, energy, solver iterations). * - On trigger activation, rebuilds CVODE resources to reflect a changed network and - * reinitializes the state using the latest engine composition, preserving energy. + * reinitialized the state using the latest engine composition, preserving energy. * - At the end, converts molar abundances to mass fractions and assembles NetOut, * including derivatives of energy w.r.t. T and rho from the engine. * @@ -250,7 +254,7 @@ namespace gridfire::solver { * @brief Compute and print per-component error ratios; run diagnostic helpers. * * Gathers CVODE's estimated local errors, converts the state to a Composition, and prints a - * sorted table of species with highest error ratios; then invokes diagnostic routines to + * sorted table of species with the highest error ratios; then invokes diagnostic routines to * inspect Jacobian stiffness and species balance. */ void log_step_diagnostics(const CVODEUserData& user_data) const; diff --git a/src/include/gridfire/utils/logging.h b/src/include/gridfire/utils/logging.h index e583dc71..261db620 100644 --- a/src/include/gridfire/utils/logging.h +++ b/src/include/gridfire/utils/logging.h @@ -1,10 +1,9 @@ #pragma once #include "gridfire/engine/engine_abstract.h" +#include "fourdst/composition/composition.h" #include -#include - namespace gridfire::utils { /** @@ -17,7 +16,7 @@ namespace gridfire::utils { * * @param engine A constant reference to a `DynamicEngine` object, used to * calculate the species timescales. - * @param Y A vector of the molar abundances (mol/g) for each species. + * @param composition The current composition of the plasma * @param T9 The temperature in units of 10^9 K. * @param rho The plasma density in g/cm^3. * @return A std::string containing the formatted table of species and their diff --git a/src/lib/engine/engine_graph.cpp b/src/lib/engine/engine_graph.cpp index 39027f66..431a171e 100644 --- a/src/lib/engine/engine_graph.cpp +++ b/src/lib/engine/engine_graph.cpp @@ -79,7 +79,19 @@ namespace gridfire { // --- The public facing interface can always use the precomputed version since taping is done internally --- return calculateAllDerivativesUsingPrecomputation(comp, bare_rates, bare_reverse_rates, T9, rho); } else { - return calculateAllDerivatives(comp.getMolarAbundanceVector(), T9, rho, Ye, mue); + return calculateAllDerivatives( + comp.getMolarAbundanceVector(), + T9, + rho, + Ye, + mue, + [&comp](const fourdst::atomic::Species& species) -> std::optional { + if (comp.contains(species)) { + return comp.getSpeciesIndex(species); // Return the index of the species in the composition + } + return std::nullopt; // Species not found in the composition + } + ); } } @@ -305,11 +317,18 @@ namespace gridfire { return 0.0; // If reverse reactions are not used, return 0.0 } const double temp = T9 * 1e9; // Convert T9 to Kelvin - const double Ye = comp.getElectronAbundance(); - // TODO: This is a dummy value for the electron chemical potential. We eventually need to replace this with an EOS call. - const double mue = 5.0e-3 * std::pow(rho * Ye, 1.0 / 3.0) + 0.5 * T9; + // Reverse reactions are only relevant for strong reactions (at least during the vast majority of stellar evolution) + // So here we just let these be dummy values since we know + // 1. The reaction should always be strong + // 2. The strong reaction rate is independent of Ye and mue + // + // In development builds the assert below will confirm this + constexpr double Ye = 0.0; + constexpr double mue = 0.0; + // It is a logic error to call this function on a weak reaction + assert(reaction.type() != gridfire::reaction::ReactionType::WEAK); // In debug builds we check the units on kB to ensure it is in erg/K. This is removed in release builds to avoid overhead. (Note assert is a no-op in release builds) assert(Constants::getInstance().get("kB").unit == "erg / K"); @@ -317,7 +336,8 @@ namespace gridfire { const double kBMeV = m_constants.kB * 624151; // Convert kB to MeV/K NOTE: This relies on the fact that m_constants.kB is in erg/K! const double expFactor = std::exp(-reaction.qValue() / (kBMeV * temp)); double reverseRate = 0.0; - const double forwardRate = reaction.calculate_rate(T9, rho, Ye, mue, comp.getMolarAbundanceVector(), m_indexToSpeciesMap); + // We also let Y be an empy vector since the strong reaction rate is independent of Y + const double forwardRate = reaction.calculate_rate(T9, rho, Ye, mue, {}, m_indexToSpeciesMap); if (reaction.reactants().size() == 2 && reaction.products().size() == 2) { reverseRate = calculateReverseRateTwoBody(reaction, T9, forwardRate, expFactor); @@ -696,10 +716,20 @@ namespace gridfire { const double Ye = comp.getElectronAbundance(); - // TODO: This is a dummy placeholder which must be replaced with an EOS call - const double mue = 5.0e-3 * std::pow(rho * Ye, 1.0 / 3.0) + 0.5 * T9; - - return calculateMolarReactionFlow(reaction, comp.getMolarAbundanceVector(), T9, rho, Ye, mue); + return calculateMolarReactionFlow( + reaction, + comp.getMolarAbundanceVector(), + T9, + rho, + Ye, + 0.0, + [&comp](const fourdst::atomic::Species& species) -> std::optional { + if (comp.contains(species)) { // Species present in the composition + return comp.getSpeciesIndex(species); + } + return std::nullopt; // Species not present + } + ); } void GraphEngine::generateJacobianMatrix( @@ -908,10 +938,20 @@ namespace gridfire { const double rho ) const { const double Ye = comp.getElectronAbundance(); - // TODO: This is a dummy placeholder which must be replaced with an EOS call - const double mue = 5.0e-3 * std::pow(rho * Ye, 1.0 / 3.0) + 0.5 * T9; - auto [dydt, _] = calculateAllDerivatives(comp.getMolarAbundanceVector(), T9, rho, Ye, mue); + auto [dydt, _] = calculateAllDerivatives( + comp.getMolarAbundanceVector(), + T9, + rho, + Ye, + 0.0, + [&comp](const fourdst::atomic::Species& species) -> std::optional { + if (comp.contains(species)) { // Species present in the composition + return comp.getSpeciesIndex(species); + } + return std::nullopt; // Species not present + } + ); std::unordered_map speciesTimescales; speciesTimescales.reserve(m_networkSpecies.size()); for (const auto& species : m_networkSpecies) { @@ -930,17 +970,39 @@ namespace gridfire { const double rho ) const { const double Ye = comp.getElectronAbundance(); - // TODO: This is a dummy placeholder which must be replaced with an EOS call - const double mue = 5.0e-3 * std::pow(rho * Ye, 1.0 / 3.0) + 0.5 * T9; + const std::vector& Y = comp.getMolarAbundanceVector(); + + auto speciesLookup = [&comp](const fourdst::atomic::Species& species) -> std::optional { + if (comp.contains(species)) { // Species present in the composition + return comp.getSpeciesIndex(species); + } + return std::nullopt; // Species not present + }; + + auto [dydt, _] = calculateAllDerivatives( + Y, + T9, + rho, + Ye, + 0.0, + speciesLookup + ); - auto [dydt, _] = calculateAllDerivatives(comp.getMolarAbundanceVector(), T9, rho, Ye, mue); std::unordered_map speciesDestructionTimescales; speciesDestructionTimescales.reserve(m_networkSpecies.size()); for (const auto& species : m_networkSpecies) { double netDestructionFlow = 0.0; for (const auto& reaction : m_reactions) { if (reaction->stoichiometry(species) < 0) { - const auto flow = calculateMolarReactionFlow(*reaction, comp.getMolarAbundanceVector(), T9, rho, Ye, mue); + const auto flow = calculateMolarReactionFlow( + *reaction, + Y, + T9, + rho, + Ye, + 0.0, + speciesLookup + ); netDestructionFlow += flow; } } @@ -979,7 +1041,7 @@ namespace gridfire { m_logger->flush_log(); throw std::runtime_error("Cannot record AD tape: No species in the network."); } - const size_t numADInputs = numSpecies + 2; // Note here that by not letting T9 and rho be independent variables, we are constraining the network to a constant temperature and density during each evaluation. + const size_t numADInputs = numSpecies + 2; // Y + T9 + rho // --- CppAD Tape Recording --- // 1. Declare independent variable (adY) @@ -1004,13 +1066,22 @@ namespace gridfire { const CppAD::AD adRho = adInput[numSpecies + 1]; // Dummy values for Ye and mue to let taping happen - const CppAD::AD adYe = 1.0; - const CppAD::AD adMue = 1.0; + const CppAD::AD adYe = 1e6; + const CppAD::AD adMue = 10.0; // 5. Call the actual templated function // We let T9 and rho be constant, so we pass them as fixed values. - auto [dydt, nuclearEnergyGenerationRate] = calculateAllDerivatives>(adY, adT9, adRho, adYe, adMue); + auto [dydt, nuclearEnergyGenerationRate] = calculateAllDerivatives>( + adY, + adT9, + adRho, + adYe, + adMue, + [&](const fourdst::atomic::Species& querySpecies) -> size_t { + return m_speciesToIndexMap.at(querySpecies); // TODO: This is bad, needs to be fixed + } + ); // Extract the raw vector from the associative map std::vector> dydt_vec; @@ -1049,10 +1120,19 @@ namespace gridfire { const CppAD::AD adRho = adInput[numSpecies + 1]; // Dummy values for Ye and mue to let taping happen - const CppAD::AD adYe = 1.0; + const CppAD::AD adYe = 1e6; const CppAD::AD adMue = 1.0; - auto [dydt, nuclearEnergyGenerationRate] = calculateAllDerivatives>(adY, adT9, adRho, adYe, adMue); + auto [dydt, nuclearEnergyGenerationRate] = calculateAllDerivatives>( + adY, + adT9, + adRho, + adYe, + adMue, + [&](const fourdst::atomic::Species& querySpecies) -> size_t { + return m_speciesToIndexMap.at(querySpecies); // TODO: This is bad, needs to be fixed + } + ); std::vector> adOutput(1); adOutput[0] = nuclearEnergyGenerationRate; @@ -1157,8 +1237,10 @@ namespace gridfire { if ( p != 0) { return false; } const double T9 = tx[0]; - // TODO: Handle rho and Y - const double reverseRate = m_engine.calculateReverseRate(m_reaction, T9, 0, {}); + // This is an interesting problem because the reverse rate should only ever be computed for strong reactions + // Which do not depend on rho or Y. However, the signature requires them... + // For now, we just pass dummy values for rho and Y + const double reverseRate = m_engine.calculateReverseRate(m_reaction, T9, 0.0, {}); // std::cout << m_reaction.peName() << " reverseRate: " << reverseRate << " at T9: " << T9 << "\n"; ty[0] = reverseRate; // Store the reverse rate in the output vector @@ -1178,7 +1260,9 @@ namespace gridfire { const double T9 = tx[0]; const double reverseRate = ty[0]; - // TODO: Handle rho and Y + // This is an interesting problem because the reverse rate should only ever be computed for strong reactions + // Which do not depend on rho or Y. However, the signature requires them... + // For now, we just pass dummy values for rho and Y const double derivative = m_engine.calculateReverseRateTwoBodyDerivative(m_reaction, T9, 0, {}, reverseRate); px[0] = py[0] * derivative; // Return the derivative of the reverse rate with respect to T9 diff --git a/src/lib/engine/procedures/construction.cpp b/src/lib/engine/procedures/construction.cpp index 02535ba3..544d6c72 100644 --- a/src/lib/engine/procedures/construction.cpp +++ b/src/lib/engine/procedures/construction.cpp @@ -25,10 +25,11 @@ namespace gridfire { ReactionSet build_nuclear_network( - const Composition& composition, - const rates::weak::WeakRateInterpolator& weak_interpolator, - BuildDepthType maxLayers, - bool reverse_reaclib) { + const Composition& composition, + const rates::weak::WeakRateInterpolator& weakInterpolator, + BuildDepthType maxLayers, + bool reverse + ) { int depth; if (std::holds_alternative(maxLayers)) { depth = static_cast(std::get(maxLayers)); @@ -47,40 +48,52 @@ namespace gridfire { // Clone all relevant REACLIB reactions into the master pool const auto& allReaclibReactions = reaclib::get_all_reaclib_reactions(); for (const auto& reaction : allReaclibReactions) { - if (reaction->is_reverse() == reverse_reaclib) { + if (reaction->is_reverse() == reverse) { master_reaction_pool.add_reaction(reaction->clone()); } } - for (const auto& parent_species: weak_interpolator.available_isotopes()) { - master_reaction_pool.add_reaction( - std::make_unique( - parent_species, - rates::weak::WeakReactionType::BETA_PLUS_DECAY, - weak_interpolator - ) + for (const auto& parent_species: weakInterpolator.available_isotopes()) { + std::expected upProduct = fourdst::atomic::az_to_species( + parent_species.a(), + parent_species.z() + 1 ); - master_reaction_pool.add_reaction( - std::make_unique( - parent_species, - rates::weak::WeakReactionType::BETA_MINUS_DECAY, - weak_interpolator - ) - ); - master_reaction_pool.add_reaction( - std::make_unique( - parent_species, - rates::weak::WeakReactionType::ELECTRON_CAPTURE, - weak_interpolator - ) - ); - master_reaction_pool.add_reaction( - std::make_unique( - parent_species, - rates::weak::WeakReactionType::POSITRON_CAPTURE, - weak_interpolator - ) + std::expected downProduct = fourdst::atomic::az_to_species( + parent_species.a(), + parent_species.z() - 1 ); + if (downProduct.has_value()) { // Only add the reaction if the Species map contains the product + master_reaction_pool.add_reaction( + std::make_unique( + parent_species, + rates::weak::WeakReactionType::BETA_PLUS_DECAY, + weakInterpolator + ) + ); + master_reaction_pool.add_reaction( + std::make_unique( + parent_species, + rates::weak::WeakReactionType::ELECTRON_CAPTURE, + weakInterpolator + ) + ); + } + if (upProduct.has_value()) { // Only add the reaction if the Species map contains the product + master_reaction_pool.add_reaction( + std::make_unique( + parent_species, + rates::weak::WeakReactionType::BETA_MINUS_DECAY, + weakInterpolator + ) + ); + master_reaction_pool.add_reaction( + std::make_unique( + parent_species, + rates::weak::WeakReactionType::POSITRON_CAPTURE, + weakInterpolator + ) + ); + } } // --- Step 2: Use non-owning raw pointers for the fast build algorithm --- @@ -140,7 +153,13 @@ namespace gridfire { break; } - LOG_TRACE_L1(logger, "Layer {}: Collected {} new reactions. New products this layer: {}", collectedReactionPtrs.size() - collectedReactionPtrs.size(), newProductsThisLayer.size()); + LOG_TRACE_L1( + logger, + "Layer {}: Collected {} new reactions. New products this layer: {}", + layer, + collectedReactionPtrs.size() - collectedReactionPtrs.size(), + newProductsThisLayer.size() + ); availableSpecies.insert(newProductsThisLayer.begin(), newProductsThisLayer.end()); remainingReactions = std::move(reactionsForNextPass); } diff --git a/src/lib/engine/procedures/priming.cpp b/src/lib/engine/procedures/priming.cpp index 52673b0b..93ae9664 100644 --- a/src/lib/engine/procedures/priming.cpp +++ b/src/lib/engine/procedures/priming.cpp @@ -17,7 +17,7 @@ namespace gridfire { const reaction::Reaction* findDominantCreationChannel ( const DynamicEngine& engine, const Species& species, - const fourdst::composition::Composition &comp, + const Composition &comp, const double T9, const double rho ) { diff --git a/src/lib/engine/views/engine_multiscale.cpp b/src/lib/engine/views/engine_multiscale.cpp index 81fc596a..a86791cb 100644 --- a/src/lib/engine/views/engine_multiscale.cpp +++ b/src/lib/engine/views/engine_multiscale.cpp @@ -17,7 +17,13 @@ namespace { using namespace fourdst::atomic; - std::vector packCompositionToVector(const fourdst::composition::Composition& composition, const gridfire::GraphEngine& engine) { + //TODO: Replace all calls to this function with composition.getMolarAbundanceVector() so that + // we don't have to keep this function around. (Cant do this right now because there is not a + // guarantee that this function will return the same ordering as the canonical vector representation) + std::vector packCompositionToVector( + const fourdst::composition::Composition& composition, + const gridfire::GraphEngine& engine + ) { std::vector Y(engine.getNetworkSpecies().size(), 0.0); const auto& allSpecies = engine.getNetworkSpecies(); for (size_t i = 0; i < allSpecies.size(); ++i) { @@ -780,6 +786,7 @@ namespace gridfire { LOG_TRACE_L1(m_logger, "Partitioning by timescale..."); const auto result= m_baseEngine.getSpeciesDestructionTimescales(comp, T9, rho); const auto netTimescale = m_baseEngine.getSpeciesTimescales(comp, T9, rho); + if (!result) { LOG_ERROR(m_logger, "Failed to get species destruction timescales due to stale engine state"); m_logger->flush_log(); @@ -792,6 +799,14 @@ namespace gridfire { } const std::unordered_map& all_timescales = result.value(); const std::unordered_map& net_timescales = netTimescale.value(); + + for (const auto& [species, destructionTimescale] : all_timescales) { + std::cout << "Species: " << species.name() + << ", Destruction Timescale: " << (std::isfinite(destructionTimescale) ? std::to_string(destructionTimescale) : "inf") + << " s, Net Timescale: " << (std::isfinite(net_timescales.at(species)) ? std::to_string(net_timescales.at(species)) : "inf") + << " s\n"; + } + const auto& all_species = m_baseEngine.getNetworkSpecies(); std::vector> sorted_timescales; @@ -1075,6 +1090,11 @@ namespace gridfire { normalized_composition.setMassFraction(species, 0.0); } } + bool normCompFinalizedOkay = normalized_composition.finalize(true); + if (!normCompFinalizedOkay) { + LOG_ERROR(m_logger, "Failed to finalize composition before QSE solve."); + throw std::runtime_error("Failed to finalize composition before QSE solve."); + } Eigen::VectorXd Y_scale(algebraic_species.size()); Eigen::VectorXd v_initial(algebraic_species.size()); @@ -1330,10 +1350,18 @@ namespace gridfire { Eigen::VectorXd y_qse = m_Y_scale.array() * v_qse.array().sinh(); // Convert to physical abundances using asinh scaling for (const auto& species: m_qse_solve_species) { - if (!comp_trial.contains(species)) { + if (!comp_trial.hasSymbol(std::string(species.name()))) { comp_trial.registerSpecies(species); } - comp_trial.setMassFraction(species, y_qse[static_cast(m_qse_solve_species_index_map.at(species))]); + const double molarAbundance = y_qse[static_cast(m_qse_solve_species_index_map.at(species))]; + const double massFraction = molarAbundance * species.mass(); + comp_trial.setMassFraction(species, massFraction); + } + + const bool didFinalize = comp_trial.finalize(false); + if (!didFinalize) { + std::string msg = std::format("Failed to finalize composition (comp_trial) in {} at line {}", __FILE__, __LINE__); + throw std::runtime_error(msg); } const auto result = m_view->getBaseEngine().calculateRHSAndEnergy(comp_trial, m_T9, m_rho); @@ -1357,10 +1385,18 @@ namespace gridfire { Eigen::VectorXd y_qse = m_Y_scale.array() * v_qse.array().sinh(); // Convert to physical abundances using asinh scaling for (const auto& species: m_qse_solve_species) { - if (!comp_trial.contains(species)) { + if (!comp_trial.hasSymbol(std::string(species.name()))) { comp_trial.registerSpecies(species); } - comp_trial.setMassFraction(species, y_qse[static_cast(m_qse_solve_species_index_map.at(species))]); + const double molarAbundance = y_qse[static_cast(m_qse_solve_species_index_map.at(species))]; + const double massFraction = molarAbundance * species.mass(); + comp_trial.setMassFraction(species, massFraction); + } + + const bool didFinalize = comp_trial.finalize(false); + if (!didFinalize) { + std::string msg = std::format("Failed to finalize composition (comp_trial) in {} at line {}", __FILE__, __LINE__); + throw std::runtime_error(msg); } m_view->getBaseEngine().generateJacobianMatrix(comp_trial, m_T9, m_rho); @@ -1368,14 +1404,16 @@ namespace gridfire { const long N = static_cast(m_qse_solve_species.size()); J_qse.resize(N, N); long rowID = 0; - long colID = 0; for (const auto& rowSpecies : m_qse_solve_species) { + long colID = 0; for (const auto& colSpecies: m_qse_solve_species) { - J_qse(rowID++, colID++) = m_view->getBaseEngine().getJacobianMatrixEntry( + J_qse(rowID, colID) = m_view->getBaseEngine().getJacobianMatrixEntry( rowSpecies, colSpecies ); + colID += 1; } + rowID += 1; } // Chain rule for asinh scaling: diff --git a/src/lib/partition/partition_ground.cpp b/src/lib/partition/partition_ground.cpp index 1bc5c457..c65f4c41 100644 --- a/src/lib/partition/partition_ground.cpp +++ b/src/lib/partition/partition_ground.cpp @@ -19,7 +19,7 @@ namespace gridfire::partition { const int a, const double T9 ) const { - LOG_TRACE_L2(m_logger, "Evaluating ground state partition function for Z={} A={} T9={}", z, a, T9); + LOG_TRACE_L3(m_logger, "Evaluating ground state partition function for Z={} A={} T9={}", z, a, T9); const int key = make_key(z, a); const double spin = m_ground_state_spin.at(key); return (2.0 * spin) + 1.0; @@ -30,7 +30,7 @@ namespace gridfire::partition { const int a, const double T9 ) const { - LOG_TRACE_L2(m_logger, "Evaluating derivative of ground state partition function for Z={} A={} T9={}", z, a, T9); + LOG_TRACE_L3(m_logger, "Evaluating derivative of ground state partition function for Z={} A={} T9={}", z, a, T9); return 0.0; } diff --git a/src/lib/partition/partition_rauscher_thielemann.cpp b/src/lib/partition/partition_rauscher_thielemann.cpp index 6c037a80..4949ff72 100644 --- a/src/lib/partition/partition_rauscher_thielemann.cpp +++ b/src/lib/partition/partition_rauscher_thielemann.cpp @@ -44,21 +44,21 @@ namespace gridfire::partition { const int a, const double T9 ) const { - LOG_TRACE_L2(m_logger, "Evaluating Rauscher-Thielemann partition function for Z={} A={} T9={}", z, a, T9); + LOG_TRACE_L3(m_logger, "Evaluating Rauscher-Thielemann partition function for Z={} A={} T9={}", z, a, T9); const auto [bound, data, upperIndex, lowerIndex] = find(z, a, T9); switch (bound) { case FRONT: { - LOG_TRACE_L2(m_logger, "Using FRONT bound for Z={} A={} T9={}", z, a, T9); + LOG_TRACE_L3(m_logger, "Using FRONT bound for Z={} A={} T9={}", z, a, T9); return data.normalized_g_values.front() * (2.0 * data.ground_state_spin + 1.0); } case BACK: { - LOG_TRACE_L2(m_logger, "Using BACK bound for Z={} A={} T9={}", z, a, T9); + LOG_TRACE_L3(m_logger, "Using BACK bound for Z={} A={} T9={}", z, a, T9); return data.normalized_g_values.back() * (2.0 * data.ground_state_spin + 1.0); } case MIDDLE: { - LOG_TRACE_L2(m_logger, "Using MIDDLE bound for Z={} A={} T9={}", z, a, T9); + LOG_TRACE_L3(m_logger, "Using MIDDLE bound for Z={} A={} T9={}", z, a, T9); } } @@ -79,10 +79,10 @@ namespace gridfire::partition { const int a, const double T9 ) const { - LOG_TRACE_L2(m_logger, "Evaluating derivative of Rauscher-Thielemann partition function for Z={} A={} T9={}", z, a, T9); + LOG_TRACE_L3(m_logger, "Evaluating derivative of Rauscher-Thielemann partition function for Z={} A={} T9={}", z, a, T9); const auto [bound, data, upperIndex, lowerIndex] = find(z, a, T9); if (bound == FRONT || bound == BACK) { - LOG_TRACE_L2(m_logger, "Derivative is zero for Z={} A={} T9={} (bound: {})", z, a, T9, bound == FRONT ? "FRONT" : "BACK"); + LOG_TRACE_L3(m_logger, "Derivative is zero for Z={} A={} T9={} (bound: {})", z, a, T9, bound == FRONT ? "FRONT" : "BACK"); return 0.0; // Derivative is zero at the boundaries } const auto [T9_high, G_norm_high, T9_low, G_norm_low] = get_interpolation_points( diff --git a/src/lib/reaction/weak/weak.cpp b/src/lib/reaction/weak/weak.cpp index 428f9008..e47e28c4 100644 --- a/src/lib/reaction/weak/weak.cpp +++ b/src/lib/reaction/weak/weak.cpp @@ -16,6 +16,11 @@ namespace { + std::unordered_map SpeciesErrorTypeMap = { + {fourdst::atomic::SpeciesErrorType::ELEMENT_SYMBOL_NOT_FOUND, "Element symbol not found (Z out of range)"}, + {fourdst::atomic::SpeciesErrorType::SPECIES_SYMBOL_NOT_FOUND, "Species symbol not found ((A,Z) out of range)"} + }; + fourdst::atomic::Species resolve_weak_product( const gridfire::rates::weak::WeakReactionType type, const fourdst::atomic::Species& reactant @@ -23,25 +28,36 @@ namespace { using namespace fourdst::atomic; using namespace gridfire::rates::weak; - std::optional product; // Use optional so that we can start in a valid "null" state + int zMod = 0; switch (type) { case WeakReactionType::BETA_MINUS_DECAY: - product = az_to_species(reactant.a(), reactant.z() + 1); - return product.value(); + zMod = 1; + break; case WeakReactionType::BETA_PLUS_DECAY: - product = az_to_species(reactant.a(), reactant.z() - 1); - return product.value(); - case WeakReactionType::ELECTRON_CAPTURE: - product = az_to_species(reactant.a(), reactant.z() - 1); - return product.value(); + zMod = -1; + break; case WeakReactionType::POSITRON_CAPTURE: - product = az_to_species(reactant.a(), reactant.z() + 1); + zMod = 1; + break; + case WeakReactionType::ELECTRON_CAPTURE: + zMod = -1; break; } - if (!product.has_value()) { - throw std::runtime_error("Failed to resolve weak reaction product for reactant: " + std::string(reactant.name())); + std::expected product = az_to_species(reactant.a(), reactant.z() + zMod); + + if (product.has_value()) { + return product.value(); } - return product.value(); + const std::string msg = std::format( + "Failed to resolve weak reaction product (A: {}, Z: {}) for reactant {} (looked up A: {}, Z: {}): {}", + reactant.a(), + reactant.z(), + reactant.name(), + reactant.a(), + reactant.z() + zMod, + SpeciesErrorTypeMap.at(product.error()) + ); + throw std::runtime_error(msg); } std::string resolve_weak_id( @@ -77,7 +93,16 @@ namespace gridfire::rates::weak { // ReSharper disable once CppUseStructuredBinding for (const auto& weak_reaction_record : UNIFIED_WEAK_DATA) { - Species species = az_to_species(weak_reaction_record.A, weak_reaction_record.Z); + std::expected species_result = az_to_species(weak_reaction_record.A, weak_reaction_record.Z); + if (!species_result.has_value()) { + const SpeciesErrorType type = species_result.error(); + const std::string msg = std::format( + "Failed to load weak reaction data for (A={}, Z={}) with error: {}", + weak_reaction_record.A, weak_reaction_record.Z, SpeciesErrorTypeMap.at(type) + ); + throw std::runtime_error(msg); + } + const Species& species = species_result.value(); if (weak_reaction_record.log_beta_minus > GRIDFIRE_WEAK_REACTION_LIB_SENTINEL) { m_weak_network[species].push_back( @@ -148,7 +173,7 @@ namespace gridfire::rates::weak { std::expected, WeakMapError> WeakReactionMap::get_species_reactions( const std::string &species_name) const { - const fourdst::atomic::Species species = fourdst::atomic::species.at(species_name); + const fourdst::atomic::Species& species = fourdst::atomic::species.at(species_name); if (m_weak_network.contains(species)) { return m_weak_network.at(species); } @@ -284,9 +309,7 @@ namespace gridfire::rates::weak { case WeakReactionType::POSITRON_CAPTURE: Q_MeV = nuclearMassDiff_MeV + 2.0 * electronMass_MeV; break; - case WeakReactionType::BETA_MINUS_DECAY: - Q_MeV = nuclearMassDiff_MeV; - break; + case WeakReactionType::BETA_MINUS_DECAY: // Same as electron capture so we can simply fall through case WeakReactionType::ELECTRON_CAPTURE: Q_MeV = nuclearMassDiff_MeV; break; @@ -306,8 +329,7 @@ namespace gridfire::rates::weak { static_cast(m_reactant_a), static_cast(m_reactant_z), T9, - std::log10(rho * Ye), - mue + std::log10(rho * Ye) ); if (!rates.has_value()) { @@ -374,8 +396,7 @@ namespace gridfire::rates::weak { static_cast(m_reactant_a), static_cast(m_reactant_z), T9, - log_rhoYe, - mue + log_rhoYe ); if (!rates.has_value()) { const InterpolationErrorType type = rates.error().type; @@ -386,9 +407,22 @@ namespace gridfire::rates::weak { throw std::runtime_error(msg); } - // TODO: Finish implementing this (just need a switch statement) - return 0.0; - + double logRate = 0.0; + switch (m_type) { + case WeakReactionType::BETA_MINUS_DECAY: + logRate = rates->d_log_beta_minus[0]; + break; + case WeakReactionType::BETA_PLUS_DECAY: + logRate = rates->d_log_beta_plus[0]; + break; + case WeakReactionType::ELECTRON_CAPTURE: + logRate = rates->d_log_electron_capture[0]; + break; + case WeakReactionType::POSITRON_CAPTURE: + logRate = rates->d_log_positron_capture[0]; + break; + } + return logRate; } reaction::ReactionType WeakReaction::type() const { @@ -437,9 +471,7 @@ namespace gridfire::rates::weak { case WeakReactionType::BETA_MINUS_DECAY: logNeutrinoLoss = payload.log_antineutrino_loss_bd; break; - case WeakReactionType::BETA_PLUS_DECAY: - logNeutrinoLoss = payload.log_neutrino_loss_ec; - break; + case WeakReactionType::BETA_PLUS_DECAY: // Same as electron capture so we can simply fall through case WeakReactionType::ELECTRON_CAPTURE: logNeutrinoLoss = payload.log_neutrino_loss_ec; break; @@ -450,6 +482,7 @@ namespace gridfire::rates::weak { return logNeutrinoLoss; } + // Note that the input vector tx is of size 3: [T9, log10(rho*Ye), mu_e] bool WeakReaction::AtomicWeakRate::forward ( const size_t p, const size_t q, @@ -464,20 +497,18 @@ namespace gridfire::rates::weak { } const double T9 = tx[0]; const double log10_rhoye = tx[1]; - const double mu_e = tx[2]; const std::expected result = m_interpolator.get_rates( static_cast(m_a), static_cast(m_z), T9, - log10_rhoye, - mu_e + log10_rhoye ); if (!result.has_value()) { const InterpolationErrorType type = result.error().type; const std::string msg = std::format( - "Failed to interpolate weak rate for (A={}, Z={}) at T9={}, log10(rho*Ye)={}, mu_e={} with error: {}", - m_a, m_z, T9, log10_rhoye, mu_e, InterpolationErrorTypeMap.at(type) + "Failed to interpolate weak rate for (A={}, Z={}) at T9={}, log10(ρ Ye)={}, with error: {}", + m_a, m_z, T9, log10_rhoye, InterpolationErrorTypeMap.at(type) ); throw std::runtime_error(msg); } @@ -501,7 +532,7 @@ namespace gridfire::rates::weak { } if (vx.size() > 0) { // Set up the sparsity pattern. This is saying that all input variables affect the output variable. - const bool any_input_varies = vx[0] || vx[1] || vx[2]; + const bool any_input_varies = vx[0] || vx[1]; vy[0] = any_input_varies; vy[1] = any_input_varies; } @@ -517,7 +548,6 @@ namespace gridfire::rates::weak { ) { const double T9 = tx[0]; const double log10_rhoye = tx[1]; - const double mu_e = tx[2]; const double forwardPassRate = ty[0]; // This is the rate from the forward pass. const double forwardPassNeutrinoLossRate = ty[1]; // This is the neutrino loss rate from the forward pass. @@ -526,55 +556,47 @@ namespace gridfire::rates::weak { static_cast(m_a), static_cast(m_z), T9, - log10_rhoye, - mu_e + log10_rhoye ); if (!result.has_value()) { const InterpolationErrorType type = result.error().type; const std::string msg = std::format( - "Failed to interpolate weak rate derivatives for (A={}, Z={}) at T9={}, log10(rho*Ye)={}, mu_e={} with error: {}", - m_a, m_z, T9, log10_rhoye, mu_e, InterpolationErrorTypeMap.at(type) + "Failed to interpolate weak rate derivatives for (A={}, Z={}) at T9={}, log10(ρ Ye)={}, with error: {}", + m_a, m_z, T9, log10_rhoye, InterpolationErrorTypeMap.at(type) ); throw std::runtime_error(msg); } + // ReSharper disable once CppUseStructuredBinding const WeakRateDerivatives derivatives = result.value(); - std::array dLogRate; // d(rate)/dT9, d(rate)/dlogRhoYe, d(rate)/dMuE - std::array dLogNuLoss; // d(nu loss)/dT9, d(nu loss)/dlogRhoYe, d(nu loss)/dMuE + std::array dLogRate{}; // d(rate)/dT9, d(rate)/dlogRhoYe + std::array dLogNuLoss{}; // d(nu loss)/dT9, d(nu loss)/dlogRhoYe switch (m_type) { case WeakReactionType::BETA_MINUS_DECAY: dLogRate[0] = derivatives.d_log_beta_minus[0]; dLogRate[1] = derivatives.d_log_beta_minus[1]; - dLogRate[2] = derivatives.d_log_beta_minus[2]; dLogNuLoss[0] = derivatives.d_log_antineutrino_loss_bd[0]; dLogNuLoss[1] = derivatives.d_log_antineutrino_loss_bd[1]; - dLogNuLoss[2] = derivatives.d_log_antineutrino_loss_bd[2]; break; case WeakReactionType::BETA_PLUS_DECAY: dLogRate[0] = derivatives.d_log_beta_plus[0]; dLogRate[1] = derivatives.d_log_beta_plus[1]; - dLogRate[2] = derivatives.d_log_beta_plus[2]; dLogNuLoss[0] = derivatives.d_log_neutrino_loss_ec[0]; dLogNuLoss[1] = derivatives.d_log_neutrino_loss_ec[1]; - dLogNuLoss[2] = derivatives.d_log_neutrino_loss_ec[2]; break; case WeakReactionType::ELECTRON_CAPTURE: dLogRate[0] = derivatives.d_log_electron_capture[0]; dLogRate[1] = derivatives.d_log_electron_capture[1]; - dLogRate[2] = derivatives.d_log_electron_capture[2]; dLogNuLoss[0] = derivatives.d_log_neutrino_loss_ec[0]; dLogNuLoss[1] = derivatives.d_log_neutrino_loss_ec[1]; - dLogNuLoss[2] = derivatives.d_log_neutrino_loss_ec[2]; break; case WeakReactionType::POSITRON_CAPTURE: dLogRate[0] = derivatives.d_log_positron_capture[0]; dLogRate[1] = derivatives.d_log_positron_capture[1]; - dLogRate[2] = derivatives.d_log_positron_capture[2]; dLogNuLoss[0] = derivatives.d_log_antineutrino_loss_bd[0]; dLogNuLoss[1] = derivatives.d_log_antineutrino_loss_bd[1]; - dLogNuLoss[2] = derivatives.d_log_antineutrino_loss_bd[2]; break; } @@ -583,12 +605,10 @@ namespace gridfire::rates::weak { // Contributions from the reaction rate (output 0) px[0] = py[0] * forwardPassRate * ln10 * dLogRate[0]; px[1] = py[0] * forwardPassRate * ln10 * dLogRate[1]; - px[2] = py[0] * forwardPassRate * ln10 * dLogRate[2]; // Contributions from the neutrino loss rate (output 1) px[0] += py[1] * forwardPassNeutrinoLossRate * ln10 * dLogNuLoss[0]; px[1] += py[1] * forwardPassNeutrinoLossRate * ln10 * dLogNuLoss[1]; - px[2] += py[1] * forwardPassNeutrinoLossRate * ln10 * dLogNuLoss[2]; return true; @@ -602,7 +622,6 @@ namespace gridfire::rates::weak { std::set all_input_deps; all_input_deps.insert(r[0].begin(), r[0].end()); all_input_deps.insert(r[1].begin(), r[1].end()); - all_input_deps.insert(r[2].begin(), r[2].end()); // What this is saying is that both output variables depend on all input variables. s[0] = all_input_deps; @@ -623,7 +642,6 @@ namespace gridfire::rates::weak { st[0] = all_output_deps; st[1] = all_output_deps; - st[2] = all_output_deps; return true; } diff --git a/src/lib/reaction/weak/weak_interpolator.cpp b/src/lib/reaction/weak/weak_interpolator.cpp index a96c7a6f..2158ca4a 100644 --- a/src/lib/reaction/weak/weak_interpolator.cpp +++ b/src/lib/reaction/weak/weak_interpolator.cpp @@ -13,54 +13,61 @@ #include "fourdst/composition/species.h" +#include "quill/LogMacros.h" + namespace gridfire::rates::weak { WeakRateInterpolator::WeakRateInterpolator(const RowDataTable &raw_data) { + // Group all raw data rows by their isotope ID. std::map> grouped_rows; for (const auto& row : raw_data) { grouped_rows[pack_isotope_id(row.A, row.Z)].push_back(&row); } + // Process each isotope's data to build a simple 2D grid. for (auto const& [isotope_id, rows] : grouped_rows) { IsotopeGrid grid; - std::set unique_t9, unique_rhoYe, unique_mue; + // Establish the T9 and log(rho*Ye) axes + std::set unique_t9, unique_rhoYe; for (const auto* row : rows) { unique_t9.emplace(row->t9); unique_rhoYe.emplace(row->log_rhoye); - unique_mue.emplace(row->mu_e); } - grid.t9_axis.reserve(unique_t9.size()); - grid.rhoYe_axis.reserve(unique_rhoYe.size()); - grid.mue_axis.reserve(unique_mue.size()); - - grid.t9_axis.insert(grid.t9_axis.begin(), unique_t9.begin(), unique_t9.end()); - grid.rhoYe_axis.insert(grid.rhoYe_axis.begin(), unique_rhoYe.begin(), unique_rhoYe.end()); - grid.mue_axis.insert(grid.mue_axis.begin(), unique_mue.begin(), unique_mue.end()); - - std::ranges::sort(grid.t9_axis); - std::ranges::sort(grid.rhoYe_axis); - std::ranges::sort(grid.mue_axis); + grid.t9_axis.assign(unique_t9.begin(), unique_t9.end()); + grid.rhoYe_axis.assign(unique_rhoYe.begin(), unique_rhoYe.end()); const size_t nt9 = grid.t9_axis.size(); const size_t nrhoYe = grid.rhoYe_axis.size(); - const size_t nmue = grid.mue_axis.size(); - grid.data.resize(nt9 * nrhoYe * nmue); + grid.data.resize(nt9 * nrhoYe); - // Reverse map for quick index lookup - std::unordered_map t9_map, rhoYe_map, mue_map; + // Create reverse maps for efficient index lookups. + std::unordered_map t9_map, rhoYe_map; for (size_t i = 0; i < nt9; i++) { t9_map[grid.t9_axis[i]] = i; } for (size_t j = 0; j < nrhoYe; j++) { rhoYe_map[grid.rhoYe_axis[j]] = j; } - for (size_t k = 0; k < nmue; k++) { mue_map[grid.mue_axis[k]] = k; } + // Use a set to detect duplicate (T9, rhoYe) pairs, which would be a data error. + std::set> seen_coords; + + // Populate the 2D grid. for (const auto* row: rows) { + if (auto [it, inserted] = seen_coords.insert({row->t9, row->log_rhoye}); !inserted) { + auto A = static_cast(isotope_id >> 8); + auto Z = static_cast(isotope_id & 0xFF); + std::string msg = std::format( + "Duplicate data point for isotope (A={}, Z={}) at (T9={}, log10(rho*Ye)={}) in weak rate table. This indicates corrupted or malformed input data and should be taken as an unrecoverable error.", + A, Z, row->t9, row->log_rhoye + ); + LOG_ERROR(m_logger, "{}", msg); + throw std::runtime_error(msg); + } + size_t i_t9 = t9_map.at(row->t9); size_t j_rhoYe = rhoYe_map.at(row->log_rhoye); - size_t k_mue = mue_map.at(row->mu_e); - size_t index = (i_t9 * nrhoYe + j_rhoYe) * nmue + k_mue; + size_t index = i_t9 * nrhoYe + j_rhoYe; grid.data[index] = WeakRatePayload{ row->log_beta_plus, row->log_electron_capture, @@ -74,35 +81,41 @@ namespace gridfire::rates::weak { } } + + std::vector WeakRateInterpolator::available_isotopes() const { - std::vector isotopes; + using namespace fourdst::atomic; + std::vector isotopes; for (const auto &packed_id: m_rate_table | std::views::keys) { - const uint16_t A = static_cast(packed_id >> 8); - const uint8_t Z = static_cast(packed_id & 0xFF); - try { - fourdst::atomic::Species species = fourdst::atomic::az_to_species(A, Z); - isotopes.push_back(species); - } catch (const std::exception& e) { - throw std::runtime_error("Error converting A=" + std::to_string(A) + ", Z=" + std::to_string(Z) + " to Species: " + e.what()); + const auto A = static_cast(packed_id >> 8); + const auto Z = static_cast(packed_id & 0xFF); + std::expected result = az_to_species(A, Z); + if (!result.has_value()) { + std::string msg = "Could not convert A=" + std::to_string(A) + ", Z=" + std::to_string(Z) + " to Species: "; + msg += (result.error() == SpeciesErrorType::ELEMENT_SYMBOL_NOT_FOUND) ? "Unknown element (Z out of range)." : "Invalid isotope (A < Z or A out of range)."; + LOG_TRACE_L3(m_logger, "{}", msg); + } else { + isotopes.emplace_back(result.value()); } } return isotopes; } - std::expected WeakRateInterpolator::get_rates( + std::expected WeakRateInterpolator::get_rates( const uint16_t A, const uint8_t Z, const double t9, - const double log_rhoYe, - const double mu_e + const double log_rhoYe ) const { const auto it = m_rate_table.find(pack_isotope_id(A, Z)); if (it == m_rate_table.end()) { return std::unexpected(InterpolationError{InterpolationErrorType::UNKNOWN_SPECIES_ERROR}); } - const auto&[t9_axis, rhoYe_axis, mue_axis, data] = it->second; + const auto& grid = it->second; + const auto& t9_axis = grid.t9_axis; + const auto& rhoYe_axis = grid.rhoYe_axis; - // Now find the bracketing indices for t9, log_rhoYe, and mu_e + // Find bracketing indices for the 2D (t9, rhoYe) grid auto find_lower_index = [](const std::vector& axis, const double value) -> std::optional { const auto upperBoundIterator = std::ranges::upper_bound(axis, value); if (upperBoundIterator == axis.begin() || upperBoundIterator == axis.end()) { @@ -113,161 +126,79 @@ namespace gridfire::rates::weak { const auto i_t9_opt = find_lower_index(t9_axis, t9); const auto j_rhoYe_opt = find_lower_index(rhoYe_axis, log_rhoYe); - const auto k_mue_opt = find_lower_index(mue_axis, mu_e); - if (!i_t9_opt || !j_rhoYe_opt || !k_mue_opt) { + // Handle bounds errors for the 2D grid + if (!i_t9_opt || !j_rhoYe_opt) { std::unordered_map boundsInfo; - if (!i_t9_opt) { - boundsInfo[TableAxes::T9] = BoundsErrorInfo{ - TableAxes::T9, - t9_axis.front(), - t9_axis.back(), - t9 - }; + if (!i_t9_opt.has_value()) { + boundsInfo[TableAxes::T9] = BoundsErrorInfo{TableAxes::T9, t9_axis.front(), t9_axis.back(), t9}; } - if (!j_rhoYe_opt) { - boundsInfo[TableAxes::LOG_RHOYE] = BoundsErrorInfo{ - TableAxes::LOG_RHOYE, - rhoYe_axis.front(), - rhoYe_axis.back(), - log_rhoYe - }; + if (!j_rhoYe_opt.has_value()) { + boundsInfo[TableAxes::LOG_RHOYE] = BoundsErrorInfo{TableAxes::LOG_RHOYE, rhoYe_axis.front(), rhoYe_axis.back(), log_rhoYe}; } - if (!k_mue_opt) { - boundsInfo[TableAxes::MUE] = BoundsErrorInfo{ - TableAxes::MUE, - mue_axis.front(), - mue_axis.back(), - mu_e - }; - } - return std::unexpected( - InterpolationError{ - InterpolationErrorType::BOUNDS_ERROR, - boundsInfo - } - ); + return std::unexpected(InterpolationError{InterpolationErrorType::BOUNDS_ERROR, boundsInfo}); } const size_t i = i_t9_opt.value(); const size_t j = j_rhoYe_opt.value(); - const size_t k = k_mue_opt.value(); + const size_t nrhoYe = rhoYe_axis.size(); - // Coordinates of the bounding cube - const double t1 = t9_axis[i]; - const double t2 = t9_axis[i + 1]; - const double r1 = rhoYe_axis[j]; - const double r2 = rhoYe_axis[j + 1]; - const double m1 = mue_axis[k]; - const double m2 = mue_axis[k + 1]; + // Get the four corner payloads for the bilinear interpolation + const auto& p00 = grid.data[(i * nrhoYe) + j]; + const auto& p01 = grid.data[(i * nrhoYe) + j + 1]; + const auto& p10 = grid.data[((i + 1) * nrhoYe) + j]; + const auto& p11 = grid.data[((i + 1) * nrhoYe) + j + 1]; - const double td = (t9 - t1) / (t2 - t1); - const double rd = (log_rhoYe - r1) / (r2 - r1); - const double md = (mu_e - m1) / (m2 - m1); + // Fractional distances for the 2D bilinear interpolation + const double td = (t9 - t9_axis[i]) / (t9_axis[i + 1] - t9_axis[i]); + const double rd = (log_rhoYe - rhoYe_axis[j]) / (rhoYe_axis[j + 1] - rhoYe_axis[j]); - auto lerp = [](const double v0, const double v1, const double t) { - return v0 * (1 - t) + v1 * t; - }; - - auto interpolationField = [&](auto field_accessor) { - const size_t nrhoYe = rhoYe_axis.size(); - const size_t nmue = mue_axis.size(); - - auto get_val = [&](const size_t i_t, const size_t j_r, const size_t k_m) { - return field_accessor(data[(i_t * nrhoYe + j_r) * nmue + k_m]); + // Helper lambda to linearly interpolate between two full payloads + auto lerp_payload = [](const WeakRatePayload& p0, const WeakRatePayload& p1, double t) { + return WeakRatePayload{ + .log_beta_plus = std::lerp(p0.log_beta_plus, p1.log_beta_plus, t), + .log_electron_capture = std::lerp(p0.log_electron_capture, p1.log_electron_capture, t), + .log_neutrino_loss_ec = std::lerp(p0.log_neutrino_loss_ec, p1.log_neutrino_loss_ec, t), + .log_beta_minus = std::lerp(p0.log_beta_minus, p1.log_beta_minus, t), + .log_positron_capture = std::lerp(p0.log_positron_capture, p1.log_positron_capture, t), + .log_antineutrino_loss_bd = std::lerp(p0.log_antineutrino_loss_bd, p1.log_antineutrino_loss_bd, t), }; - - const double c000 = get_val(i, j, k); - const double c001 = get_val(i, j, k + 1); - const double c010 = get_val(i, j + 1, k); - const double c011 = get_val(i, j + 1, k + 1); - const double c100 = get_val(i + 1, j, k); - const double c101 = get_val(i + 1, j, k + 1); - const double c110 = get_val(i + 1, j + 1, k); - const double c111 = get_val(i + 1, j + 1, k + 1); - - const double c00 = lerp(c000, c001, md); - const double c01 = lerp(c010, c011, md); - const double c10 = lerp(c100, c101, md); - const double c11 = lerp(c110, c111, md); - - const double c0 = lerp(c00, c01, rd); - const double c1 = lerp(c10, c11, rd); - - return lerp(c0, c1, td); - }; - WeakRatePayload result; + // Perform the bilinear interpolation + const WeakRatePayload p0 = lerp_payload(p00, p01, rd); + const WeakRatePayload p1 = lerp_payload(p10, p11, rd); - result.log_beta_plus = interpolationField([](const WeakRatePayload& p) { return p.log_beta_plus; }); - result.log_electron_capture = interpolationField([](const WeakRatePayload& p) { return p.log_electron_capture; }); - result.log_neutrino_loss_ec = interpolationField([](const WeakRatePayload& p) { return p.log_neutrino_loss_ec; }); - result.log_beta_minus = interpolationField([](const WeakRatePayload& p) { return p.log_beta_minus; }); - result.log_positron_capture = interpolationField([](const WeakRatePayload& p) { return p.log_positron_capture; }); - result.log_antineutrino_loss_bd = interpolationField([](const WeakRatePayload& p) { return p.log_antineutrino_loss_bd; }); - return result; + return lerp_payload(p0, p1, td); } std::expected WeakRateInterpolator::get_rate_derivatives( uint16_t A, uint8_t Z, double t9, - double log_rhoYe, - double mu_e + double log_rhoYe ) const { - WeakRateDerivatives result; + WeakRateDerivatives result{}; + //TODO: Make this perturbation scale aware constexpr double eps = 1e-6; // Small perturbation for finite difference // Perturbations for finite difference const double h_t9 = (t9 > 1e-9) ? t9 * eps : eps; - const auto payload_plus_t9 = get_rates(A, Z, t9 + h_t9, log_rhoYe, mu_e); - const auto payload_minus_t9 = get_rates(A, Z, t9 - h_t9, log_rhoYe, mu_e); + const auto payload_plus_t9 = get_rates(A, Z, t9 + h_t9, log_rhoYe); + const auto payload_minus_t9 = get_rates(A, Z, t9 - h_t9, log_rhoYe); const double h_rhoYe = (std::abs(log_rhoYe) > 1e-9) ? std::abs(log_rhoYe) * eps : eps; - const auto payload_plus_rhoYe = get_rates(A, Z, t9, log_rhoYe + h_rhoYe, mu_e); - const auto payload_minus_rhoYe = get_rates(A, Z, t9, log_rhoYe - h_rhoYe, mu_e); + const auto payload_plus_rhoYe = get_rates(A, Z, t9, log_rhoYe + h_rhoYe); + const auto payload_minus_rhoYe = get_rates(A, Z, t9, log_rhoYe - h_rhoYe); - const double h_mue = (std::abs(mu_e) > 1e-9) ? std::abs(mu_e) * eps : eps; - const auto payload_plus_mue = get_rates(A, Z, t9, log_rhoYe, mu_e + h_mue); - const auto payload_minus_mue = get_rates(A, Z, t9, log_rhoYe, mu_e - h_mue); - if (!payload_plus_t9 || !payload_minus_t9 || !payload_plus_rhoYe || !payload_minus_rhoYe || !payload_plus_mue || !payload_minus_mue) { - const auto it = m_rate_table.find(pack_isotope_id(A, Z)); - if (it == m_rate_table.end()) { - return std::unexpected(InterpolationError{InterpolationErrorType::UNKNOWN_SPECIES_ERROR}); - } - - const IsotopeGrid& grid = it->second; - InterpolationError error; - std::unordered_map boundsInfo; - if (!payload_minus_t9 || !payload_plus_t9) { - boundsInfo[TableAxes::T9] = BoundsErrorInfo{ - TableAxes::T9, - grid.t9_axis.front(), - grid.t9_axis.back(), - t9 - }; - } - if (!payload_minus_rhoYe || !payload_plus_rhoYe) { - boundsInfo[TableAxes::LOG_RHOYE] = BoundsErrorInfo{ - TableAxes::LOG_RHOYE, - grid.rhoYe_axis.front(), - grid.rhoYe_axis.back(), - log_rhoYe - }; - } - if (!payload_minus_mue || !payload_plus_mue) { - boundsInfo[TableAxes::MUE] = BoundsErrorInfo{ - TableAxes::MUE, - grid.mue_axis.front(), - grid.mue_axis.back(), - mu_e - }; - } - error.type = InterpolationErrorType::BOUNDS_ERROR; - error.boundsErrorInfo = boundsInfo; - return std::unexpected(error); + if (!payload_plus_t9 || !payload_minus_t9 || !payload_plus_rhoYe || !payload_minus_rhoYe) { + // Determine which perturbation failed and return a consolidated error + auto first_error = !payload_plus_t9 ? payload_plus_t9.error() : + !payload_minus_t9 ? payload_minus_t9.error() : + !payload_plus_rhoYe ? payload_plus_rhoYe.error() : + payload_minus_rhoYe.error(); + return std::unexpected(first_error); } // Derivatives wrt. T9 @@ -288,15 +219,6 @@ namespace gridfire::rates::weak { result.d_log_positron_capture[1] = (payload_plus_rhoYe->log_positron_capture - payload_minus_rhoYe->log_positron_capture) / rhoYe_denominator; result.d_log_antineutrino_loss_bd[1] = (payload_plus_rhoYe->log_antineutrino_loss_bd - payload_minus_rhoYe->log_antineutrino_loss_bd) / rhoYe_denominator; - // Derivatives wrt. MuE - const double mue_denominator = 2 * h_mue; - result.d_log_beta_plus[2] = (payload_plus_mue->log_beta_plus - payload_minus_mue->log_beta_plus) / mue_denominator; - result.d_log_beta_minus[2] = (payload_plus_mue->log_beta_minus - payload_minus_mue->log_beta_minus) / mue_denominator; - result.d_log_electron_capture[2] = (payload_plus_mue->log_electron_capture - payload_minus_mue->log_electron_capture) / mue_denominator; - result.d_log_neutrino_loss_ec[2] = (payload_plus_mue->log_neutrino_loss_ec - payload_minus_mue->log_neutrino_loss_ec) / mue_denominator; - result.d_log_positron_capture[2] = (payload_plus_mue->log_positron_capture - payload_minus_mue->log_positron_capture) / mue_denominator; - result.d_log_antineutrino_loss_bd[2] = (payload_plus_mue->log_antineutrino_loss_bd - payload_minus_mue->log_antineutrino_loss_bd) / mue_denominator; - return result; } diff --git a/src/lib/solver/strategies/CVODE_solver_strategy.cpp b/src/lib/solver/strategies/CVODE_solver_strategy.cpp index 6b3df074..efeddfc6 100644 --- a/src/lib/solver/strategies/CVODE_solver_strategy.cpp +++ b/src/lib/solver/strategies/CVODE_solver_strategy.cpp @@ -393,8 +393,8 @@ namespace gridfire::solver { void CVODESolverStrategy::calculate_rhs( const sunrealtype t, - const N_Vector y, - const N_Vector ydot, + N_Vector y, + N_Vector ydot, const CVODEUserData *data ) const { const size_t numSpecies = m_engine.getNetworkSpecies().size(); diff --git a/subprojects/fourdst.wrap b/subprojects/fourdst.wrap index d23a0c54..d918759f 100644 --- a/subprojects/fourdst.wrap +++ b/subprojects/fourdst.wrap @@ -1,4 +1,4 @@ [wrap-git] url = https://github.com/4D-STAR/fourdst -revision = v0.8.1 +revision = v0.8.2 depth = 1 diff --git a/tests/graphnet_sandbox/WeakReactionsGraph.svg b/tests/graphnet_sandbox/WeakReactionsGraph.svg new file mode 100644 index 00000000..b70e338d --- /dev/null +++ b/tests/graphnet_sandbox/WeakReactionsGraph.svg @@ -0,0 +1,17411 @@ + + + + + + +NuclearReactionNetwork + + + +Al-21 + +Al-21 + + + +Al-22 + +Al-22 + + + +Al-23 + +Al-23 + + + +Al-24 + +Al-24 + + + +reaction_al24(a,p)si27 + + + + +Al-24->reaction_al24(a,p)si27 + + + + + +reaction_al24(a,g)p28 + + + + +Al-24->reaction_al24(a,g)p28 + + + + + +reaction_al24(n,g)al25 + + + + +Al-24->reaction_al24(n,g)al25 + + + + + +reaction_al24(,e+ a)ne20 + + + + +Al-24->reaction_al24(,e+ a)ne20 + + + + + +reaction_al24(p,g)si25 + + + + +Al-24->reaction_al24(p,g)si25 + + + + + +reaction_al24(,e+ p)na23 + + + + +Al-24->reaction_al24(,e+ p)na23 + + + + + +reaction_al24(,e+)mg24 + + + + +Al-24->reaction_al24(,e+)mg24 + + + + + +reaction_Al-24(,ν)e+,Mg-24 + + + + +Al-24->reaction_Al-24(,ν)e+,Mg-24 + + + + + +reaction_Al-24(e-,ν)Mg-24 + + + + +Al-24->reaction_Al-24(e-,ν)Mg-24 + + + + + +reaction_Al-24(,ν|)e-,Si-24 + + + + +Al-24->reaction_Al-24(,ν|)e-,Si-24 + + + + + +reaction_Al-24(e+,ν|)Si-24 + + + + +Al-24->reaction_Al-24(e+,ν|)Si-24 + + + + + +Al-25 + +Al-25 + + + +reaction_al25(a,p)si28 + + + + +Al-25->reaction_al25(a,p)si28 + + + + + +reaction_al25(,e+)mg25 + + + + +Al-25->reaction_al25(,e+)mg25 + + + + + +reaction_al25(a,g)p29 + + + + +Al-25->reaction_al25(a,g)p29 + + + + + +reaction_al25(n,g)al26 + + + + +Al-25->reaction_al25(n,g)al26 + + + + + +reaction_al25(p,g)si26 + + + + +Al-25->reaction_al25(p,g)si26 + + + + + +reaction_Al-25(,ν)e+,Mg-25 + + + + +Al-25->reaction_Al-25(,ν)e+,Mg-25 + + + + + +reaction_Al-25(e-,ν)Mg-25 + + + + +Al-25->reaction_Al-25(e-,ν)Mg-25 + + + + + +reaction_Al-25(,ν|)e-,Si-25 + + + + +Al-25->reaction_Al-25(,ν|)e-,Si-25 + + + + + +reaction_Al-25(e+,ν|)Si-25 + + + + +Al-25->reaction_Al-25(e+,ν|)Si-25 + + + + + +Al-26 + +Al-26 + + + +reaction_al26(a,g)p30 + + + + +Al-26->reaction_al26(a,g)p30 + + + + + +reaction_al26(n,g)al27 + + + + +Al-26->reaction_al26(n,g)al27 + + + + + +reaction_al26(a,p)si29 + + + + +Al-26->reaction_al26(a,p)si29 + + + + + +reaction_al26(,e+)mg26 + + + + +Al-26->reaction_al26(,e+)mg26 + + + + + +reaction_al26(p,g)si27 + + + + +Al-26->reaction_al26(p,g)si27 + + + + + +reaction_Al-26(,ν)e+,Mg-26 + + + + +Al-26->reaction_Al-26(,ν)e+,Mg-26 + + + + + +reaction_Al-26(e-,ν)Mg-26 + + + + +Al-26->reaction_Al-26(e-,ν)Mg-26 + + + + + +reaction_Al-26(,ν|)e-,Si-26 + + + + +Al-26->reaction_Al-26(,ν|)e-,Si-26 + + + + + +reaction_Al-26(e+,ν|)Si-26 + + + + +Al-26->reaction_Al-26(e+,ν|)Si-26 + + + + + +Al-27 + +Al-27 + + + +reaction_al27(a,p)si30 + + + + +Al-27->reaction_al27(a,p)si30 + + + + + +reaction_al27(a,n)p30 + + + + +Al-27->reaction_al27(a,n)p30 + + + + + +reaction_al27(a,g)p31 + + + + +Al-27->reaction_al27(a,g)p31 + + + + + +reaction_al27(n,g)al28 + + + + +Al-27->reaction_al27(n,g)al28 + + + + + +reaction_al27(p,g)si28 + + + + +Al-27->reaction_al27(p,g)si28 + + + + + +reaction_Al-27(,ν)e+,Mg-27 + + + + +Al-27->reaction_Al-27(,ν)e+,Mg-27 + + + + + +reaction_Al-27(e-,ν)Mg-27 + + + + +Al-27->reaction_Al-27(e-,ν)Mg-27 + + + + + +reaction_Al-27(,ν|)e-,Si-27 + + + + +Al-27->reaction_Al-27(,ν|)e-,Si-27 + + + + + +reaction_Al-27(e+,ν|)Si-27 + + + + +Al-27->reaction_Al-27(e+,ν|)Si-27 + + + + + +Al-28 + +Al-28 + + + +reaction_al28(p,n)si28 + + + + +Al-28->reaction_al28(p,n)si28 + + + + + +reaction_al28(a,n)p31 + + + + +Al-28->reaction_al28(a,n)p31 + + + + + +reaction_al28(a,g)p32 + + + + +Al-28->reaction_al28(a,g)p32 + + + + + +reaction_al28(a,p)si31 + + + + +Al-28->reaction_al28(a,p)si31 + + + + + +reaction_al28(p,g)si29 + + + + +Al-28->reaction_al28(p,g)si29 + + + + + +reaction_al28(n,g)al29 + + + + +Al-28->reaction_al28(n,g)al29 + + + + + +reaction_al28(e-,)si28 + + + + +Al-28->reaction_al28(e-,)si28 + + + + + +reaction_Al-28(,ν)e+,Mg-28 + + + + +Al-28->reaction_Al-28(,ν)e+,Mg-28 + + + + + +reaction_Al-28(e-,ν)Mg-28 + + + + +Al-28->reaction_Al-28(e-,ν)Mg-28 + + + + + +reaction_Al-28(,ν|)e-,Si-28 + + + + +Al-28->reaction_Al-28(,ν|)e-,Si-28 + + + + + +reaction_Al-28(e+,ν|)Si-28 + + + + +Al-28->reaction_Al-28(e+,ν|)Si-28 + + + + + +Al-29 + +Al-29 + + + +Al-30 + +Al-30 + + + +Al-31 + +Al-31 + + + +Ar-31 + +Ar-31 + + + +Ar-32 + +Ar-32 + + + +Ar-33 + +Ar-33 + + + +Ar-34 + +Ar-34 + + + +Ar-35 + +Ar-35 + + + +reaction_ar35(a,p)k38 + + + + +Ar-35->reaction_ar35(a,p)k38 + + + + + +reaction_ar35(a,g)ca39 + + + + +Ar-35->reaction_ar35(a,g)ca39 + + + + + +reaction_ar35(p,g)k36 + + + + +Ar-35->reaction_ar35(p,g)k36 + + + + + +reaction_ar35(n,g)ar36 + + + + +Ar-35->reaction_ar35(n,g)ar36 + + + + + +reaction_ar35(,e+)cl35 + + + + +Ar-35->reaction_ar35(,e+)cl35 + + + + + +reaction_Ar-35(,ν)e+,Cl-35 + + + + +Ar-35->reaction_Ar-35(,ν)e+,Cl-35 + + + + + +reaction_Ar-35(e-,ν)Cl-35 + + + + +Ar-35->reaction_Ar-35(e-,ν)Cl-35 + + + + + +reaction_Ar-35(,ν|)e-,K-35 + + + + +Ar-35->reaction_Ar-35(,ν|)e-,K-35 + + + + + +reaction_Ar-35(e+,ν|)K-35 + + + + +Ar-35->reaction_Ar-35(e+,ν|)K-35 + + + + + +Ar-36 + +Ar-36 + + + +Ar-37 + +Ar-37 + + + +Ar-38 + +Ar-38 + + + +B-10 + +B-10 + + + +B-11 + +B-11 + + + +B-12 + +B-12 + + + +reaction_b12(a,n)n15 + + + + +B-12->reaction_b12(a,n)n15 + + + + + +reaction_b12(n,g)b13 + + + + +B-12->reaction_b12(n,g)b13 + + + + + +reaction_b12(,e- 2a)he4 + + + + +B-12->reaction_b12(,e- 2a)he4 + + + + + +reaction_b12(p,n)c12 + + + + +B-12->reaction_b12(p,n)c12 + + + + + +reaction_b12(e-,)c12 + + + + +B-12->reaction_b12(e-,)c12 + + + + + +reaction_B-12(,ν)e+,Be-12 + + + + +B-12->reaction_B-12(,ν)e+,Be-12 + + + + + +reaction_B-12(e-,ν)Be-12 + + + + +B-12->reaction_B-12(e-,ν)Be-12 + + + + + +reaction_B-12(,ν|)e-,C-12 + + + + +B-12->reaction_B-12(,ν|)e-,C-12 + + + + + +reaction_B-12(e+,ν|)C-12 + + + + +B-12->reaction_B-12(e+,ν|)C-12 + + + + + +B-13 + +B-13 + + + +reaction_b13(a,n)n16 + + + + +B-13->reaction_b13(a,n)n16 + + + + + +reaction_b13(a,g)n17 + + + + +B-13->reaction_b13(a,g)n17 + + + + + +reaction_b13(n,g)b14 + + + + +B-13->reaction_b13(n,g)b14 + + + + + +reaction_b13(e-,)c13 + + + + +B-13->reaction_b13(e-,)c13 + + + + + +B-14 + +B-14 + + + +reaction_b14(e-,)c14 + + + + +B-14->reaction_b14(e-,)c14 + + + + + +reaction_b14(,e- n)c13 + + + + +B-14->reaction_b14(,e- n)c13 + + + + + +reaction_B-14(,ν)e+,Be-14 + + + + +B-14->reaction_B-14(,ν)e+,Be-14 + + + + + +reaction_B-14(e-,ν)Be-14 + + + + +B-14->reaction_B-14(e-,ν)Be-14 + + + + + +reaction_B-14(,ν|)e-,C-14 + + + + +B-14->reaction_B-14(,ν|)e-,C-14 + + + + + +reaction_B-14(e+,ν|)C-14 + + + + +B-14->reaction_B-14(e+,ν|)C-14 + + + + + +B-15 + +B-15 + + + +B-7 + +B-7 + + + +reaction_B-7(,ν)e+,Be-7 + + + + +B-7->reaction_B-7(,ν)e+,Be-7 + + + + + +reaction_B-7(e-,ν)Be-7 + + + + +B-7->reaction_B-7(e-,ν)Be-7 + + + + + +B-8 + +B-8 + + + +reaction_b8(a,p)c11 + + + + +B-8->reaction_b8(a,p)c11 + + + + + +reaction_b8(p,g)c9 + + + + +B-8->reaction_b8(p,g)c9 + + + + + +reaction_b8(,e+ a)he4 + + + + +B-8->reaction_b8(,e+ a)he4 + + + + + +reaction_b8(n,p a)he4 + + + + +B-8->reaction_b8(n,p a)he4 + + + + + +reaction_B-8(,ν)e+,Be-8 + + + + +B-8->reaction_B-8(,ν)e+,Be-8 + + + + + +reaction_B-8(e-,ν)Be-8 + + + + +B-8->reaction_B-8(e-,ν)Be-8 + + + + + +reaction_B-8(,ν|)e-,C-8 + + + + +B-8->reaction_B-8(,ν|)e-,C-8 + + + + + +reaction_B-8(e+,ν|)C-8 + + + + +B-8->reaction_B-8(e+,ν|)C-8 + + + + + +Be-12 + +Be-12 + + + +reaction_be12(,e- n)b11 + + + + +Be-12->reaction_be12(,e- n)b11 + + + + + +reaction_be12(e-,)b12 + + + + +Be-12->reaction_be12(e-,)b12 + + + + + +Be-14 + +Be-14 + + + +Be-6 + +Be-6 + + + +Be-7 + +Be-7 + + + +reaction_be7(he3,2p a)he4 + + + + +Be-7->reaction_be7(he3,2p a)he4 + + + + + +reaction_be7(t,p n a)he4 + + + + +Be-7->reaction_be7(t,p n a)he4 + + + + + +reaction_be7(,e+)li7 + + + + +Be-7->reaction_be7(,e+)li7 + + + + + +reaction_be7(p,g)b8 + + + + +Be-7->reaction_be7(p,g)b8 + + + + + +reaction_be7(a,g)c11 + + + + +Be-7->reaction_be7(a,g)c11 + + + + + +reaction_be7(d,p a)he4 + + + + +Be-7->reaction_be7(d,p a)he4 + + + + + +reaction_Be-7(,ν)e+,Li-7 + + + + +Be-7->reaction_Be-7(,ν)e+,Li-7 + + + + + +reaction_Be-7(e-,ν)Li-7 + + + + +Be-7->reaction_Be-7(e-,ν)Li-7 + + + + + +reaction_Be-7(,ν|)e-,B-7 + + + + +Be-7->reaction_Be-7(,ν|)e-,B-7 + + + + + +reaction_Be-7(e+,ν|)B-7 + + + + +Be-7->reaction_Be-7(e+,ν|)B-7 + + + + + +Be-8 + +Be-8 + + + +Be-9 + +Be-9 + + + +C-11 + +C-11 + + + +reaction_c11(n,2a)he4 + + + + +C-11->reaction_c11(n,2a)he4 + + + + + +reaction_c11(a,p)n14 + + + + +C-11->reaction_c11(a,p)n14 + + + + + +reaction_c11(p,g)n12 + + + + +C-11->reaction_c11(p,g)n12 + + + + + +reaction_c11(n,g)c12 + + + + +C-11->reaction_c11(n,g)c12 + + + + + +reaction_c11(,e+)b11 + + + + +C-11->reaction_c11(,e+)b11 + + + + + +reaction_C-11(,ν)e+,B-11 + + + + +C-11->reaction_C-11(,ν)e+,B-11 + + + + + +reaction_C-11(e-,ν)B-11 + + + + +C-11->reaction_C-11(e-,ν)B-11 + + + + + +reaction_C-11(,ν|)e-,N-11 + + + + +C-11->reaction_C-11(,ν|)e-,N-11 + + + + + +reaction_C-11(e+,ν|)N-11 + + + + +C-11->reaction_C-11(e+,ν|)N-11 + + + + + +C-12 + +C-12 + + + +reaction_ne20(c12,a)si28 + + + + +C-12->reaction_ne20(c12,a)si28 + + + + + +reaction_ne20(c12,p)p31 + + + + +C-12->reaction_ne20(c12,p)p31 + + + + + +reaction_o16(c12,a)mg24 + + + + +C-12->reaction_o16(c12,a)mg24 + + + + + +reaction_o16(c12,p)al27 + + + + +C-12->reaction_o16(c12,p)al27 + + + + + +reaction_c12(c12,a)ne20 + + + + +C-12->reaction_c12(c12,a)ne20 + + + + + +C-12->reaction_c12(c12,a)ne20 + + + + + +reaction_ne20(c12,n)s31 + + + + +C-12->reaction_ne20(c12,n)s31 + + + + + +reaction_c12(a,g)o16 + + + + +C-12->reaction_c12(a,g)o16 + + + + + +reaction_c12(p,g)n13 + + + + +C-12->reaction_c12(p,g)n13 + + + + + +reaction_c12(n,g)c13 + + + + +C-12->reaction_c12(n,g)c13 + + + + + +reaction_c12(c12,p)na23 + + + + +C-12->reaction_c12(c12,p)na23 + + + + + +C-12->reaction_c12(c12,p)na23 + + + + + +reaction_C-12(,ν)e+,B-12 + + + + +C-12->reaction_C-12(,ν)e+,B-12 + + + + + +reaction_C-12(e-,ν)B-12 + + + + +C-12->reaction_C-12(e-,ν)B-12 + + + + + +reaction_C-12(,ν|)e-,N-12 + + + + +C-12->reaction_C-12(,ν|)e-,N-12 + + + + + +reaction_C-12(e+,ν|)N-12 + + + + +C-12->reaction_C-12(e+,ν|)N-12 + + + + + +C-13 + +C-13 + + + +reaction_c13(a,n)o16 + + + + +C-13->reaction_c13(a,n)o16 + + + + + +reaction_c13(d,n)n14 + + + + +C-13->reaction_c13(d,n)n14 + + + + + +reaction_c13(p,g)n14 + + + + +C-13->reaction_c13(p,g)n14 + + + + + +reaction_c13(n,g)c14 + + + + +C-13->reaction_c13(n,g)c14 + + + + + +reaction_c13(p,n)n13 + + + + +C-13->reaction_c13(p,n)n13 + + + + + +reaction_C-13(,ν)e+,B-13 + + + + +C-13->reaction_C-13(,ν)e+,B-13 + + + + + +reaction_C-13(e-,ν)B-13 + + + + +C-13->reaction_C-13(e-,ν)B-13 + + + + + +reaction_C-13(,ν|)e-,N-13 + + + + +C-13->reaction_C-13(,ν|)e-,N-13 + + + + + +reaction_C-13(e+,ν|)N-13 + + + + +C-13->reaction_C-13(e+,ν|)N-13 + + + + + +C-14 + +C-14 + + + +reaction_c14(d,n)n15 + + + + +C-14->reaction_c14(d,n)n15 + + + + + +reaction_c14(e-,)n14 + + + + +C-14->reaction_c14(e-,)n14 + + + + + +reaction_c14(a,g)o18 + + + + +C-14->reaction_c14(a,g)o18 + + + + + +reaction_c14(p,g)n15 + + + + +C-14->reaction_c14(p,g)n15 + + + + + +reaction_c14(n,g)c15 + + + + +C-14->reaction_c14(n,g)c15 + + + + + +reaction_C-14(,ν)e+,B-14 + + + + +C-14->reaction_C-14(,ν)e+,B-14 + + + + + +reaction_C-14(e-,ν)B-14 + + + + +C-14->reaction_C-14(e-,ν)B-14 + + + + + +reaction_C-14(,ν|)e-,N-14 + + + + +C-14->reaction_C-14(,ν|)e-,N-14 + + + + + +reaction_C-14(e+,ν|)N-14 + + + + +C-14->reaction_C-14(e+,ν|)N-14 + + + + + +C-15 + +C-15 + + + +reaction_c15(a,n)o18 + + + + +C-15->reaction_c15(a,n)o18 + + + + + +reaction_c15(e-,)n15 + + + + +C-15->reaction_c15(e-,)n15 + + + + + +reaction_c15(n,g)c16 + + + + +C-15->reaction_c15(n,g)c16 + + + + + +reaction_c15(p,n)n15 + + + + +C-15->reaction_c15(p,n)n15 + + + + + +reaction_C-15(,ν)e+,B-15 + + + + +C-15->reaction_C-15(,ν)e+,B-15 + + + + + +reaction_C-15(e-,ν)B-15 + + + + +C-15->reaction_C-15(e-,ν)B-15 + + + + + +reaction_C-15(,ν|)e-,N-15 + + + + +C-15->reaction_C-15(,ν|)e-,N-15 + + + + + +reaction_C-15(e+,ν|)N-15 + + + + +C-15->reaction_C-15(e+,ν|)N-15 + + + + + +C-16 + +C-16 + + + +reaction_c16(e-,)n16 + + + + +C-16->reaction_c16(e-,)n16 + + + + + +reaction_c16(,e- n)n15 + + + + +C-16->reaction_c16(,e- n)n15 + + + + + +reaction_c16(n,g)c17 + + + + +C-16->reaction_c16(n,g)c17 + + + + + +C-17 + +C-17 + + + +C-8 + +C-8 + + + +C-9 + +C-9 + + + +Ca-39 + +Ca-39 + + + +Cl-31 + +Cl-31 + + + +reaction_cl31(a,p)ar34 + + + + +Cl-31->reaction_cl31(a,p)ar34 + + + + + +reaction_cl31(a,g)k35 + + + + +Cl-31->reaction_cl31(a,g)k35 + + + + + +reaction_cl31(n,g)cl32 + + + + +Cl-31->reaction_cl31(n,g)cl32 + + + + + +reaction_cl31(p,g)ar32 + + + + +Cl-31->reaction_cl31(p,g)ar32 + + + + + +reaction_cl31(,e+ p)p30 + + + + +Cl-31->reaction_cl31(,e+ p)p30 + + + + + +reaction_cl31(,e+)s31 + + + + +Cl-31->reaction_cl31(,e+)s31 + + + + + +reaction_Cl-31(,ν)e+,S-31 + + + + +Cl-31->reaction_Cl-31(,ν)e+,S-31 + + + + + +reaction_Cl-31(e-,ν)S-31 + + + + +Cl-31->reaction_Cl-31(e-,ν)S-31 + + + + + +reaction_Cl-31(,ν|)e-,Ar-31 + + + + +Cl-31->reaction_Cl-31(,ν|)e-,Ar-31 + + + + + +reaction_Cl-31(e+,ν|)Ar-31 + + + + +Cl-31->reaction_Cl-31(e+,ν|)Ar-31 + + + + + +Cl-32 + +Cl-32 + + + +reaction_cl32(n,g)cl33 + + + + +Cl-32->reaction_cl32(n,g)cl33 + + + + + +reaction_cl32(a,g)k36 + + + + +Cl-32->reaction_cl32(a,g)k36 + + + + + +reaction_cl32(a,p)ar35 + + + + +Cl-32->reaction_cl32(a,p)ar35 + + + + + +reaction_cl32(p,g)ar33 + + + + +Cl-32->reaction_cl32(p,g)ar33 + + + + + +reaction_cl32(,e+)s32 + + + + +Cl-32->reaction_cl32(,e+)s32 + + + + + +reaction_cl32(,e+ p)p31 + + + + +Cl-32->reaction_cl32(,e+ p)p31 + + + + + +reaction_cl32(,e+ a)si28 + + + + +Cl-32->reaction_cl32(,e+ a)si28 + + + + + +reaction_Cl-32(,ν)e+,S-32 + + + + +Cl-32->reaction_Cl-32(,ν)e+,S-32 + + + + + +reaction_Cl-32(e-,ν)S-32 + + + + +Cl-32->reaction_Cl-32(e-,ν)S-32 + + + + + +reaction_Cl-32(,ν|)e-,Ar-32 + + + + +Cl-32->reaction_Cl-32(,ν|)e-,Ar-32 + + + + + +reaction_Cl-32(e+,ν|)Ar-32 + + + + +Cl-32->reaction_Cl-32(e+,ν|)Ar-32 + + + + + +Cl-33 + +Cl-33 + + + +Cl-34 + +Cl-34 + + + +reaction_cl34(a,p)ar37 + + + + +Cl-34->reaction_cl34(a,p)ar37 + + + + + +reaction_cl34(p,g)ar35 + + + + +Cl-34->reaction_cl34(p,g)ar35 + + + + + +reaction_cl34(a,g)k38 + + + + +Cl-34->reaction_cl34(a,g)k38 + + + + + +reaction_cl34(n,g)cl35 + + + + +Cl-34->reaction_cl34(n,g)cl35 + + + + + +reaction_cl34(,e+)s34 + + + + +Cl-34->reaction_cl34(,e+)s34 + + + + + +reaction_Cl-34(,ν)e+,S-34 + + + + +Cl-34->reaction_Cl-34(,ν)e+,S-34 + + + + + +reaction_Cl-34(e-,ν)S-34 + + + + +Cl-34->reaction_Cl-34(e-,ν)S-34 + + + + + +reaction_Cl-34(,ν|)e-,Ar-34 + + + + +Cl-34->reaction_Cl-34(,ν|)e-,Ar-34 + + + + + +reaction_Cl-34(e+,ν|)Ar-34 + + + + +Cl-34->reaction_Cl-34(e+,ν|)Ar-34 + + + + + +Cl-35 + +Cl-35 + + + +reaction_cl35(a,p)ar38 + + + + +Cl-35->reaction_cl35(a,p)ar38 + + + + + +reaction_cl35(n,g)cl36 + + + + +Cl-35->reaction_cl35(n,g)cl36 + + + + + +reaction_cl35(p,g)ar36 + + + + +Cl-35->reaction_cl35(p,g)ar36 + + + + + +reaction_cl35(a,g)k39 + + + + +Cl-35->reaction_cl35(a,g)k39 + + + + + +reaction_Cl-35(,ν)e+,S-35 + + + + +Cl-35->reaction_Cl-35(,ν)e+,S-35 + + + + + +reaction_Cl-35(e-,ν)S-35 + + + + +Cl-35->reaction_Cl-35(e-,ν)S-35 + + + + + +reaction_Cl-35(,ν|)e-,Ar-35 + + + + +Cl-35->reaction_Cl-35(,ν|)e-,Ar-35 + + + + + +reaction_Cl-35(e+,ν|)Ar-35 + + + + +Cl-35->reaction_Cl-35(e+,ν|)Ar-35 + + + + + +Cl-36 + +Cl-36 + + + +Cl-37 + +Cl-37 + + + +F-13 + +F-13 + + + +F-14 + +F-14 + + + +reaction_f14(n,g)f15 + + + + +F-14->reaction_f14(n,g)f15 + + + + + +F-15 + +F-15 + + + +reaction_f15(a,p)ne18 + + + + +F-15->reaction_f15(a,p)ne18 + + + + + +reaction_f15(n,g)f16 + + + + +F-15->reaction_f15(n,g)f16 + + + + + +reaction_f15(a,g)na19 + + + + +F-15->reaction_f15(a,g)na19 + + + + + +reaction_F-15(,ν)e+,O-15 + + + + +F-15->reaction_F-15(,ν)e+,O-15 + + + + + +reaction_F-15(e-,ν)O-15 + + + + +F-15->reaction_F-15(e-,ν)O-15 + + + + + +reaction_F-15(,ν|)e-,Ne-15 + + + + +F-15->reaction_F-15(,ν|)e-,Ne-15 + + + + + +reaction_F-15(e+,ν|)Ne-15 + + + + +F-15->reaction_F-15(e+,ν|)Ne-15 + + + + + +F-16 + +F-16 + + + +reaction_f16(a,p)ne19 + + + + +F-16->reaction_f16(a,p)ne19 + + + + + +reaction_f16(a,g)na20 + + + + +F-16->reaction_f16(a,g)na20 + + + + + +reaction_f16(n,g)f17 + + + + +F-16->reaction_f16(n,g)f17 + + + + + +reaction_F-16(,ν)e+,O-16 + + + + +F-16->reaction_F-16(,ν)e+,O-16 + + + + + +reaction_F-16(e-,ν)O-16 + + + + +F-16->reaction_F-16(e-,ν)O-16 + + + + + +reaction_F-16(,ν|)e-,Ne-16 + + + + +F-16->reaction_F-16(,ν|)e-,Ne-16 + + + + + +reaction_F-16(e+,ν|)Ne-16 + + + + +F-16->reaction_F-16(e+,ν|)Ne-16 + + + + + +F-17 + +F-17 + + + +reaction_f17(a,g)na21 + + + + +F-17->reaction_f17(a,g)na21 + + + + + +reaction_f17(n,g)f18 + + + + +F-17->reaction_f17(n,g)f18 + + + + + +reaction_f17(p,g)ne18 + + + + +F-17->reaction_f17(p,g)ne18 + + + + + +reaction_f17(,e+)o17 + + + + +F-17->reaction_f17(,e+)o17 + + + + + +reaction_F-17(,ν)e+,O-17 + + + + +F-17->reaction_F-17(,ν)e+,O-17 + + + + + +reaction_F-17(e-,ν)O-17 + + + + +F-17->reaction_F-17(e-,ν)O-17 + + + + + +reaction_F-17(,ν|)e-,Ne-17 + + + + +F-17->reaction_F-17(,ν|)e-,Ne-17 + + + + + +reaction_F-17(e+,ν|)Ne-17 + + + + +F-17->reaction_F-17(e+,ν|)Ne-17 + + + + + +F-18 + +F-18 + + + +reaction_f18(a,p)ne21 + + + + +F-18->reaction_f18(a,p)ne21 + + + + + +reaction_f18(n,g)f19 + + + + +F-18->reaction_f18(n,g)f19 + + + + + +reaction_f18(p,g)ne19 + + + + +F-18->reaction_f18(p,g)ne19 + + + + + +reaction_f18(a,g)na22 + + + + +F-18->reaction_f18(a,g)na22 + + + + + +reaction_f18(,e+)o18 + + + + +F-18->reaction_f18(,e+)o18 + + + + + +reaction_F-18(,ν)e+,O-18 + + + + +F-18->reaction_F-18(,ν)e+,O-18 + + + + + +reaction_F-18(e-,ν)O-18 + + + + +F-18->reaction_F-18(e-,ν)O-18 + + + + + +reaction_F-18(,ν|)e-,Ne-18 + + + + +F-18->reaction_F-18(,ν|)e-,Ne-18 + + + + + +reaction_F-18(e+,ν|)Ne-18 + + + + +F-18->reaction_F-18(e+,ν|)Ne-18 + + + + + +F-19 + +F-19 + + + +reaction_f19(p,n)ne19 + + + + +F-19->reaction_f19(p,n)ne19 + + + + + +reaction_f19(a,p)ne22 + + + + +F-19->reaction_f19(a,p)ne22 + + + + + +reaction_f19(p,g)ne20 + + + + +F-19->reaction_f19(p,g)ne20 + + + + + +reaction_f19(n,g)f20 + + + + +F-19->reaction_f19(n,g)f20 + + + + + +reaction_f19(a,g)na23 + + + + +F-19->reaction_f19(a,g)na23 + + + + + +reaction_F-19(,ν)e+,O-19 + + + + +F-19->reaction_F-19(,ν)e+,O-19 + + + + + +reaction_F-19(e-,ν)O-19 + + + + +F-19->reaction_F-19(e-,ν)O-19 + + + + + +reaction_F-19(,ν|)e-,Ne-19 + + + + +F-19->reaction_F-19(,ν|)e-,Ne-19 + + + + + +reaction_F-19(e+,ν|)Ne-19 + + + + +F-19->reaction_F-19(e+,ν|)Ne-19 + + + + + +F-20 + +F-20 + + + +reaction_f20(a,p)ne23 + + + + +F-20->reaction_f20(a,p)ne23 + + + + + +reaction_f20(p,n)ne20 + + + + +F-20->reaction_f20(p,n)ne20 + + + + + +reaction_f20(e-,)ne20 + + + + +F-20->reaction_f20(e-,)ne20 + + + + + +reaction_f20(n,g)f21 + + + + +F-20->reaction_f20(n,g)f21 + + + + + +reaction_f20(p,g)ne21 + + + + +F-20->reaction_f20(p,g)ne21 + + + + + +reaction_f20(a,g)na24 + + + + +F-20->reaction_f20(a,g)na24 + + + + + +reaction_f20(a,n)na23 + + + + +F-20->reaction_f20(a,n)na23 + + + + + +reaction_F-20(,ν)e+,O-20 + + + + +F-20->reaction_F-20(,ν)e+,O-20 + + + + + +reaction_F-20(e-,ν)O-20 + + + + +F-20->reaction_F-20(e-,ν)O-20 + + + + + +reaction_F-20(,ν|)e-,Ne-20 + + + + +F-20->reaction_F-20(,ν|)e-,Ne-20 + + + + + +reaction_F-20(e+,ν|)Ne-20 + + + + +F-20->reaction_F-20(e+,ν|)Ne-20 + + + + + +F-21 + +F-21 + + + +reaction_f21(a,p)ne24 + + + + +F-21->reaction_f21(a,p)ne24 + + + + + +reaction_f21(p,g)ne22 + + + + +F-21->reaction_f21(p,g)ne22 + + + + + +reaction_f21(n,g)f22 + + + + +F-21->reaction_f21(n,g)f22 + + + + + +reaction_f21(p,n)ne21 + + + + +F-21->reaction_f21(p,n)ne21 + + + + + +reaction_f21(a,g)na25 + + + + +F-21->reaction_f21(a,g)na25 + + + + + +reaction_f21(e-,)ne21 + + + + +F-21->reaction_f21(e-,)ne21 + + + + + +reaction_f21(a,n)na24 + + + + +F-21->reaction_f21(a,n)na24 + + + + + +reaction_F-21(,ν)e+,O-21 + + + + +F-21->reaction_F-21(,ν)e+,O-21 + + + + + +reaction_F-21(e-,ν)O-21 + + + + +F-21->reaction_F-21(e-,ν)O-21 + + + + + +reaction_F-21(,ν|)e-,Ne-21 + + + + +F-21->reaction_F-21(,ν|)e-,Ne-21 + + + + + +reaction_F-21(e+,ν|)Ne-21 + + + + +F-21->reaction_F-21(e+,ν|)Ne-21 + + + + + +F-22 + +F-22 + + + +F-23 + +F-23 + + + +F-24 + +F-24 + + + +H-1 + +H-1 + + + +reaction_n(2p,p g)d + + + + +H-1->reaction_n(2p,p g)d + + + + + +H-1->reaction_n(2p,p g)d + + + + + +reaction_si31(p,n)p31 + + + + +H-1->reaction_si31(p,n)p31 + + + + + +H-1->reaction_al28(p,n)si28 + + + + + +reaction_na24(p,n)mg24 + + + + +H-1->reaction_na24(p,n)mg24 + + + + + +reaction_ne24(p,n)na24 + + + + +H-1->reaction_ne24(p,n)na24 + + + + + +reaction_ne23(p,n)na23 + + + + +H-1->reaction_ne23(p,n)na23 + + + + + +H-1->reaction_f19(p,n)ne19 + + + + + +reaction_o20(p,n)f20 + + + + +H-1->reaction_o20(p,n)f20 + + + + + +reaction_n16(p,n)o16 + + + + +H-1->reaction_n16(p,n)o16 + + + + + +reaction_n15(p,n)o15 + + + + +H-1->reaction_n15(p,n)o15 + + + + + +reaction_n14(p,n)o14 + + + + +H-1->reaction_n14(p,n)o14 + + + + + +H-1->reaction_f20(p,n)ne20 + + + + + +H-1->reaction_ar35(p,g)k36 + + + + + +reaction_si25(p,g)p26 + + + + +H-1->reaction_si25(p,g)p26 + + + + + +H-1->reaction_cl34(p,g)ar35 + + + + + +reaction_s34(p,g)cl35 + + + + +H-1->reaction_s34(p,g)cl35 + + + + + +reaction_s32(p,g)cl33 + + + + +H-1->reaction_s32(p,g)cl33 + + + + + +reaction_s31(p,g)cl32 + + + + +H-1->reaction_s31(p,g)cl32 + + + + + +reaction_p32(p,g)s33 + + + + +H-1->reaction_p32(p,g)s33 + + + + + +reaction_p31(p,g)s32 + + + + +H-1->reaction_p31(p,g)s32 + + + + + +reaction_p30(p,g)s31 + + + + +H-1->reaction_p30(p,g)s31 + + + + + +reaction_p29(p,g)s30 + + + + +H-1->reaction_p29(p,g)s30 + + + + + +reaction_si31(p,g)p32 + + + + +H-1->reaction_si31(p,g)p32 + + + + + +reaction_si28(p,g)p29 + + + + +H-1->reaction_si28(p,g)p29 + + + + + +reaction_si26(p,g)p27 + + + + +H-1->reaction_si26(p,g)p27 + + + + + +reaction_p32(p,n)s32 + + + + +H-1->reaction_p32(p,n)s32 + + + + + +reaction_mg25(p,g)al26 + + + + +H-1->reaction_mg25(p,g)al26 + + + + + +reaction_mg24(p,g)al25 + + + + +H-1->reaction_mg24(p,g)al25 + + + + + +reaction_mg21(p,)al22 + + + + +H-1->reaction_mg21(p,)al22 + + + + + +reaction_na25(p,g)mg26 + + + + +H-1->reaction_na25(p,g)mg26 + + + + + +reaction_na23(p,g)mg24 + + + + +H-1->reaction_na23(p,g)mg24 + + + + + +reaction_na20(p,g)mg21 + + + + +H-1->reaction_na20(p,g)mg21 + + + + + +reaction_ne20(p,g)na21 + + + + +H-1->reaction_ne20(p,g)na21 + + + + + +reaction_ne19(p,g)na20 + + + + +H-1->reaction_ne19(p,g)na20 + + + + + +H-1->reaction_f21(p,g)ne22 + + + + + +H-1->reaction_f19(p,g)ne20 + + + + + +reaction_o16(p,g)f17 + + + + +H-1->reaction_o16(p,g)f17 + + + + + +reaction_o15(p,)f16 + + + + +H-1->reaction_o15(p,)f16 + + + + + +reaction_n15(p,g)o16 + + + + +H-1->reaction_n15(p,g)o16 + + + + + +reaction_n13(p,g)o14 + + + + +H-1->reaction_n13(p,g)o14 + + + + + +reaction_n12(p,g)o13 + + + + +H-1->reaction_n12(p,g)o13 + + + + + +H-1->reaction_c14(p,g)n15 + + + + + +H-1->reaction_c13(p,g)n14 + + + + + +H-1->reaction_c12(p,g)n13 + + + + + +H-1->reaction_c11(p,g)n12 + + + + + +H-1->reaction_b8(p,g)c9 + + + + + +H-1->reaction_be7(p,g)b8 + + + + + +reaction_li6(p,g)be7 + + + + +H-1->reaction_li6(p,g)be7 + + + + + +reaction_ne24(p,g)na25 + + + + +H-1->reaction_ne24(p,g)na25 + + + + + +reaction_t(p,g)he4 + + + + +H-1->reaction_t(p,g)he4 + + + + + +reaction_d(p,g)he3 + + + + +H-1->reaction_d(p,g)he3 + + + + + +reaction_p(p,e+)d + + + + +H-1->reaction_p(p,e+)d + + + + + +H-1->reaction_p(p,e+)d + + + + + +reaction_na25(p,n)mg25 + + + + +H-1->reaction_na25(p,n)mg25 + + + + + +H-1->reaction_cl31(p,g)ar32 + + + + + +H-1->reaction_al28(p,g)si29 + + + + + +reaction_ne18(p,)na19 + + + + +H-1->reaction_ne18(p,)na19 + + + + + +reaction_si24(p,)p25 + + + + +H-1->reaction_si24(p,)p25 + + + + + +reaction_mg23(p,g)al24 + + + + +H-1->reaction_mg23(p,g)al24 + + + + + +H-1->reaction_c13(p,n)n13 + + + + + +reaction_n14(p,g)o15 + + + + +H-1->reaction_n14(p,g)o15 + + + + + +H-1->reaction_al24(p,g)si25 + + + + + +H-1->reaction_f18(p,g)ne19 + + + + + +reaction_o18(p,g)f19 + + + + +H-1->reaction_o18(p,g)f19 + + + + + +reaction_mg22(p,g)al23 + + + + +H-1->reaction_mg22(p,g)al23 + + + + + +reaction_na21(p,g)mg22 + + + + +H-1->reaction_na21(p,g)mg22 + + + + + +reaction_si30(p,g)p31 + + + + +H-1->reaction_si30(p,g)p31 + + + + + +reaction_n(p,g)d + + + + +H-1->reaction_n(p,g)d + + + + + +H-1->reaction_cl35(p,g)ar36 + + + + + +H-1->reaction_f21(p,n)ne21 + + + + + +reaction_na22(p,g)mg23 + + + + +H-1->reaction_na22(p,g)mg23 + + + + + +H-1->reaction_al25(p,g)si26 + + + + + +reaction_ne21(p,g)na22 + + + + +H-1->reaction_ne21(p,g)na22 + + + + + +reaction_p28(p,g)s29 + + + + +H-1->reaction_p28(p,g)s29 + + + + + +reaction_na23(p,n)mg23 + + + + +H-1->reaction_na23(p,n)mg23 + + + + + +reaction_na24(p,g)mg25 + + + + +H-1->reaction_na24(p,g)mg25 + + + + + +reaction_si27(p,g)p28 + + + + +H-1->reaction_si27(p,g)p28 + + + + + +H-1->reaction_b12(p,n)c12 + + + + + +reaction_o14(p,)f15 + + + + +H-1->reaction_o14(p,)f15 + + + + + +H-1->reaction_f20(p,g)ne21 + + + + + +H-1->reaction_cl32(p,g)ar33 + + + + + +H-1->reaction_f17(p,g)ne18 + + + + + +reaction_ne23(p,g)na24 + + + + +H-1->reaction_ne23(p,g)na24 + + + + + +reaction_he3(p,e+)he4 + + + + +H-1->reaction_he3(p,e+)he4 + + + + + +H-1->reaction_al27(p,g)si28 + + + + + +H-1->reaction_c15(p,n)n15 + + + + + +reaction_mg27(p,n)al27 + + + + +H-1->reaction_mg27(p,n)al27 + + + + + +reaction_mg27(p,g)al28 + + + + +H-1->reaction_mg27(p,g)al28 + + + + + +reaction_o17(p,g)f18 + + + + +H-1->reaction_o17(p,g)f18 + + + + + +reaction_si29(p,g)p30 + + + + +H-1->reaction_si29(p,g)p30 + + + + + +reaction_mg26(p,g)al27 + + + + +H-1->reaction_mg26(p,g)al27 + + + + + +reaction_o20(p,g)f21 + + + + +H-1->reaction_o20(p,g)f21 + + + + + +H-1->reaction_al26(p,g)si27 + + + + + +H-2 + +H-2 + + + +reaction_li7(d,n a)he4 + + + + +H-2->reaction_li7(d,n a)he4 + + + + + +H-2->reaction_c14(d,n)n15 + + + + + +H-2->reaction_c13(d,n)n14 + + + + + +reaction_li7(d,p)li8 + + + + +H-2->reaction_li7(d,p)li8 + + + + + +reaction_he3(d,p)he4 + + + + +H-2->reaction_he3(d,p)he4 + + + + + +reaction_t(d,n)he4 + + + + +H-2->reaction_t(d,n)he4 + + + + + +reaction_d(d,p)t + + + + +H-2->reaction_d(d,p)t + + + + + +H-2->reaction_d(d,p)t + + + + + +reaction_d(d,n)he3 + + + + +H-2->reaction_d(d,n)he3 + + + + + +H-2->reaction_d(d,n)he3 + + + + + +reaction_he4(d,g)li6 + + + + +H-2->reaction_he4(d,g)li6 + + + + + +reaction_d(d,g)he4 + + + + +H-2->reaction_d(d,g)he4 + + + + + +H-2->reaction_d(d,g)he4 + + + + + +H-2->reaction_d(p,g)he3 + + + + + +reaction_d(n,g)t + + + + +H-2->reaction_d(n,g)t + + + + + +reaction_li6(d,p)li7 + + + + +H-2->reaction_li6(d,p)li7 + + + + + +H-2->reaction_be7(d,p a)he4 + + + + + +reaction_li6(d,n)be7 + + + + +H-2->reaction_li6(d,n)be7 + + + + + +H-3 + +H-3 + + + +H-3->reaction_be7(t,p n a)he4 + + + + + +reaction_li7(t,2n a)he4 + + + + +H-3->reaction_li7(t,2n a)he4 + + + + + +reaction_t(he3,p n)he4 + + + + +H-3->reaction_t(he3,p n)he4 + + + + + +reaction_t(t,2n)he4 + + + + +H-3->reaction_t(t,2n)he4 + + + + + +H-3->reaction_t(t,2n)he4 + + + + + +H-3->reaction_t(d,n)he4 + + + + + +reaction_he4(t,g)li7 + + + + +H-3->reaction_he4(t,g)li7 + + + + + +H-3->reaction_t(p,g)he4 + + + + + +reaction_li7(t,n)be9 + + + + +H-3->reaction_li7(t,n)be9 + + + + + +reaction_t(he3,d)he4 + + + + +H-3->reaction_t(he3,d)he4 + + + + + +reaction_t(e-,)he3 + + + + +H-3->reaction_t(e-,)he3 + + + + + +He-3 + +He-3 + + + +He-3->reaction_be7(he3,2p a)he4 + + + + + +He-3->reaction_t(he3,p n)he4 + + + + + +reaction_li7(he3,p n a)he4 + + + + +He-3->reaction_li7(he3,p n a)he4 + + + + + +He-3->reaction_he3(d,p)he4 + + + + + +reaction_he4(he3,g)be7 + + + + +He-3->reaction_he4(he3,g)be7 + + + + + +reaction_he3(n,g)he4 + + + + +He-3->reaction_he3(n,g)he4 + + + + + +reaction_he3(,e+)t + + + + +He-3->reaction_he3(,e+)t + + + + + +He-3->reaction_he3(p,e+)he4 + + + + + +He-3->reaction_t(he3,d)he4 + + + + + +reaction_he3(he3,2p)he4 + + + + +He-3->reaction_he3(he3,2p)he4 + + + + + +He-3->reaction_he3(he3,2p)he4 + + + + + +He-4 + +He-4 + + + +reaction_o13(a,2p)o15 + + + + +He-4->reaction_o13(a,2p)o15 + + + + + +He-4->reaction_cl35(a,p)ar38 + + + + + +He-4->reaction_cl34(a,p)ar37 + + + + + +He-4->reaction_cl31(a,p)ar34 + + + + + +reaction_s34(a,p)cl37 + + + + +He-4->reaction_s34(a,p)cl37 + + + + + +reaction_s31(a,p)cl34 + + + + +He-4->reaction_s31(a,p)cl34 + + + + + +reaction_p31(a,p)s34 + + + + +He-4->reaction_p31(a,p)s34 + + + + + +reaction_p30(a,p)s33 + + + + +He-4->reaction_p30(a,p)s33 + + + + + +reaction_si26(a,p)p29 + + + + +He-4->reaction_si26(a,p)p29 + + + + + +reaction_si24(a,p)p27 + + + + +He-4->reaction_si24(a,p)p27 + + + + + +reaction_si27(a,p)p30 + + + + +He-4->reaction_si27(a,p)p30 + + + + + +He-4->reaction_al27(a,p)si30 + + + + + +He-4->reaction_al27(a,n)p30 + + + + + +He-4->reaction_al24(a,p)si27 + + + + + +reaction_mg27(a,n)si30 + + + + +He-4->reaction_mg27(a,n)si30 + + + + + +reaction_mg26(a,n)si29 + + + + +He-4->reaction_mg26(a,n)si29 + + + + + +reaction_mg25(a,n)si28 + + + + +He-4->reaction_mg25(a,n)si28 + + + + + +reaction_mg22(a,p)al25 + + + + +He-4->reaction_mg22(a,p)al25 + + + + + +reaction_mg21(a,p)al24 + + + + +He-4->reaction_mg21(a,p)al24 + + + + + +reaction_mg20(a,p)al23 + + + + +He-4->reaction_mg20(a,p)al23 + + + + + +reaction_na25(a,n)al28 + + + + +He-4->reaction_na25(a,n)al28 + + + + + +reaction_na24(a,p)mg27 + + + + +He-4->reaction_na24(a,p)mg27 + + + + + +reaction_na24(a,n)al27 + + + + +He-4->reaction_na24(a,n)al27 + + + + + +reaction_na22(a,p)mg25 + + + + +He-4->reaction_na22(a,p)mg25 + + + + + +reaction_na20(a,p)mg23 + + + + +He-4->reaction_na20(a,p)mg23 + + + + + +He-4->reaction_al25(a,p)si28 + + + + + +reaction_ne24(a,n)mg27 + + + + +He-4->reaction_ne24(a,n)mg27 + + + + + +reaction_ne23(a,n)mg26 + + + + +He-4->reaction_ne23(a,n)mg26 + + + + + +He-4->reaction_ar35(a,p)k38 + + + + + +reaction_ne18(a,p)na21 + + + + +He-4->reaction_ne18(a,p)na21 + + + + + +reaction_ne16(a,p)na19 + + + + +He-4->reaction_ne16(a,p)na19 + + + + + +He-4->reaction_f21(a,p)ne24 + + + + + +He-4->reaction_f20(a,p)ne23 + + + + + +He-4->reaction_f18(a,p)ne21 + + + + + +He-4->reaction_f15(a,p)ne18 + + + + + +reaction_o18(a,n)ne21 + + + + +He-4->reaction_o18(a,n)ne21 + + + + + +He-4->reaction_f19(a,p)ne22 + + + + + +He-4->reaction_al28(a,n)p31 + + + + + +reaction_o13(a,p)f16 + + + + +He-4->reaction_o13(a,p)f16 + + + + + +reaction_n13(a,p)o16 + + + + +He-4->reaction_n13(a,p)o16 + + + + + +reaction_n12(a,p)o15 + + + + +He-4->reaction_n12(a,p)o15 + + + + + +He-4->reaction_c15(a,n)o18 + + + + + +He-4->reaction_c13(a,n)o16 + + + + + +He-4->reaction_c11(a,p)n14 + + + + + +He-4->reaction_b13(a,n)n16 + + + + + +He-4->reaction_b12(a,n)n15 + + + + + +He-4->reaction_b8(a,p)c11 + + + + + +reaction_o14(a,p)f17 + + + + +He-4->reaction_o14(a,p)f17 + + + + + +He-4->reaction_f16(a,p)ne19 + + + + + +reaction_ne17(a,g)mg21 + + + + +He-4->reaction_ne17(a,g)mg21 + + + + + +He-4->reaction_ar35(a,g)ca39 + + + + + +He-4->reaction_cl32(a,g)k36 + + + + + +He-4->reaction_cl31(a,g)k35 + + + + + +reaction_s34(a,g)ar38 + + + + +He-4->reaction_s34(a,g)ar38 + + + + + +reaction_s32(a,g)ar36 + + + + +He-4->reaction_s32(a,g)ar36 + + + + + +He-4->reaction_f16(a,g)na20 + + + + + +reaction_p32(a,g)cl36 + + + + +He-4->reaction_p32(a,g)cl36 + + + + + +reaction_p30(a,g)cl34 + + + + +He-4->reaction_p30(a,g)cl34 + + + + + +reaction_p29(a,g)cl33 + + + + +He-4->reaction_p29(a,g)cl33 + + + + + +reaction_p28(a,g)cl32 + + + + +He-4->reaction_p28(a,g)cl32 + + + + + +He-4->reaction_cl32(a,p)ar35 + + + + + +reaction_si29(a,g)s33 + + + + +He-4->reaction_si29(a,g)s33 + + + + + +reaction_si27(a,g)s31 + + + + +He-4->reaction_si27(a,g)s31 + + + + + +reaction_si24(a,g)s28 + + + + +He-4->reaction_si24(a,g)s28 + + + + + +He-4->reaction_cl34(a,g)k38 + + + + + +reaction_n14(a,n)f17 + + + + +He-4->reaction_n14(a,n)f17 + + + + + +He-4->reaction_al28(a,g)p32 + + + + + +He-4->reaction_al27(a,g)p31 + + + + + +He-4->reaction_al26(a,g)p30 + + + + + +He-4->reaction_al25(a,g)p29 + + + + + +He-4->reaction_al24(a,g)p28 + + + + + +reaction_mg25(a,g)si29 + + + + +He-4->reaction_mg25(a,g)si29 + + + + + +reaction_si30(a,g)s34 + + + + +He-4->reaction_si30(a,g)s34 + + + + + +reaction_mg21(a,g)si25 + + + + +He-4->reaction_mg21(a,g)si25 + + + + + +reaction_na25(a,p)mg28 + + + + +He-4->reaction_na25(a,p)mg28 + + + + + +reaction_mg20(a,g)si24 + + + + +He-4->reaction_mg20(a,g)si24 + + + + + +He-4->reaction_al28(a,p)si31 + + + + + +reaction_na23(a,g)al27 + + + + +He-4->reaction_na23(a,g)al27 + + + + + +reaction_na21(a,g)al25 + + + + +He-4->reaction_na21(a,g)al25 + + + + + +reaction_na20(a,g)al24 + + + + +He-4->reaction_na20(a,g)al24 + + + + + +reaction_s34(a,n)ar37 + + + + +He-4->reaction_s34(a,n)ar37 + + + + + +reaction_ne24(a,g)mg28 + + + + +He-4->reaction_ne24(a,g)mg28 + + + + + +He-4->reaction_he4(he3,g)be7 + + + + + +reaction_ne20(a,g)mg24 + + + + +He-4->reaction_ne20(a,g)mg24 + + + + + +reaction_ne18(a,g)mg22 + + + + +He-4->reaction_ne18(a,g)mg22 + + + + + +He-4->reaction_f17(a,g)na21 + + + + + +He-4->reaction_f15(a,g)na19 + + + + + +He-4->reaction_b13(a,g)n17 + + + + + +reaction_p28(a,p)s31 + + + + +He-4->reaction_p28(a,p)s31 + + + + + +reaction_o15(a,g)ne19 + + + + +He-4->reaction_o15(a,g)ne19 + + + + + +reaction_n15(a,g)f19 + + + + +He-4->reaction_n15(a,g)f19 + + + + + +reaction_n14(a,g)f18 + + + + +He-4->reaction_n14(a,g)f18 + + + + + +He-4->reaction_c14(a,g)o18 + + + + + +He-4->reaction_c12(a,g)o16 + + + + + +reaction_li6(a,g)b10 + + + + +He-4->reaction_li6(a,g)b10 + + + + + +reaction_p31(a,g)cl35 + + + + +He-4->reaction_p31(a,g)cl35 + + + + + +He-4->reaction_he4(t,g)li7 + + + + + +He-4->reaction_he4(d,g)li6 + + + + + +reaction_si31(a,g)s35 + + + + +He-4->reaction_si31(a,g)s35 + + + + + +reaction_o14(a,g)ne18 + + + + +He-4->reaction_o14(a,g)ne18 + + + + + +reaction_na25(a,g)al29 + + + + +He-4->reaction_na25(a,g)al29 + + + + + +reaction_ne17(a,p)na20 + + + + +He-4->reaction_ne17(a,p)na20 + + + + + +reaction_o20(a,n)ne23 + + + + +He-4->reaction_o20(a,n)ne23 + + + + + +reaction_mg27(a,g)si31 + + + + +He-4->reaction_mg27(a,g)si31 + + + + + +He-4->reaction_be7(a,g)c11 + + + + + +reaction_ne19(a,g)mg23 + + + + +He-4->reaction_ne19(a,g)mg23 + + + + + +reaction_p29(a,p)s32 + + + + +He-4->reaction_p29(a,p)s32 + + + + + +reaction_si26(a,g)s30 + + + + +He-4->reaction_si26(a,g)s30 + + + + + +reaction_si25(a,g)s29 + + + + +He-4->reaction_si25(a,g)s29 + + + + + +reaction_o20(a,g)ne24 + + + + +He-4->reaction_o20(a,g)ne24 + + + + + +reaction_ne16(a,g)mg20 + + + + +He-4->reaction_ne16(a,g)mg20 + + + + + +reaction_n16(a,n)f19 + + + + +He-4->reaction_n16(a,n)f19 + + + + + +reaction_si31(a,n)s34 + + + + +He-4->reaction_si31(a,n)s34 + + + + + +reaction_li7(a,g)b11 + + + + +He-4->reaction_li7(a,g)b11 + + + + + +reaction_o17(a,n)ne20 + + + + +He-4->reaction_o17(a,n)ne20 + + + + + +reaction_o17(a,g)ne21 + + + + +He-4->reaction_o17(a,g)ne21 + + + + + +He-4->reaction_f18(a,g)na22 + + + + + +He-4->reaction_f21(a,g)na25 + + + + + +reaction_si28(a,g)s32 + + + + +He-4->reaction_si28(a,g)s32 + + + + + +reaction_mg24(a,g)si28 + + + + +He-4->reaction_mg24(a,g)si28 + + + + + +reaction_mg26(a,g)si30 + + + + +He-4->reaction_mg26(a,g)si30 + + + + + +reaction_na24(a,g)al28 + + + + +He-4->reaction_na24(a,g)al28 + + + + + +reaction_na22(a,g)al26 + + + + +He-4->reaction_na22(a,g)al26 + + + + + +He-4->reaction_al26(a,p)si29 + + + + + +reaction_ne19(a,p)na22 + + + + +He-4->reaction_ne19(a,p)na22 + + + + + +reaction_o18(a,g)ne22 + + + + +He-4->reaction_o18(a,g)ne22 + + + + + +reaction_mg23(a,g)si27 + + + + +He-4->reaction_mg23(a,g)si27 + + + + + +reaction_si25(a,p)p28 + + + + +He-4->reaction_si25(a,p)p28 + + + + + +He-4->reaction_f20(a,g)na24 + + + + + +He-4->reaction_f20(a,n)na23 + + + + + +He-4->reaction_f19(a,g)na23 + + + + + +reaction_ne23(a,g)mg27 + + + + +He-4->reaction_ne23(a,g)mg27 + + + + + +reaction_mg23(a,p)al26 + + + + +He-4->reaction_mg23(a,p)al26 + + + + + +reaction_na23(a,p)mg26 + + + + +He-4->reaction_na23(a,p)mg26 + + + + + +reaction_mg22(a,g)si26 + + + + +He-4->reaction_mg22(a,g)si26 + + + + + +He-4->reaction_f21(a,n)na24 + + + + + +reaction_s31(a,g)ar35 + + + + +He-4->reaction_s31(a,g)ar35 + + + + + +reaction_o16(a,g)ne20 + + + + +He-4->reaction_o16(a,g)ne20 + + + + + +reaction_ne21(a,n)mg24 + + + + +He-4->reaction_ne21(a,n)mg24 + + + + + +reaction_ne21(a,g)mg25 + + + + +He-4->reaction_ne21(a,g)mg25 + + + + + +He-4->reaction_cl35(a,g)k39 + + + + + +He-6 + +He-6 + + + +K-35 + +K-35 + + + +K-36 + +K-36 + + + +K-38 + +K-38 + + + +K-39 + +K-39 + + + +Li-6 + +Li-6 + + + +Li-6->reaction_li6(a,g)b10 + + + + + +Li-6->reaction_li6(p,g)be7 + + + + + +reaction_li6(n,g)li7 + + + + +Li-6->reaction_li6(n,g)li7 + + + + + +Li-6->reaction_li6(d,p)li7 + + + + + +Li-6->reaction_li6(d,n)be7 + + + + + +reaction_Li-6(,ν)e+,He-6 + + + + +Li-6->reaction_Li-6(,ν)e+,He-6 + + + + + +reaction_Li-6(e-,ν)He-6 + + + + +Li-6->reaction_Li-6(e-,ν)He-6 + + + + + +reaction_Li-6(,ν|)e-,Be-6 + + + + +Li-6->reaction_Li-6(,ν|)e-,Be-6 + + + + + +reaction_Li-6(e+,ν|)Be-6 + + + + +Li-6->reaction_Li-6(e+,ν|)Be-6 + + + + + +Li-7 + +Li-7 + + + +Li-7->reaction_li7(t,2n a)he4 + + + + + +Li-7->reaction_li7(d,n a)he4 + + + + + +Li-7->reaction_li7(he3,p n a)he4 + + + + + +Li-7->reaction_li7(d,p)li8 + + + + + +reaction_li7(n,g)li8 + + + + +Li-7->reaction_li7(n,g)li8 + + + + + +Li-7->reaction_li7(t,n)be9 + + + + + +Li-7->reaction_li7(a,g)b11 + + + + + +Li-8 + +Li-8 + + + +Mg-20 + +Mg-20 + + + +Mg-20->reaction_mg20(a,p)al23 + + + + + +Mg-20->reaction_mg20(a,g)si24 + + + + + +reaction_mg20(n,g)mg21 + + + + +Mg-20->reaction_mg20(n,g)mg21 + + + + + +reaction_mg20(,e+)na20 + + + + +Mg-20->reaction_mg20(,e+)na20 + + + + + +reaction_mg20(,e+ p)ne19 + + + + +Mg-20->reaction_mg20(,e+ p)ne19 + + + + + +reaction_Mg-20(,ν)e+,Na-20 + + + + +Mg-20->reaction_Mg-20(,ν)e+,Na-20 + + + + + +reaction_Mg-20(e-,ν)Na-20 + + + + +Mg-20->reaction_Mg-20(e-,ν)Na-20 + + + + + +Mg-21 + +Mg-21 + + + +Mg-21->reaction_mg21(a,p)al24 + + + + + +Mg-21->reaction_mg21(a,g)si25 + + + + + +Mg-21->reaction_mg21(p,)al22 + + + + + +reaction_mg21(n,g)mg22 + + + + +Mg-21->reaction_mg21(n,g)mg22 + + + + + +reaction_mg21(,e+ p)ne20 + + + + +Mg-21->reaction_mg21(,e+ p)ne20 + + + + + +reaction_mg21(,e+ a)f17 + + + + +Mg-21->reaction_mg21(,e+ a)f17 + + + + + +reaction_mg21(,e+)na21 + + + + +Mg-21->reaction_mg21(,e+)na21 + + + + + +reaction_Mg-21(,ν)e+,Na-21 + + + + +Mg-21->reaction_Mg-21(,ν)e+,Na-21 + + + + + +reaction_Mg-21(e-,ν)Na-21 + + + + +Mg-21->reaction_Mg-21(e-,ν)Na-21 + + + + + +reaction_Mg-21(,ν|)e-,Al-21 + + + + +Mg-21->reaction_Mg-21(,ν|)e-,Al-21 + + + + + +reaction_Mg-21(e+,ν|)Al-21 + + + + +Mg-21->reaction_Mg-21(e+,ν|)Al-21 + + + + + +Mg-22 + +Mg-22 + + + +Mg-22->reaction_mg22(a,p)al25 + + + + + +reaction_mg22(n,g)mg23 + + + + +Mg-22->reaction_mg22(n,g)mg23 + + + + + +Mg-22->reaction_mg22(p,g)al23 + + + + + +reaction_mg22(,e+)na22 + + + + +Mg-22->reaction_mg22(,e+)na22 + + + + + +Mg-22->reaction_mg22(a,g)si26 + + + + + +reaction_Mg-22(,ν)e+,Na-22 + + + + +Mg-22->reaction_Mg-22(,ν)e+,Na-22 + + + + + +reaction_Mg-22(e-,ν)Na-22 + + + + +Mg-22->reaction_Mg-22(e-,ν)Na-22 + + + + + +reaction_Mg-22(,ν|)e-,Al-22 + + + + +Mg-22->reaction_Mg-22(,ν|)e-,Al-22 + + + + + +reaction_Mg-22(e+,ν|)Al-22 + + + + +Mg-22->reaction_Mg-22(e+,ν|)Al-22 + + + + + +Mg-23 + +Mg-23 + + + +reaction_mg23(n,g)mg24 + + + + +Mg-23->reaction_mg23(n,g)mg24 + + + + + +Mg-23->reaction_mg23(p,g)al24 + + + + + +Mg-23->reaction_mg23(a,g)si27 + + + + + +reaction_mg23(,e+)na23 + + + + +Mg-23->reaction_mg23(,e+)na23 + + + + + +Mg-23->reaction_mg23(a,p)al26 + + + + + +reaction_Mg-23(,ν)e+,Na-23 + + + + +Mg-23->reaction_Mg-23(,ν)e+,Na-23 + + + + + +reaction_Mg-23(e-,ν)Na-23 + + + + +Mg-23->reaction_Mg-23(e-,ν)Na-23 + + + + + +reaction_Mg-23(,ν|)e-,Al-23 + + + + +Mg-23->reaction_Mg-23(,ν|)e-,Al-23 + + + + + +reaction_Mg-23(e+,ν|)Al-23 + + + + +Mg-23->reaction_Mg-23(e+,ν|)Al-23 + + + + + +Mg-24 + +Mg-24 + + + +Mg-24->reaction_mg24(p,g)al25 + + + + + +reaction_mg24(n,g)mg25 + + + + +Mg-24->reaction_mg24(n,g)mg25 + + + + + +Mg-24->reaction_mg24(a,g)si28 + + + + + +reaction_Mg-24(,ν)e+,Na-24 + + + + +Mg-24->reaction_Mg-24(,ν)e+,Na-24 + + + + + +reaction_Mg-24(e-,ν)Na-24 + + + + +Mg-24->reaction_Mg-24(e-,ν)Na-24 + + + + + +reaction_Mg-24(,ν|)e-,Al-24 + + + + +Mg-24->reaction_Mg-24(,ν|)e-,Al-24 + + + + + +reaction_Mg-24(e+,ν|)Al-24 + + + + +Mg-24->reaction_Mg-24(e+,ν|)Al-24 + + + + + +Mg-25 + +Mg-25 + + + +Mg-25->reaction_mg25(a,n)si28 + + + + + +Mg-25->reaction_mg25(a,g)si29 + + + + + +Mg-25->reaction_mg25(p,g)al26 + + + + + +reaction_mg25(n,g)mg26 + + + + +Mg-25->reaction_mg25(n,g)mg26 + + + + + +reaction_Mg-25(,ν)e+,Na-25 + + + + +Mg-25->reaction_Mg-25(,ν)e+,Na-25 + + + + + +reaction_Mg-25(e-,ν)Na-25 + + + + +Mg-25->reaction_Mg-25(e-,ν)Na-25 + + + + + +reaction_Mg-25(,ν|)e-,Al-25 + + + + +Mg-25->reaction_Mg-25(,ν|)e-,Al-25 + + + + + +reaction_Mg-25(e+,ν|)Al-25 + + + + +Mg-25->reaction_Mg-25(e+,ν|)Al-25 + + + + + +Mg-26 + +Mg-26 + + + +Mg-26->reaction_mg26(a,n)si29 + + + + + +reaction_mg26(n,g)mg27 + + + + +Mg-26->reaction_mg26(n,g)mg27 + + + + + +Mg-26->reaction_mg26(a,g)si30 + + + + + +Mg-26->reaction_mg26(p,g)al27 + + + + + +reaction_Mg-26(,ν)e+,Na-26 + + + + +Mg-26->reaction_Mg-26(,ν)e+,Na-26 + + + + + +reaction_Mg-26(e-,ν)Na-26 + + + + +Mg-26->reaction_Mg-26(e-,ν)Na-26 + + + + + +reaction_Mg-26(,ν|)e-,Al-26 + + + + +Mg-26->reaction_Mg-26(,ν|)e-,Al-26 + + + + + +reaction_Mg-26(e+,ν|)Al-26 + + + + +Mg-26->reaction_Mg-26(e+,ν|)Al-26 + + + + + +Mg-27 + +Mg-27 + + + +Mg-27->reaction_mg27(a,n)si30 + + + + + +Mg-27->reaction_mg27(a,g)si31 + + + + + +reaction_mg27(n,g)mg28 + + + + +Mg-27->reaction_mg27(n,g)mg28 + + + + + +Mg-27->reaction_mg27(p,n)al27 + + + + + +Mg-27->reaction_mg27(p,g)al28 + + + + + +reaction_mg27(e-,)al27 + + + + +Mg-27->reaction_mg27(e-,)al27 + + + + + +reaction_Mg-27(,ν)e+,Na-27 + + + + +Mg-27->reaction_Mg-27(,ν)e+,Na-27 + + + + + +reaction_Mg-27(e-,ν)Na-27 + + + + +Mg-27->reaction_Mg-27(e-,ν)Na-27 + + + + + +reaction_Mg-27(,ν|)e-,Al-27 + + + + +Mg-27->reaction_Mg-27(,ν|)e-,Al-27 + + + + + +reaction_Mg-27(e+,ν|)Al-27 + + + + +Mg-27->reaction_Mg-27(e+,ν|)Al-27 + + + + + +Mg-28 + +Mg-28 + + + +N-11 + +N-11 + + + +N-12 + +N-12 + + + +N-12->reaction_n12(a,p)o15 + + + + + +N-12->reaction_n12(p,g)o13 + + + + + +reaction_n12(,e+)c12 + + + + +N-12->reaction_n12(,e+)c12 + + + + + +reaction_N-12(,ν)e+,C-12 + + + + +N-12->reaction_N-12(,ν)e+,C-12 + + + + + +reaction_N-12(e-,ν)C-12 + + + + +N-12->reaction_N-12(e-,ν)C-12 + + + + + +reaction_N-12(,ν|)e-,O-12 + + + + +N-12->reaction_N-12(,ν|)e-,O-12 + + + + + +reaction_N-12(e+,ν|)O-12 + + + + +N-12->reaction_N-12(e+,ν|)O-12 + + + + + +N-13 + +N-13 + + + +N-13->reaction_n13(a,p)o16 + + + + + +reaction_n13(,e+)c13 + + + + +N-13->reaction_n13(,e+)c13 + + + + + +N-13->reaction_n13(p,g)o14 + + + + + +reaction_n13(n,g)n14 + + + + +N-13->reaction_n13(n,g)n14 + + + + + +reaction_N-13(,ν)e+,C-13 + + + + +N-13->reaction_N-13(,ν)e+,C-13 + + + + + +reaction_N-13(e-,ν)C-13 + + + + +N-13->reaction_N-13(e-,ν)C-13 + + + + + +reaction_N-13(,ν|)e-,O-13 + + + + +N-13->reaction_N-13(,ν|)e-,O-13 + + + + + +reaction_N-13(e+,ν|)O-13 + + + + +N-13->reaction_N-13(e+,ν|)O-13 + + + + + +N-14 + +N-14 + + + +N-14->reaction_n14(p,n)o14 + + + + + +N-14->reaction_n14(a,n)f17 + + + + + +N-14->reaction_n14(a,g)f18 + + + + + +N-14->reaction_n14(p,g)o15 + + + + + +reaction_n14(n,g)n15 + + + + +N-14->reaction_n14(n,g)n15 + + + + + +reaction_N-14(,ν)e+,C-14 + + + + +N-14->reaction_N-14(,ν)e+,C-14 + + + + + +reaction_N-14(e-,ν)C-14 + + + + +N-14->reaction_N-14(e-,ν)C-14 + + + + + +reaction_N-14(,ν|)e-,O-14 + + + + +N-14->reaction_N-14(,ν|)e-,O-14 + + + + + +reaction_N-14(e+,ν|)O-14 + + + + +N-14->reaction_N-14(e+,ν|)O-14 + + + + + +N-15 + +N-15 + + + +N-15->reaction_n15(p,n)o15 + + + + + +N-15->reaction_n15(a,g)f19 + + + + + +N-15->reaction_n15(p,g)o16 + + + + + +reaction_n15(n,g)n16 + + + + +N-15->reaction_n15(n,g)n16 + + + + + +reaction_N-15(,ν)e+,C-15 + + + + +N-15->reaction_N-15(,ν)e+,C-15 + + + + + +reaction_N-15(e-,ν)C-15 + + + + +N-15->reaction_N-15(e-,ν)C-15 + + + + + +reaction_N-15(,ν|)e-,O-15 + + + + +N-15->reaction_N-15(,ν|)e-,O-15 + + + + + +reaction_N-15(e+,ν|)O-15 + + + + +N-15->reaction_N-15(e+,ν|)O-15 + + + + + +N-16 + +N-16 + + + +N-16->reaction_n16(p,n)o16 + + + + + +reaction_n16(n,g)n17 + + + + +N-16->reaction_n16(n,g)n17 + + + + + +N-16->reaction_n16(a,n)f19 + + + + + +reaction_n16(,e- a)c12 + + + + +N-16->reaction_n16(,e- a)c12 + + + + + +reaction_n16(e-,)o16 + + + + +N-16->reaction_n16(e-,)o16 + + + + + +reaction_N-16(,ν)e+,C-16 + + + + +N-16->reaction_N-16(,ν)e+,C-16 + + + + + +reaction_N-16(e-,ν)C-16 + + + + +N-16->reaction_N-16(e-,ν)C-16 + + + + + +reaction_N-16(,ν|)e-,O-16 + + + + +N-16->reaction_N-16(,ν|)e-,O-16 + + + + + +reaction_N-16(e+,ν|)O-16 + + + + +N-16->reaction_N-16(e+,ν|)O-16 + + + + + +N-17 + +N-17 + + + +reaction_n17(n,g)n18 + + + + +N-17->reaction_n17(n,g)n18 + + + + + +reaction_n17(e-,)o17 + + + + +N-17->reaction_n17(e-,)o17 + + + + + +reaction_n17(,e- n)o16 + + + + +N-17->reaction_n17(,e- n)o16 + + + + + +reaction_N-17(,ν)e+,C-17 + + + + +N-17->reaction_N-17(,ν)e+,C-17 + + + + + +reaction_N-17(e-,ν)C-17 + + + + +N-17->reaction_N-17(e-,ν)C-17 + + + + + +reaction_N-17(,ν|)e-,O-17 + + + + +N-17->reaction_N-17(,ν|)e-,O-17 + + + + + +reaction_N-17(e+,ν|)O-17 + + + + +N-17->reaction_N-17(e+,ν|)O-17 + + + + + +N-18 + +N-18 + + + +N-20 + +N-20 + + + +Na-17 + +Na-17 + + + +Na-18 + +Na-18 + + + +Na-19 + +Na-19 + + + +Na-20 + +Na-20 + + + +Na-20->reaction_na20(a,p)mg23 + + + + + +reaction_na20(,e+)ne20 + + + + +Na-20->reaction_na20(,e+)ne20 + + + + + +Na-20->reaction_na20(a,g)al24 + + + + + +Na-20->reaction_na20(p,g)mg21 + + + + + +reaction_na20(n,g)na21 + + + + +Na-20->reaction_na20(n,g)na21 + + + + + +reaction_na20(,e+ a)o16 + + + + +Na-20->reaction_na20(,e+ a)o16 + + + + + +reaction_Na-20(,ν)e+,Ne-20 + + + + +Na-20->reaction_Na-20(,ν)e+,Ne-20 + + + + + +reaction_Na-20(e-,ν)Ne-20 + + + + +Na-20->reaction_Na-20(e-,ν)Ne-20 + + + + + +reaction_Na-20(,ν|)e-,Mg-20 + + + + +Na-20->reaction_Na-20(,ν|)e-,Mg-20 + + + + + +reaction_Na-20(e+,ν|)Mg-20 + + + + +Na-20->reaction_Na-20(e+,ν|)Mg-20 + + + + + +Na-21 + +Na-21 + + + +Na-21->reaction_na21(a,g)al25 + + + + + +reaction_na21(n,g)na22 + + + + +Na-21->reaction_na21(n,g)na22 + + + + + +Na-21->reaction_na21(p,g)mg22 + + + + + +reaction_na21(,e+)ne21 + + + + +Na-21->reaction_na21(,e+)ne21 + + + + + +reaction_Na-21(,ν)e+,Ne-21 + + + + +Na-21->reaction_Na-21(,ν)e+,Ne-21 + + + + + +reaction_Na-21(e-,ν)Ne-21 + + + + +Na-21->reaction_Na-21(e-,ν)Ne-21 + + + + + +reaction_Na-21(,ν|)e-,Mg-21 + + + + +Na-21->reaction_Na-21(,ν|)e-,Mg-21 + + + + + +reaction_Na-21(e+,ν|)Mg-21 + + + + +Na-21->reaction_Na-21(e+,ν|)Mg-21 + + + + + +Na-22 + +Na-22 + + + +Na-22->reaction_na22(a,p)mg25 + + + + + +reaction_na22(n,g)na23 + + + + +Na-22->reaction_na22(n,g)na23 + + + + + +Na-22->reaction_na22(p,g)mg23 + + + + + +Na-22->reaction_na22(a,g)al26 + + + + + +reaction_na22(,e+)ne22 + + + + +Na-22->reaction_na22(,e+)ne22 + + + + + +reaction_Na-22(,ν)e+,Ne-22 + + + + +Na-22->reaction_Na-22(,ν)e+,Ne-22 + + + + + +reaction_Na-22(e-,ν)Ne-22 + + + + +Na-22->reaction_Na-22(e-,ν)Ne-22 + + + + + +reaction_Na-22(,ν|)e-,Mg-22 + + + + +Na-22->reaction_Na-22(,ν|)e-,Mg-22 + + + + + +reaction_Na-22(e+,ν|)Mg-22 + + + + +Na-22->reaction_Na-22(e+,ν|)Mg-22 + + + + + +Na-23 + +Na-23 + + + +Na-23->reaction_na23(a,g)al27 + + + + + +Na-23->reaction_na23(p,g)mg24 + + + + + +reaction_na23(n,g)na24 + + + + +Na-23->reaction_na23(n,g)na24 + + + + + +Na-23->reaction_na23(p,n)mg23 + + + + + +Na-23->reaction_na23(a,p)mg26 + + + + + +reaction_Na-23(,ν)e+,Ne-23 + + + + +Na-23->reaction_Na-23(,ν)e+,Ne-23 + + + + + +reaction_Na-23(e-,ν)Ne-23 + + + + +Na-23->reaction_Na-23(e-,ν)Ne-23 + + + + + +reaction_Na-23(,ν|)e-,Mg-23 + + + + +Na-23->reaction_Na-23(,ν|)e-,Mg-23 + + + + + +reaction_Na-23(e+,ν|)Mg-23 + + + + +Na-23->reaction_Na-23(e+,ν|)Mg-23 + + + + + +Na-24 + +Na-24 + + + +Na-24->reaction_na24(a,p)mg27 + + + + + +Na-24->reaction_na24(a,n)al27 + + + + + +Na-24->reaction_na24(p,n)mg24 + + + + + +reaction_na24(n,g)na25 + + + + +Na-24->reaction_na24(n,g)na25 + + + + + +Na-24->reaction_na24(p,g)mg25 + + + + + +reaction_na24(e-,)mg24 + + + + +Na-24->reaction_na24(e-,)mg24 + + + + + +Na-24->reaction_na24(a,g)al28 + + + + + +reaction_Na-24(,ν)e+,Ne-24 + + + + +Na-24->reaction_Na-24(,ν)e+,Ne-24 + + + + + +reaction_Na-24(e-,ν)Ne-24 + + + + +Na-24->reaction_Na-24(e-,ν)Ne-24 + + + + + +reaction_Na-24(,ν|)e-,Mg-24 + + + + +Na-24->reaction_Na-24(,ν|)e-,Mg-24 + + + + + +reaction_Na-24(e+,ν|)Mg-24 + + + + +Na-24->reaction_Na-24(e+,ν|)Mg-24 + + + + + +Na-25 + +Na-25 + + + +Na-25->reaction_na25(a,n)al28 + + + + + +Na-25->reaction_na25(a,p)mg28 + + + + + +Na-25->reaction_na25(p,g)mg26 + + + + + +Na-25->reaction_na25(p,n)mg25 + + + + + +Na-25->reaction_na25(a,g)al29 + + + + + +reaction_na25(e-,)mg25 + + + + +Na-25->reaction_na25(e-,)mg25 + + + + + +reaction_na25(n,g)na26 + + + + +Na-25->reaction_na25(n,g)na26 + + + + + +reaction_Na-25(,ν)e+,Ne-25 + + + + +Na-25->reaction_Na-25(,ν)e+,Ne-25 + + + + + +reaction_Na-25(e-,ν)Ne-25 + + + + +Na-25->reaction_Na-25(e-,ν)Ne-25 + + + + + +reaction_Na-25(,ν|)e-,Mg-25 + + + + +Na-25->reaction_Na-25(,ν|)e-,Mg-25 + + + + + +reaction_Na-25(e+,ν|)Mg-25 + + + + +Na-25->reaction_Na-25(e+,ν|)Mg-25 + + + + + +Na-26 + +Na-26 + + + +Na-27 + +Na-27 + + + +Ne-15 + +Ne-15 + + + +Ne-16 + +Ne-16 + + + +Ne-16->reaction_ne16(a,p)na19 + + + + + +Ne-16->reaction_ne16(a,g)mg20 + + + + + +reaction_ne16(n,g)ne17 + + + + +Ne-16->reaction_ne16(n,g)ne17 + + + + + +reaction_Ne-16(,ν)e+,F-16 + + + + +Ne-16->reaction_Ne-16(,ν)e+,F-16 + + + + + +reaction_Ne-16(e-,ν)F-16 + + + + +Ne-16->reaction_Ne-16(e-,ν)F-16 + + + + + +Ne-17 + +Ne-17 + + + +Ne-17->reaction_ne17(a,g)mg21 + + + + + +reaction_ne17(n,g)ne18 + + + + +Ne-17->reaction_ne17(n,g)ne18 + + + + + +Ne-17->reaction_ne17(a,p)na20 + + + + + +reaction_ne17(,e+ p)o16 + + + + +Ne-17->reaction_ne17(,e+ p)o16 + + + + + +reaction_ne17(,e+)f17 + + + + +Ne-17->reaction_ne17(,e+)f17 + + + + + +reaction_Ne-17(,ν)e+,F-17 + + + + +Ne-17->reaction_Ne-17(,ν)e+,F-17 + + + + + +reaction_Ne-17(e-,ν)F-17 + + + + +Ne-17->reaction_Ne-17(e-,ν)F-17 + + + + + +reaction_Ne-17(,ν|)e-,Na-17 + + + + +Ne-17->reaction_Ne-17(,ν|)e-,Na-17 + + + + + +reaction_Ne-17(e+,ν|)Na-17 + + + + +Ne-17->reaction_Ne-17(e+,ν|)Na-17 + + + + + +Ne-18 + +Ne-18 + + + +Ne-18->reaction_ne18(a,p)na21 + + + + + +Ne-18->reaction_ne18(a,g)mg22 + + + + + +reaction_ne18(n,g)ne19 + + + + +Ne-18->reaction_ne18(n,g)ne19 + + + + + +Ne-18->reaction_ne18(p,)na19 + + + + + +reaction_ne18(,e+)f18 + + + + +Ne-18->reaction_ne18(,e+)f18 + + + + + +reaction_Ne-18(,ν)e+,F-18 + + + + +Ne-18->reaction_Ne-18(,ν)e+,F-18 + + + + + +reaction_Ne-18(e-,ν)F-18 + + + + +Ne-18->reaction_Ne-18(e-,ν)F-18 + + + + + +reaction_Ne-18(,ν|)e-,Na-18 + + + + +Ne-18->reaction_Ne-18(,ν|)e-,Na-18 + + + + + +reaction_Ne-18(e+,ν|)Na-18 + + + + +Ne-18->reaction_Ne-18(e+,ν|)Na-18 + + + + + +Ne-19 + +Ne-19 + + + +Ne-19->reaction_ne19(p,g)na20 + + + + + +reaction_ne19(n,g)ne20 + + + + +Ne-19->reaction_ne19(n,g)ne20 + + + + + +Ne-19->reaction_ne19(a,g)mg23 + + + + + +Ne-19->reaction_ne19(a,p)na22 + + + + + +reaction_ne19(,e+)f19 + + + + +Ne-19->reaction_ne19(,e+)f19 + + + + + +reaction_Ne-19(,ν)e+,F-19 + + + + +Ne-19->reaction_Ne-19(,ν)e+,F-19 + + + + + +reaction_Ne-19(e-,ν)F-19 + + + + +Ne-19->reaction_Ne-19(e-,ν)F-19 + + + + + +reaction_Ne-19(,ν|)e-,Na-19 + + + + +Ne-19->reaction_Ne-19(,ν|)e-,Na-19 + + + + + +reaction_Ne-19(e+,ν|)Na-19 + + + + +Ne-19->reaction_Ne-19(e+,ν|)Na-19 + + + + + +Ne-20 + +Ne-20 + + + +Ne-20->reaction_ne20(c12,a)si28 + + + + + +Ne-20->reaction_ne20(c12,p)p31 + + + + + +Ne-20->reaction_ne20(c12,n)s31 + + + + + +Ne-20->reaction_ne20(a,g)mg24 + + + + + +Ne-20->reaction_ne20(p,g)na21 + + + + + +reaction_ne20(n,g)ne21 + + + + +Ne-20->reaction_ne20(n,g)ne21 + + + + + +reaction_Ne-20(,ν)e+,F-20 + + + + +Ne-20->reaction_Ne-20(,ν)e+,F-20 + + + + + +reaction_Ne-20(e-,ν)F-20 + + + + +Ne-20->reaction_Ne-20(e-,ν)F-20 + + + + + +reaction_Ne-20(,ν|)e-,Na-20 + + + + +Ne-20->reaction_Ne-20(,ν|)e-,Na-20 + + + + + +reaction_Ne-20(e+,ν|)Na-20 + + + + +Ne-20->reaction_Ne-20(e+,ν|)Na-20 + + + + + +Ne-21 + +Ne-21 + + + +Ne-21->reaction_ne21(p,g)na22 + + + + + +reaction_ne21(n,g)ne22 + + + + +Ne-21->reaction_ne21(n,g)ne22 + + + + + +Ne-21->reaction_ne21(a,n)mg24 + + + + + +Ne-21->reaction_ne21(a,g)mg25 + + + + + +reaction_Ne-21(,ν)e+,F-21 + + + + +Ne-21->reaction_Ne-21(,ν)e+,F-21 + + + + + +reaction_Ne-21(e-,ν)F-21 + + + + +Ne-21->reaction_Ne-21(e-,ν)F-21 + + + + + +reaction_Ne-21(,ν|)e-,Na-21 + + + + +Ne-21->reaction_Ne-21(,ν|)e-,Na-21 + + + + + +reaction_Ne-21(e+,ν|)Na-21 + + + + +Ne-21->reaction_Ne-21(e+,ν|)Na-21 + + + + + +Ne-22 + +Ne-22 + + + +Ne-23 + +Ne-23 + + + +Ne-23->reaction_ne23(a,n)mg26 + + + + + +Ne-23->reaction_ne23(p,n)na23 + + + + + +reaction_ne23(n,g)ne24 + + + + +Ne-23->reaction_ne23(n,g)ne24 + + + + + +Ne-23->reaction_ne23(p,g)na24 + + + + + +Ne-23->reaction_ne23(a,g)mg27 + + + + + +reaction_ne23(e-,)na23 + + + + +Ne-23->reaction_ne23(e-,)na23 + + + + + +reaction_Ne-23(,ν)e+,F-23 + + + + +Ne-23->reaction_Ne-23(,ν)e+,F-23 + + + + + +reaction_Ne-23(e-,ν)F-23 + + + + +Ne-23->reaction_Ne-23(e-,ν)F-23 + + + + + +reaction_Ne-23(,ν|)e-,Na-23 + + + + +Ne-23->reaction_Ne-23(,ν|)e-,Na-23 + + + + + +reaction_Ne-23(e+,ν|)Na-23 + + + + +Ne-23->reaction_Ne-23(e+,ν|)Na-23 + + + + + +Ne-24 + +Ne-24 + + + +Ne-24->reaction_ne24(a,n)mg27 + + + + + +Ne-24->reaction_ne24(p,n)na24 + + + + + +Ne-24->reaction_ne24(a,g)mg28 + + + + + +reaction_ne24(n,g)ne25 + + + + +Ne-24->reaction_ne24(n,g)ne25 + + + + + +Ne-24->reaction_ne24(p,g)na25 + + + + + +reaction_ne24(e-,)na24 + + + + +Ne-24->reaction_ne24(e-,)na24 + + + + + +reaction_Ne-24(,ν)e+,F-24 + + + + +Ne-24->reaction_Ne-24(,ν)e+,F-24 + + + + + +reaction_Ne-24(e-,ν)F-24 + + + + +Ne-24->reaction_Ne-24(e-,ν)F-24 + + + + + +reaction_Ne-24(,ν|)e-,Na-24 + + + + +Ne-24->reaction_Ne-24(,ν|)e-,Na-24 + + + + + +reaction_Ne-24(e+,ν|)Na-24 + + + + +Ne-24->reaction_Ne-24(e+,ν|)Na-24 + + + + + +Ne-25 + +Ne-25 + + + +O-12 + +O-12 + + + +reaction_o12(n,g)o13 + + + + +O-12->reaction_o12(n,g)o13 + + + + + +reaction_O-12(,ν)e+,N-12 + + + + +O-12->reaction_O-12(,ν)e+,N-12 + + + + + +reaction_O-12(e-,ν)N-12 + + + + +O-12->reaction_O-12(e-,ν)N-12 + + + + + +O-13 + +O-13 + + + +O-13->reaction_o13(a,2p)o15 + + + + + +O-13->reaction_o13(a,p)f16 + + + + + +reaction_o13(n,g)o14 + + + + +O-13->reaction_o13(n,g)o14 + + + + + +reaction_o13(,e+)n13 + + + + +O-13->reaction_o13(,e+)n13 + + + + + +reaction_o13(,e+ p)c12 + + + + +O-13->reaction_o13(,e+ p)c12 + + + + + +reaction_O-13(,ν)e+,N-13 + + + + +O-13->reaction_O-13(,ν)e+,N-13 + + + + + +reaction_O-13(e-,ν)N-13 + + + + +O-13->reaction_O-13(e-,ν)N-13 + + + + + +reaction_O-13(,ν|)e-,F-13 + + + + +O-13->reaction_O-13(,ν|)e-,F-13 + + + + + +reaction_O-13(e+,ν|)F-13 + + + + +O-13->reaction_O-13(e+,ν|)F-13 + + + + + +O-14 + +O-14 + + + +O-14->reaction_o14(a,p)f17 + + + + + +reaction_o14(n,g)o15 + + + + +O-14->reaction_o14(n,g)o15 + + + + + +O-14->reaction_o14(a,g)ne18 + + + + + +reaction_o14(,e+)n14 + + + + +O-14->reaction_o14(,e+)n14 + + + + + +O-14->reaction_o14(p,)f15 + + + + + +reaction_O-14(,ν)e+,N-14 + + + + +O-14->reaction_O-14(,ν)e+,N-14 + + + + + +reaction_O-14(e-,ν)N-14 + + + + +O-14->reaction_O-14(e-,ν)N-14 + + + + + +reaction_O-14(,ν|)e-,F-14 + + + + +O-14->reaction_O-14(,ν|)e-,F-14 + + + + + +reaction_O-14(e+,ν|)F-14 + + + + +O-14->reaction_O-14(e+,ν|)F-14 + + + + + +O-15 + +O-15 + + + +O-15->reaction_o15(a,g)ne19 + + + + + +O-15->reaction_o15(p,)f16 + + + + + +reaction_o15(n,g)o16 + + + + +O-15->reaction_o15(n,g)o16 + + + + + +reaction_o15(,e+)n15 + + + + +O-15->reaction_o15(,e+)n15 + + + + + +reaction_O-15(,ν)e+,N-15 + + + + +O-15->reaction_O-15(,ν)e+,N-15 + + + + + +reaction_O-15(e-,ν)N-15 + + + + +O-15->reaction_O-15(e-,ν)N-15 + + + + + +reaction_O-15(,ν|)e-,F-15 + + + + +O-15->reaction_O-15(,ν|)e-,F-15 + + + + + +reaction_O-15(e+,ν|)F-15 + + + + +O-15->reaction_O-15(e+,ν|)F-15 + + + + + +O-16 + +O-16 + + + +reaction_o16(o16,p)p31 + + + + +O-16->reaction_o16(o16,p)p31 + + + + + +O-16->reaction_o16(o16,p)p31 + + + + + +reaction_o16(o16,n)s31 + + + + +O-16->reaction_o16(o16,n)s31 + + + + + +O-16->reaction_o16(o16,n)s31 + + + + + +O-16->reaction_o16(c12,a)mg24 + + + + + +O-16->reaction_o16(c12,p)al27 + + + + + +O-16->reaction_o16(p,g)f17 + + + + + +reaction_o16(n,g)o17 + + + + +O-16->reaction_o16(n,g)o17 + + + + + +reaction_o16(o16,a)si28 + + + + +O-16->reaction_o16(o16,a)si28 + + + + + +O-16->reaction_o16(o16,a)si28 + + + + + +O-16->reaction_o16(a,g)ne20 + + + + + +reaction_O-16(,ν)e+,N-16 + + + + +O-16->reaction_O-16(,ν)e+,N-16 + + + + + +reaction_O-16(e-,ν)N-16 + + + + +O-16->reaction_O-16(e-,ν)N-16 + + + + + +reaction_O-16(,ν|)e-,F-16 + + + + +O-16->reaction_O-16(,ν|)e-,F-16 + + + + + +reaction_O-16(e+,ν|)F-16 + + + + +O-16->reaction_O-16(e+,ν|)F-16 + + + + + +O-17 + +O-17 + + + +reaction_o17(n,g)o18 + + + + +O-17->reaction_o17(n,g)o18 + + + + + +O-17->reaction_o17(a,n)ne20 + + + + + +O-17->reaction_o17(a,g)ne21 + + + + + +O-17->reaction_o17(p,g)f18 + + + + + +reaction_O-17(,ν)e+,N-17 + + + + +O-17->reaction_O-17(,ν)e+,N-17 + + + + + +reaction_O-17(e-,ν)N-17 + + + + +O-17->reaction_O-17(e-,ν)N-17 + + + + + +reaction_O-17(,ν|)e-,F-17 + + + + +O-17->reaction_O-17(,ν|)e-,F-17 + + + + + +reaction_O-17(e+,ν|)F-17 + + + + +O-17->reaction_O-17(e+,ν|)F-17 + + + + + +O-18 + +O-18 + + + +O-18->reaction_o18(a,n)ne21 + + + + + +O-18->reaction_o18(p,g)f19 + + + + + +reaction_o18(n,g)o19 + + + + +O-18->reaction_o18(n,g)o19 + + + + + +O-18->reaction_o18(a,g)ne22 + + + + + +reaction_O-18(,ν)e+,N-18 + + + + +O-18->reaction_O-18(,ν)e+,N-18 + + + + + +reaction_O-18(e-,ν)N-18 + + + + +O-18->reaction_O-18(e-,ν)N-18 + + + + + +reaction_O-18(,ν|)e-,F-18 + + + + +O-18->reaction_O-18(,ν|)e-,F-18 + + + + + +reaction_O-18(e+,ν|)F-18 + + + + +O-18->reaction_O-18(e+,ν|)F-18 + + + + + +O-19 + +O-19 + + + +O-20 + +O-20 + + + +O-20->reaction_o20(p,n)f20 + + + + + +O-20->reaction_o20(a,n)ne23 + + + + + +reaction_o20(n,g)o21 + + + + +O-20->reaction_o20(n,g)o21 + + + + + +O-20->reaction_o20(a,g)ne24 + + + + + +reaction_o20(e-,)f20 + + + + +O-20->reaction_o20(e-,)f20 + + + + + +O-20->reaction_o20(p,g)f21 + + + + + +reaction_O-20(,ν)e+,N-20 + + + + +O-20->reaction_O-20(,ν)e+,N-20 + + + + + +reaction_O-20(e-,ν)N-20 + + + + +O-20->reaction_O-20(e-,ν)N-20 + + + + + +reaction_O-20(,ν|)e-,F-20 + + + + +O-20->reaction_O-20(,ν|)e-,F-20 + + + + + +reaction_O-20(e+,ν|)F-20 + + + + +O-20->reaction_O-20(e+,ν|)F-20 + + + + + +O-21 + +O-21 + + + +P-24 + +P-24 + + + +P-25 + +P-25 + + + +P-26 + +P-26 + + + +P-27 + +P-27 + + + +P-28 + +P-28 + + + +P-28->reaction_p28(a,g)cl32 + + + + + +P-28->reaction_p28(a,p)s31 + + + + + +reaction_p28(n,g)p29 + + + + +P-28->reaction_p28(n,g)p29 + + + + + +reaction_p28(,e+)si28 + + + + +P-28->reaction_p28(,e+)si28 + + + + + +P-28->reaction_p28(p,g)s29 + + + + + +reaction_p28(,e+ p)al27 + + + + +P-28->reaction_p28(,e+ p)al27 + + + + + +reaction_p28(,e+ a)mg24 + + + + +P-28->reaction_p28(,e+ a)mg24 + + + + + +reaction_P-28(,ν)e+,Si-28 + + + + +P-28->reaction_P-28(,ν)e+,Si-28 + + + + + +reaction_P-28(e-,ν)Si-28 + + + + +P-28->reaction_P-28(e-,ν)Si-28 + + + + + +reaction_P-28(,ν|)e-,S-28 + + + + +P-28->reaction_P-28(,ν|)e-,S-28 + + + + + +reaction_P-28(e+,ν|)S-28 + + + + +P-28->reaction_P-28(e+,ν|)S-28 + + + + + +P-29 + +P-29 + + + +P-29->reaction_p29(a,g)cl33 + + + + + +P-29->reaction_p29(p,g)s30 + + + + + +reaction_p29(n,g)p30 + + + + +P-29->reaction_p29(n,g)p30 + + + + + +P-29->reaction_p29(a,p)s32 + + + + + +reaction_p29(,e+)si29 + + + + +P-29->reaction_p29(,e+)si29 + + + + + +reaction_P-29(,ν)e+,Si-29 + + + + +P-29->reaction_P-29(,ν)e+,Si-29 + + + + + +reaction_P-29(e-,ν)Si-29 + + + + +P-29->reaction_P-29(e-,ν)Si-29 + + + + + +reaction_P-29(,ν|)e-,S-29 + + + + +P-29->reaction_P-29(,ν|)e-,S-29 + + + + + +reaction_P-29(e+,ν|)S-29 + + + + +P-29->reaction_P-29(e+,ν|)S-29 + + + + + +P-30 + +P-30 + + + +P-30->reaction_p30(a,p)s33 + + + + + +P-30->reaction_p30(a,g)cl34 + + + + + +P-30->reaction_p30(p,g)s31 + + + + + +reaction_p30(n,g)p31 + + + + +P-30->reaction_p30(n,g)p31 + + + + + +reaction_p30(,e+)si30 + + + + +P-30->reaction_p30(,e+)si30 + + + + + +reaction_P-30(,ν)e+,Si-30 + + + + +P-30->reaction_P-30(,ν)e+,Si-30 + + + + + +reaction_P-30(e-,ν)Si-30 + + + + +P-30->reaction_P-30(e-,ν)Si-30 + + + + + +reaction_P-30(,ν|)e-,S-30 + + + + +P-30->reaction_P-30(,ν|)e-,S-30 + + + + + +reaction_P-30(e+,ν|)S-30 + + + + +P-30->reaction_P-30(e+,ν|)S-30 + + + + + +P-31 + +P-31 + + + +P-31->reaction_p31(a,p)s34 + + + + + +P-31->reaction_p31(p,g)s32 + + + + + +P-31->reaction_p31(a,g)cl35 + + + + + +reaction_p31(n,g)p32 + + + + +P-31->reaction_p31(n,g)p32 + + + + + +reaction_P-31(,ν)e+,Si-31 + + + + +P-31->reaction_P-31(,ν)e+,Si-31 + + + + + +reaction_P-31(e-,ν)Si-31 + + + + +P-31->reaction_P-31(e-,ν)Si-31 + + + + + +reaction_P-31(,ν|)e-,S-31 + + + + +P-31->reaction_P-31(,ν|)e-,S-31 + + + + + +reaction_P-31(e+,ν|)S-31 + + + + +P-31->reaction_P-31(e+,ν|)S-31 + + + + + +P-32 + +P-32 + + + +P-32->reaction_p32(a,g)cl36 + + + + + +P-32->reaction_p32(p,g)s33 + + + + + +reaction_p32(n,g)p33 + + + + +P-32->reaction_p32(n,g)p33 + + + + + +P-32->reaction_p32(p,n)s32 + + + + + +reaction_p32(e-,)s32 + + + + +P-32->reaction_p32(e-,)s32 + + + + + +reaction_P-32(,ν)e+,Si-32 + + + + +P-32->reaction_P-32(,ν)e+,Si-32 + + + + + +reaction_P-32(e-,ν)Si-32 + + + + +P-32->reaction_P-32(e-,ν)Si-32 + + + + + +reaction_P-32(,ν|)e-,S-32 + + + + +P-32->reaction_P-32(,ν|)e-,S-32 + + + + + +reaction_P-32(e+,ν|)S-32 + + + + +P-32->reaction_P-32(e+,ν|)S-32 + + + + + +P-33 + +P-33 + + + +P-34 + +P-34 + + + +S-28 + +S-28 + + + +S-29 + +S-29 + + + +S-30 + +S-30 + + + +S-31 + +S-31 + + + +S-31->reaction_s31(a,p)cl34 + + + + + +S-31->reaction_s31(p,g)cl32 + + + + + +reaction_s31(n,g)s32 + + + + +S-31->reaction_s31(n,g)s32 + + + + + +reaction_s31(,e+)p31 + + + + +S-31->reaction_s31(,e+)p31 + + + + + +S-31->reaction_s31(a,g)ar35 + + + + + +reaction_S-31(,ν)e+,P-31 + + + + +S-31->reaction_S-31(,ν)e+,P-31 + + + + + +reaction_S-31(e-,ν)P-31 + + + + +S-31->reaction_S-31(e-,ν)P-31 + + + + + +reaction_S-31(,ν|)e-,Cl-31 + + + + +S-31->reaction_S-31(,ν|)e-,Cl-31 + + + + + +reaction_S-31(e+,ν|)Cl-31 + + + + +S-31->reaction_S-31(e+,ν|)Cl-31 + + + + + +S-32 + +S-32 + + + +S-32->reaction_s32(a,g)ar36 + + + + + +S-32->reaction_s32(p,g)cl33 + + + + + +reaction_s32(n,g)s33 + + + + +S-32->reaction_s32(n,g)s33 + + + + + +reaction_S-32(,ν)e+,P-32 + + + + +S-32->reaction_S-32(,ν)e+,P-32 + + + + + +reaction_S-32(e-,ν)P-32 + + + + +S-32->reaction_S-32(e-,ν)P-32 + + + + + +reaction_S-32(,ν|)e-,Cl-32 + + + + +S-32->reaction_S-32(,ν|)e-,Cl-32 + + + + + +reaction_S-32(e+,ν|)Cl-32 + + + + +S-32->reaction_S-32(e+,ν|)Cl-32 + + + + + +S-33 + +S-33 + + + +S-34 + +S-34 + + + +S-34->reaction_s34(a,p)cl37 + + + + + +S-34->reaction_s34(a,g)ar38 + + + + + +S-34->reaction_s34(p,g)cl35 + + + + + +reaction_s34(n,g)s35 + + + + +S-34->reaction_s34(n,g)s35 + + + + + +S-34->reaction_s34(a,n)ar37 + + + + + +reaction_S-34(,ν)e+,P-34 + + + + +S-34->reaction_S-34(,ν)e+,P-34 + + + + + +reaction_S-34(e-,ν)P-34 + + + + +S-34->reaction_S-34(e-,ν)P-34 + + + + + +reaction_S-34(,ν|)e-,Cl-34 + + + + +S-34->reaction_S-34(,ν|)e-,Cl-34 + + + + + +reaction_S-34(e+,ν|)Cl-34 + + + + +S-34->reaction_S-34(e+,ν|)Cl-34 + + + + + +S-35 + +S-35 + + + +Si-24 + +Si-24 + + + +Si-24->reaction_si24(a,p)p27 + + + + + +Si-24->reaction_si24(a,g)s28 + + + + + +reaction_si24(n,g)si25 + + + + +Si-24->reaction_si24(n,g)si25 + + + + + +Si-24->reaction_si24(p,)p25 + + + + + +reaction_si24(,e+ p)mg23 + + + + +Si-24->reaction_si24(,e+ p)mg23 + + + + + +reaction_si24(,e+)al24 + + + + +Si-24->reaction_si24(,e+)al24 + + + + + +reaction_Si-24(,ν)e+,Al-24 + + + + +Si-24->reaction_Si-24(,ν)e+,Al-24 + + + + + +reaction_Si-24(e-,ν)Al-24 + + + + +Si-24->reaction_Si-24(e-,ν)Al-24 + + + + + +reaction_Si-24(,ν|)e-,P-24 + + + + +Si-24->reaction_Si-24(,ν|)e-,P-24 + + + + + +reaction_Si-24(e+,ν|)P-24 + + + + +Si-24->reaction_Si-24(e+,ν|)P-24 + + + + + +Si-25 + +Si-25 + + + +Si-25->reaction_si25(p,g)p26 + + + + + +Si-25->reaction_si25(a,g)s29 + + + + + +reaction_si25(,e+ p)mg24 + + + + +Si-25->reaction_si25(,e+ p)mg24 + + + + + +reaction_si25(,e+)al25 + + + + +Si-25->reaction_si25(,e+)al25 + + + + + +reaction_si25(n,g)si26 + + + + +Si-25->reaction_si25(n,g)si26 + + + + + +Si-25->reaction_si25(a,p)p28 + + + + + +reaction_Si-25(,ν)e+,Al-25 + + + + +Si-25->reaction_Si-25(,ν)e+,Al-25 + + + + + +reaction_Si-25(e-,ν)Al-25 + + + + +Si-25->reaction_Si-25(e-,ν)Al-25 + + + + + +reaction_Si-25(,ν|)e-,P-25 + + + + +Si-25->reaction_Si-25(,ν|)e-,P-25 + + + + + +reaction_Si-25(e+,ν|)P-25 + + + + +Si-25->reaction_Si-25(e+,ν|)P-25 + + + + + +Si-26 + +Si-26 + + + +Si-26->reaction_si26(a,p)p29 + + + + + +Si-26->reaction_si26(p,g)p27 + + + + + +reaction_si26(n,g)si27 + + + + +Si-26->reaction_si26(n,g)si27 + + + + + +Si-26->reaction_si26(a,g)s30 + + + + + +reaction_si26(,e+)al26 + + + + +Si-26->reaction_si26(,e+)al26 + + + + + +reaction_Si-26(,ν)e+,Al-26 + + + + +Si-26->reaction_Si-26(,ν)e+,Al-26 + + + + + +reaction_Si-26(e-,ν)Al-26 + + + + +Si-26->reaction_Si-26(e-,ν)Al-26 + + + + + +reaction_Si-26(,ν|)e-,P-26 + + + + +Si-26->reaction_Si-26(,ν|)e-,P-26 + + + + + +reaction_Si-26(e+,ν|)P-26 + + + + +Si-26->reaction_Si-26(e+,ν|)P-26 + + + + + +Si-27 + +Si-27 + + + +Si-27->reaction_si27(a,p)p30 + + + + + +Si-27->reaction_si27(a,g)s31 + + + + + +reaction_si27(n,g)si28 + + + + +Si-27->reaction_si27(n,g)si28 + + + + + +Si-27->reaction_si27(p,g)p28 + + + + + +reaction_si27(,e+)al27 + + + + +Si-27->reaction_si27(,e+)al27 + + + + + +reaction_Si-27(,ν)e+,Al-27 + + + + +Si-27->reaction_Si-27(,ν)e+,Al-27 + + + + + +reaction_Si-27(e-,ν)Al-27 + + + + +Si-27->reaction_Si-27(e-,ν)Al-27 + + + + + +reaction_Si-27(,ν|)e-,P-27 + + + + +Si-27->reaction_Si-27(,ν|)e-,P-27 + + + + + +reaction_Si-27(e+,ν|)P-27 + + + + +Si-27->reaction_Si-27(e+,ν|)P-27 + + + + + +Si-28 + +Si-28 + + + +Si-28->reaction_si28(p,g)p29 + + + + + +Si-28->reaction_si28(a,g)s32 + + + + + +reaction_si28(n,g)si29 + + + + +Si-28->reaction_si28(n,g)si29 + + + + + +reaction_Si-28(,ν)e+,Al-28 + + + + +Si-28->reaction_Si-28(,ν)e+,Al-28 + + + + + +reaction_Si-28(e-,ν)Al-28 + + + + +Si-28->reaction_Si-28(e-,ν)Al-28 + + + + + +reaction_Si-28(,ν|)e-,P-28 + + + + +Si-28->reaction_Si-28(,ν|)e-,P-28 + + + + + +reaction_Si-28(e+,ν|)P-28 + + + + +Si-28->reaction_Si-28(e+,ν|)P-28 + + + + + +Si-29 + +Si-29 + + + +Si-29->reaction_si29(a,g)s33 + + + + + +reaction_si29(n,g)si30 + + + + +Si-29->reaction_si29(n,g)si30 + + + + + +Si-29->reaction_si29(p,g)p30 + + + + + +reaction_Si-29(,ν)e+,Al-29 + + + + +Si-29->reaction_Si-29(,ν)e+,Al-29 + + + + + +reaction_Si-29(e-,ν)Al-29 + + + + +Si-29->reaction_Si-29(e-,ν)Al-29 + + + + + +reaction_Si-29(,ν|)e-,P-29 + + + + +Si-29->reaction_Si-29(,ν|)e-,P-29 + + + + + +reaction_Si-29(e+,ν|)P-29 + + + + +Si-29->reaction_Si-29(e+,ν|)P-29 + + + + + +Si-30 + +Si-30 + + + +Si-30->reaction_si30(a,g)s34 + + + + + +Si-30->reaction_si30(p,g)p31 + + + + + +reaction_si30(n,g)si31 + + + + +Si-30->reaction_si30(n,g)si31 + + + + + +reaction_Si-30(,ν)e+,Al-30 + + + + +Si-30->reaction_Si-30(,ν)e+,Al-30 + + + + + +reaction_Si-30(e-,ν)Al-30 + + + + +Si-30->reaction_Si-30(e-,ν)Al-30 + + + + + +reaction_Si-30(,ν|)e-,P-30 + + + + +Si-30->reaction_Si-30(,ν|)e-,P-30 + + + + + +reaction_Si-30(e+,ν|)P-30 + + + + +Si-30->reaction_Si-30(e+,ν|)P-30 + + + + + +Si-31 + +Si-31 + + + +Si-31->reaction_si31(p,n)p31 + + + + + +Si-31->reaction_si31(p,g)p32 + + + + + +Si-31->reaction_si31(a,g)s35 + + + + + +Si-31->reaction_si31(a,n)s34 + + + + + +reaction_si31(n,g)si32 + + + + +Si-31->reaction_si31(n,g)si32 + + + + + +reaction_si31(e-,)p31 + + + + +Si-31->reaction_si31(e-,)p31 + + + + + +reaction_Si-31(,ν)e+,Al-31 + + + + +Si-31->reaction_Si-31(,ν)e+,Al-31 + + + + + +reaction_Si-31(e-,ν)Al-31 + + + + +Si-31->reaction_Si-31(e-,ν)Al-31 + + + + + +reaction_Si-31(,ν|)e-,P-31 + + + + +Si-31->reaction_Si-31(,ν|)e-,P-31 + + + + + +reaction_Si-31(e+,ν|)P-31 + + + + +Si-31->reaction_Si-31(e+,ν|)P-31 + + + + + +Si-32 + +Si-32 + + + +n-1 + +n-1 + + + +n-1->reaction_n(2p,p g)d + + + + + +n-1->reaction_c11(n,2a)he4 + + + + + +n-1->reaction_cl32(n,g)cl33 + + + + + +n-1->reaction_o12(n,g)o13 + + + + + +n-1->reaction_ar35(n,g)ar36 + + + + + +n-1->reaction_cl35(n,g)cl36 + + + + + +n-1->reaction_cl31(n,g)cl32 + + + + + +n-1->reaction_s34(n,g)s35 + + + + + +n-1->reaction_p32(n,g)p33 + + + + + +n-1->reaction_p29(n,g)p30 + + + + + +n-1->reaction_si29(n,g)si30 + + + + + +n-1->reaction_si26(n,g)si27 + + + + + +n-1->reaction_si24(n,g)si25 + + + + + +n-1->reaction_al26(n,g)al27 + + + + + +n-1->reaction_al24(n,g)al25 + + + + + +n-1->reaction_mg24(n,g)mg25 + + + + + +n-1->reaction_mg23(n,g)mg24 + + + + + +n-1->reaction_mg22(n,g)mg23 + + + + + +n-1->reaction_mg21(n,g)mg22 + + + + + +n-1->reaction_mg20(n,g)mg21 + + + + + +n-1->reaction_f15(n,g)f16 + + + + + +n-1->reaction_na24(n,g)na25 + + + + + +n-1->reaction_na23(n,g)na24 + + + + + +n-1->reaction_na22(n,g)na23 + + + + + +n-1->reaction_na21(n,g)na22 + + + + + +n-1->reaction_na20(n,g)na21 + + + + + +n-1->reaction_ne24(n,g)ne25 + + + + + +n-1->reaction_ne23(n,g)ne24 + + + + + +n-1->reaction_ne20(n,g)ne21 + + + + + +n-1->reaction_ne19(n,g)ne20 + + + + + +n-1->reaction_ne18(n,g)ne19 + + + + + +n-1->reaction_ne17(n,g)ne18 + + + + + +n-1->reaction_f21(n,g)f22 + + + + + +n-1->reaction_f18(n,g)f19 + + + + + +n-1->reaction_f16(n,g)f17 + + + + + +n-1->reaction_f14(n,g)f15 + + + + + +n-1->reaction_o17(n,g)o18 + + + + + +n-1->reaction_o16(n,g)o17 + + + + + +n-1->reaction_o14(n,g)o15 + + + + + +n-1->reaction_n17(n,g)n18 + + + + + +n-1->reaction_n16(n,g)n17 + + + + + +n-1->reaction_c12(n,g)c13 + + + + + +n-1->reaction_c11(n,g)c12 + + + + + +n-1->reaction_b13(n,g)b14 + + + + + +n-1->reaction_b12(n,g)b13 + + + + + +n-1->reaction_li7(n,g)li8 + + + + + +n-1->reaction_li6(n,g)li7 + + + + + +n-1->reaction_he3(n,g)he4 + + + + + +n-1->reaction_d(n,g)t + + + + + +n-1->reaction_s32(n,g)s33 + + + + + +n-1->reaction_c13(n,g)c14 + + + + + +n-1->reaction_o15(n,g)o16 + + + + + +n-1->reaction_s31(n,g)s32 + + + + + +n-1->reaction_n15(n,g)n16 + + + + + +n-1->reaction_o20(n,g)o21 + + + + + +n-1->reaction_p28(n,g)p29 + + + + + +n-1->reaction_al25(n,g)al26 + + + + + +n-1->reaction_o13(n,g)o14 + + + + + +n-1->reaction_cl34(n,g)cl35 + + + + + +n-1->reaction_n(p,g)d + + + + + +n-1->reaction_si31(n,g)si32 + + + + + +n-1->reaction_mg26(n,g)mg27 + + + + + +n-1->reaction_si27(n,g)si28 + + + + + +n-1->reaction_c14(n,g)c15 + + + + + +n-1->reaction_f20(n,g)f21 + + + + + +n-1->reaction_si28(n,g)si29 + + + + + +n-1->reaction_ne16(n,g)ne17 + + + + + +n-1->reaction_f17(n,g)f18 + + + + + +n-1->reaction_c16(n,g)c17 + + + + + +n-1->reaction_n14(n,g)n15 + + + + + +n-1->reaction_al28(n,g)al29 + + + + + +n-1->reaction_al27(n,g)al28 + + + + + +n-1->reaction_o18(n,g)o19 + + + + + +n-1->reaction_f19(n,g)f20 + + + + + +n-1->reaction_ne21(n,g)ne22 + + + + + +n-1->reaction_c15(n,g)c16 + + + + + +n-1->reaction_si25(n,g)si26 + + + + + +n-1->reaction_mg27(n,g)mg28 + + + + + +n-1->reaction_mg25(n,g)mg26 + + + + + +n-1->reaction_p30(n,g)p31 + + + + + +n-1->reaction_n13(n,g)n14 + + + + + +n-1->reaction_p31(n,g)p32 + + + + + +n-1->reaction_b8(n,p a)he4 + + + + + +n-1->reaction_si30(n,g)si31 + + + + + +n-1->reaction_na25(n,g)na26 + + + + + +reaction_n(2p,p g)d->H-1 + + +2.225 MeV + + + +reaction_n(2p,p g)d->H-2 + + +2.225 MeV + + + +reaction_be7(he3,2p a)he4->H-1 + + +11.2721 MeV + + + +reaction_be7(he3,2p a)he4->H-1 + + +11.2721 MeV + + + +reaction_be7(he3,2p a)he4->He-4 + + +11.2721 MeV + + + +reaction_be7(he3,2p a)he4->He-4 + + +11.2721 MeV + + + +reaction_be7(t,p n a)he4->H-1 + + +10.5088 MeV + + + +reaction_be7(t,p n a)he4->He-4 + + +10.5088 MeV + + + +reaction_be7(t,p n a)he4->He-4 + + +10.5088 MeV + + + +reaction_be7(t,p n a)he4->n-1 + + +10.5088 MeV + + + +reaction_li7(t,2n a)he4->He-4 + + +8.86442 MeV + + + +reaction_li7(t,2n a)he4->He-4 + + +8.86442 MeV + + + +reaction_li7(t,2n a)he4->n-1 + + +8.86442 MeV + + + +reaction_li7(t,2n a)he4->n-1 + + +8.86442 MeV + + + +reaction_o13(a,2p)o15->H-1 + + +8.1019 MeV + + + +reaction_o13(a,2p)o15->H-1 + + +8.1019 MeV + + + +reaction_o13(a,2p)o15->O-15 + + +8.1019 MeV + + + +reaction_li7(d,n a)he4->He-4 + + +15.121 MeV + + + +reaction_li7(d,n a)he4->He-4 + + +15.121 MeV + + + +reaction_li7(d,n a)he4->n-1 + + +15.121 MeV + + + +reaction_t(he3,p n)he4->H-1 + + +12.096 MeV + + + +reaction_t(he3,p n)he4->He-4 + + +12.096 MeV + + + +reaction_t(he3,p n)he4->n-1 + + +12.096 MeV + + + +reaction_t(t,2n)he4->He-4 + + +11.332 MeV + + + +reaction_t(t,2n)he4->n-1 + + +11.332 MeV + + + +reaction_t(t,2n)he4->n-1 + + +11.332 MeV + + + +reaction_cl35(a,p)ar38->Ar-38 + + +0.836956 MeV + + + +reaction_cl35(a,p)ar38->H-1 + + +0.836956 MeV + + + +reaction_cl34(a,p)ar37->Ar-37 + + +1.64383 MeV + + + +reaction_cl34(a,p)ar37->H-1 + + +1.64383 MeV + + + +reaction_cl31(a,p)ar34->Ar-34 + + +6.446 MeV + + + +reaction_cl31(a,p)ar34->H-1 + + +6.446 MeV + + + +reaction_s34(a,p)cl37->Cl-37 + + +-3.034 MeV + + + +reaction_s34(a,p)cl37->H-1 + + +-3.034 MeV + + + +reaction_s31(a,p)cl34->Cl-34 + + +0.531073 MeV + + + +reaction_s31(a,p)cl34->H-1 + + +0.531073 MeV + + + +reaction_p31(a,p)s34->H-1 + + +0.626848 MeV + + + +reaction_p31(a,p)s34->S-34 + + +0.626848 MeV + + + +reaction_p30(a,p)s33->H-1 + + +1.52136 MeV + + + +reaction_p30(a,p)s33->S-33 + + +1.52136 MeV + + + +reaction_c11(n,2a)he4->He-4 + + +11.4466 MeV + + + +reaction_c11(n,2a)he4->He-4 + + +11.4466 MeV + + + +reaction_c11(n,2a)he4->He-4 + + +11.4466 MeV + + + +reaction_si31(p,n)p31->P-31 + + +0.709 MeV + + + +reaction_si31(p,n)p31->n-1 + + +0.709 MeV + + + +reaction_si26(a,p)p29->H-1 + + +4.94394 MeV + + + +reaction_si26(a,p)p29->P-29 + + +4.94394 MeV + + + +reaction_si24(a,p)p27->H-1 + + +6.60765 MeV + + + +reaction_si24(a,p)p27->P-27 + + +6.60765 MeV + + + +reaction_si27(a,p)p30->H-1 + + +2.95222 MeV + + + +reaction_si27(a,p)p30->P-30 + + +2.95222 MeV + + + +reaction_al28(p,n)si28->Si-28 + + +3.86 MeV + + + +reaction_al28(p,n)si28->n-1 + + +3.86 MeV + + + +reaction_al27(a,p)si30->H-1 + + +2.37222 MeV + + + +reaction_al27(a,p)si30->Si-30 + + +2.37222 MeV + + + +reaction_al27(a,n)p30->P-30 + + +-2.643 MeV + + + +reaction_al27(a,n)p30->n-1 + + +-2.643 MeV + + + +reaction_al24(a,p)si27->H-1 + + +7.4633 MeV + + + +reaction_al24(a,p)si27->Si-27 + + +7.4633 MeV + + + +reaction_mg27(a,n)si30->Si-30 + + +4.2 MeV + + + +reaction_mg27(a,n)si30->n-1 + + +4.2 MeV + + + +reaction_mg26(a,n)si29->Si-29 + + +0.034 MeV + + + +reaction_mg26(a,n)si29->n-1 + + +0.034 MeV + + + +reaction_mg25(a,n)si28->Si-28 + + +2.654 MeV + + + +reaction_mg25(a,n)si28->n-1 + + +2.654 MeV + + + +reaction_mg22(a,p)al25->Al-25 + + +3.65515 MeV + + + +reaction_mg22(a,p)al25->H-1 + + +3.65515 MeV + + + +reaction_mg21(a,p)al24->Al-24 + + +6.1034 MeV + + + +reaction_mg21(a,p)al24->H-1 + + +6.1034 MeV + + + +reaction_mg20(a,p)al23->Al-23 + + +5.93672 MeV + + + +reaction_mg20(a,p)al23->H-1 + + +5.93672 MeV + + + +reaction_na25(a,n)al28->Al-28 + + +1.847 MeV + + + +reaction_na25(a,n)al28->n-1 + + +1.847 MeV + + + +reaction_na24(a,p)mg27->H-1 + + +1.305 MeV + + + +reaction_na24(a,p)mg27->Mg-27 + + +1.305 MeV + + + +reaction_na24(a,n)al27->Al-27 + + +3.133 MeV + + + +reaction_na24(a,n)al27->n-1 + + +3.133 MeV + + + +reaction_na24(p,n)mg24->Mg-24 + + +4.733 MeV + + + +reaction_na24(p,n)mg24->n-1 + + +4.733 MeV + + + +reaction_na22(a,p)mg25->H-1 + + +3.14634 MeV + + + +reaction_na22(a,p)mg25->Mg-25 + + +3.14634 MeV + + + +reaction_na20(a,p)mg23->H-1 + + +7.45743 MeV + + + +reaction_na20(a,p)mg23->Mg-23 + + +7.45743 MeV + + + +reaction_al25(a,p)si28->H-1 + + +7.71257 MeV + + + +reaction_al25(a,p)si28->Si-28 + + +7.71257 MeV + + + +reaction_ne24(a,n)mg27->Mg-27 + + +2.992 MeV + + + +reaction_ne24(a,n)mg27->n-1 + + +2.992 MeV + + + +reaction_ne24(p,n)na24->Na-24 + + +1.688 MeV + + + +reaction_ne24(p,n)na24->n-1 + + +1.688 MeV + + + +reaction_ne23(a,n)mg26->Mg-26 + + +5.415 MeV + + + +reaction_ne23(a,n)mg26->n-1 + + +5.415 MeV + + + +reaction_ne23(p,n)na23->Na-23 + + +3.594 MeV + + + +reaction_ne23(p,n)na23->n-1 + + +3.594 MeV + + + +reaction_ar35(a,p)k38->H-1 + + +0.889225 MeV + + + +reaction_ar35(a,p)k38->K-38 + + +0.889225 MeV + + + +reaction_ne20(c12,a)si28->He-4 + + +12.0211 MeV + + + +reaction_ne20(c12,a)si28->Si-28 + + +12.0211 MeV + + + +reaction_ne20(c12,p)p31->H-1 + + +10.104 MeV + + + +reaction_ne20(c12,p)p31->P-31 + + +10.104 MeV + + + +reaction_ne18(a,p)na21->H-1 + + +2.6373 MeV + + + +reaction_ne18(a,p)na21->Na-21 + + +2.6373 MeV + + + +reaction_ne16(a,p)na19->H-1 + + +6.2056 MeV + + + +reaction_ne16(a,p)na19->Na-19 + + +6.2056 MeV + + + +reaction_f21(a,p)ne24->H-1 + + +1.036 MeV + + + +reaction_f21(a,p)ne24->Ne-24 + + +1.036 MeV + + + +reaction_f20(a,p)ne23->H-1 + + +0.272 MeV + + + +reaction_f20(a,p)ne23->Ne-23 + + +0.272 MeV + + + +reaction_f19(p,n)ne19->Ne-19 + + +-4.021 MeV + + + +reaction_f19(p,n)ne19->n-1 + + +-4.021 MeV + + + +reaction_f18(a,p)ne21->H-1 + + +1.741 MeV + + + +reaction_f18(a,p)ne21->Ne-21 + + +1.741 MeV + + + +reaction_f15(a,p)ne18->H-1 + + +6.606 MeV + + + +reaction_f15(a,p)ne18->Ne-18 + + +6.606 MeV + + + +reaction_o20(p,n)f20->F-20 + + +3.032 MeV + + + +reaction_o20(p,n)f20->n-1 + + +3.032 MeV + + + +reaction_o18(a,n)ne21->Ne-21 + + +-0.697 MeV + + + +reaction_o18(a,n)ne21->n-1 + + +-0.697 MeV + + + +reaction_f19(a,p)ne22->H-1 + + +1.67327 MeV + + + +reaction_f19(a,p)ne22->Ne-22 + + +1.67327 MeV + + + +reaction_o16(o16,p)p31->H-1 + + +7.678 MeV + + + +reaction_o16(o16,p)p31->P-31 + + +7.678 MeV + + + +reaction_o16(o16,n)s31->S-31 + + +1.5 MeV + + + +reaction_o16(o16,n)s31->n-1 + + +1.5 MeV + + + +reaction_al28(a,n)p31->P-31 + + +1.943 MeV + + + +reaction_al28(a,n)p31->n-1 + + +1.943 MeV + + + +reaction_o16(c12,a)mg24->He-4 + + +6.771 MeV + + + +reaction_o16(c12,a)mg24->Mg-24 + + +6.771 MeV + + + +reaction_o16(c12,p)al27->Al-27 + + +5.171 MeV + + + +reaction_o16(c12,p)al27->H-1 + + +5.171 MeV + + + +reaction_o13(a,p)f16->F-16 + + +7.566 MeV + + + +reaction_o13(a,p)f16->H-1 + + +7.566 MeV + + + +reaction_n16(p,n)o16->O-16 + + +9.63666 MeV + + + +reaction_n16(p,n)o16->n-1 + + +9.63666 MeV + + + +reaction_n15(p,n)o15->O-15 + + +-3.536 MeV + + + +reaction_n15(p,n)o15->n-1 + + +-3.536 MeV + + + +reaction_n13(a,p)o16->H-1 + + +5.218 MeV + + + +reaction_n13(a,p)o16->O-16 + + +5.218 MeV + + + +reaction_n12(a,p)o15->H-1 + + +9.61789 MeV + + + +reaction_n12(a,p)o15->O-15 + + +9.61789 MeV + + + +reaction_c15(a,n)o18->O-18 + + +5.00855 MeV + + + +reaction_c15(a,n)o18->n-1 + + +5.00855 MeV + + + +reaction_c14(d,n)n15->N-15 + + +7.98263 MeV + + + +reaction_c14(d,n)n15->n-1 + + +7.98263 MeV + + + +reaction_c13(a,n)o16->O-16 + + +2.21561 MeV + + + +reaction_c13(a,n)o16->n-1 + + +2.21561 MeV + + + +reaction_c13(d,n)n14->N-14 + + +5.32663 MeV + + + +reaction_c13(d,n)n14->n-1 + + +5.32663 MeV + + + +reaction_c12(c12,a)ne20->He-4 + + +4.621 MeV + + + +reaction_c12(c12,a)ne20->Ne-20 + + +4.621 MeV + + + +reaction_c11(a,p)n14->H-1 + + +2.923 MeV + + + +reaction_c11(a,p)n14->N-14 + + +2.923 MeV + + + +reaction_b13(a,n)n16->N-16 + + +5.23355 MeV + + + +reaction_b13(a,n)n16->n-1 + + +5.23355 MeV + + + +reaction_li7(he3,p n a)he4->H-1 + + +9.62776 MeV + + + +reaction_li7(he3,p n a)he4->He-4 + + +9.62776 MeV + + + +reaction_li7(he3,p n a)he4->He-4 + + +9.62776 MeV + + + +reaction_li7(he3,p n a)he4->n-1 + + +9.62776 MeV + + + +reaction_b12(a,n)n15->N-15 + + +7.62155 MeV + + + +reaction_b12(a,n)n15->n-1 + + +7.62155 MeV + + + +reaction_b8(a,p)c11->C-11 + + +7.40589 MeV + + + +reaction_b8(a,p)c11->H-1 + + +7.40589 MeV + + + +reaction_li7(d,p)li8->H-1 + + +-0.19103 MeV + + + +reaction_li7(d,p)li8->Li-8 + + +-0.19103 MeV + + + +reaction_he3(d,p)he4->H-1 + + +18.353 MeV + + + +reaction_he3(d,p)he4->He-4 + + +18.353 MeV + + + +reaction_t(d,n)he4->He-4 + + +17.589 MeV + + + +reaction_t(d,n)he4->n-1 + + +17.589 MeV + + + +reaction_d(d,p)t->H-1 + + +4.033 MeV + + + +reaction_d(d,p)t->H-3 + + +4.033 MeV + + + +reaction_d(d,n)he3->He-3 + + +3.269 MeV + + + +reaction_d(d,n)he3->n-1 + + +3.269 MeV + + + +reaction_n14(p,n)o14->O-14 + + +-5.925 MeV + + + +reaction_n14(p,n)o14->n-1 + + +-5.925 MeV + + + +reaction_o14(a,p)f17->F-17 + + +1.192 MeV + + + +reaction_o14(a,p)f17->H-1 + + +1.192 MeV + + + +reaction_f16(a,p)ne19->H-1 + + +4.065 MeV + + + +reaction_f16(a,p)ne19->Ne-19 + + +4.065 MeV + + + +reaction_ne20(c12,n)s31->S-31 + + +3.92763 MeV + + + +reaction_ne20(c12,n)s31->n-1 + + +3.92763 MeV + + + +reaction_n13(,e+)c13->C-13 + + +2.22 MeV + + + +reaction_cl32(n,g)cl33->Cl-33 + + +15.745 MeV + + + +reaction_f20(p,n)ne20->Ne-20 + + +6.242 MeV + + + +reaction_f20(p,n)ne20->n-1 + + +6.242 MeV + + + +reaction_ne17(a,g)mg21->Mg-21 + + +7.97531 MeV + + + +reaction_ar35(a,g)ca39->Ca-39 + + +6.6519 MeV + + + +reaction_ar35(p,g)k36->K-36 + + +1.668 MeV + + + +reaction_si25(p,g)p26->P-26 + + +0.140289 MeV + + + +reaction_o12(n,g)o13->O-13 + + +17.008 MeV + + + +reaction_be7(,e+)li7->Li-7 + + +0.863 MeV + + + +reaction_ar35(n,g)ar36->Ar-36 + + +15.2554 MeV + + + +reaction_na20(,e+)ne20->Ne-20 + + +13.8919 MeV + + + +reaction_cl35(n,g)cl36->Cl-36 + + +8.58 MeV + + + +reaction_cl34(p,g)ar35->Ar-35 + + +5.89661 MeV + + + +reaction_cl32(a,g)k36->K-36 + + +6.52132 MeV + + + +reaction_cl31(a,g)k35->K-35 + + +6.52665 MeV + + + +reaction_cl31(n,g)cl32->Cl-32 + + +14.3339 MeV + + + +reaction_s34(a,g)ar38->Ar-38 + + +7.208 MeV + + + +reaction_s34(p,g)cl35->Cl-35 + + +6.37072 MeV + + + +reaction_s34(n,g)s35->S-35 + + +6.986 MeV + + + +reaction_s32(a,g)ar36->Ar-36 + + +6.64076 MeV + + + +reaction_s32(p,g)cl33->Cl-33 + + +2.2767 MeV + + + +reaction_s31(p,g)cl32->Cl-32 + + +1.574 MeV + + + +reaction_c14(e-,)n14->N-14 + + +0.1565 MeV + + + +reaction_f16(a,g)na20->Na-20 + + +6.26 MeV + + + +reaction_p32(a,g)cl36->Cl-36 + + +7.641 MeV + + + +reaction_p32(p,g)s33->S-33 + + +9.57 MeV + + + +reaction_p32(n,g)p33->P-33 + + +10.104 MeV + + + +reaction_p31(p,g)s32->S-32 + + +8.86378 MeV + + + +reaction_p30(a,g)cl34->Cl-34 + + +6.66412 MeV + + + +reaction_p30(p,g)s31->S-31 + + +6.13304 MeV + + + +reaction_p29(a,g)cl33->Cl-33 + + +6.47572 MeV + + + +reaction_p29(p,g)s30->S-30 + + +4.399 MeV + + + +reaction_p29(n,g)p30->P-30 + + +11.3193 MeV + + + +reaction_p28(a,g)cl32->Cl-32 + + +8.59593 MeV + + + +reaction_si31(p,g)p32->P-32 + + +8.645 MeV + + + +reaction_cl32(a,p)ar35->Ar-35 + + +4.85359 MeV + + + +reaction_cl32(a,p)ar35->H-1 + + +4.85359 MeV + + + +reaction_si29(a,g)s33->S-33 + + +7.11586 MeV + + + +reaction_si29(n,g)si30->Si-30 + + +10.609 MeV + + + +reaction_si28(p,g)p29->P-29 + + +2.7488 MeV + + + +reaction_si27(a,g)s31->S-31 + + +9.08526 MeV + + + +reaction_si26(p,g)p27->P-27 + + +0.861 MeV + + + +reaction_si26(n,g)si27->Si-27 + + +13.311 MeV + + + +reaction_si24(a,g)s28->S-28 + + +9.10639 MeV + + + +reaction_si24(n,g)si25->Si-25 + + +15.0017 MeV + + + +reaction_cl34(a,g)k38->K-38 + + +6.78583 MeV + + + +reaction_n14(a,n)f17->F-17 + + +-4.735 MeV + + + +reaction_n14(a,n)f17->n-1 + + +-4.735 MeV + + + +reaction_al28(a,g)p32->P-32 + + +9.879 MeV + + + +reaction_al27(a,g)p31->P-31 + + +9.66914 MeV + + + +reaction_al25(,e+)mg25->Mg-25 + + +4.276 MeV + + + +reaction_al26(a,g)p30->P-30 + + +10.4152 MeV + + + +reaction_al26(n,g)al27->Al-27 + + +13.058 MeV + + + +reaction_al25(a,g)p29->P-29 + + +10.4614 MeV + + + +reaction_al24(a,g)p28->P-28 + + +9.52672 MeV + + + +reaction_al24(n,g)al25->Al-25 + + +16.9305 MeV + + + +reaction_p32(p,n)s32->S-32 + + +0.928 MeV + + + +reaction_p32(p,n)s32->n-1 + + +0.928 MeV + + + +reaction_mg25(a,g)si29->Si-29 + + +11.127 MeV + + + +reaction_si30(a,g)s34->S-34 + + +7.92378 MeV + + + +reaction_mg25(p,g)al26->Al-26 + + +6.30645 MeV + + + +reaction_mg24(p,g)al25->Al-25 + + +2.2716 MeV + + + +reaction_mg24(n,g)mg25->Mg-25 + + +7.331 MeV + + + +reaction_mg23(n,g)mg24->Mg-24 + + +16.5311 MeV + + + +reaction_mg22(n,g)mg23->Mg-23 + + +13.1481 MeV + + + +reaction_mg21(a,g)si25->Si-25 + + +9.5111 MeV + + + +reaction_mg21(p,)al22->Al-22 + + +-0.892 MeV + + + +reaction_na25(a,p)mg28->H-1 + + +0.797 MeV + + + +reaction_na25(a,p)mg28->Mg-28 + + +0.797 MeV + + + +reaction_mg21(n,g)mg22->Mg-22 + + +19.3788 MeV + + + +reaction_mg20(a,g)si24->Si-24 + + +9.24059 MeV + + + +reaction_mg20(n,g)mg21->Mg-21 + + +14.7312 MeV + + + +reaction_al28(a,p)si31->H-1 + + +1.234 MeV + + + +reaction_al28(a,p)si31->Si-31 + + +1.234 MeV + + + +reaction_f15(n,g)f16->F-16 + + +14.168 MeV + + + +reaction_na25(p,g)mg26->Mg-26 + + +14.146 MeV + + + +reaction_na24(n,g)na25->Na-25 + + +9.011 MeV + + + +reaction_na23(a,g)al27->Al-27 + + +10.0917 MeV + + + +reaction_na23(p,g)mg24->Mg-24 + + +11.6927 MeV + + + +reaction_na23(n,g)na24->Na-24 + + +6.959 MeV + + + +reaction_na22(n,g)na23->Na-23 + + +12.4187 MeV + + + +reaction_al24(,e+ a)ne20->He-4 + + +4.569 MeV + + + +reaction_al24(,e+ a)ne20->Ne-20 + + +4.569 MeV + + + +reaction_na21(a,g)al25->Al-25 + + +9.15693 MeV + + + +reaction_na21(n,g)na22->Na-22 + + +11.0696 MeV + + + +reaction_na20(a,g)al24->Al-24 + + +9.32958 MeV + + + +reaction_na20(p,g)mg21->Mg-21 + + +3.22203 MeV + + + +reaction_na20(n,g)na21->Na-21 + + +17.1032 MeV + + + +reaction_mg20(,e+)na20->Na-20 + + +10.708 MeV + + + +reaction_s34(a,n)ar37->Ar-37 + + +-4.63 MeV + + + +reaction_s34(a,n)ar37->n-1 + + +-4.63 MeV + + + +reaction_ne24(a,g)mg28->Mg-28 + + +11.496 MeV + + + +reaction_ne24(n,g)ne25->Ne-25 + + +4.28137 MeV + + + +reaction_he4(he3,g)be7->Be-7 + + +1.5861 MeV + + + +reaction_ne23(n,g)ne24->Ne-24 + + +8.86637 MeV + + + +reaction_ne20(a,g)mg24->Mg-24 + + +9.31655 MeV + + + +reaction_ne20(p,g)na21->Na-21 + + +2.43169 MeV + + + +reaction_ne20(n,g)ne21->Ne-21 + + +6.761 MeV + + + +reaction_ne19(p,g)na20->Na-20 + + +2.193 MeV + + + +reaction_ne19(n,g)ne20->Ne-20 + + +16.8647 MeV + + + +reaction_ne18(a,g)mg22->Mg-22 + + +8.13905 MeV + + + +reaction_ne18(n,g)ne19->Ne-19 + + +11.637 MeV + + + +reaction_ne17(n,g)ne18->Ne-18 + + +19.2151 MeV + + + +reaction_f21(p,g)ne22->Ne-22 + + +15.266 MeV + + + +reaction_f21(n,g)f22->F-22 + + +5.19337 MeV + + + +reaction_f19(p,g)ne20->Ne-20 + + +12.843 MeV + + + +reaction_f18(n,g)f19->F-19 + + +10.432 MeV + + + +reaction_f17(a,g)na21->Na-21 + + +6.561 MeV + + + +reaction_f16(n,g)f17->F-17 + + +16.8 MeV + + + +reaction_f15(a,g)na19->Na-19 + + +6.273 MeV + + + +reaction_f14(n,g)f15->F-15 + + +24.902 MeV + + + +reaction_b13(a,g)n17->N-17 + + +11.1159 MeV + + + +reaction_p28(a,p)s31->H-1 + + +7.02184 MeV + + + +reaction_p28(a,p)s31->S-31 + + +7.02184 MeV + + + +reaction_o17(n,g)o18->O-18 + + +8.04437 MeV + + + +reaction_o16(p,g)f17->F-17 + + +0.60027 MeV + + + +reaction_o16(n,g)o17->O-17 + + +4.14337 MeV + + + +reaction_o15(a,g)ne19->Ne-19 + + +3.5291 MeV + + + +reaction_o15(p,)f16->F-16 + + +-0.536 MeV + + + +reaction_o14(n,g)o15->O-15 + + +13.222 MeV + + + +reaction_n17(n,g)n18->N-18 + + +2.82537 MeV + + + +reaction_n16(n,g)n17->N-17 + + +5.88237 MeV + + + +reaction_n15(a,g)f19->F-19 + + +4.01374 MeV + + + +reaction_n15(p,g)o16->O-16 + + +12.1274 MeV + + + +reaction_n14(a,g)f18->F-18 + + +4.4146 MeV + + + +reaction_n13(p,g)o14->O-14 + + +4.62797 MeV + + + +reaction_n12(p,g)o13->O-13 + + +1.51603 MeV + + + +reaction_c14(a,g)o18->O-18 + + +6.2263 MeV + + + +reaction_c14(p,g)n15->N-15 + + +10.2074 MeV + + + +reaction_c13(p,g)n14->N-14 + + +7.551 MeV + + + +reaction_c12(a,g)o16->O-16 + + +7.16192 MeV + + + +reaction_c12(p,g)n13->N-13 + + +1.943 MeV + + + +reaction_c12(n,g)c13->C-13 + + +4.94637 MeV + + + +reaction_c11(p,g)n12->N-12 + + +0.601418 MeV + + + +reaction_c11(n,g)c12->C-12 + + +18.7214 MeV + + + +reaction_b13(n,g)b14->B-14 + + +0.969369 MeV + + + +reaction_b12(n,g)b13->B-13 + + +4.87937 MeV + + + +reaction_b8(p,g)c9->C-9 + + +1.29633 MeV + + + +reaction_be7(p,g)b8->B-8 + + +0.137 MeV + + + +reaction_li7(n,g)li8->Li-8 + + +2.03337 MeV + + + +reaction_li6(a,g)b10->B-10 + + +4.46 MeV + + + +reaction_p31(a,g)cl35->Cl-35 + + +6.99757 MeV + + + +reaction_li6(p,g)be7->Be-7 + + +5.606 MeV + + + +reaction_li6(n,g)li7->Li-7 + + +7.25037 MeV + + + +reaction_he3(n,g)he4->He-4 + + +20.5774 MeV + + + +reaction_he4(t,g)li7->Li-7 + + +2.467 MeV + + + +reaction_ne24(p,g)na25->Na-25 + + +10.699 MeV + + + +reaction_t(p,g)he4->He-4 + + +19.814 MeV + + + +reaction_he4(d,g)li6->Li-6 + + +1.47385 MeV + + + +reaction_d(d,g)he4->He-4 + + +23.847 MeV + + + +reaction_d(p,g)he3->He-3 + + +5.493 MeV + + + +reaction_d(n,g)t->H-3 + + +6.25737 MeV + + + +reaction_p(p,e+)d->H-2 + + +1.44206 MeV + + + +reaction_na25(p,n)mg25->Mg-25 + + +3.053 MeV + + + +reaction_na25(p,n)mg25->n-1 + + +3.053 MeV + + + +reaction_si31(a,g)s35->S-35 + + +8.322 MeV + + + +reaction_s32(n,g)s33->S-33 + + +8.64161 MeV + + + +reaction_cl31(p,g)ar32->Ar-32 + + +2.42 MeV + + + +reaction_c13(n,g)c14->C-14 + + +8.17637 MeV + + + +reaction_o14(a,g)ne18->Ne-18 + + +5.114 MeV + + + +reaction_na25(a,g)al29->Al-29 + + +11.283 MeV + + + +reaction_b12(,e- 2a)he4->He-4 + + +6.0933 MeV + + + +reaction_b12(,e- 2a)he4->He-4 + + +6.0933 MeV + + + +reaction_b12(,e- 2a)he4->He-4 + + +6.0933 MeV + + + +reaction_o15(n,g)o16->O-16 + + +15.664 MeV + + + +reaction_ne17(a,p)na20->H-1 + + +4.74913 MeV + + + +reaction_ne17(a,p)na20->Na-20 + + +4.74913 MeV + + + +reaction_o20(a,n)ne23->Ne-23 + + +3.304 MeV + + + +reaction_o20(a,n)ne23->n-1 + + +3.304 MeV + + + +reaction_al28(p,g)si29->Si-29 + + +12.334 MeV + + + +reaction_s31(n,g)s32->S-32 + + +15.0424 MeV + + + +reaction_he3(,e+)t->H-3 + + +-0.019 MeV + + + +reaction_ne18(p,)na19->Na-19 + + +-0.32 MeV + + + +reaction_mg27(a,g)si31->Si-31 + + +10.787 MeV + + + +reaction_be7(a,g)c11->C-11 + + +7.544 MeV + + + +reaction_si24(p,)p25->P-25 + + +-0.828356 MeV + + + +reaction_mg23(p,g)al24->Al-24 + + +1.872 MeV + + + +reaction_ne19(a,g)mg23->Mg-23 + + +9.65012 MeV + + + +reaction_n15(n,g)n16->N-16 + + +2.49137 MeV + + + +reaction_c16(e-,)n16->N-16 + + +8.011 MeV + + + +reaction_o20(n,g)o21->O-21 + + +3.73737 MeV + + + +reaction_p29(a,p)s32->H-1 + + +4.19902 MeV + + + +reaction_p29(a,p)s32->S-32 + + +4.19902 MeV + + + +reaction_p28(n,g)p29->P-29 + + +17.8652 MeV + + + +reaction_al25(n,g)al26->Al-26 + + +11.3655 MeV + + + +reaction_c13(p,n)n13->N-13 + + +-3.003 MeV + + + +reaction_c13(p,n)n13->n-1 + + +-3.003 MeV + + + +reaction_n14(p,g)o15->O-15 + + +7.2968 MeV + + + +reaction_al24(p,g)si25->Si-25 + + +3.408 MeV + + + +reaction_si26(a,g)s30->S-30 + + +9.34282 MeV + + + +reaction_f18(p,g)ne19->Ne-19 + + +6.4112 MeV + + + +reaction_o13(n,g)o14->O-14 + + +23.176 MeV + + + +reaction_li6(d,p)li7->H-1 + + +5.02597 MeV + + + +reaction_li6(d,p)li7->Li-7 + + +5.02597 MeV + + + +reaction_c12(c12,p)na23->H-1 + + +2.242 MeV + + + +reaction_c12(c12,p)na23->Na-23 + + +2.242 MeV + + + +reaction_si25(a,g)s29->S-29 + + +9.40882 MeV + + + +reaction_o20(a,g)ne24->Ne-24 + + +12.169 MeV + + + +reaction_o18(p,g)f19->F-19 + + +7.9948 MeV + + + +reaction_cl31(,e+ p)p30->H-1 + + +5.845 MeV + + + +reaction_cl31(,e+ p)p30->P-30 + + +5.845 MeV + + + +reaction_p28(,e+)si28->Si-28 + + +14.3438 MeV + + + +reaction_f20(e-,)ne20->Ne-20 + + +7.0249 MeV + + + +reaction_ne16(a,g)mg20->Mg-20 + + +8.85103 MeV + + + +reaction_cl34(n,g)cl35->Cl-35 + + +12.6451 MeV + + + +reaction_mg22(p,g)al23->Al-23 + + +0.122 MeV + + + +reaction_na21(p,g)mg22->Mg-22 + + +5.50418 MeV + + + +reaction_b8(,e+ a)he4->He-4 + + +18.0712 MeV + + + +reaction_b8(,e+ a)he4->He-4 + + +18.0712 MeV + + + +reaction_n16(a,n)f19->F-19 + + +1.52255 MeV + + + +reaction_n16(a,n)f19->n-1 + + +1.52255 MeV + + + +reaction_o15(,e+)n15->N-15 + + +2.7536 MeV + + + +reaction_si30(p,g)p31->P-31 + + +7.29693 MeV + + + +reaction_o16(o16,a)si28->He-4 + + +9.593 MeV + + + +reaction_o16(o16,a)si28->Si-28 + + +9.593 MeV + + + +reaction_si31(a,n)s34->S-34 + + +1.336 MeV + + + +reaction_si31(a,n)s34->n-1 + + +1.336 MeV + + + +reaction_n(p,g)d->H-2 + + +2.22457 MeV + + + +reaction_cl35(p,g)ar36->Ar-36 + + +8.50697 MeV + + + +reaction_c16(,e- n)n15->N-15 + + +5.5213 MeV + + + +reaction_c16(,e- n)n15->n-1 + + +5.5213 MeV + + + +reaction_si31(n,g)si32->Si-32 + + +9.203 MeV + + + +reaction_o14(,e+)n14->N-14 + + +5.1436 MeV + + + +reaction_li7(t,n)be9->Be-9 + + +10.4376 MeV + + + +reaction_li7(t,n)be9->n-1 + + +10.4376 MeV + + + +reaction_li7(a,g)b11->B-11 + + +8.664 MeV + + + +reaction_o17(a,n)ne20->Ne-20 + + +0.586 MeV + + + +reaction_o17(a,n)ne20->n-1 + + +0.586 MeV + + + +reaction_mg26(n,g)mg27->Mg-27 + + +6.443 MeV + + + +reaction_f21(p,n)ne21->Ne-21 + + +4.902 MeV + + + +reaction_f21(p,n)ne21->n-1 + + +4.902 MeV + + + +reaction_na22(p,g)mg23->Mg-23 + + +7.5803 MeV + + + +reaction_al25(p,g)si26->Si-26 + + +5.51743 MeV + + + +reaction_si27(n,g)si28->Si-28 + + +17.1798 MeV + + + +reaction_ne21(p,g)na22->Na-22 + + +6.7396 MeV + + + +reaction_c15(e-,)n15->N-15 + + +9.7716 MeV + + + +reaction_c14(n,g)c15->C-15 + + +1.21837 MeV + + + +reaction_o17(a,g)ne21->Ne-21 + + +7.351 MeV + + + +reaction_f18(a,g)na22->Na-22 + + +8.48 MeV + + + +reaction_f21(a,g)na25->Na-25 + + +11.735 MeV + + + +reaction_si28(a,g)s32->S-32 + + +6.94782 MeV + + + +reaction_f20(n,g)f21->F-21 + + +8.102 MeV + + + +reaction_si28(n,g)si29->Si-29 + + +8.474 MeV + + + +reaction_p28(p,g)s29->S-29 + + +3.2898 MeV + + + +reaction_ne16(n,g)ne17->Ne-17 + + +15.6069 MeV + + + +reaction_n17(e-,)o17->O-17 + + +8.6788 MeV + + + +reaction_na23(p,n)mg23->Mg-23 + + +-4.839 MeV + + + +reaction_na23(p,n)mg23->n-1 + + +-4.839 MeV + + + +reaction_o20(e-,)f20->F-20 + + +3.813 MeV + + + +reaction_na21(,e+)ne21->Ne-21 + + +3.547 MeV + + + +reaction_na24(p,g)mg25->Mg-25 + + +12.064 MeV + + + +reaction_si27(p,g)p28->P-28 + + +2.063 MeV + + + +reaction_p28(,e+ p)al27->Al-27 + + +2.758 MeV + + + +reaction_p28(,e+ p)al27->H-1 + + +2.758 MeV + + + +reaction_b12(p,n)c12->C-12 + + +12.5877 MeV + + + +reaction_b12(p,n)c12->n-1 + + +12.5877 MeV + + + +reaction_f17(n,g)f18->F-18 + + +9.15 MeV + + + +reaction_c16(n,g)c17->C-17 + + +0.735369 MeV + + + +reaction_o14(p,)f15->F-15 + + +-1.481 MeV + + + +reaction_n14(n,g)n15->N-15 + + +10.8324 MeV + + + +reaction_f20(p,g)ne21->Ne-21 + + +13.003 MeV + + + +reaction_si25(,e+ p)mg24->H-1 + + +10.47 MeV + + + +reaction_si25(,e+ p)mg24->Mg-24 + + +10.47 MeV + + + +reaction_si27(,e+)al27->Al-27 + + +4.812 MeV + + + +reaction_mg21(,e+ p)ne20->H-1 + + +10.6649 MeV + + + +reaction_mg21(,e+ p)ne20->Ne-20 + + +10.6649 MeV + + + +reaction_si24(,e+ p)mg23->H-1 + + +8.938 MeV + + + +reaction_si24(,e+ p)mg23->Mg-23 + + +8.938 MeV + + + +reaction_mg24(a,g)si28->Si-28 + + +9.984 MeV + + + +reaction_cl32(p,g)ar33->Ar-33 + + +3.343 MeV + + + +reaction_na20(,e+ a)o16->He-4 + + +9.1621 MeV + + + +reaction_na20(,e+ a)o16->O-16 + + +9.1621 MeV + + + +reaction_al24(,e+ p)na23->H-1 + + +2.1929 MeV + + + +reaction_al24(,e+ p)na23->Na-23 + + +2.1929 MeV + + + +reaction_al28(n,g)al29->Al-29 + + +9.436 MeV + + + +reaction_si24(,e+)al24->Al-24 + + +10.802 MeV + + + +reaction_ar35(,e+)cl35->Cl-35 + + +5.966 MeV + + + +reaction_p29(,e+)si29->Si-29 + + +4.9431 MeV + + + +reaction_na24(e-,)mg24->Mg-24 + + +5.516 MeV + + + +reaction_al27(n,g)al28->Al-28 + + +7.725 MeV + + + +reaction_o18(n,g)o19->O-19 + + +3.95737 MeV + + + +reaction_f19(n,g)f20->F-20 + + +6.60137 MeV + + + +reaction_mg21(,e+ a)f17->F-17 + + +6.5361 MeV + + + +reaction_mg21(,e+ a)f17->He-4 + + +6.5361 MeV + + + +reaction_si31(e-,)p31->P-31 + + +1.4915 MeV + + + +reaction_mg20(,e+ p)ne19->H-1 + + +8.517 MeV + + + +reaction_mg20(,e+ p)ne19->Ne-19 + + +8.517 MeV + + + +reaction_b14(e-,)c14->C-14 + + +20.6431 MeV + + + +reaction_f21(e-,)ne21->Ne-21 + + +5.684 MeV + + + +reaction_mg26(a,g)si30->Si-30 + + +10.644 MeV + + + +reaction_na24(a,g)al28->Al-28 + + +10.858 MeV + + + +reaction_na22(a,g)al26->Al-26 + + +9.45279 MeV + + + +reaction_ne21(n,g)ne22->Ne-22 + + +10.364 MeV + + + +reaction_al26(a,p)si29->H-1 + + +4.82068 MeV + + + +reaction_al26(a,p)si29->Si-29 + + +4.82068 MeV + + + +reaction_ne19(a,p)na22->H-1 + + +2.06982 MeV + + + +reaction_ne19(a,p)na22->Na-22 + + +2.06982 MeV + + + +reaction_mg22(,e+)na22->Na-22 + + +4.782 MeV + + + +reaction_cl32(,e+)s32->S-32 + + +12.6805 MeV + + + +reaction_c15(n,g)c16->C-16 + + +4.25037 MeV + + + +reaction_si25(,e+)al25->Al-25 + + +12.742 MeV + + + +reaction_o13(,e+)n13->N-13 + + +17.769 MeV + + + +reaction_si25(n,g)si26->Si-26 + + +19.0403 MeV + + + +reaction_al26(,e+)mg26->Mg-26 + + +4.004 MeV + + + +reaction_f17(p,g)ne18->Ne-18 + + +3.92351 MeV + + + +reaction_al24(,e+)mg24->Mg-24 + + +13.885 MeV + + + +reaction_ne23(p,g)na24->Na-24 + + +10.553 MeV + + + +reaction_s31(,e+)p31->P-31 + + +5.3975 MeV + + + +reaction_mg21(,e+)na21->Na-21 + + +13.096 MeV + + + +reaction_mg27(n,g)mg28->Mg-28 + + +8.504 MeV + + + +reaction_mg25(n,g)mg26->Mg-26 + + +11.093 MeV + + + +reaction_he3(p,e+)he4->He-4 + + +19.796 MeV + + + +reaction_o18(a,g)ne22->Ne-22 + + +9.6681 MeV + + + +reaction_mg23(a,g)si27->Si-27 + + +9.33545 MeV + + + +reaction_al27(p,g)si28->Si-28 + + +11.5851 MeV + + + +reaction_o13(,e+ p)c12->C-12 + + +15.825 MeV + + + +reaction_o13(,e+ p)c12->H-1 + + +15.825 MeV + + + +reaction_be7(d,p a)he4->H-1 + + +16.766 MeV + + + +reaction_be7(d,p a)he4->He-4 + + +16.766 MeV + + + +reaction_be7(d,p a)he4->He-4 + + +16.766 MeV + + + +reaction_n16(,e- a)c12->C-12 + + +3.2581 MeV + + + +reaction_n16(,e- a)c12->He-4 + + +3.2581 MeV + + + +reaction_si25(a,p)p28->H-1 + + +6.11902 MeV + + + +reaction_si25(a,p)p28->P-28 + + +6.11902 MeV + + + +reaction_ne18(,e+)f18->F-18 + + +4.444 MeV + + + +reaction_f20(a,g)na24->Na-24 + + +10.825 MeV + + + +reaction_mg23(,e+)na23->Na-23 + + +4.0569 MeV + + + +reaction_n17(,e- n)o16->O-16 + + +4.5357 MeV + + + +reaction_n17(,e- n)o16->n-1 + + +4.5357 MeV + + + +reaction_n16(e-,)o16->O-16 + + +10.42 MeV + + + +reaction_ne17(,e+ p)o16->H-1 + + +13.948 MeV + + + +reaction_ne17(,e+ p)o16->O-16 + + +13.948 MeV + + + +reaction_be12(,e- n)b11->B-11 + + +8.3377 MeV + + + +reaction_be12(,e- n)b11->n-1 + + +8.3377 MeV + + + +reaction_c15(p,n)n15->N-15 + + +8.98866 MeV + + + +reaction_c15(p,n)n15->n-1 + + +8.98866 MeV + + + +reaction_c11(,e+)b11->B-11 + + +1.983 MeV + + + +reaction_f20(a,n)na23->Na-23 + + +3.866 MeV + + + +reaction_f20(a,n)na23->n-1 + + +3.866 MeV + + + +reaction_b13(e-,)c13->C-13 + + +13.437 MeV + + + +reaction_mg27(p,n)al27->Al-27 + + +1.828 MeV + + + +reaction_mg27(p,n)al27->n-1 + + +1.828 MeV + + + +reaction_mg27(p,g)al28->Al-28 + + +9.553 MeV + + + +reaction_o17(p,g)f18->F-18 + + +5.6065 MeV + + + +reaction_cl32(,e+ p)p31->H-1 + + +3.8165 MeV + + + +reaction_cl32(,e+ p)p31->P-31 + + +3.8165 MeV + + + +reaction_p30(n,g)p31->P-31 + + +12.3116 MeV + + + +reaction_al28(e-,)si28->Si-28 + + +4.6428 MeV + + + +reaction_n12(,e+)c12->C-12 + + +17.338 MeV + + + +reaction_n13(n,g)n14->N-14 + + +10.5544 MeV + + + +reaction_p31(n,g)p32->P-32 + + +7.936 MeV + + + +reaction_na22(,e+)ne22->Ne-22 + + +2.843 MeV + + + +reaction_f19(a,g)na23->Na-23 + + +10.467 MeV + + + +reaction_ne24(e-,)na24->Na-24 + + +2.466 MeV + + + +reaction_ne17(,e+)f17->F-17 + + +14.549 MeV + + + +reaction_ne23(a,g)mg27->Mg-27 + + +11.858 MeV + + + +reaction_t(he3,d)he4->H-2 + + +14.32 MeV + + + +reaction_t(he3,d)he4->He-4 + + +14.32 MeV + + + +reaction_si29(p,g)p30->P-30 + + +5.5945 MeV + + + +reaction_mg23(a,p)al26->Al-26 + + +1.87249 MeV + + + +reaction_mg23(a,p)al26->H-1 + + +1.87249 MeV + + + +reaction_na23(a,p)mg26->H-1 + + +1.82067 MeV + + + +reaction_na23(a,p)mg26->Mg-26 + + +1.82067 MeV + + + +reaction_mg26(p,g)al27->Al-27 + + +8.27105 MeV + + + +reaction_na25(e-,)mg25->Mg-25 + + +3.835 MeV + + + +reaction_li6(d,n)be7->Be-7 + + +3.38163 MeV + + + +reaction_li6(d,n)be7->n-1 + + +3.38163 MeV + + + +reaction_mg22(a,g)si26->Si-26 + + +9.17258 MeV + + + +reaction_b14(,e- n)c13->C-13 + + +0 MeV + + + +reaction_b14(,e- n)c13->n-1 + + +0 MeV + + + +reaction_cl31(,e+)s31->S-31 + + +11.977 MeV + + + +reaction_t(e-,)he3->He-3 + + +0.0186 MeV + + + +reaction_mg27(e-,)al27->Al-27 + + +2.61 MeV + + + +reaction_p30(,e+)si30->Si-30 + + +4.232 MeV + + + +reaction_o20(p,g)f21->F-21 + + +11.134 MeV + + + +reaction_f17(,e+)o17->O-17 + + +2.7598 MeV + + + +reaction_f21(a,n)na24->Na-24 + + +2.724 MeV + + + +reaction_f21(a,n)na24->n-1 + + +2.724 MeV + + + +reaction_p32(e-,)s32->S-32 + + +1.7115 MeV + + + +reaction_b8(n,p a)he4->H-1 + + +18.8525 MeV + + + +reaction_b8(n,p a)he4->He-4 + + +18.8525 MeV + + + +reaction_b8(n,p a)he4->He-4 + + +18.8525 MeV + + + +reaction_si30(n,g)si31->Si-31 + + +6.587 MeV + + + +reaction_si26(,e+)al26->Al-26 + + +5.07 MeV + + + +reaction_ne23(e-,)na23->Na-23 + + +4.3759 MeV + + + +reaction_s31(a,g)ar35->Ar-35 + + +6.42768 MeV + + + +reaction_na25(n,g)na26->Na-26 + + +5.616 MeV + + + +reaction_o16(a,g)ne20->Ne-20 + + +4.72985 MeV + + + +reaction_ne19(,e+)f19->F-19 + + +3.2394 MeV + + + +reaction_ne21(a,n)mg24->Mg-24 + + +2.555 MeV + + + +reaction_ne21(a,n)mg24->n-1 + + +2.555 MeV + + + +reaction_cl32(,e+ a)si28->He-4 + + +5.7329 MeV + + + +reaction_cl32(,e+ a)si28->Si-28 + + +5.7329 MeV + + + +reaction_f18(,e+)o18->O-18 + + +1.6558 MeV + + + +reaction_ne21(a,g)mg25->Mg-25 + + +9.882 MeV + + + +reaction_p28(,e+ a)mg24->He-4 + + +4.3591 MeV + + + +reaction_p28(,e+ a)mg24->Mg-24 + + +4.3591 MeV + + + +reaction_be12(e-,)b12->B-12 + + +11.708 MeV + + + +reaction_al26(p,g)si27->Si-27 + + +7.464 MeV + + + +reaction_cl34(,e+)s34->S-34 + + +5.491 MeV + + + +reaction_b12(e-,)c12->C-12 + + +13.368 MeV + + + +reaction_cl35(a,g)k39->K-39 + + +7.21839 MeV + + + +reaction_he3(he3,2p)he4->H-1 + + +12.859 MeV + + + +reaction_he3(he3,2p)he4->H-1 + + +12.859 MeV + + + +reaction_he3(he3,2p)he4->He-4 + + +12.859 MeV + + + +reaction_Si-24(,ν)e+,Al-24->Al-24 + + +10.794 MeV + + + +reaction_Si-24(e-,ν)Al-24->Al-24 + + +10.794 MeV + + + +reaction_Si-24(,ν|)e-,P-24->P-24 + + +-23.2748 MeV + + + +reaction_Si-24(e+,ν|)P-24->P-24 + + +-23.2748 MeV + + + +reaction_Mg-22(,ν)e+,Na-22->Na-22 + + +4.78141 MeV + + + +reaction_Mg-22(e-,ν)Na-22->Na-22 + + +4.78141 MeV + + + +reaction_Mg-22(,ν|)e-,Al-22->Al-22 + + +-18.6014 MeV + + + +reaction_Mg-22(e+,ν|)Al-22->Al-22 + + +-18.6014 MeV + + + +reaction_Mg-20(,ν)e+,Na-20->Na-20 + + +10.6272 MeV + + + +reaction_Mg-20(e-,ν)Na-20->Na-20 + + +10.6272 MeV + + + +reaction_Ne-18(,ν)e+,F-18->F-18 + + +4.4445 MeV + + + +reaction_Ne-18(e-,ν)F-18->F-18 + + +4.4445 MeV + + + +reaction_Ne-18(,ν|)e-,Na-18->Na-18 + + +-19.7204 MeV + + + +reaction_Ne-18(e+,ν|)Na-18->Na-18 + + +-19.7204 MeV + + + +reaction_O-12(,ν)e+,N-12->N-12 + + +14.6753 MeV + + + +reaction_O-12(e-,ν)N-12->N-12 + + +14.6753 MeV + + + +reaction_N-17(,ν)e+,C-17->C-17 + + +-13.1618 MeV + + + +reaction_N-17(e-,ν)C-17->C-17 + + +-13.1618 MeV + + + +reaction_N-17(,ν|)e-,O-17->O-17 + + +8.67884 MeV + + + +reaction_N-17(e+,ν|)O-17->O-17 + + +8.67884 MeV + + + +reaction_C-15(,ν)e+,B-15->B-15 + + +-19.0842 MeV + + + +reaction_C-15(e-,ν)B-15->B-15 + + +-19.0842 MeV + + + +reaction_C-15(,ν|)e-,N-15->N-15 + + +9.77171 MeV + + + +reaction_C-15(e+,ν|)N-15->N-15 + + +9.77171 MeV + + + +reaction_Cl-32(,ν)e+,S-32->S-32 + + +12.6808 MeV + + + +reaction_Cl-32(e-,ν)S-32->S-32 + + +12.6808 MeV + + + +reaction_Cl-32(,ν|)e-,Ar-32->Ar-32 + + +-11.1344 MeV + + + +reaction_Cl-32(e+,ν|)Ar-32->Ar-32 + + +-11.1344 MeV + + + +reaction_S-32(,ν)e+,P-32->P-32 + + +-1.71066 MeV + + + +reaction_S-32(e-,ν)P-32->P-32 + + +-1.71066 MeV + + + +reaction_S-32(,ν|)e-,Cl-32->Cl-32 + + +-12.6808 MeV + + + +reaction_S-32(e+,ν|)Cl-32->Cl-32 + + +-12.6808 MeV + + + +reaction_B-14(,ν)e+,Be-14->Be-14 + + +-16.2908 MeV + + + +reaction_B-14(e-,ν)Be-14->Be-14 + + +-16.2908 MeV + + + +reaction_B-14(,ν|)e-,C-14->C-14 + + +20.6438 MeV + + + +reaction_B-14(e+,ν|)C-14->C-14 + + +20.6438 MeV + + + +reaction_Cl-31(,ν)e+,S-31->S-31 + + +12.008 MeV + + + +reaction_Cl-31(e-,ν)S-31->S-31 + + +12.008 MeV + + + +reaction_Cl-31(,ν|)e-,Ar-31->Ar-31 + + +-18.3597 MeV + + + +reaction_Cl-31(e+,ν|)Ar-31->Ar-31 + + +-18.3597 MeV + + + +reaction_S-31(,ν)e+,P-31->P-31 + + +5.39801 MeV + + + +reaction_S-31(e-,ν)P-31->P-31 + + +5.39801 MeV + + + +reaction_S-31(,ν|)e-,Cl-31->Cl-31 + + +-12.008 MeV + + + +reaction_S-31(e+,ν|)Cl-31->Cl-31 + + +-12.008 MeV + + + +reaction_P-31(,ν)e+,Si-31->Si-31 + + +-1.49151 MeV + + + +reaction_P-31(e-,ν)Si-31->Si-31 + + +-1.49151 MeV + + + +reaction_P-31(,ν|)e-,S-31->S-31 + + +-5.39801 MeV + + + +reaction_P-31(e+,ν|)S-31->S-31 + + +-5.39801 MeV + + + +reaction_P-30(,ν)e+,Si-30->Si-30 + + +4.23211 MeV + + + +reaction_P-30(e-,ν)Si-30->Si-30 + + +4.23211 MeV + + + +reaction_P-30(,ν|)e-,S-30->S-30 + + +-6.1416 MeV + + + +reaction_P-30(e+,ν|)S-30->S-30 + + +-6.1416 MeV + + + +reaction_Si-30(,ν)e+,Al-30->Al-30 + + +-8.56885 MeV + + + +reaction_Si-30(e-,ν)Al-30->Al-30 + + +-8.56885 MeV + + + +reaction_Si-30(,ν|)e-,P-30->P-30 + + +-4.23211 MeV + + + +reaction_Si-30(e+,ν|)P-30->P-30 + + +-4.23211 MeV + + + +reaction_P-29(,ν)e+,Si-29->Si-29 + + +4.94223 MeV + + + +reaction_P-29(e-,ν)Si-29->Si-29 + + +4.94223 MeV + + + +reaction_P-29(,ν|)e-,S-29->S-29 + + +-13.8584 MeV + + + +reaction_P-29(e+,ν|)S-29->S-29 + + +-13.8584 MeV + + + +reaction_Si-29(,ν)e+,Al-29->Al-29 + + +-3.68732 MeV + + + +reaction_Si-29(e-,ν)Al-29->Al-29 + + +-3.68732 MeV + + + +reaction_Si-29(,ν|)e-,P-29->P-29 + + +-4.94223 MeV + + + +reaction_Si-29(e+,ν|)P-29->P-29 + + +-4.94223 MeV + + + +reaction_P-28(,ν)e+,Si-28->Si-28 + + +14.3449 MeV + + + +reaction_P-28(e-,ν)Si-28->Si-28 + + +14.3449 MeV + + + +reaction_P-28(,ν|)e-,S-28->S-28 + + +-11.2211 MeV + + + +reaction_P-28(e+,ν|)S-28->S-28 + + +-11.2211 MeV + + + +reaction_Si-28(,ν)e+,Al-28->Al-28 + + +-4.64208 MeV + + + +reaction_Si-28(e-,ν)Al-28->Al-28 + + +-4.64208 MeV + + + +reaction_Si-28(,ν|)e-,P-28->P-28 + + +-14.3449 MeV + + + +reaction_Si-28(e+,ν|)P-28->P-28 + + +-14.3449 MeV + + + +reaction_Al-28(,ν)e+,Mg-28->Mg-28 + + +-1.83077 MeV + + + +reaction_Al-28(e-,ν)Mg-28->Mg-28 + + +-1.83077 MeV + + + +reaction_Al-28(,ν|)e-,Si-28->Si-28 + + +4.64208 MeV + + + +reaction_Al-28(e+,ν|)Si-28->Si-28 + + +4.64208 MeV + + + +reaction_Si-27(,ν)e+,Al-27->Al-27 + + +4.81236 MeV + + + +reaction_Si-27(e-,ν)Al-27->Al-27 + + +4.81236 MeV + + + +reaction_Si-27(,ν|)e-,P-27->P-27 + + +-11.7255 MeV + + + +reaction_Si-27(e+,ν|)P-27->P-27 + + +-11.7255 MeV + + + +reaction_Al-27(,ν)e+,Mg-27->Mg-27 + + +-2.61027 MeV + + + +reaction_Al-27(e-,ν)Mg-27->Mg-27 + + +-2.61027 MeV + + + +reaction_Al-27(,ν|)e-,Si-27->Si-27 + + +-4.81236 MeV + + + +reaction_Al-27(e+,ν|)Si-27->Si-27 + + +-4.81236 MeV + + + +reaction_Mg-27(,ν)e+,Na-27->Na-27 + + +-9.0688 MeV + + + +reaction_Mg-27(e-,ν)Na-27->Na-27 + + +-9.0688 MeV + + + +reaction_Mg-27(,ν|)e-,Al-27->Al-27 + + +2.61027 MeV + + + +reaction_Mg-27(e+,ν|)Al-27->Al-27 + + +2.61027 MeV + + + +reaction_Si-26(,ν)e+,Al-26->Al-26 + + +5.06914 MeV + + + +reaction_Si-26(e-,ν)Al-26->Al-26 + + +5.06914 MeV + + + +reaction_Si-26(,ν|)e-,P-26->P-26 + + +-18.114 MeV + + + +reaction_Si-26(e+,ν|)P-26->P-26 + + +-18.114 MeV + + + +reaction_Al-26(,ν)e+,Mg-26->Mg-26 + + +4.0044 MeV + + + +reaction_Al-26(e-,ν)Mg-26->Mg-26 + + +4.0044 MeV + + + +reaction_Al-26(,ν|)e-,Si-26->Si-26 + + +-5.06914 MeV + + + +reaction_Al-26(e+,ν|)Si-26->Si-26 + + +-5.06914 MeV + + + +reaction_Mg-26(,ν)e+,Na-26->Na-26 + + +-9.35376 MeV + + + +reaction_Mg-26(e-,ν)Na-26->Na-26 + + +-9.35376 MeV + + + +reaction_Mg-26(,ν|)e-,Al-26->Al-26 + + +-4.0044 MeV + + + +reaction_Mg-26(e+,ν|)Al-26->Al-26 + + +-4.0044 MeV + + + +reaction_Si-25(,ν)e+,Al-25->Al-25 + + +12.7433 MeV + + + +reaction_Si-25(e-,ν)Al-25->Al-25 + + +12.7433 MeV + + + +reaction_Si-25(,ν|)e-,P-25->P-25 + + +-16.3628 MeV + + + +reaction_Si-25(e+,ν|)P-25->P-25 + + +-16.3628 MeV + + + +reaction_Al-25(,ν)e+,Mg-25->Mg-25 + + +4.27681 MeV + + + +reaction_Al-25(e-,ν)Mg-25->Mg-25 + + +4.27681 MeV + + + +reaction_Al-25(,ν|)e-,Si-25->Si-25 + + +-12.7433 MeV + + + +reaction_Al-25(e+,ν|)Si-25->Si-25 + + +-12.7433 MeV + + + +reaction_S-34(,ν)e+,P-34->P-34 + + +-5.38299 MeV + + + +reaction_S-34(e-,ν)P-34->P-34 + + +-5.38299 MeV + + + +reaction_S-34(,ν|)e-,Cl-34->Cl-34 + + +-5.4916 MeV + + + +reaction_S-34(e+,ν|)Cl-34->Cl-34 + + +-5.4916 MeV + + + +reaction_Al-24(,ν)e+,Mg-24->Mg-24 + + +13.8848 MeV + + + +reaction_Al-24(e-,ν)Mg-24->Mg-24 + + +13.8848 MeV + + + +reaction_Al-24(,ν|)e-,Si-24->Si-24 + + +-10.794 MeV + + + +reaction_Al-24(e+,ν|)Si-24->Si-24 + + +-10.794 MeV + + + +reaction_O-14(,ν)e+,N-14->N-14 + + +5.14436 MeV + + + +reaction_O-14(e-,ν)N-14->N-14 + + +5.14436 MeV + + + +reaction_O-14(,ν|)e-,F-14->F-14 + + +-23.9566 MeV + + + +reaction_O-14(e+,ν|)F-14->F-14 + + +-23.9566 MeV + + + +reaction_Mg-23(,ν)e+,Na-23->Na-23 + + +4.05618 MeV + + + +reaction_Mg-23(e-,ν)Na-23->Na-23 + + +4.05618 MeV + + + +reaction_Mg-23(,ν|)e-,Al-23->Al-23 + + +-12.2217 MeV + + + +reaction_Mg-23(e+,ν|)Al-23->Al-23 + + +-12.2217 MeV + + + +reaction_P-32(,ν)e+,Si-32->Si-32 + + +-0.227187 MeV + + + +reaction_P-32(e-,ν)Si-32->Si-32 + + +-0.227187 MeV + + + +reaction_P-32(,ν|)e-,S-32->S-32 + + +1.71066 MeV + + + +reaction_P-32(e+,ν|)S-32->S-32 + + +1.71066 MeV + + + +reaction_Si-31(,ν)e+,Al-31->Al-31 + + +-7.99833 MeV + + + +reaction_Si-31(e-,ν)Al-31->Al-31 + + +-7.99833 MeV + + + +reaction_Si-31(,ν|)e-,P-31->P-31 + + +1.49151 MeV + + + +reaction_Si-31(e+,ν|)P-31->P-31 + + +1.49151 MeV + + + +reaction_Mg-21(,ν)e+,Na-21->Na-21 + + +13.0887 MeV + + + +reaction_Mg-21(e-,ν)Na-21->Na-21 + + +13.0887 MeV + + + +reaction_Mg-21(,ν|)e-,Al-21->Al-21 + + +-16.1859 MeV + + + +reaction_Mg-21(e+,ν|)Al-21->Al-21 + + +-16.1859 MeV + + + +reaction_Na-21(,ν)e+,Ne-21->Ne-21 + + +3.54692 MeV + + + +reaction_Na-21(e-,ν)Ne-21->Ne-21 + + +3.54692 MeV + + + +reaction_Na-21(,ν|)e-,Mg-21->Mg-21 + + +-13.0887 MeV + + + +reaction_Na-21(e+,ν|)Mg-21->Mg-21 + + +-13.0887 MeV + + + +reaction_Cl-34(,ν)e+,S-34->S-34 + + +5.4916 MeV + + + +reaction_Cl-34(e-,ν)S-34->S-34 + + +5.4916 MeV + + + +reaction_Cl-34(,ν|)e-,Ar-34->Ar-34 + + +-6.06179 MeV + + + +reaction_Cl-34(e+,ν|)Ar-34->Ar-34 + + +-6.06179 MeV + + + +reaction_Na-20(,ν)e+,Ne-20->Ne-20 + + +13.8924 MeV + + + +reaction_Na-20(e-,ν)Ne-20->Ne-20 + + +13.8924 MeV + + + +reaction_Na-20(,ν|)e-,Mg-20->Mg-20 + + +-10.6272 MeV + + + +reaction_Na-20(e+,ν|)Mg-20->Mg-20 + + +-10.6272 MeV + + + +reaction_Ne-20(,ν)e+,F-20->F-20 + + +-7.02447 MeV + + + +reaction_Ne-20(e-,ν)F-20->F-20 + + +-7.02447 MeV + + + +reaction_Ne-20(,ν|)e-,Na-20->Na-20 + + +-13.8924 MeV + + + +reaction_Ne-20(e+,ν|)Na-20->Na-20 + + +-13.8924 MeV + + + +reaction_Ne-19(,ν)e+,F-19->F-19 + + +3.2395 MeV + + + +reaction_Ne-19(e-,ν)F-19->F-19 + + +3.2395 MeV + + + +reaction_Ne-19(,ν|)e-,Na-19->Na-19 + + +-11.1773 MeV + + + +reaction_Ne-19(e+,ν|)Na-19->Na-19 + + +-11.1773 MeV + + + +reaction_F-19(,ν)e+,O-19->O-19 + + +-4.8203 MeV + + + +reaction_F-19(e-,ν)O-19->O-19 + + +-4.8203 MeV + + + +reaction_F-19(,ν|)e-,Ne-19->Ne-19 + + +-3.2395 MeV + + + +reaction_F-19(e+,ν|)Ne-19->Ne-19 + + +-3.2395 MeV + + + +reaction_Ne-17(,ν)e+,F-17->F-17 + + +14.5488 MeV + + + +reaction_Ne-17(e-,ν)F-17->F-17 + + +14.5488 MeV + + + +reaction_Ne-17(,ν|)e-,Na-17->Na-17 + + +-18.2191 MeV + + + +reaction_Ne-17(e+,ν|)Na-17->Na-17 + + +-18.2191 MeV + + + +reaction_F-17(,ν)e+,O-17->O-17 + + +2.76047 MeV + + + +reaction_F-17(e-,ν)O-17->O-17 + + +2.76047 MeV + + + +reaction_F-17(,ν|)e-,Ne-17->Ne-17 + + +-14.5488 MeV + + + +reaction_F-17(e+,ν|)Ne-17->Ne-17 + + +-14.5488 MeV + + + +reaction_B-7(,ν)e+,Be-7->Be-7 + + +11.9076 MeV + + + +reaction_B-7(e-,ν)Be-7->Be-7 + + +11.9076 MeV + + + +reaction_F-16(,ν)e+,O-16->O-16 + + +15.4122 MeV + + + +reaction_F-16(e-,ν)O-16->O-16 + + +15.4122 MeV + + + +reaction_F-16(,ν|)e-,Ne-16->Ne-16 + + +-13.3116 MeV + + + +reaction_F-16(e+,ν|)Ne-16->Ne-16 + + +-13.3116 MeV + + + +reaction_O-16(,ν)e+,N-16->N-16 + + +-10.4209 MeV + + + +reaction_O-16(e-,ν)N-16->N-16 + + +-10.4209 MeV + + + +reaction_O-16(,ν|)e-,F-16->F-16 + + +-15.4122 MeV + + + +reaction_O-16(e+,ν|)F-16->F-16 + + +-15.4122 MeV + + + +reaction_N-16(,ν)e+,C-16->C-16 + + +-8.01023 MeV + + + +reaction_N-16(e-,ν)C-16->C-16 + + +-8.01023 MeV + + + +reaction_N-16(,ν|)e-,O-16->O-16 + + +10.4209 MeV + + + +reaction_N-16(e+,ν|)O-16->O-16 + + +10.4209 MeV + + + +reaction_F-15(,ν)e+,O-15->O-15 + + +13.7111 MeV + + + +reaction_F-15(e-,ν)O-15->O-15 + + +13.7111 MeV + + + +reaction_F-15(,ν|)e-,Ne-15->Ne-15 + + +-23.6486 MeV + + + +reaction_F-15(e+,ν|)Ne-15->Ne-15 + + +-23.6486 MeV + + + +reaction_O-15(,ν)e+,N-15->N-15 + + +2.75418 MeV + + + +reaction_O-15(e-,ν)N-15->N-15 + + +2.75418 MeV + + + +reaction_O-15(,ν|)e-,F-15->F-15 + + +-13.7111 MeV + + + +reaction_O-15(e+,ν|)F-15->F-15 + + +-13.7111 MeV + + + +reaction_N-15(,ν)e+,C-15->C-15 + + +-9.77171 MeV + + + +reaction_N-15(e-,ν)C-15->C-15 + + +-9.77171 MeV + + + +reaction_N-15(,ν|)e-,O-15->O-15 + + +-2.75418 MeV + + + +reaction_N-15(e+,ν|)O-15->O-15 + + +-2.75418 MeV + + + +reaction_N-14(,ν)e+,C-14->C-14 + + +-0.156476 MeV + + + +reaction_N-14(e-,ν)C-14->C-14 + + +-0.156476 MeV + + + +reaction_N-14(,ν|)e-,O-14->O-14 + + +-5.14436 MeV + + + +reaction_N-14(e+,ν|)O-14->O-14 + + +-5.14436 MeV + + + +reaction_C-14(,ν)e+,B-14->B-14 + + +-20.6438 MeV + + + +reaction_C-14(e-,ν)B-14->B-14 + + +-20.6438 MeV + + + +reaction_C-14(,ν|)e-,N-14->N-14 + + +0.156476 MeV + + + +reaction_C-14(e+,ν|)N-14->N-14 + + +0.156476 MeV + + + +reaction_Ne-16(,ν)e+,F-16->F-16 + + +13.3116 MeV + + + +reaction_Ne-16(e-,ν)F-16->F-16 + + +13.3116 MeV + + + +reaction_O-13(,ν)e+,N-13->N-13 + + +17.77 MeV + + + +reaction_O-13(e-,ν)N-13->N-13 + + +17.77 MeV + + + +reaction_O-13(,ν|)e-,F-13->F-13 + + +-18.9145 MeV + + + +reaction_O-13(e+,ν|)F-13->F-13 + + +-18.9145 MeV + + + +reaction_N-13(,ν)e+,C-13->C-13 + + +2.22047 MeV + + + +reaction_N-13(e-,ν)C-13->C-13 + + +2.22047 MeV + + + +reaction_N-13(,ν|)e-,O-13->O-13 + + +-17.77 MeV + + + +reaction_N-13(e+,ν|)O-13->O-13 + + +-17.77 MeV + + + +reaction_N-12(,ν)e+,C-12->C-12 + + +17.3381 MeV + + + +reaction_N-12(e-,ν)C-12->C-12 + + +17.3381 MeV + + + +reaction_N-12(,ν|)e-,O-12->O-12 + + +-14.6753 MeV + + + +reaction_N-12(e+,ν|)O-12->O-12 + + +-14.6753 MeV + + + +reaction_C-12(,ν)e+,B-12->B-12 + + +-13.3694 MeV + + + +reaction_C-12(e-,ν)B-12->B-12 + + +-13.3694 MeV + + + +reaction_C-12(,ν|)e-,N-12->N-12 + + +-17.3381 MeV + + + +reaction_C-12(e+,ν|)N-12->N-12 + + +-17.3381 MeV + + + +reaction_B-12(,ν)e+,Be-12->Be-12 + + +-11.7084 MeV + + + +reaction_B-12(e-,ν)Be-12->Be-12 + + +-11.7084 MeV + + + +reaction_B-12(,ν|)e-,C-12->C-12 + + +13.3694 MeV + + + +reaction_B-12(e+,ν|)C-12->C-12 + + +13.3694 MeV + + + +reaction_Mg-25(,ν)e+,Na-25->Na-25 + + +-3.83497 MeV + + + +reaction_Mg-25(e-,ν)Na-25->Na-25 + + +-3.83497 MeV + + + +reaction_Mg-25(,ν|)e-,Al-25->Al-25 + + +-4.27681 MeV + + + +reaction_Mg-25(e+,ν|)Al-25->Al-25 + + +-4.27681 MeV + + + +reaction_Na-25(,ν)e+,Ne-25->Ne-25 + + +-7.32231 MeV + + + +reaction_Na-25(e-,ν)Ne-25->Ne-25 + + +-7.32231 MeV + + + +reaction_Na-25(,ν|)e-,Mg-25->Mg-25 + + +3.83497 MeV + + + +reaction_Na-25(e+,ν|)Mg-25->Mg-25 + + +3.83497 MeV + + + +reaction_C-11(,ν)e+,B-11->B-11 + + +1.98169 MeV + + + +reaction_C-11(e-,ν)B-11->B-11 + + +1.98169 MeV + + + +reaction_C-11(,ν|)e-,N-11->N-11 + + +-13.7162 MeV + + + +reaction_C-11(e+,ν|)N-11->N-11 + + +-13.7162 MeV + + + +reaction_Mg-24(,ν)e+,Na-24->Na-24 + + +-5.51568 MeV + + + +reaction_Mg-24(e-,ν)Na-24->Na-24 + + +-5.51568 MeV + + + +reaction_Mg-24(,ν|)e-,Al-24->Al-24 + + +-13.8848 MeV + + + +reaction_Mg-24(e+,ν|)Al-24->Al-24 + + +-13.8848 MeV + + + +reaction_O-20(,ν)e+,N-20->N-20 + + +-17.9703 MeV + + + +reaction_O-20(e-,ν)N-20->N-20 + + +-17.9703 MeV + + + +reaction_O-20(,ν|)e-,F-20->F-20 + + +3.81363 MeV + + + +reaction_O-20(e+,ν|)F-20->F-20 + + +3.81363 MeV + + + +reaction_Na-24(,ν)e+,Ne-24->Ne-24 + + +-2.46626 MeV + + + +reaction_Na-24(e-,ν)Ne-24->Ne-24 + + +-2.46626 MeV + + + +reaction_Na-24(,ν|)e-,Mg-24->Mg-24 + + +5.51568 MeV + + + +reaction_Na-24(e+,ν|)Mg-24->Mg-24 + + +5.51568 MeV + + + +reaction_Ne-24(,ν)e+,F-24->F-24 + + +-13.4962 MeV + + + +reaction_Ne-24(e-,ν)F-24->F-24 + + +-13.4962 MeV + + + +reaction_Ne-24(,ν|)e-,Na-24->Na-24 + + +2.46626 MeV + + + +reaction_Ne-24(e+,ν|)Na-24->Na-24 + + +2.46626 MeV + + + +reaction_Na-22(,ν)e+,Ne-22->Ne-22 + + +2.84332 MeV + + + +reaction_Na-22(e-,ν)Ne-22->Ne-22 + + +2.84332 MeV + + + +reaction_Na-22(,ν|)e-,Mg-22->Mg-22 + + +-4.78141 MeV + + + +reaction_Na-22(e+,ν|)Mg-22->Mg-22 + + +-4.78141 MeV + + + +reaction_B-8(,ν)e+,Be-8->Be-8 + + +17.9799 MeV + + + +reaction_B-8(e-,ν)Be-8->Be-8 + + +17.9799 MeV + + + +reaction_B-8(,ν|)e-,C-8->C-8 + + +-12.1427 MeV + + + +reaction_B-8(e+,ν|)C-8->C-8 + + +-12.1427 MeV + + + +reaction_Ar-35(,ν)e+,Cl-35->Cl-35 + + +5.96624 MeV + + + +reaction_Ar-35(e-,ν)Cl-35->Cl-35 + + +5.96624 MeV + + + +reaction_Ar-35(,ν|)e-,K-35->K-35 + + +-11.8744 MeV + + + +reaction_Ar-35(e+,ν|)K-35->K-35 + + +-11.8744 MeV + + + +reaction_F-18(,ν)e+,O-18->O-18 + + +1.65593 MeV + + + +reaction_F-18(e-,ν)O-18->O-18 + + +1.65593 MeV + + + +reaction_F-18(,ν|)e-,Ne-18->Ne-18 + + +-4.4445 MeV + + + +reaction_F-18(e+,ν|)Ne-18->Ne-18 + + +-4.4445 MeV + + + +reaction_Ne-21(,ν)e+,F-21->F-21 + + +-5.68417 MeV + + + +reaction_Ne-21(e-,ν)F-21->F-21 + + +-5.68417 MeV + + + +reaction_Ne-21(,ν|)e-,Na-21->Na-21 + + +-3.54692 MeV + + + +reaction_Ne-21(e+,ν|)Na-21->Na-21 + + +-3.54692 MeV + + + +reaction_Cl-35(,ν)e+,S-35->S-35 + + +-0.167321 MeV + + + +reaction_Cl-35(e-,ν)S-35->S-35 + + +-0.167321 MeV + + + +reaction_Cl-35(,ν|)e-,Ar-35->Ar-35 + + +-5.96624 MeV + + + +reaction_Cl-35(e+,ν|)Ar-35->Ar-35 + + +-5.96624 MeV + + + +reaction_O-18(,ν)e+,N-18->N-18 + + +-13.896 MeV + + + +reaction_O-18(e-,ν)N-18->N-18 + + +-13.896 MeV + + + +reaction_O-18(,ν|)e-,F-18->F-18 + + +-1.65593 MeV + + + +reaction_O-18(e+,ν|)F-18->F-18 + + +-1.65593 MeV + + + +reaction_F-21(,ν)e+,O-21->O-21 + + +-8.10964 MeV + + + +reaction_F-21(e-,ν)O-21->O-21 + + +-8.10964 MeV + + + +reaction_F-21(,ν|)e-,Ne-21->Ne-21 + + +5.68417 MeV + + + +reaction_F-21(e+,ν|)Ne-21->Ne-21 + + +5.68417 MeV + + + +reaction_Be-7(,ν)e+,Li-7->Li-7 + + +0.861893 MeV + + + +reaction_Be-7(e-,ν)Li-7->Li-7 + + +0.861893 MeV + + + +reaction_Be-7(,ν|)e-,B-7->B-7 + + +-11.9076 MeV + + + +reaction_Be-7(e+,ν|)B-7->B-7 + + +-11.9076 MeV + + + +reaction_Na-23(,ν)e+,Ne-23->Ne-23 + + +-4.37581 MeV + + + +reaction_Na-23(e-,ν)Ne-23->Ne-23 + + +-4.37581 MeV + + + +reaction_Na-23(,ν|)e-,Mg-23->Mg-23 + + +-4.05618 MeV + + + +reaction_Na-23(e+,ν|)Mg-23->Mg-23 + + +-4.05618 MeV + + + +reaction_C-13(,ν)e+,B-13->B-13 + + +-13.4369 MeV + + + +reaction_C-13(e-,ν)B-13->B-13 + + +-13.4369 MeV + + + +reaction_C-13(,ν|)e-,N-13->N-13 + + +-2.22047 MeV + + + +reaction_C-13(e+,ν|)N-13->N-13 + + +-2.22047 MeV + + + +reaction_O-17(,ν)e+,N-17->N-17 + + +-8.67884 MeV + + + +reaction_O-17(e-,ν)N-17->N-17 + + +-8.67884 MeV + + + +reaction_O-17(,ν|)e-,F-17->F-17 + + +-2.76047 MeV + + + +reaction_O-17(e+,ν|)F-17->F-17 + + +-2.76047 MeV + + + +reaction_F-20(,ν)e+,O-20->O-20 + + +-3.81363 MeV + + + +reaction_F-20(e-,ν)O-20->O-20 + + +-3.81363 MeV + + + +reaction_F-20(,ν|)e-,Ne-20->Ne-20 + + +7.02447 MeV + + + +reaction_F-20(e+,ν|)Ne-20->Ne-20 + + +7.02447 MeV + + + +reaction_Ne-23(,ν)e+,F-23->F-23 + + +-8.43931 MeV + + + +reaction_Ne-23(e-,ν)F-23->F-23 + + +-8.43931 MeV + + + +reaction_Ne-23(,ν|)e-,Na-23->Na-23 + + +4.37581 MeV + + + +reaction_Ne-23(e+,ν|)Na-23->Na-23 + + +4.37581 MeV + + + +reaction_Li-6(,ν)e+,He-6->He-6 + + +-3.50521 MeV + + + +reaction_Li-6(e-,ν)He-6->He-6 + + +-3.50521 MeV + + + +reaction_Li-6(,ν|)e-,Be-6->Be-6 + + +-4.28815 MeV + + + +reaction_Li-6(e+,ν|)Be-6->Be-6 + + +-4.28815 MeV + + + diff --git a/tests/graphnet_sandbox/main.cpp b/tests/graphnet_sandbox/main.cpp index 513dd22a..939b889f 100644 --- a/tests/graphnet_sandbox/main.cpp +++ b/tests/graphnet_sandbox/main.cpp @@ -81,7 +81,7 @@ int main(int argc, char* argv[]){ g_previousHandler = std::set_terminate(quill_terminate_handler); quill::Logger* logger = fourdst::logging::LogManager::getInstance().getLogger("log"); - logger->set_log_level(quill::LogLevel::TraceL3); + logger->set_log_level(quill::LogLevel::TraceL2); LOG_INFO(logger, "Starting Adaptive Engine View Example..."); using namespace gridfire;