GridFire 0.0.1a
General Purpose Nuclear Network
Loading...
Searching...
No Matches
bindings.cpp
Go to the documentation of this file.
1#include <pybind11/pybind11.h>
2#include <pybind11/stl.h> // Needed for vectors, maps, sets, strings
3#include <pybind11/stl_bind.h> // Needed for binding std::vector, std::map etc if needed directly
4
5#include <string_view>
6#include <vector>
7
8#include "bindings.h"
9
12
13namespace py = pybind11;
14
15
16void register_reaction_bindings(py::module &m) {
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."
22 );
23
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.")
31 .def("calculate_rate", static_cast<double (gridfire::reaction::Reaction::*)(double) const>(&gridfire::reaction::Reaction::calculate_rate),
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').")
39 .def("rateCoefficients", &gridfire::reaction::Reaction::rateCoefficients,
40 "get the set of rate coefficients.")
42 py::arg("species"), "Check if the reaction contains a specific species.")
43 .def("contains_reactant", &gridfire::reaction::Reaction::contains_reactant,
44 "Check if the reaction contains a specific reactant species.")
45 .def("contains_product", &gridfire::reaction::Reaction::contains_product,
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.")
49 .def("reactant_species", &gridfire::reaction::Reaction::reactant_species,
50 "Get the reactant species of the reaction as a set.")
51 .def("product_species", &gridfire::reaction::Reaction::product_species,
52 "Get the product species of the reaction as a set.")
54 "Count the number of species in the reaction.")
55 .def("stoichiometry", static_cast<int (gridfire::reaction::Reaction::*)(const Species&) const>(&gridfire::reaction::Reaction::stoichiometry),
56 py::arg("species"),
57 "Get the stoichiometry of the reaction as a map from species to their coefficients.")
58 .def("stoichiometry", static_cast<std::unordered_map<Species, int> (gridfire::reaction::Reaction::*)() const>(&gridfire::reaction::Reaction::stoichiometry),
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.")
77 py::arg("seed") = 0,
78 "Compute a hash for the reaction based on its ID.")
79 .def("__repr__", [](const gridfire::reaction::Reaction& self) {
80 std::stringstream ss;
81 ss << self; // Use the existing operator<< for Reaction
82 return ss.str();
83 });
84
85 py::class_<gridfire::reaction::LogicalReaction, gridfire::reaction::Reaction>(m, "LogicalReaction")
86 .def(py::init<const std::vector<gridfire::reaction::Reaction>>(),
87 py::arg("reactions"),
88 "Construct a LogicalReaction from a vector of Reaction objects.")
90 py::arg("reaction"),
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.")
98 .def("calculate_rate", static_cast<double (gridfire::reaction::LogicalReaction::*)(double) const>(&gridfire::reaction::LogicalReaction::calculate_rate),
99 py::arg("T9"), "Calculate the reaction rate at a given temperature T9 (in units of 10^9 K).")
100 .def("calculate_forward_rate_log_derivative", &gridfire::reaction::LogicalReaction::calculate_forward_rate_log_derivative,
101 py::arg("T9"), "Calculate the forward rate log derivative at a given temperature T9 (in units of 10^9 K).");
102
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.")
107 .def(py::init<>(),
108 "Default constructor for an empty LogicalReactionSet.")
109 .def(py::init<const gridfire::reaction::LogicalReactionSet&>(),
110 py::arg("other"),
111 "Copy constructor for LogicalReactionSet.")
113 py::arg("reaction"),
114 "Add a LogicalReaction to the set.")
116 py::arg("reaction"),
117 "Remove a LogicalReaction from the set.")
118 .def("contains", py::overload_cast<const std::string_view&>(&gridfire::reaction::LogicalReactionSet::contains, py::const_),
119 py::arg("id"),
120 "Check if the set contains a specific LogicalReaction.")
121 .def("contains", py::overload_cast<const gridfire::reaction::Reaction&>(&gridfire::reaction::LogicalReactionSet::contains, py::const_),
122 py::arg("reaction"),
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.")
131 py::arg("species"),
132 "Check if any reaction in the set involves the given species.")
134 py::arg("species"),
135 "Check if any reaction in the set has the species as a reactant.")
137 py::arg("species"),
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_),
140 py::arg("index"),
141 "Get a LogicalReaction by index.")
142 .def("__getitem___", py::overload_cast<const std::string_view&>(&gridfire::reaction::LogicalReactionSet::operator[], py::const_),
143 py::arg("id"),
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.")
152 py::arg("seed") = 0,
153 "Compute a hash for the LogicalReactionSet based on its contents."
154 )
155 .def("__repr__", [](const gridfire::reaction::LogicalReactionSet& self) {
156 std::stringstream ss;
157 ss << self;
158 return ss.str();
159 })
161 "Get all species involved in the reactions of the set as a set of Species objects.");
162
163 m.def("packReactionSetToLogicalReactionSet",
165 py::arg("reactionSet"),
166 "Convert a ReactionSet to a LogicalReactionSet by aggregating reactions with the same peName."
167 );
168
169 m.def("get_all_reactions", &gridfire::reaclib::get_all_reactions,
170 "Get all reactions from the REACLIB database.");
171}
Represents a "logical" reaction that aggregates rates from multiple sources.
Definition reaction.h:310
void add_reaction(const Reaction &reaction)
Adds another Reaction source to this logical reaction.
Definition reaction.cpp:192
double calculate_rate(const double T9) const override
Calculates the total reaction rate by summing all source rates.
Definition reaction.cpp:214
virtual double calculate_forward_rate_log_derivative(const double T9) const override
Definition reaction.cpp:218
std::vector< std::string > sources() const
Gets the list of source labels for the aggregated rates.
Definition reaction.h:337
size_t size() const
Gets the number of source rates contributing to this logical reaction.
Definition reaction.h:331
Represents a single nuclear reaction from a specific data source.
Definition reaction.h:72
std::unordered_set< fourdst::atomic::Species > product_species() const
Gets a set of all unique product species.
Definition reaction.cpp:106
bool contains_product(const fourdst::atomic::Species &species) const
Checks if the reaction involves a given species as a product.
Definition reaction.cpp:82
std::string_view id() const
Gets the unique identifier of the reaction.
Definition reaction.h:204
const std::vector< fourdst::atomic::Species > & reactants() const
Gets the vector of reactant species.
Definition reaction.h:216
size_t num_species() const
Gets the number of unique species involved in the reaction.
Definition reaction.cpp:129
std::string_view sourceLabel() const
Gets the source label for the rate data.
Definition reaction.h:134
int chapter() const
Gets the REACLIB chapter number.
Definition reaction.h:128
const std::vector< fourdst::atomic::Species > & products() const
Gets the vector of product species.
Definition reaction.h:222
virtual std::string_view peName() const
Gets the reaction name in (projectile, ejectile) notation.
Definition reaction.h:122
std::unordered_set< fourdst::atomic::Species > all_species() const
Gets a set of all unique species involved in the reaction.
Definition reaction.cpp:91
std::unordered_set< fourdst::atomic::Species > reactant_species() const
Gets a set of all unique reactant species.
Definition reaction.cpp:98
const RateCoefficientSet & rateCoefficients() const
Gets the set of rate coefficients.
Definition reaction.h:140
double excess_energy() const
Calculates the excess energy from the mass difference of reactants and products.
Definition reaction.cpp:144
bool is_reverse() const
Checks if this is a reverse reaction rate.
Definition reaction.h:228
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.
Definition reaction.cpp:68
bool contains_reactant(const fourdst::atomic::Species &species) const
Checks if the reaction involves a given species as a reactant.
Definition reaction.cpp:73
double qValue() const
Gets the Q-value of the reaction.
Definition reaction.h:210
virtual double calculate_rate(const double T9) const
Calculates the reaction rate for a given temperature.
Definition reaction.cpp:39
uint64_t hash(uint64_t seed=0) const
Computes a hash for the reaction based on its ID.
Definition reaction.cpp:157
std::unordered_set< fourdst::atomic::Species > getReactionSetSpecies() const
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.
Definition reaclib.cpp:138
TemplatedReactionSet< LogicalReaction > LogicalReactionSet
A set of logical reactions.
Definition reaction.h:563
LogicalReactionSet packReactionSetToLogicalReactionSet(const ReactionSet &reactionSet)
Definition reaction.cpp:273
void register_reaction_bindings(py::module &m)
Definition bindings.cpp:16
Defines classes for representing and managing nuclear reactions.
Holds the seven coefficients for the REACLIB rate equation.
Definition reaction.h:33