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"
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( thetas=thetas, sterile=sterile, neutrinos=[neutrino_e, neutrino_mu, neutrino_tau], leptons=[electron, muon, tau] ) ) if sterile.mass > neutral_pion.mass: universe.interactions += ( NuI.sterile_hadrons_interactions( thetas=thetas, sterile=sterile, neutrinos=[neutrino_e, neutrino_mu, neutrino_tau], leptons=[electron, muon, tau], hadrons=[neutral_pion, charged_pion] ) ) universe.init_kawano(electron=electron, neutrino=neutrino_e)
sterile, ]) thetas = defaultdict(float, { 'electron': 1e-3, }) universe.interactions += ( SMI.neutrino_interactions( leptons=[electron], neutrinos=[neutrino_e] ) + NuI.sterile_leptons_interactions( thetas=thetas, sterile=sterile, neutrinos=[neutrino_e], leptons=[electron] ) + NuI.sterile_hadrons_interactions( thetas=thetas, sterile=sterile, neutrinos=[neutrino_e], leptons=[electron], hadrons=[neutral_pion] ) ) universe.evolve(T_final) """ ## Plots for comparison with articles """
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, neutrinos=[neutrino_e, neutrino_mu, neutrino_tau], leptons=[electron, muon])) universe.init_kawano(electron=electron, neutrino=neutrino_e) universe.init_oscillations(SMP.leptons.oscillations_map(), (neutrino_e, neutrino_mu, neutrino_tau)) 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, neutrino_tau, sterile]: with open( op.join( folder,
}) # kind = CollisionIntegralKind.{} # {} = # Full: I_coll = A + f_1 * B # F_1: I_coll = A # F_f: I_coll = f_1 * B # Full_vacuum_decay: I_coll = I_coll = A_vacuum_decay + f_1 * B_vacuum_decay # F_1_vacuum_decay: I_coll = A_vacuum_decay # F_f_vacuum_decay: I_coll = f_1 * B_vacuum_decay kind = CollisionIntegralKind.F_f_vacuum_decay interaction = NuI.sterile_leptons_interactions( thetas=thetas, sterile=sterile, neutrinos=[neutrino_e, neutrino_mu, neutrino_tau], # leptons=[] leptons=[electron], kind=kind ) def reaction_type(reaction): return sum(reactant.side for reactant in reaction) #interaction.integrals = [integral for integral in interaction.integrals if reaction_type(integral.reaction) == 2] for inter in interaction: inter.integrals = [integral for integral in inter.integrals if reaction_type(integral.reaction) == 2] universe.interactions += (interaction)
tau, neutrino_e, neutrino_mu, neutrino_tau, neutral_pion, charged_pion, sterile, ]) thetas = defaultdict(float, { 'electron': 1e-2, }) universe.interactions += (NuI.sterile_leptons_interactions( thetas=thetas, sterile=sterile, neutrinos=[neutrino_e, neutrino_mu, neutrino_tau], leptons=[electron, muon, tau]) + NuI.sterile_hadrons_interactions( thetas=thetas, sterile=sterile, neutrinos=[neutrino_e, neutrino_mu, neutrino_tau], leptons=[electron, muon, tau], hadrons=[neutral_pion, charged_pion])) universe.evolve(T_final) """ ## Plots for comparison with articles """ """ ### JCAP10(2012)014, Figure 9 <img src="figure_9.svg" width=100% /> """ """ ### JCAP10(2012)014, Figure 10
}) # kind = CollisionIntegralKind.{} # {} = # Full: I_coll = A + f_1 * B # F_1: I_coll = A # F_f: I_coll = f_1 * B # Full_vacuum_decay: I_coll = I_coll = A_vacuum_decay + f_1 * B_vacuum_decay # F_1_vacuum_decay: I_coll = A_vacuum_decay # F_f_vacuum_decay: I_coll = f_1 * B_vacuum_decay kind = CollisionIntegralKind.F_f_vacuum_decay interaction = NuI.sterile_leptons_interactions( thetas=thetas, sterile=sterile, neutrinos=[neutrino_e, neutrino_mu, neutrino_tau], # leptons=[] leptons=[electron], kind=kind) def reaction_type(reaction): return sum(reactant.side for reactant in reaction) #interaction.integrals = [integral for integral in interaction.integrals if reaction_type(integral.reaction) == 2] for inter in interaction: inter.integrals = [ integral for integral in inter.integrals if reaction_type(integral.reaction) == 2
neutral_pion, neutrino_e, neutrino_mu, neutrino_tau, sterile, ]) thetas = defaultdict(float, {'electron': theta}) interactions_SM = SMI.neutrino_interactions( neutrinos=[neutrino_e, neutrino_mu, neutrino_tau], leptons=[electron]) ## N --> mu + e + nu_mu and mu --> e + nu_mu + nu_e interactions_primary_Ff = NuI.sterile_leptons_interactions( thetas=thetas, sterile=sterile, neutrinos=[neutrino_e, neutrino_mu, neutrino_tau], leptons=[electron, muon], kind=CollisionIntegralKind.F_f_vacuum_decay) interactions_primary_F1 = NuI.sterile_leptons_interactions( thetas=thetas, sterile=sterile, neutrinos=[neutrino_e, neutrino_mu, neutrino_tau], leptons=[electron, muon], kind=CollisionIntegralKind.F_1_vacuum_decay) interactions_secondary_Ff = NuI.interactions_decay_products( interactions_primary=[interactions_primary_Ff], interactions_SM=interactions_SM, neutrinos=[neutrino_e, neutrino_mu, neutrino_tau], leptons=[electron, muon],