def three_particle_free_non_equilibrium_test(params): eps = 1e-14 photon = Particle(**SMP.photon) neutrino_e = Particle(**SMP.leptons.neutrino_e) neutrino_mu = Particle(**SMP.leptons.neutrino_mu) sterile = Particle(**NuP.dirac_sterile_neutrino(mass=140 * UNITS.MeV)) neutral_pion = Particle(**SMP.hadrons.neutral_pion) theta = 1e-3 thetas = defaultdict(float, { 'electron': theta, }) interaction = NuI.sterile_hadrons_interactions( thetas = thetas, sterile=sterile, neutrinos = [neutrino_e], leptons = [], mesons = [neutral_pion] ) universe = Universe(params=params) universe.add_particles([photon, neutrino_e, neutrino_mu, sterile, neutral_pion]) universe.interactions += interaction params.update(universe.total_energy_density(), universe.total_entropy()) universe.update_particles() universe.init_interactions() photon_distribution = photon._distribution neutrino_e_distribution = neutrino_e._distribution neutrino_mu_distribution = neutrino_mu._distribution sterile_distribution = sterile._distribution neutral_pion_distribution = neutral_pion._distribution universe.calculate_collisions() assert all(photon.collision_integral == 0), "Equilibrium particle integral is non-zero" assert all(numpy.abs(neutrino_e.collision_integral * params.h) < eps), "Integrals do not cancel" assert all(numpy.abs(sterile.collision_integral * params.h) < eps), "Integrals do not cancel" assert all(numpy.abs(neutral_pion.collision_integral * params.h) < eps), "Integrals do not cancel" assert all(neutrino_mu.collision_integral == 0), "Free particle integral is non-zero" universe.update_distributions() assert all(photon._distribution == photon_distribution),\ "Equilibrium particle distribution changed" assert all(neutrino_e._distribution - neutrino_e_distribution < eps),\ "Interacting particle distribution changed" assert all(sterile._distribution - sterile_distribution < eps),\ "Interacting particle distribution changed" assert all(neutral_pion._distribution - neutral_pion_distribution < eps),\ "Interacting particle distribution changed" assert all(neutrino_mu._distribution == neutrino_mu_distribution),\ "Free particle distribution changed"
def non_equilibium_setup(): args, _ = setup() params = args[0] photon = Particle(**SMP.photon) neutrino_e = Particle(**SMP.leptons.neutrino_e) neutrino_mu = Particle(**SMP.leptons.neutrino_mu) neutrino_self_scattering = SMI.neutrino_scattering(neutrino_e, neutrino_e) universe = Universe(params=params) universe.add_particles([photon, neutrino_e, neutrino_mu]) universe.interactions += [neutrino_self_scattering] return [params, universe], {}
def non_equilibium_setup(): args, _ = setup() params = args[0] photon = Particle(**SMP.photon) neutrino_e = Particle(**SMP.leptons.neutrino_e) neutrino_mu = Particle(**SMP.leptons.neutrino_mu) neutrino_self_scattering = SMI.neutrino_scattering(neutrino_e, neutrino_e) universe = Universe(params=params, plotting=False) universe.add_particles([photon, neutrino_e, neutrino_mu]) universe.interactions += [neutrino_self_scattering] return [params, universe], {}
def three_particle_decay_test(params): os.environ['SPLIT_COLLISION_INTEGRAL'] = '' photon = Particle(**SMP.photon) neutrino_e = Particle(**SMP.leptons.neutrino_e) sterile = Particle(**NuP.dirac_sterile_neutrino(mass=200 * UNITS.MeV)) neutral_pion = Particle(**SMP.hadrons.neutral_pion) theta = 1e-2 thetas = defaultdict(float, { 'electron': theta, }) interaction = NuI.sterile_hadrons_interactions( thetas = thetas, sterile=sterile, neutrinos = [neutrino_e], leptons = [], mesons = [neutral_pion], kind = CollisionIntegralKind.F_f_vacuum_decay ) universe = Universe(params=params) universe.add_particles([photon, neutrino_e, sterile, neutral_pion]) universe.interactions += interaction params.update(universe.total_energy_density(), universe.total_entropy()) universe.update_particles() universe.init_interactions() collision_integral = sterile.collision_integrals[0].integrate(sterile.grid.TEMPLATE) theo_value = (CONST.G_F * theta * neutral_pion.decay_constant)**2 \ * sterile.mass**3 * (1 - (neutral_pion.mass / sterile.mass)**2)**2 \ / (16 * numpy.pi) / UNITS.MeV decay_rate = -(collision_integral * sterile.params.H \ * sterile.conformal_energy(sterile.grid.TEMPLATE) / sterile.conformal_mass \ / sterile._distribution) / UNITS.MeV ratio = decay_rate / theo_value assert any(numpy.abs(val) - 1 < 1e-2 for val in ratio), "Three-particle decay test failed"
def four_particle_decay_test(params): os.environ['SPLIT_COLLISION_INTEGRAL'] = '' photon = Particle(**SMP.photon) neutrino_e = Particle(**SMP.leptons.neutrino_e) sterile = Particle(**NuP.dirac_sterile_neutrino(mass=200 * UNITS.MeV)) theta = 1e-4 thetas = defaultdict(float, { 'electron': theta, }) interaction = NuI.sterile_leptons_interactions( thetas=thetas, sterile=sterile, neutrinos=[neutrino_e], leptons=[], kind = CollisionIntegralKind.F_f_vacuum_decay ) for inter in interaction: inter.integrals = [integral for integral in inter.integrals if sum(reactant.side for reactant in integral.reaction) in [2]] universe = Universe(params=params) universe.add_particles([photon, neutrino_e, sterile]) universe.interactions += interaction params.update(universe.total_energy_density(), universe.total_entropy()) universe.update_particles() universe.init_interactions() collision_integral = sterile.collision_integrals[0].integrate(sterile.grid.TEMPLATE) theo_value = (CONST.G_F * theta)**2 * sterile.mass**5 / (192 * numpy.pi**3) / UNITS.MeV decay_rate = -(collision_integral * sterile.params.H \ * sterile.conformal_energy(sterile.grid.TEMPLATE) / sterile.conformal_mass \ / sterile._distribution) / UNITS.MeV ratio = decay_rate / theo_value assert any(numpy.abs(val) - 1 < 1e-2 for val in ratio), "Four-particle decay test failed"
def three_particle_integral_light_test(params): """ If M_N < M_pi, there should be integrals for the reactions: N + anti-nu_e <--> pion nu_e + anti-N <--> pion pi^0 <--> anti-nu_e + N pi^0 <--> nu_e + anti-N """ photon = Particle(**SMP.photon) neutrino_e = Particle(**SMP.leptons.neutrino_e) sterile = Particle(**NuP.dirac_sterile_neutrino(mass=100 * UNITS.MeV)) neutral_pion = Particle(**SMP.hadrons.neutral_pion) theta = 1e-3 thetas = defaultdict(float, { 'electron': theta, }) interaction = NuI.sterile_hadrons_interactions( thetas=thetas, sterile=sterile, neutrinos=[neutrino_e], leptons=[], mesons=[neutral_pion] ) universe = Universe(params=params) universe.add_particles([photon, neutrino_e, sterile, neutral_pion]) universe.interactions += interaction assert len(universe.interactions) == 2 assert len(universe.interactions[0].integrals) == 2 assert len(universe.interactions[1].integrals) == 2 integral = universe.interactions[0].integrals[0] assert len(integral.Ms) == 1 assert isinstance(integral.Ms[0].K, (int, float))
def three_particle_integral_test(params): photon = Particle(**SMP.photon) neutrino_e = Particle(**SMP.leptons.neutrino_e) sterile = Particle(**NuP.dirac_sterile_neutrino(mass=200 * UNITS.MeV)) neutral_pion = Particle(**SMP.hadrons.neutral_pion) pion_interactions = NuI.sterile_pion_neutral(theta=1e-3, sterile=sterile, active=neutrino_e, pion=neutral_pion) universe = Universe(params=params, plotting=False) universe.add_particles([photon, neutrino_e, sterile, neutral_pion]) universe.interactions += pion_interactions params.update(universe.total_energy_density()) print universe.interactions assert len(universe.interactions) == 2 print universe.interactions[0].integrals print universe.interactions[1].integrals assert len(universe.interactions[0].integrals) == 2 assert len(universe.interactions[1].integrals) == 3 integral = universe.interactions[0].integrals[0] assert len(integral.Ms) == 1
charged_pion = Particle(**SMP.hadrons.charged_pion) sterile = Particle(**NuP.dirac_sterile_neutrino(mass)) grid = HeuristicGrid(mass, lifetime) sterile.decoupling_temperature = T_initial for neutrino in [neutrino_e, neutrino_mu, neutrino_tau]: neutrino.decoupling_temperature = 10 * UNITS.MeV neutrino.set_grid(grid) universe.add_particles([ photon, electron, muon, tau, neutrino_e, neutrino_mu, neutrino_tau, neutral_pion, charged_pion, sterile, ]) thetas = defaultdict(float, { 'electron': theta, }) universe.interactions += ( SMI.neutrino_interactions( leptons=[electron, muon], neutrinos=[neutrino_e, neutrino_mu, neutrino_tau]) + NuI.sterile_leptons_interactions(
T_final = 0.008 * UNITS.MeV Particles = [] photon = Particle(**SMP.photon) neutrino_e = Particle(**SMP.leptons.neutrino_e) neutrino_mu = Particle(**SMP.leptons.neutrino_mu) neutrino_tau = Particle(**SMP.leptons.neutrino_tau) electron = Particle(**SMP.leptons.electron) Particles += [ photon, neutrino_e, neutrino_mu, neutrino_tau, electron, ] universe = Universe(params=params, folder=folder) universe.add_particles(Particles) universe.init_kawano(electron=electron, neutrino=neutrino_e) universe.evolve(T_final) print (""" Cosmic photon background temperature is {:e} times bigger than cosmic neutrinos temperature. Relative error is {:e} % """.format(universe.params.aT / UNITS.MeV, (universe.params.aT / UNITS.MeV - 1.40102) / 1.40102 * 100))
from particles import Particle from evolution import Universe from library.SM import particles as SMP from common import Params, UNITS folder = os.path.join(os.path.split(__file__)[0], 'output') T_final = 100 * UNITS.keV params = Params(T=100 * UNITS.MeV, dy=0.05) universe = Universe(params=params, folder=folder) photon = Particle(**SMP.photon) electron = Particle(**SMP.leptons.electron) universe.add_particles([photon, electron]) universe.evolve(T_final) initial_aT = universe.data['aT'][0] print("a * T is not conserved: {}".format( any([initial_aT != value for value in universe.data['aT']]))) initial_a = universe.data['a'][int(len(universe.data) / 2)] initial_t = universe.data['t'][int(len(universe.data) / 2)] / UNITS.s last_a = universe.data['a'][-1] last_t = universe.data['t'][-1] / UNITS.s print("a scaling discrepancy is: {:.2f}%".format( 100 * (last_a / initial_a - numpy.sqrt(last_t / initial_t)) / numpy.sqrt(last_t / initial_t))) print("""
dy=0.025) photon = Particle(**SMP.photon) neutrino = Particle(**SMP.leptons.neutrino_e) neutrino_scattering = CrossGeneratingInteraction( particles=((neutrino, neutrino), (neutrino, neutrino)), antiparticles=((False, True), (False, True)), decoupling_temperature=0 * UNITS.MeV, Ms=(FourParticleM(K1=64 * CONST.G_F**2, order=(0, 1, 2, 3)),), integral_type=FourParticleIntegral ) universe = Universe(params=params) universe.PARALLELIZE = False universe.add_particles([photon, neutrino]) universe.interactions += [neutrino_scattering] import numpy addition = numpy.vectorize(lambda x: 0.1 * numpy.exp(-(x/UNITS.MeV-3)**2), otypes=[numpy.float_]) neutrino._distribution += addition(neutrino.grid.TEMPLATE) # def check(p=[]): # return neutrino_scattering.F_B(in_p=p[:2], out_p=p[2:]) * (1 - neutrino.distribution(p[0])) \ # - neutrino_scattering.F_A(in_p=p[:2], out_p=p[2:]) * neutrino.distribution(p[0]) # # print [neutrino.distribution(p) - neutrino._distribution_interpolation(p) # # for p in numpy.linspace(neutrino.grid.MIN_MOMENTUM, neutrino.grid.MAX_MOMENTUM,
from common import CONST, UNITS, Params params = Params(T=2 * UNITS.MeV, dy=0.025) photon = Particle(**SMP.photon) neutrino = Particle(**SMP.leptons.neutrino_e) neutrino_scattering = CrossGeneratingInteraction( particles=((neutrino, neutrino), (neutrino, neutrino)), antiparticles=((False, True), (False, True)), Ms=(FourParticleM(K1=64 * CONST.G_F**2, order=(0, 1, 2, 3)), ), integral_type=FourParticleIntegral) universe = Universe(params=params) universe.PARALLELIZE = False universe.add_particles([photon, neutrino]) universe.interactions += [neutrino_scattering] import numpy addition = numpy.vectorize(lambda x: 0.1 * numpy.exp(-(x / UNITS.MeV - 3)**2), otypes=[numpy.float_]) neutrino._distribution += addition(neutrino.grid.TEMPLATE) # def check(p=[]): # return neutrino_scattering.F_B(in_p=p[:2], out_p=p[2:]) * (1 - neutrino.distribution(p[0])) \ # - neutrino_scattering.F_A(in_p=p[:2], out_p=p[2:]) * neutrino.distribution(p[0]) # # print [neutrino.distribution(p) - neutrino._distribution_interpolation(p) # # for p in numpy.linspace(neutrino.grid.MIN_MOMENTUM, neutrino.grid.MAX_MOMENTUM, # # num=200, endpoint=True)]
sterile.decoupling_temperature = T_initial for neutrino in [neutrino_e]: #, neutrino_mu, neutrino_tau]: neutrino.decoupling_temperature = 1 * UNITS.MeV # neutrino.set_grid(grid) universe.add_particles([ photon, # electron, # muon, # tau, neutrino_e, # neutrino_mu, # neutrino_tau, neutral_pion, # charged_pion, # neutral_rho, # charged_rho, # eta, # eta_prime, # omega, # phi, sterile, ]) thetas = defaultdict(float, { 'electron': theta, })
photon = Particle(**SMP.photon) electron = Particle(**SMP.leptons.electron) # Set linearly spaced grid for neutrinos (such that 3, 5 and 7 MeV are in the grid) from common import LinearSpacedGrid linear_grid = LinearSpacedGrid(MOMENTUM_SAMPLES=51, MAX_MOMENTUM=50 * UNITS.MeV) neutrino_e = Particle(**SMP.leptons.neutrino_e, grid=linear_grid) neutrino_mu = Particle(**SMP.leptons.neutrino_mu, grid=linear_grid) neutrino_mu.dof = 4 neutrino_e.decoupling_temperature = 5. * UNITS.MeV neutrino_mu.decoupling_temperature = 5. * UNITS.MeV universe.add_particles([photon, electron, neutrino_e, neutrino_mu]) universe.interactions += (SMI.neutrino_interactions( leptons=[electron], neutrinos=[neutrino_e, neutrino_mu], )) universe.init_kawano(electron=electron, neutrino=neutrino_e) def step_monitor(universe): # explanation of what is inside the file + first row which is a grid on y if universe.step == 1: for particle in [neutrino_e, neutrino_mu]: with open( os.path.join(
electron = Particle(**SMP.leptons.electron) neutrino_e = Particle(**SMP.leptons.neutrino_e) neutral_pion = Particle(**SMP.hadrons.neutral_pion) sterile = Particle(**NuP.sterile_neutrino(300 * UNITS.MeV)) sterile.decoupling_temperature = T_initial universe.add_particles([ photon, electron, neutrino_e, neutral_pion, sterile, ]) thetas = defaultdict(float, { 'electron': 1e-3, }) universe.interactions += ( SMI.neutrino_interactions( leptons=[electron], neutrinos=[neutrino_e] ) +
down = Particle(**SMP.quarks.down) # charm = Particle(**SMP.quarks.charm) strange = Particle(**SMP.quarks.strange) # top = Particle(**SMP.quarks.top) # bottom = Particle(**SMP.quarks.bottom) sterile = Particle(**NuP.sterile_neutrino(300 * UNITS.MeV)) sterile.decoupling_temperature = T_initial universe.add_particles([ photon, electron, muon, tau, neutrino_e, neutrino_mu, neutrino_tau, up, down, strange, sterile, ]) thetas = defaultdict(float, { 'electron': 1e-4, }) universe.interactions += (NuI.sterile_leptons_interactions( thetas=thetas, sterile=sterile, neutrinos=[neutrino_e, neutrino_mu, neutrino_tau],
from particles import Particle from evolution import Universe from library.SM import particles as SMP from common import Params, UNITS T_final = 100 * UNITS.keV params = Params(T=100 * UNITS.MeV, dy=0.05) universe = Universe(params=params, folder="tests/photon_electron_universe") photon = Particle(**SMP.photon) electron = Particle(**SMP.leptons.electron) universe.add_particles([photon, electron]) universe.evolve(T_final) initial_aT = universe.data['aT'][0] print "a * T is not conserved: {}"\ .format(any([initial_aT != value for value in universe.data['aT']])) initial_a = universe.data['a'][len(universe.data['a'])/2] initial_t = universe.data['t'][len(universe.data['a'])/2] / UNITS.s last_a = universe.data['a'].iloc[-1] last_t = universe.data['t'].iloc[-1] / UNITS.s print """ a scaling discrepancy is: {:.2f}%"""\ .format(100 * (last_a / initial_a - numpy.sqrt(last_t / initial_t)) / numpy.sqrt(last_t / initial_t))
neutrino_e = Particle(**SMP.leptons.neutrino_e, grid=linear_grid) neutrino_mu = Particle(**SMP.leptons.neutrino_mu, grid=linear_grid) neutrino_tau = Particle(**SMP.leptons.neutrino_tau, grid=linear_grid) for neutrino in [neutrino_e, neutrino_mu, neutrino_tau]: neutrino.decoupling_temperature = 0 * UNITS.MeV sterile = Particle(**NuP.dirac_sterile_neutrino(mass), grid=linear_grid_s) sterile.decoupling_temperature = T_initial universe.add_particles([ photon, electron, neutrino_e, neutrino_mu, neutrino_tau, sterile, ]) thetas = defaultdict(float, { 'tau': theta, }) # kind = CollisionIntegralKind.{} # {} = # Full: I_coll = A + f_1 * B # F_1: I_coll = A # F_f: I_coll = f_1 * B
T_simple = 0.05 * UNITS.MeV T_final = 0.0008 * UNITS.MeV params = Params(T=T_kawano, dy=0.0125) universe = Universe(params=params, folder=folder) photon = Particle(**SMP.photon) electron = Particle(**SMP.leptons.electron) neutrino_e = Particle(**SMP.leptons.neutrino_e) neutrino_mu_tau = Particle(**SMP.leptons.neutrino_mu) neutrino_mu_tau.dof = 4 neutron = Particle(**SMP.hadrons.neutron) proton = Particle(**SMP.hadrons.proton) universe.add_particles( [photon, electron, neutrino_e, neutrino_mu_tau, neutron, proton]) # angles=(0.5905, 0.805404, 0.152346) universe.init_oscillations( SMP.leptons.oscillations_map(angles=(0.5905, 0.805404, 0)), (neutrino_e, neutrino_mu_tau)) universe.interactions += (SMI.neutrino_interactions( leptons=[electron], neutrinos=[neutrino_e, neutrino_mu_tau])) universe.init_kawano(electron=electron, neutrino=neutrino_e) universe.evolve(T_simple, export=False) universe.interactions = tuple() universe.evolve(T_final) """
import numpy from particles import Particle from evolution import Universe from library.SM import particles as SMP from common import Params, UNITS folder = os.path.join(os.path.split(__file__)[0], 'output') T_final = 100 * UNITS.keV params = Params(T=100 * UNITS.MeV, dy=0.05) universe = Universe(params=params, folder=folder) photon = Particle(**SMP.photon) universe.add_particles([photon]) universe.evolve(T_final) initial_aT = universe.data['aT'][0] print("a * T is conserved: {}".format(all([initial_aT == value for value in universe.data['aT']]))) initial_a = universe.data['a'][int(len(universe.data)/2)] initial_t = universe.data['t'][int(len(universe.data)/2)] / UNITS.s last_a = universe.data['a'][-1] last_t = universe.data['t'][-1] / UNITS.s print("a scaling discrepancy is: {:.2f}%" .format(100 * (last_a / initial_a / numpy.sqrt(last_t / initial_t) - 1)))
import os import numpy from particles import Particle from evolution import Universe from library.SM import particles as SMP from common import Params, UNITS folder = os.path.join(os.path.split(__file__)[0], 'output') T_final = 100 * UNITS.keV params = Params(T=100 * UNITS.MeV, dy=0.05) universe = Universe(params=params, folder=folder) photon = Particle(**SMP.photon) universe.add_particles([photon]) universe.evolve(T_final) initial_aT = universe.data['aT'][0] print("a * T is conserved: {}".format( all([initial_aT == value for value in universe.data['aT']]))) initial_a = universe.data['a'][int(len(universe.data) / 2)] initial_t = universe.data['t'][int(len(universe.data) / 2)] / UNITS.s last_a = universe.data['a'][-1] last_t = universe.data['t'][-1] / UNITS.s print("a scaling discrepancy is: {:.2f}%".format( 100 * (last_a / initial_a / numpy.sqrt(last_t / initial_t) - 1)))
neutrino_mu = Particle(**SMP.leptons.neutrino_mu) neutrino_tau = Particle(**SMP.leptons.neutrino_tau) sterile = Particle(**NuP.dirac_sterile_neutrino(mass)) from common import LogSpacedGrid linear_grid = LogSpacedGrid() sterile.decoupling_temperature = T_initial for neutrino in [neutrino_e, neutrino_mu, neutrino_tau]: neutrino.decoupling_temperature = 10 * UNITS.MeV universe.add_particles([ photon, electron, muon, neutrino_e, neutrino_mu, neutrino_tau, sterile, ]) thetas = defaultdict(float, { 'electron': theta, }) universe.interactions += ( SMI.neutrino_interactions( leptons=[electron], neutrinos=[neutrino_e, neutrino_mu, neutrino_tau]) + NuI.sterile_leptons_interactions( thetas=thetas, sterile=sterile,
universe = Universe(params=params, folder=folder) photon = Particle(**SMP.photon) electron = Particle(**SMP.leptons.electron) muon = Particle(**SMP.leptons.muon) tau = Particle(**SMP.leptons.tau) neutrino_e = Particle(**SMP.leptons.neutrino_e) neutrino_mu = Particle(**SMP.leptons.neutrino_mu) neutrino_tau = Particle(**SMP.leptons.neutrino_tau) universe.add_particles([ photon, electron, muon, tau, neutrino_e, neutrino_mu, neutrino_tau, ]) neutrinos = [neutrino_e, neutrino_mu, neutrino_tau] for neutrino in neutrinos: neutrino.decoupling_temperature = T_initial universe.interactions += \ SMI.neutrino_interactions(leptons=[electron, muon, tau], neutrinos=neutrinos) if universe.graphics: from plotting import EquilibriumRadiationParticleMonitor
universe = Universe(params=params, folder=folder) photon = Particle(**SMP.photon) electron = Particle(**SMP.leptons.electron) neutrino_e = Particle(**SMP.leptons.neutrino_e) neutrino_mu = Particle(**SMP.leptons.neutrino_mu) neutrino_mu.dof = 4 neutron = Particle(**SMP.hadrons.neutron) proton = Particle(**SMP.hadrons.proton) universe.add_particles([ photon, electron, neutrino_e, neutrino_mu, neutron, proton ]) universe.interactions += ( SMI.neutrino_interactions(leptons=[electron], neutrinos=[neutrino_e, neutrino_mu]) ) universe.init_kawano(electron=electron, neutrino=neutrino_e) if universe.graphics: universe.graphics.monitor([ (neutrino_e, RadiationParticleMonitor),
tau = Particle(**SMP.leptons.tau) Particles += [ photon, neutron, proton, neutrino_e, neutrino_mu, neutrino_tau, electron, muon, tau ] universe = Universe(params=params, folder=folder) universe.add_particles(Particles) universe.init_kawano(electron=electron, neutrino=neutrino_e) universe.step_monitor = step_monitor T_final = 3 * UNITS.MeV universe.evolve(T_final, export=False) T_final = 0.0008 * UNITS.MeV params.dy = 0.003125 universe.evolve(T_final) from tests.plots import cosmic_neutrino_temperature cosmic_neutrino_temperature(universe) print """ Cosmic photon background temperature is {:.3f} times bigger than cosmic neutrinos temperature. Relative error is {:.3f} %
sterile.decoupling_temperature = T_initial grid = HeuristicGrid(mass, lifetime) for neutrino in [neutrino_e, neutrino_mu, neutrino_tau]: neutrino.decoupling_temperature = 0 * UNITS.MeV neutrino.set_grid(grid) universe.add_particles([ photon, electron, muon, tau, neutrino_e, neutrino_mu, neutrino_tau, neutral_pion, charged_pion, sterile, ]) thetas = defaultdict(float, { 'electron': theta, }) universe.interactions += ( SMI.neutrino_interactions( leptons=[electron, muon],
strange = Particle(**SMP.quarks.strange) # top = Particle(**SMP.quarks.top) # bottom = Particle(**SMP.quarks.bottom) sterile = Particle(**NuP.sterile_neutrino(300 * UNITS.MeV)) sterile.decoupling_temperature = T_initial universe.add_particles([ photon, electron, muon, tau, neutrino_e, neutrino_mu, neutrino_tau, up, down, strange, sterile, ]) thetas = defaultdict(float, { 'electron': 1e-4, }) universe.interactions += ( NuI.sterile_leptons_interactions(