Open-source tools I write and maintain, for neutrino physics and for the statistics that goes with it.

Oroscope searches a digital elevation model for ground where an air-shower array could stand. Instead of scoring a shortlist of candidate sites, it asks one question at every pixel — from this patch of ground, is there a target surface at the right range, in the right direction, with the right matter behind it? — walking outward along a fan of bearings to find where each ray first meets terrain. Experiments differ in their numbers rather than their structure, so GRAND and TAMBO are configuration files rather than code paths. Capacity is counted by packing a detector lattice, not by dividing area by spacing squared, and every run says in plain language which stage bound it. Numba-parallel kernels, GeoTIFF, KML and JSON out, GPLv3.
Install with: pip install oroscope
Documentation: https://mbustama.github.io/oroscope/
Source code: https://github.com/mbustama/oroscope
PyPI: https://pypi.org/project/oroscope/

Magνs (pronounced “Magnus”) computes neutrino oscillation probabilities between an arbitrary number of flavors, for any Hamiltonian, time-dependent or not. Instead of integrating the Schrödinger equation step by step, it propagates the evolution operator with the Magnus expansion, exponentiating truncated time-ordered integrals of the Hamiltonian over a chain of position slabs. Every truncation stays in the Lie algebra, so the evolution operator is unitary by construction and probabilities sum to one at machine precision. Vacuum, matter, the Earth, the Sun, NSI and Lorentz-invariance violation, or a density profile of your own.
Install with: pip install magnuspy
Documentation: https://mbustama.github.io/Magnus/
Source code: https://github.com/mbustama/Magnus
PyPI: https://pypi.org/project/magnuspy/

NuOscProbExact computes neutrino oscillation probabilities exactly, for any Hermitian two-, three- or four-flavor Hamiltonian. Instead of diagonalising numerically or integrating the Schrödinger equation, it expands the Hamiltonian and the evolution operator in SU(2), SU(3) or SU(4) and exponentiates them analytically, giving a closed form with no approximation beyond round-off. Matter, non-standard interactions, Lorentz-invariance violation and sterile states are all just different matrices handed to the same routine, and propagation through the Earth uses PREM. Pure Python, numpy the only dependency, MIT licence.
Install with: pip install nuoscprobexact
Documentation: mbustama.github.io/NuOscProbExact/
Source code: github.com/mbustama/NuOscProbExact
PyPI: pypi.org/project/nuoscprobexact/

PyFC builds Feldman–Cousins confidence intervals with exact coverage, supporting binned and unbinned likelihoods natively in the same framework. You bring the physics — parameters, data, a scan grid — and it handles the statistics: the Monte Carlo pseudo-experiments that calibrate the profile-likelihood-ratio distribution empirically rather than assuming Wilks’ theorem, and the resulting intervals and contours in one dimension or several. Toy generation runs in parallel and checkpoints, so a job killed by a cluster walltime picks up where it stopped. No ROOT dependency, plain NumPy and SciPy, GPLv3.
Install with: pip install PyFeldmanCousins
Documentation: mbustama.github.io/FeldmanCousins/
Source code: github.com/mbustama/FeldmanCousins