J. N. Bahcall, P. I. Krastev · Phys. Rev. C 56, 2839 (1997)

Does the Sun appear brighter at night in neutrinos?

Model inputs Super-Kamiokande SNO Borexino 1997 solar zenith-angle exposure Reproduced

The yearly distribution of the solar zenith angle at a detector, weighted with the Earth–Sun distance (the "zenith-angle exposure function"), which Newtrinos uses for day/night averaging and Earth regeneration of solar neutrinos (solar_flux.nadir_exposure). Compared with Bahcall's tabulation (0.5° bins) for Kamioka (36.4° N), Sudbury (46.3° N) and Gran Sasso (42.4° N), the no-oscillation panels of Figs. 5 and 6: the largest bin-wise difference is 5×10⁻⁵ (0.7 % of the peak bin), the night fraction and the fraction of time behind the Earth's core agree to 10⁻⁴.

Figures

Exposure functions at Kamioka (Super-Kamiokande) and Sudbury (SNO) · Fig. 5 (left)

Paper · Fig. 5 (left)
Original: Exposure functions at Kamioka (Super-Kamiokande) and Sudbury (SNO)

Original figure: J. N. Bahcall, P. I. Krastev, Phys. Rev. C 56, 2839 (1997), Fig. 5 (left), doi:10.1103/PhysRevC.56.2839. Not our work; shown for comparison, all rights with the authors and publisher.

Newtrinos.jl
Reproduction: Exposure functions at Kamioka (Super-Kamiokande) and Sudbury (SNO)

Exposure function at Gran Sasso · Fig. 6 (upper left)

Paper · Fig. 6 (upper left)
Original: Exposure function at Gran Sasso

Original figure: J. N. Bahcall, P. I. Krastev, Phys. Rev. C 56, 2839 (1997), Fig. 6 (upper left), doi:10.1103/PhysRevC.56.2839. Not our work; shown for comparison, all rights with the authors and publisher.

Newtrinos.jl
Reproduction: Exposure function at Gran Sasso

Known limitations

Reproduce

  1. git clone https://github.com/Newtrinos-org/Newtrinos.jl.git && cd Newtrinos.jl && git checkout c6612c255a
  2. Download reproduce.jl and the data/ folder of this entry into an empty directory.
  3. julia -t 8 --project=/path/to/Newtrinos.jl reproduce.jl
# Verification of the Newtrinos.jl solar zenith-angle exposure (`solar_flux.nadir_exposure`) against the exposure
# functions of Bahcall & Krastev, Phys. Rev. C 56, 2839 (1997), Figs. 5 and 6, tabulated by Bahcall in
# data/exposurefunctions (fraction of the year in 0.5° bins of the solar zenith angle, weighted with 1/d²).
# Run from this directory with the Newtrinos.jl environment at the pinned commit:
#   julia --project=<path to Newtrinos.jl> reproduce.jl
using Newtrinos, CairoMakie, CSV, DataFrames, DelimitedFiles, Printf

cd(@__DIR__); mkpath("ours"); mkpath("results")
tab = readdlm("data/exposurefunctions", skipstart = 3)
α = tab[:, 1]                                   # bin centres [deg]
edges = cosd.(reverse(0:0.5:180))               # cos(zenith) bin edges, ascending
sites = (("Kamioka (Super-Kamiokande)", 36.4), ("Sudbury (SNO)", 46.3), ("Gran Sasso", 42.4))
df = DataFrame(zenith_deg = α)
for (k, (name, lat)) in enumerate(sites)
    ours = reverse(Newtrinos.solar_flux.nadir_exposure(lat; cz_edges = edges, n_days = 2000, n_hours = 2880).w)
    ref = tab[:, k + 1] ./ sum(tab[:, k + 1])
    col = split(name)[1]
    df[!, "$(col)_newtrinos"] = ours; df[!, "$(col)_bahcall"] = ref
    @printf("%-28s max |Δ| = %.1e (peak bin %.1e); night fraction %.4f vs %.4f; behind the core (α > 146.8°) %.5f vs %.5f\n",
            name, maximum(abs.(ours .- ref)), maximum(ref), sum(ours[α .> 90]), sum(ref[α .> 90]),
            sum(ours[α .> 146.8]), sum(ref[α .> 146.8]))
end
CSV.write("results/exposure_functions.csv", df)

# f(α) per degree, as plotted in the paper; residuals below
function panel!(fig, j, name)
    col = split(name)[1]
    ax = Axis(fig[1, j], ylabel = "f(α) (deg⁻¹)", title = name, titlesize = 13)
    lines!(ax, α, 2 .* df[!, "$(col)_bahcall"], color = :black, linewidth = 3, label = "Bahcall & Krastev")
    lines!(ax, α, 2 .* df[!, "$(col)_newtrinos"], color = :orange, linewidth = 1.5, linestyle = :dash, label = "Newtrinos")
    xlims!(ax, 0, 180); ylims!(ax, 0, 0.02); hidexdecorations!(ax, grid = false)
    axislegend(ax, position = :cb, labelsize = 10)
    axr = Axis(fig[2, j], xlabel = "α (deg)", ylabel = "Δf (deg⁻¹)")
    lines!(axr, α, 2 .* (df[!, "$(col)_newtrinos"] .- df[!, "$(col)_bahcall"]), color = :orange)
    xlims!(axr, 0, 180); ylims!(axr, -5e-4, 5e-4)
end
fig = Figure(size = (900, 560))
panel!(fig, 1, sites[1][1]); panel!(fig, 2, sites[2][1])
rowsize!(fig.layout, 2, Relative(0.25))
save("ours/fig5_exposure_sk_sno.png", fig)
fig = Figure(size = (480, 560))
panel!(fig, 1, sites[3][1])
rowsize!(fig.layout, 2, Relative(0.25))
save("ours/fig6_exposure_gran_sasso.png", fig)

Provenance

Newtrinos.jl commitc6612c255a (solar_flux)
Run date2026-10-21T16:40:53Z
Wall time0.9 min (128 threads)
Julia1.12.5
MachineAMD EPYC 7702P 64-Core Processor, 128 hardware threads, Linux
Environmentnewtrinos_Manifest.toml · run.toml

Downloads

CSV files hold one row per scan point: the scanned and profiled parameters (sin2_theta23, dm2_32 in eV², dcp in rad, nuisance parameters), dchi2 = −2Δ log L and the log-likelihood. JLD2 files contain the full NewtrinosResult objects.

FileSizeSHA-256
ours/fig5_exposure_sk_sno.png208.8 kB48a0bd5c8786…
ours/fig6_exposure_gran_sasso.png106.1 kB4145e055d504…
results/exposure_functions.csv40.2 kB54a5950431a6…