1#include <pybind11/pybind11.h>
2#include <pybind11/stl.h>
3#include <pybind11/stl_bind.h>
13namespace py = pybind11;
17 py::class_<gridfire::reaction::RateCoefficientSet>(m,
"RateCoefficientSet")
18 .def(py::init<double, double, double, double, double, double, double>(),
19 py::arg(
"a0"), py::arg(
"a1"), py::arg(
"a2"), py::arg(
"a3"),
20 py::arg(
"a4"), py::arg(
"a5"), py::arg(
"a6"),
21 "Construct a RateCoefficientSet with the given parameters."
24 using fourdst::atomic::Species;
25 py::class_<gridfire::reaction::Reaction>(m,
"Reaction")
26 .def(py::init<
const std::string_view,
const std::string_view,
int,
const std::vector<Species>&,
const std::vector<Species>&,
double, std::string_view,
gridfire::reaction::RateCoefficientSet,
bool>(),
27 py::arg(
"id"), py::arg(
"peName"), py::arg(
"chapter"),
28 py::arg(
"reactants"), py::arg(
"products"), py::arg(
"qValue"),
29 py::arg(
"label"), py::arg(
"sets"), py::arg(
"reverse") =
false,
30 "Construct a Reaction with the given parameters.")
32 py::arg(
"T9"),
"Calculate the reaction rate at a given temperature T9 (in units of 10^9 K).")
34 "Get the reaction name in (projectile, ejectile) notation (e.g., 'p(p,g)d').")
36 "Get the REACLIB chapter number defining the reaction structure.")
38 "Get the source label for the rate data (e.g., 'wc12w', 'st08').")
40 "get the set of rate coefficients.")
42 py::arg(
"species"),
"Check if the reaction contains a specific species.")
44 "Check if the reaction contains a specific reactant species.")
46 "Check if the reaction contains a specific product species.")
48 "Get all species involved in the reaction (both reactants and products) as a set.")
50 "Get the reactant species of the reaction as a set.")
52 "Get the product species of the reaction as a set.")
54 "Count the number of species in the reaction.")
57 "Get the stoichiometry of the reaction as a map from species to their coefficients.")
59 "Get the stoichiometry of the reaction as a map from species to their coefficients.")
61 "Get the unique identifier of the reaction.")
63 "Get the Q-value of the reaction in MeV.")
65 "Get a list of reactant species in the reaction.")
67 "Get a list of product species in the reaction.")
69 "Check if this is a reverse reaction rate.")
71 "Calculate the excess energy from the mass difference of reactants and products.")
72 .def(
"__eq__", &gridfire::reaction::Reaction::operator==,
73 "Equality operator for reactions based on their IDs.")
74 .def(
"__neq__", &gridfire::reaction::Reaction::operator!=,
75 "Inequality operator for reactions based on their IDs.")
78 "Compute a hash for the reaction based on its ID.")
85 py::class_<gridfire::reaction::LogicalReaction, gridfire::reaction::Reaction>(m,
"LogicalReaction")
86 .def(py::init<
const std::vector<gridfire::reaction::Reaction>>(),
88 "Construct a LogicalReaction from a vector of Reaction objects.")
91 "Add another Reaction source to this logical reaction.")
93 "Get the number of source rates contributing to this logical reaction.")
95 "Overload len() to return the number of source rates.")
97 "Get the list of source labels for the aggregated rates.")
99 py::arg(
"T9"),
"Calculate the reaction rate at a given temperature T9 (in units of 10^9 K).")
101 py::arg(
"T9"),
"Calculate the forward rate log derivative at a given temperature T9 (in units of 10^9 K).");
103 py::class_<gridfire::reaction::LogicalReactionSet>(m,
"LogicalReactionSet")
104 .def(py::init<
const std::vector<gridfire::reaction::LogicalReaction>>(),
105 py::arg(
"reactions"),
106 "Construct a LogicalReactionSet from a vector of LogicalReaction objects.")
108 "Default constructor for an empty LogicalReactionSet.")
109 .def(py::init<const gridfire::reaction::LogicalReactionSet&>(),
111 "Copy constructor for LogicalReactionSet.")
114 "Add a LogicalReaction to the set.")
117 "Remove a LogicalReaction from the set.")
120 "Check if the set contains a specific LogicalReaction.")
123 "Check if the set contains a specific Reaction.")
125 "Get the number of LogicalReactions in the set.")
127 "Overload len() to return the number of LogicalReactions.")
129 "Remove all LogicalReactions from the set.")
132 "Check if any reaction in the set involves the given species.")
135 "Check if any reaction in the set has the species as a reactant.")
138 "Check if any reaction in the set has the species as a product.")
139 .def(
"__getitem__", py::overload_cast<size_t>(&gridfire::reaction::LogicalReactionSet::operator[], py::const_),
141 "Get a LogicalReaction by index.")
142 .def(
"__getitem___", py::overload_cast<const std::string_view&>(&gridfire::reaction::LogicalReactionSet::operator[], py::const_),
144 "Get a LogicalReaction by its ID.")
145 .def(
"__eq__", &gridfire::reaction::LogicalReactionSet::operator==,
146 py::arg(
"LogicalReactionSet"),
147 "Equality operator for LogicalReactionSets based on their contents.")
148 .def(
"__ne__", &gridfire::reaction::LogicalReactionSet::operator!=,
149 py::arg(
"LogicalReactionSet"),
150 "Inequality operator for LogicalReactionSets based on their contents.")
153 "Compute a hash for the LogicalReactionSet based on its contents."
156 std::stringstream ss;
161 "Get all species involved in the reactions of the set as a set of Species objects.");
163 m.def(
"packReactionSetToLogicalReactionSet",
165 py::arg(
"reactionSet"),
166 "Convert a ReactionSet to a LogicalReactionSet by aggregating reactions with the same peName."
170 "Get all reactions from the REACLIB database.");
Represents a "logical" reaction that aggregates rates from multiple sources.
void add_reaction(const Reaction &reaction)
Adds another Reaction source to this logical reaction.
double calculate_rate(const double T9) const override
Calculates the total reaction rate by summing all source rates.
virtual double calculate_forward_rate_log_derivative(const double T9) const override
std::vector< std::string > sources() const
Gets the list of source labels for the aggregated rates.
size_t size() const
Gets the number of source rates contributing to this logical reaction.
Represents a single nuclear reaction from a specific data source.
std::unordered_set< fourdst::atomic::Species > product_species() const
Gets a set of all unique product species.
bool contains_product(const fourdst::atomic::Species &species) const
Checks if the reaction involves a given species as a product.
std::string_view id() const
Gets the unique identifier of the reaction.
const std::vector< fourdst::atomic::Species > & reactants() const
Gets the vector of reactant species.
size_t num_species() const
Gets the number of unique species involved in the reaction.
std::string_view sourceLabel() const
Gets the source label for the rate data.
int chapter() const
Gets the REACLIB chapter number.
const std::vector< fourdst::atomic::Species > & products() const
Gets the vector of product species.
virtual std::string_view peName() const
Gets the reaction name in (projectile, ejectile) notation.
std::unordered_set< fourdst::atomic::Species > all_species() const
Gets a set of all unique species involved in the reaction.
std::unordered_set< fourdst::atomic::Species > reactant_species() const
Gets a set of all unique reactant species.
const RateCoefficientSet & rateCoefficients() const
Gets the set of rate coefficients.
double excess_energy() const
Calculates the excess energy from the mass difference of reactants and products.
bool is_reverse() const
Checks if this is a reverse reaction rate.
int stoichiometry(const fourdst::atomic::Species &species) const
Calculates the stoichiometric coefficient for a given species.
bool contains(const fourdst::atomic::Species &species) const
Checks if the reaction involves a given species as a reactant or product.
bool contains_reactant(const fourdst::atomic::Species &species) const
Checks if the reaction involves a given species as a reactant.
double qValue() const
Gets the Q-value of the reaction.
virtual double calculate_rate(const double T9) const
Calculates the reaction rate for a given temperature.
uint64_t hash(uint64_t seed=0) const
Computes a hash for the reaction based on its ID.
std::unordered_set< fourdst::atomic::Species > getReactionSetSpecies() const
uint64_t hash(uint64_t seed=0) const
void add_reaction(LogicalReaction reaction)
bool contains_product(const fourdst::atomic::Species &species) const
bool contains(const std::string_view &id) const
void remove_reaction(const LogicalReaction &reaction)
bool contains_reactant(const fourdst::atomic::Species &species) const
bool contains_species(const fourdst::atomic::Species &species) const
const reaction::LogicalReactionSet & get_all_reactions()
Provides global access to the fully initialized REACLIB reaction set.
TemplatedReactionSet< LogicalReaction > LogicalReactionSet
A set of logical reactions.
LogicalReactionSet packReactionSetToLogicalReactionSet(const ReactionSet &reactionSet)
void register_reaction_bindings(py::module &m)
Defines classes for representing and managing nuclear reactions.
Holds the seven coefficients for the REACLIB rate equation.