Simple Flavor Mixing (Obsolete)

Illustrate very basic neutrino flavor mixing in supernova neutrinos using the SimpleMixing class in ASTERIA.

[1]:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

import astropy.units as u

from asteria import config, source
from asteria.neutrino import Flavor
from asteria.oscillation import SimpleMixing

mpl.rc('font', size=16)

Load CCSN Neutrino Model

Load a neutrino luminosity model (see YAML documentation).

[2]:
conf = config.load_config('../../data/config/test.yaml')
ccsn = source.initialize(conf)

Basic Mixing

Set up the mixing class, which only depends on \(\theta_{12}\).

See nu-fit.org for current values of the PMNS mixing angles.

[3]:
# Use theta_12 in degrees.
# To do: explicitly use astropy units for input.
mix = SimpleMixing(33.8)

Mix the Flavors

Apply the mixing and plot the resulting flux curves for the unmixed case and assuming the normal and inverted neutrino mass hierarchies.

[4]:
fig, axes = plt.subplots(1, 3, figsize=(13,3.5), sharex=True, sharey=True)

ax1, ax2, ax3 = axes
t = np.linspace(-0.1, 1, 201) * u.s

# UNMIXED
for ls, flavor in zip(["-", "--", "-.", ":"], Flavor):
    flux = ccsn.get_flux(t, flavor)

    ax1.plot(t, flux, ls, lw=2, label=flavor.to_tex(), alpha=0.7)
    ax1.set_title("Unmixed")
# plt.yscale('log')
# plt.ylim(3e51, 5e53)
ax1.set(xlabel='time - $t_{bounce}$ [s]',
        ylabel='flux')
ax1.legend()

# NORMAL MIXING
nu_list1 = []
i = 0
for flavor in Flavor:
    flux = ccsn.get_flux(t, flavor)
    nu_list1.append(flux)

nu_new1 = mix.normal_mixing(nu_list1)

for ls, i, flavor in zip(["-", "--", "-.", ":"], range(len(nu_new1)), Flavor):
    new_flux1 = nu_new1[i]
    ax2.plot(t, new_flux1, ls, lw=2, alpha=0.7, label=flavor.to_tex())
    ax2.set_title(label="Normal Mixing")

ax2.set(xlabel='time - $t_{bounce}$ [s]',
        ylabel='flux')

ax2.legend()

# INVERTED MIXING
nu_list2 = []
i = 0
for flavor in Flavor:
    flux = ccsn.get_flux(t, flavor)
    nu_list2.append(flux)

nu_new2 = mix.inverted_mixing(nu_list1)

for ls, i, flavor in zip(["-", "--", "-.", ":"], range(len(nu_new2)), Flavor):
    new_flux2 = nu_new2[i]
    ax3.plot(t, new_flux2, ls, lw=2, alpha=0.7, label=flavor.to_tex())
    ax3.set_title(label="Inverted Mixing")

ax3.set(xlabel='time - $t_{bounce}$ [s]',
        ylabel='flux')
ax3.legend()


fig.tight_layout();
../_images/nb_simplemixing_class_7_0.png
[ ]: