Source code for nuclear

import jax.numpy as jnp
import equinox as eqx
import interpax

import linx.const as const
from linx.reactions import Reaction

[docs] class NuclearRates(eqx.Module): """ Nuclear net and rates. Attributes ---------- max_i_species : int Number of nuclear species to track. Convention is 0:n, 1:p, 2:d, 3:t, 4:He3, 5:a, 6:Li7, 7:Be7, 8: Li6, 9: He6, 10: Li8, 11: B8. max_i_species = 8 would go up to Be7, for example. interp_type : str Interpolation method for nuclear rates with spline data. Either 'linear' or 'log'. reactions : list of Reaction Reactions to consider in the network. in_states : dict of tuple Nuclear species on the LHS of each reaction. out_states : dict of tuple Nuclear species on the RHS of each reaction. frwrd_symmetry_fac : dict of float Symmetry factor for forward direction of reaction. bkwrd_symmetry_fac : dict of float Symmetry factor for backward direction of reaction. frwrd_rate : dict of callable Dictionary of forward rate parameter (Gamma, <sigma v> or <sigma v^2> divided by (1 amu)^(N_in-1)) for each reaction, units (s^-1/g, cm^3/s/g or cm^6/s/g^2) bkwrd_rate : dict of callable Dictionary of backward rate parameter for each reaction. """ max_i_species : int interp_type : str reactions : list reactions_names: list in_states : dict out_states : dict frwrd_symmetry_fac : dict bkwrd_symmetry_fac : dict frwrd_rate_param : dict bkwrd_rate_param : dict frwrd_reaction_by_particle : dict bkwrd_reaction_by_particle : dict def __init__( self, reactions=None, nuclear_net=None, interp_type='linear', max_i_species=None ): """ Populates the class. Parameters ---------- reactions : list of Reaction Reactions to be considered in the nuclear net. nuclear_net : str Used for fixed networks, choices are: 'np_only': Only n <-> p rates will be used. 'key_PRIMAT_2018': PRIMAT 2018 small network rates, also used by PRyMordial. 'key_YOF': YOF small network rates, also used by PRyMordial. 'key_PRIMAT_2023': PRIMAT 2022 rates. 'key_PArthENoPE': PArthENoPE rates. 'full_PRIMAT_2022': PRIMAT 2022 full network rates (unverified). interp_type : str Interpolation type for nuclear rates with spline data. Either 'linear' or 'log'. max_i_species : int Number of nuclear species to consider. """ self.interp_type = interp_type self.max_i_species = max_i_species if reactions is not None: self.reactions = reactions elif nuclear_net == 'np_only': # No nuclear reactions. n<->p rates are always included. self.reactions = [] self.max_i_species = 2 else: self.reactions = self.populate(nuclear_net) if nuclear_net[:3] == 'key': self.max_i_species = 8 elif nuclear_net[:5] == 'small': self.max_i_species = 9 else: self.max_i_species = 12 self.in_states = {} self.out_states = {} self.frwrd_symmetry_fac = {} self.bkwrd_symmetry_fac = {} self.frwrd_rate_param = {} self.bkwrd_rate_param = {} self.reactions_names = [] self.frwrd_reaction_by_particle = { i:[] for i in range(self.max_i_species) } self.bkwrd_reaction_by_particle = { i:[] for i in range(self.max_i_species) } for rxn in self.reactions: self.in_states[rxn.name] = rxn.in_states self.out_states[rxn.name] = rxn.out_states self.frwrd_symmetry_fac[rxn.name] = rxn.frwrd_symmetry_fac self.bkwrd_symmetry_fac[rxn.name] = rxn.bkwrd_symmetry_fac self.frwrd_rate_param[rxn.name] = rxn.frwrd_rate_param self.bkwrd_rate_param[rxn.name] = rxn.bkwrd_rate_param for i in range(self.max_i_species): if i in self.in_states[rxn.name]: self.frwrd_reaction_by_particle[i].append(rxn.name) if i in self.out_states[rxn.name]: self.bkwrd_reaction_by_particle[i].append(rxn.name) self.reactions_names.append(rxn.name)
[docs] @eqx.filter_jit def __call__( self, Y, T_t, rhoBBN, T_interval, nTOp_frwrd_vec, nTOp_bkwrd_vec, tau_n_fac=1., nuclear_rates_q=None ): """ Returns the rate of change of the abundances. Parameters ---------- Y : Array Current abundance of species (n_species/n_b). T_t : float Current temperature in MeV. rhoBBN : float Number density of baryons x 1amu in g/cm^3. T_interval : array of float Interval over which n<->p rates were calculated in MeV. nTOp_frwrd_vec : array of float n -> p dimensionless rates corresponding to T_interval, normalized to the neutron decay width, i.e. Yn * nTOp_frwrd / tau_n + ... = -dYn/dt. nTOp_bkwrd_vec : array of float p -> n dimensionless rates corresponding to T_interval. tau_n_fac : float Rescaling parameter for neutron decay lifetime. nuclear_rates_q : array Rescaling parameter of expsigma in nuclear rate. If None, no rescaling is assumed. Returns ------- Array dY/dt in s^-1. Same dimensions as Y. """ if nuclear_rates_q is None: nuclear_rates_q = jnp.array([0. for _ in self.reactions]) dYdt_vec = jnp.zeros(len(Y)) # Sort by T_interval to handle non-monotonic temperature evolution # (e.g., in reheating scenarios). Note: T_interval is typically # monotonically decreasing from logspace, but we sort to be safe. sort_idx = jnp.argsort(T_interval) T_sorted = T_interval[sort_idx] nTOp_frwrd_sorted = nTOp_frwrd_vec[sort_idx] nTOp_bkwrd_sorted = nTOp_bkwrd_vec[sort_idx] _nTOp_frwrd = interpax.interp1d( T_t, T_sorted, nTOp_frwrd_sorted, method='linear', extrap=True ) / (const.tau_n * tau_n_fac) _nTOp_bkwrd = interpax.interp1d( T_t, T_sorted, nTOp_bkwrd_sorted, method='linear', extrap=True ) / (const.tau_n * tau_n_fac) # These functions take temperature in K. frwrd_rate_params = { rxn.name:self.frwrd_rate_param[rxn.name]( T_t / const.kB, nuclear_rates_q[i] ) for i,rxn in enumerate(self.reactions) } bkwrd_rate_params = { rxn.name:self.bkwrd_rate_param[rxn.name]( T_t / const.kB, nuclear_rates_q[i] ) for i,rxn in enumerate(self.reactions) } dYdt_vec = dYdt_vec.at[0].set(-_nTOp_frwrd*Y[0] + _nTOp_bkwrd*Y[1]) dYdt_vec = dYdt_vec.at[1].set( _nTOp_frwrd*Y[0] - _nTOp_bkwrd*Y[1]) for rxn in self.reactions: dYdt_vec += self.get_dYdt_rxn( rxn.name, Y, rhoBBN, frwrd_rate_params[rxn.name], bkwrd_rate_params[rxn.name] ) return tuple(dYdt_vec)
[docs] def get_dYdt_rxn( self, rxn, Y, rhoBBN, frwrd_rate_param, bkwrd_rate_param ): """ Returns the rate of change of abundances due to a particular reaction. Parameters ---------- rxn : str Name of the reaction. Y : Array Current abundance of species (n_species/n_b). rhoBBN : float Number density of baryons x 1amu in g/cm^3. frwrd_rate_param : callable Function returning the forward rate (either <sigma v> or <sigma v^2>). Takes two arguments, `T` for EM temperature *in K* and `p` for rescaling of the rate. bkwrd_rate_param : callable Similar to `frwrd_rate_param`, but for the backward rate. Returns ------- Array dY/dt in s^-1. Same dimensions as Y. """ dYdt_vec = jnp.zeros(len(Y)) Y_prod_frwrd = 1. Y_prod_bkwrd = 1. for i in self.in_states[rxn]: Y_prod_frwrd *= Y[i] for j in self.out_states[rxn]: Y_prod_bkwrd *= Y[j] for i in self.in_states[rxn]: dYdt_vec = dYdt_vec.at[i].add( - self.frwrd_symmetry_fac[rxn] * rhoBBN**(len(self.in_states[rxn])-1) * Y_prod_frwrd * frwrd_rate_param ) dYdt_vec = dYdt_vec.at[i].add( + self.bkwrd_symmetry_fac[rxn] * rhoBBN**(len(self.out_states[rxn])-1) * Y_prod_bkwrd * bkwrd_rate_param ) for j in self.out_states[rxn]: dYdt_vec = dYdt_vec.at[j].add( + self.frwrd_symmetry_fac[rxn] * rhoBBN**(len(self.in_states[rxn])-1) * Y_prod_frwrd * frwrd_rate_param ) dYdt_vec = dYdt_vec.at[j].add( - self.bkwrd_symmetry_fac[rxn] * rhoBBN**(len(self.out_states[rxn])-1) * Y_prod_bkwrd * bkwrd_rate_param ) return dYdt_vec
[docs] def populate(self, network): """ Populate the nuclear rates. Parameters ---------- network : str Nuclear network of interest. Choices are: 'key_PRIMAT_2018': PRIMAT 2018 key network rates, also used by PRyMordial. 'key_YOF': YOF key network rates, also used by PRyMordial. 'key_PRIMAT_2023': PRIMAT 2023 key network rates. 'key_PArthENoPE': PArthENoPE key network rates. 'full_PRIMAT_2023': PRIMAT 2023 full network rates. Returns ------- list of Reaction """ key_rxns_dict = {} if network != 'key_PArthENoPE': if ( network == 'key_PRIMAT_2018' or network == 'key_YOF' or network == 'key_PRIMAT_2023' ): key_network_str = network elif network == 'full_PRIMAT_2018': key_network_str = 'key_PRIMAT_2018' elif ( network == 'small_PRIMAT_2023' or network == 'full_PRIMAT_2023' ): key_network_str = 'key_PRIMAT_2023' key_rxns_dict['npdg'] = Reaction( 'npdg', (0, 1), (2, ), 4.7161402e9, 1.5, -25.81502, spline_data=key_network_str+'/npdg.txt', interp_type=self.interp_type ) key_rxns_dict['dpHe3g'] = Reaction( 'dpHe3g', (1, 2), (4, ), 1.6335102e10, 1.5, -63.749132, spline_data=key_network_str+'/dpHe3g.txt', interp_type=self.interp_type ) key_rxns_dict['ddHe3n'] = Reaction( 'ddHe3n', (2, 2), (0, 4), 1.7318296, 0., -37.934112, spline_data=key_network_str+'/ddHe3n.txt', interp_type=self.interp_type ) key_rxns_dict['ddtp'] = Reaction( 'ddtp', (2, 2), (1, 3), 1.7349209, 0., -46.797116, spline_data=key_network_str+'/ddtp.txt', interp_type=self.interp_type ) key_rxns_dict['tpag'] = Reaction( 'tpag', (1, 3), (5, ), 2.610575e10, 1.5, -229.93039, spline_data=key_network_str+'/tpag.txt', interp_type=self.interp_type ) key_rxns_dict['tdan'] = Reaction( 'tdan', (2, 3), (0, 5), 5.5354059, 0., -204.11537, spline_data=key_network_str+'/tdan.txt', interp_type=self.interp_type ) key_rxns_dict['taLi7g'] = Reaction( 'taLi7g', (3, 5), (6, ), 1.1132988e10, 1.5, -28.635551, spline_data=key_network_str+'/taLi7g.txt', interp_type=self.interp_type ) key_rxns_dict['He3ntp'] = Reaction( 'He3ntp', (0, 4), (1, 3), 1.001785, 0., -8.8630042, spline_data=key_network_str+'/He3ntp.txt', interp_type=self.interp_type ) key_rxns_dict['He3dap'] = Reaction( 'He3dap', (2, 4), (1, 5), 5.5452865, 0., -212.97837, spline_data=key_network_str+'/He3dap.txt', interp_type=self.interp_type ) key_rxns_dict['He3aBe7g'] = Reaction( 'He3aBe7g', (4, 5), (7, ), 1.1128943e10, 1.5, -18.417922, spline_data=key_network_str+'/He3aBe7g.txt', interp_type=self.interp_type ) key_rxns_dict['Be7nLi7p'] = Reaction( 'Be7nLi7p', (0, 7), (1, 6), 1.0021491, 0., -19.080633, spline_data=key_network_str+'/Be7nLi7p.txt', interp_type=self.interp_type ) key_rxns_dict['Li7paa'] = Reaction( 'Li7paa', (1, 6), (5, 5), 4.6898011, 0., -201.29484, spline_data=key_network_str+'/Li7paa.txt', interp_type=self.interp_type ) else: from linx.data.nuclear_rates import key_PArthENoPE as PArth key_rxns_dict['npdg'] = Reaction( 'npdg', (0, 1), (2, ), 4.7161402e9, 1.5, -25.81502, frwrd_rate_param_func = PArth.npdg_frwrd_rate ) key_rxns_dict['dpHe3g'] = Reaction( 'dpHe3g', (1, 2), (4, ), 1.6335102e10, 1.5, -63.749132, frwrd_rate_param_func = PArth.dpHe3g_frwrd_rate ) key_rxns_dict['ddHe3n'] = Reaction( 'ddHe3n', (2, 2), (0, 4), 1.7318296, 0., -37.934112, frwrd_rate_param_func = PArth.ddHe3n_frwrd_rate ) key_rxns_dict['ddtp'] = Reaction( 'ddtp', (2, 2), (1, 3), 1.7349209, 0., -46.797116, frwrd_rate_param_func = PArth.ddtp_frwrd_rate ) key_rxns_dict['tpag'] = Reaction( 'tpag', (1, 3), (5, ), 2.610575e10, 1.5, -229.93039, frwrd_rate_param_func = PArth.tpag_frwrd_rate ) key_rxns_dict['tdan'] = Reaction( 'tdan', (2, 3), (0, 5), 5.5354059, 0., -204.11537, frwrd_rate_param_func = PArth.tdan_frwrd_rate ) key_rxns_dict['taLi7g'] = Reaction( 'taLi7g', (3, 5), (6, ), 1.1132988e10, 1.5, -28.635551, frwrd_rate_param_func = PArth.taLi7g_frwrd_rate ) key_rxns_dict['He3ntp'] = Reaction( 'He3ntp', (0, 4), (1, 3), 1.001785, 0., -8.8630042, frwrd_rate_param_func = PArth.He3ntp_frwrd_rate ) key_rxns_dict['He3dap'] = Reaction( 'He3dap', (2, 4), (1, 5), 5.5452865, 0., -212.97837, frwrd_rate_param_func = PArth.He3dap_frwrd_rate ) key_rxns_dict['He3aBe7g'] = Reaction( 'He3aBe7g', (4, 5), (7, ), 1.1128943e10, 1.5, -18.417922, frwrd_rate_param_func = PArth.He3aBe7g_frwrd_rate ) key_rxns_dict['Be7nLi7p'] = Reaction( 'Be7nLi7p', (0, 7), (1, 6), 1.0021491, 0., -19.080633, frwrd_rate_param_func = PArth.Be7nLi7p_frwrd_rate ) key_rxns_dict['Li7paa'] = Reaction( 'Li7paa', (1, 6), (5, 5), 4.6898011, 0., -201.29484, frwrd_rate_param_func = PArth.Li7paa_frwrd_rate ) if network[:4] == 'full': other_rxns_dict = {} dir_name = 'other_PRIMAT_2023/' other_rxns_dict['Li7paag'] = Reaction( 'Li7paag', (1, 6), (5, 5), 4.6898, 0.,-201.295, spline_data=dir_name+'Li7paag.txt', interp_type=self.interp_type ) other_rxns_dict['Be7naa'] = Reaction( 'Be7naa', (0, 7), (5, 5), 4.6982, 0.,-220.3871, spline_data=dir_name+'Be7naa.txt', interp_type=self.interp_type ) other_rxns_dict['Be7daap'] = Reaction( 'Be7daap', (2, 7), (1, 5, 5), 9.9579e-10, -1.5, -194.5722, spline_data=dir_name+'Be7daap.txt', interp_type=self.interp_type ) other_rxns_dict['daLi6g'] = Reaction( 'daLi6g', (2, 5), (8, ), 1.53053e10, 1.5, -17.1023, spline_data=dir_name+'daLi6g.txt', interp_type=self.interp_type ) other_rxns_dict['Li6pBe7g'] = Reaction( 'Li6pBe7g', (1, 8), (7, ), 1.18778e10, 1.5, -65.0648, spline_data=dir_name+'Li6pBe7g.txt', interp_type=self.interp_type ) other_rxns_dict['Li6pHe3a'] = Reaction( 'Li6pHe3a', (1, 8), (4, 5), 1.06729, 0., -46.6469, spline_data=dir_name+'Li6pHe3a.txt', interp_type=self.interp_type ) other_rxns_dict['B8naap'] = Reaction( 'B8naap', (0, 11), (1, 5, 5), 3.6007e-10, -1.5, -218.7915, spline_data=dir_name+'B8naap.txt', interp_type=self.interp_type ) other_rxns_dict['Li6He3aap'] = Reaction( 'Li6He3aap', (4, 8), (1, 5, 5), 7.2413e-10, -1.5, -195.8748, spline_data=dir_name+'Li6He3aap.txt', interp_type=self.interp_type ) other_rxns_dict['Li6taan'] = Reaction( 'Li6taan', (3, 8), (0, 5, 5), 7.2333e-10, -1.5, -187.0131, spline_data=dir_name+'Li6taan.txt', interp_type=self.interp_type ) other_rxns_dict['Li6tLi8p'] = Reaction( 'Li6tLi8p', (3, 8), (1, 10), 2.0167, 0., -9.306, spline_data=dir_name+'Li6tLi8p.txt', interp_type=self.interp_type ) other_rxns_dict['Li7He3Li6a'] = Reaction( 'Li7He3Li6a', (4, 6), (5, 8), 2.1972, 0., -154.6607, spline_data=dir_name+'Li7He3Li6a.txt', interp_type=self.interp_type ) other_rxns_dict['Li8He3Li7a'] = Reaction( 'Li8He3Li7a', (4, 10), (5, 6), 1.9994, 0., -215.2055, spline_data=dir_name+'Li8He3Li7a.txt', interp_type=self.interp_type ) other_rxns_dict['Be7tLi6a'] = Reaction( 'Be7tLi6a', (3, 7), (5, 8), 2.1977, 0., -164.8783, spline_data=dir_name+'Be7tLi6a.txt', interp_type=self.interp_type ) other_rxns_dict['B8tBe7a'] = Reaction( 'B8tBe7a', (3, 11), (5, 7), 1.9999, 0., -228.3344, spline_data=dir_name+'B8tBe7a.txt', interp_type=self.interp_type ) other_rxns_dict['B8nLi6He3'] = Reaction( 'B8nLi6He3', (0, 11), (4, 8), 0.49669, 0., -22.9167, spline_data=dir_name+'B8nLi6He3.txt', interp_type=self.interp_type ) other_rxns_dict['B8nBe7d'] = Reaction( 'B8nBe7d', (0, 11), (2, 7), 0.36119, 0., -24.2194, spline_data=dir_name+'B8nBe7d.txt', interp_type=self.interp_type ) other_rxns_dict['Li6tLi7d'] = Reaction( 'Li6tLi7d', (3, 8), (2, 6), 0.72734, 0., -11.5332, spline_data=dir_name+'Li6tLi7d.txt', interp_type=self.interp_type ) other_rxns_dict['Li6He3Be7d'] = Reaction( 'Li6He3Be7d', (4, 8), (2, 7), 0.72719, 0., -1.3157, spline_data=dir_name+'Li6He3Be7d.txt', interp_type=self.interp_type ) other_rxns_dict['Li7He3aad'] = Reaction( 'Li7He3aad', (4, 6), (2, 5, 5), 2.8700e-10, -1.5, -137.5575, spline_data=dir_name+'Li7He3aad.txt', interp_type=self.interp_type ) other_rxns_dict['Li8He3aat'] = Reaction( 'Li8He3aat', (4, 10), (3, 5, 5), 3.5907e-10, -1.5, -186.5821, spline_data=dir_name+'Li8He3aat.txt', interp_type=self.interp_type ) other_rxns_dict['Be7taad'] = Reaction( 'Be7taad', (3, 7), (2, 5, 5), 2.8706e-10, -1.5, -147.7751, spline_data=dir_name+'Be7taad.txt', interp_type=self.interp_type ) other_rxns_dict['Be7tLi7He3'] = Reaction( 'Be7tLi7He3', (3, 7), (4, 6), 1.0002, 0., -10.2176, spline_data=dir_name+'Be7tLi7He3.txt', interp_type=self.interp_type ) other_rxns_dict['B8dBe7He3'] = Reaction( 'B8dBe7He3', (2, 11), (4, 7), 1.2514, 0, -62.1535, spline_data=dir_name+'B8dBe7He3.txt', interp_type=self.interp_type ) other_rxns_dict['B8taaHe3'] = Reaction( 'B8taaHe3', (3, 11), (4, 5, 5), 3.5922e-10, -1.5, -209.9285, spline_data=dir_name+'B8taaHe3.txt', interp_type=self.interp_type ) other_rxns_dict['Be7He3ppaa'] = Reaction( 'Be7He3ppaa', (4, 7), (1, 1, 5, 5), 1.2201e-19, -3., -130.8113, spline_data=dir_name+'Be7He3ppaa.txt', interp_type=self.interp_type ) other_rxns_dict['ddag'] = Reaction( 'ddag', (2, 2), (5, ), 4.5310e10, 1.5, -276.7271, spline_data=dir_name+'ddag.txt', interp_type=self.interp_type ) other_rxns_dict['He3He3app'] = Reaction( 'He3He3app', (4, 4), (1, 1, 5), 3.3915e-10, -1.5, -149.2290, spline_data=dir_name+'He3He3app.txt', interp_type=self.interp_type ) other_rxns_dict['Be7pB8g'] = Reaction( 'Be7pB8g', (1, 7), (11, ), 1.3063e10, 1.5, -1.5825, spline_data=dir_name+'Be7pB8g.txt', interp_type=self.interp_type ) other_rxns_dict['Li7daan'] = Reaction( 'Li7daan', (2, 6), (0, 5, 5), 9.9435e-10, -1.5, -175.4916, spline_data=dir_name+'Li7daan.txt', interp_type=self.interp_type ) other_rxns_dict['dntg'] = Reaction( 'dntg', (0, 2), (3, ), 1.6364262e10, 1.5, -72.612132, spline_data=dir_name+'dntg.txt', interp_type=self.interp_type ) other_rxns_dict['ttann'] = Reaction( 'ttann', (3, 3), (0, 0, 5), 3.3826187e-10, -1.5, -131.50322, spline_data=dir_name+'ttann.txt', interp_type=self.interp_type ) other_rxns_dict['He3nag'] = Reaction( 'He3nag', (0, 4), (5, ), 2.6152351e10, 1.5, -238.79338, spline_data=dir_name+'He3nag.txt', interp_type=self.interp_type ) other_rxns_dict['He3tad'] = Reaction( 'He3tad', (3, 4), (2, 5), 1.5981381, 0., -166.18124, spline_data=dir_name+'He3tad.txt', interp_type=self.interp_type ) other_rxns_dict['He3tanp'] = Reaction( 'He3tanp', (3, 4), (0, 1, 5), 3.3886566e-10, -1.5, -140.36623, spline_data=dir_name+'He3tanp.txt', interp_type=self.interp_type ) other_rxns_dict['Li7taann'] = Reaction( 'Li7taann', (3, 6), (0, 0, 5, 5), 1.2153497e-19, -3., -102.86767, spline_data=dir_name+'Li7taann.txt', interp_type=self.interp_type ) other_rxns_dict['Li7He3aanp'] = Reaction( 'Li7He3aanp', (4, 6), (0, 1, 5, 5), 6.0875952e-20, -3., -111.73068, spline_data=dir_name+'Li7He3aanp.txt', interp_type=self.interp_type ) other_rxns_dict['Li8dLi7t'] = Reaction( 'Li8dLi7t', (2, 10), (3, 6), 1.2509926, 0., -49.02453, spline_data=dir_name+'Li8dLi7t.txt', interp_type=self.interp_type ) other_rxns_dict['Be7taanp'] = Reaction( 'Be7taanp', (3, 7), (0, 1, 5, 5), 6.0898077e-20, -3., -121.9483, spline_data=dir_name+'Be7taanp.txt', interp_type=self.interp_type ) other_rxns_dict['Li6nta'] = Reaction( 'Li6nta', (0, 8), (3, 5), 1.0691921, 0., -55.509875, spline_data=dir_name+'Li6nta.txt', interp_type=self.interp_type ) other_rxns_dict['He3tLi6g'] = Reaction( 'He3tLi6g', (3, 4), (8, ), 2.4459918e10, 1.5, -183.2835, spline_data=dir_name+'He3tLi6g.txt', interp_type=self.interp_type ) other_rxns_dict['anpLi6g'] = Reaction( 'anpLi6g', (0, 1, 5), (8, ), 7.2181753e19, 3., -42.917276, spline_data=dir_name+'anpLi6g.txt', interp_type=self.interp_type ) other_rxns_dict['Li6nLi7g'] = Reaction( 'Li6nLi7g', (0, 8), (6, ), 1.1903305e10, 1.5, -84.145424, spline_data=dir_name+'Li6nLi7g.txt', interp_type=self.interp_type ) other_rxns_dict['Li6dLi7p'] = Reaction( 'Li6dLi7p', (2, 8), (1, 6), 2.5239503, 0., -58.330405, spline_data=dir_name+'Li6dLi7p.txt', interp_type=self.interp_type ) other_rxns_dict['Li6dBe7n'] = Reaction( 'Li6dBe7n', (2, 8), (0, 7), 2.5185377, 0., -39.249773, spline_data=dir_name+'Li6dBe7n.txt', interp_type=self.interp_type ) other_rxns_dict['Li7nLi8g'] = Reaction( 'Li7nLi8g', (0, 6), (10, ), 1.3081022e10, 1.5, -23.587602, spline_data=dir_name+'Li7nLi8g.txt', interp_type=self.interp_type ) other_rxns_dict['Li7dLi8p'] = Reaction( 'Li7dLi8p', (2, 6), (1, 10), 2.7736709, 0., 2.2274166, spline_data=dir_name+'Li7dLi8p.txt', interp_type=self.interp_type ) other_rxns_dict['Li8paan'] = Reaction( 'Li8paan', (1, 10), (0, 5, 5), 3.5851946e-10, -1.5, -177.70722, spline_data=dir_name+'Li8paan.txt', interp_type=self.interp_type ) other_rxns_dict['annHe6g'] = Reaction( 'annHe6g', (0, 0, 5), (9, ), 1.0837999e20, 3., -11.319626, spline_data=dir_name+'annHe6g.txt', interp_type=self.interp_type ) other_rxns_dict['ppndp'] = Reaction( 'ppndp', (1, 1, 0), (1, 2), 2.3580703e9, 1.5, -25.815019, spline_data=dir_name+'ppndp.txt', interp_type=self.interp_type ) if network[:5] == 'small': other_rxns_dict = {} dir_name = 'other_PRIMAT_2023/' other_rxns_dict['Li7paag'] = Reaction( 'Li7paag', (1, 6), (5, 5), 4.6898, 0.,-201.295, spline_data=dir_name+'Li7paag.txt', interp_type=self.interp_type ) other_rxns_dict['Be7naa'] = Reaction( 'Be7naa', (0, 7), (5, 5), 4.6982, 0.,-220.3871, spline_data=dir_name+'Be7naa.txt', interp_type=self.interp_type ) other_rxns_dict['Be7daap'] = Reaction( 'Be7daap', (2, 7), (1, 5, 5), 9.9579e-10, -1.5, -194.5722, spline_data=dir_name+'Be7daap.txt', interp_type=self.interp_type ) other_rxns_dict['daLi6g'] = Reaction( 'daLi6g', (2, 5), (8, ), 1.53053e10, 1.5, -17.1023, spline_data=dir_name+'daLi6g.txt', interp_type=self.interp_type ) other_rxns_dict['Li6pBe7g'] = Reaction( 'Li6pBe7g', (1, 8), (7, ), 1.18778e10, 1.5, -65.0648, spline_data=dir_name+'Li6pBe7g.txt', interp_type=self.interp_type ) other_rxns_dict['Li6pHe3a'] = Reaction( 'Li6pHe3a', (1, 8), (4, 5), 1.06729, 0., -46.6469, spline_data=dir_name+'Li6pHe3a.txt', interp_type=self.interp_type ) other_rxns_dict['Li6He3aap'] = Reaction( 'Li6He3aap', (4, 8), (1, 5, 5), 7.2413e-10, -1.5, -195.8748, spline_data=dir_name+'Li6He3aap.txt', interp_type=self.interp_type ) other_rxns_dict['Li6taan'] = Reaction( 'Li6taan', (3, 8), (0, 5, 5), 7.2333e-10, -1.5, -187.0131, spline_data=dir_name+'Li6taan.txt', interp_type=self.interp_type ) other_rxns_dict['Li7He3Li6a'] = Reaction( 'Li7He3Li6a', (4, 6), (5, 8), 2.1972, 0., -154.6607, spline_data=dir_name+'Li7He3Li6a.txt', interp_type=self.interp_type ) other_rxns_dict['Be7tLi6a'] = Reaction( 'Be7tLi6a', (3, 7), (5, 8), 2.1977, 0., -164.8783, spline_data=dir_name+'Be7tLi6a.txt', interp_type=self.interp_type ) other_rxns_dict['Li6tLi7d'] = Reaction( 'Li6tLi7d', (3, 8), (2, 6), 0.72734, 0., -11.5332, spline_data=dir_name+'Li6tLi7d.txt', interp_type=self.interp_type ) other_rxns_dict['Li6He3Be7d'] = Reaction( 'Li6He3Be7d', (4, 8), (2, 7), 0.72719, 0., -1.3157, spline_data=dir_name+'Li6He3Be7d.txt', interp_type=self.interp_type ) other_rxns_dict['Li7He3aad'] = Reaction( 'Li7He3aad', (4, 6), (2, 5, 5), 2.8700e-10, -1.5, -137.5575, spline_data=dir_name+'Li7He3aad.txt', interp_type=self.interp_type ) other_rxns_dict['Be7taad'] = Reaction( 'Be7taad', (3, 7), (2, 5, 5), 2.8706e-10, -1.5, -147.7751, spline_data=dir_name+'Be7taad.txt', interp_type=self.interp_type ) other_rxns_dict['Be7tLi7He3'] = Reaction( 'Be7tLi7He3', (3, 7), (4, 6), 1.0002, 0., -10.2176, spline_data=dir_name+'Be7tLi7He3.txt', interp_type=self.interp_type ) other_rxns_dict['Be7He3ppaa'] = Reaction( 'Be7He3ppaa', (4, 7), (1, 1, 5, 5), 1.2201e-19, -3., -130.8113, spline_data=dir_name+'Be7He3ppaa.txt', interp_type=self.interp_type ) other_rxns_dict['ddag'] = Reaction( 'ddag', (2, 2), (5, ), 4.5310e10, 1.5, -276.7271, spline_data=dir_name+'ddag.txt', interp_type=self.interp_type ) other_rxns_dict['He3He3app'] = Reaction( 'He3He3app', (4, 4), (1, 1, 5), 3.3915e-10, -1.5, -149.2290, spline_data=dir_name+'He3He3app.txt', interp_type=self.interp_type ) other_rxns_dict['Li7daan'] = Reaction( 'Li7daan', (2, 6), (0, 5, 5), 9.9435e-10, -1.5, -175.4916, spline_data=dir_name+'Li7daan.txt', interp_type=self.interp_type ) other_rxns_dict['dntg'] = Reaction( 'dntg', (0, 2), (3, ), 1.6364262e10, 1.5, -72.612132, spline_data=dir_name+'dntg.txt', interp_type=self.interp_type ) other_rxns_dict['ttann'] = Reaction( 'ttann', (3, 3), (0, 0, 5), 3.3826187e-10, -1.5, -131.50322, spline_data=dir_name+'ttann.txt', interp_type=self.interp_type ) other_rxns_dict['He3nag'] = Reaction( 'He3nag', (0, 4), (5, ), 2.6152351e10, 1.5, -238.79338, spline_data=dir_name+'He3nag.txt', interp_type=self.interp_type ) other_rxns_dict['He3tad'] = Reaction( 'He3tad', (3, 4), (2, 5), 1.5981381, 0., -166.18124, spline_data=dir_name+'He3tad.txt', interp_type=self.interp_type ) other_rxns_dict['He3tanp'] = Reaction( 'He3tanp', (3, 4), (0, 1, 5), 3.3886566e-10, -1.5, -140.36623, spline_data=dir_name+'He3tanp.txt', interp_type=self.interp_type ) other_rxns_dict['Li7taann'] = Reaction( 'Li7taann', (3, 6), (0, 0, 5, 5), 1.2153497e-19, -3., -102.86767, spline_data=dir_name+'Li7taann.txt', interp_type=self.interp_type ) other_rxns_dict['Li7He3aanp'] = Reaction( 'Li7He3aanp', (4, 6), (0, 1, 5, 5), 6.0875952e-20, -3., -111.73068, spline_data=dir_name+'Li7He3aanp.txt', interp_type=self.interp_type ) other_rxns_dict['Be7taanp'] = Reaction( 'Be7taanp', (3, 7), (0, 1, 5, 5), 6.0898077e-20, -3., -121.9483, spline_data=dir_name+'Be7taanp.txt', interp_type=self.interp_type ) other_rxns_dict['Li6nta'] = Reaction( 'Li6nta', (0, 8), (3, 5), 1.0691921, 0., -55.509875, spline_data=dir_name+'Li6nta.txt', interp_type=self.interp_type ) other_rxns_dict['He3tLi6g'] = Reaction( 'He3tLi6g', (3, 4), (8, ), 2.4459918e10, 1.5, -183.2835, spline_data=dir_name+'He3tLi6g.txt', interp_type=self.interp_type ) other_rxns_dict['anpLi6g'] = Reaction( 'anpLi6g', (0, 1, 5), (8, ), 7.2181753e19, 3., -42.917276, spline_data=dir_name+'anpLi6g.txt', interp_type=self.interp_type ) other_rxns_dict['Li6nLi7g'] = Reaction( 'Li6nLi7g', (0, 8), (6, ), 1.1903305e10, 1.5, -84.145424, spline_data=dir_name+'Li6nLi7g.txt', interp_type=self.interp_type ) other_rxns_dict['Li6dLi7p'] = Reaction( 'Li6dLi7p', (2, 8), (1, 6), 2.5239503, 0., -58.330405, spline_data=dir_name+'Li6dLi7p.txt', interp_type=self.interp_type ) other_rxns_dict['Li6dBe7n'] = Reaction( 'Li6dBe7n', (2, 8), (0, 7), 2.5185377, 0., -39.249773, spline_data=dir_name+'Li6dBe7n.txt', interp_type=self.interp_type ) other_rxns_dict['ppndp'] = Reaction( 'ppndp', (1, 1, 0), (1, 2), 2.3580703e9, 1.5, -25.815019, spline_data=dir_name+'ppndp.txt', interp_type=self.interp_type ) if network[:3] == 'key': return list(key_rxns_dict.values()) else: return ( list(key_rxns_dict.values()) + list(other_rxns_dict.values()) )