xue-525/reactor-neutrino-fitter: First public release

reactor-neutrino-fitter: Python IBD and oscillation fitting framework for reactor experiments

Software Reactor Oscillation parameters Curated

Reactor Neutrino Fitter

A Python-based analysis framework for reactor neutrino experiments, specifically designed for Inverse Beta Decay (IBD) cross-section calculations and neutrino oscillation parameter fitting.

Project Overview

This project provides tools for:

Computing IBD differential cross-section matrices

Calculating reactor neutrino expected spectra

Performing neutrino oscillation parameter fitting

Analyzing detector responses and energy reconstruction

Project Structure

reactor-neutrino-fitter/ ├── fitter/ │ ├── src/fitter/ │ │ ├── analysis/ # Analysis modules │ │ │ ├── fitter.py # Main fitting class │ │ │ └── IBDXsecVissani.py # IBD cross-section matrix generator │ │ ├── physics/ # Physics calculations │ │ │ ├── ibdxsecVissani.py # IBD cross-section physics │ │ │ └── surprobfitsys.py # Survival probability calculations │ │ ├── reactor/ # Reactor neutrino calculations │ │ │ └── reactorexpected.py # Expected spectrum calculator │ │ ├── config/ # Configuration files │ │ │ ├── GlobalConfig.py # Global configuration parameters │ │ │ └── ReactorConfig.py # Reactor-specific settings │ │ └── common/ # Common utilities │ │ ├── cachemonitor.py # Caching utilities │ │ ├── myinterpolator.py # Interpolation functions │ │ └── nonlinearityfit.py # Nonlinearity corrections │ ├── data/ # Data and output directory │ │ └── outputs/ # Generated cross-section matrices (large files, not in git) │ ├── lib/ # Library files (e.g., matplotlib styles) │ └── paper_figure.ipynb # Example analysis notebook └── README.md

Prerequisites

Python 3.x

PyTorch

NumPy

SciPy

Matplotlib

iminuit (for parameter fitting)

uproot (for ROOT file handling)

numba (for performance optimization)

tqdm (for progress bars)

Installation

Clone the repository:

git clone cd reactor-neutrino-fitter

Install required dependencies:

pip install torch numpy scipy matplotlib iminuit uproot numba tqdm

Usage

Step 1: Generate IBD Cross-Section Matrix

Important: Before running any analysis, you must first generate the IBD cross-section matrix. This file is too large (>200 MB) to be stored in GitHub, so it needs to be generated locally.

Generate the cross-section matrix by running:

python3 fitter/src/fitter/analysis/IBDXsec_Vissani.py

This script will:

Calculate the IBD differential cross-section matrix for neutrino energies from 1.8 to 13.0 MeV

Generate a matrix with configurable binning (default: 5600 bins, corresponding to ~0.002 MeV step size)

Save the output to fitter/data/outputs/IBDXsecmatrixenu5600_test.pt

Note: This computation can be memory-intensive and time-consuming. The default configuration with 5600 bins produces a ~240 MB output file.

You can modify the binning configuration in the script by changing the bin_list parameter at the bottom of the file.

Step 2: Configure Analysis Parameters

Edit fitter/src/fitter/config/GlobalConfig.py to configure:

Data file paths

Energy binning parameters

Detector parameters

Oscillation parameters

Systematic uncertainties

Key parameters:

data_path: Path to the generated IBD cross-section matrix

file_path: Path to input ROOT data files

nEnu_bins: Number of neutrino energy bins (default: 5600)

nEdep_bins: Number of deposited energy bins (default: 5600)

Step 3: Run Analysis

Example 1: Calculate Expected Spectrum

from fitter.src.fitter.reactor.reactor_expected import ReactorExpected import matplotlib.pyplot as plt

Initialize reactor expected spectrum calculator

reactor = ReactorExpected( nEnubins=5600, # Neutrino energy bins (step ~0.002 MeV) nEdepbins=5600, # Deposited energy bins (step ~0.002 MeV) nEdbins=560, # Detector response bins nEpbins=560, # Reconstructed energy bins )

Get reconstructed energy spectrum

Epspectrum = reactor.getEp_spectrum()

Plot results

import matplotlib.pyplot as plt plt.plot(reactor.Ep, Ep_spectrum) plt.xlabel("Energy (MeV)") plt.ylabel("Counts (/ 20keV / year)") plt.title("Reconstructed Energy Spectrum") plt.show()

Example 2: Perform Parameter Fitting

from iminuit import Minuit from fitter.src.fitter.analysis.fitter import Fitter from fitter.src.fitter.config import GlobalConfig as gcfg

Initialize fitter

fitter = Fitter(year=1, MO="NO")

Generate or load observed spectrum

fitter.getobsspectrum(gseed=1) # gseed=0 for Asimov, >0 for toy data

Set up Minuit for minimization

m = Minuit(fitter.chi2, fitter.NOparamsNO, name=fitter.names) m.tol = 0.01

Perform fit

results = m.migrad() print(results)

Key Components

IBDXsec_Vissani.py

Generates the IBD differential cross-section matrix. This is a computationally intensive step that must be run before any analysis. The output matrix maps neutrino energy to deposited energy probabilities.

ReactorExpected

Calculates the expected reactor neutrino spectrum, including:

Neutrino energy spectrum from reactors

IBD interaction rates

Detector response and energy reconstruction

Background contributions

Fitter

Main analysis class for parameter fitting:

Chi-squared calculation with systematic uncertainties

Support for neutrino oscillation parameters (θ₁₂, θ₁₃, Δm²₂₁, Δm²₃₁)

Reactor and detector systematic uncertainties

Background rate and shape uncertainties

Configuration

Key configuration files:

GlobalConfig.py: Global analysis parameters, systematic uncertainties, test statistics

ReactorConfig.py: Reactor-specific parameters (power, distance, etc.)

Output Files

Generated files are stored in fitter/data/outputs/:

IBD cross-section matrices (.pt format, PyTorch tensors)

These files are excluded from git due to their large size (>100 MB)

Notes

The default energy binning (5600 bins) provides ~0.002 MeV resolution

Memory requirements depend on the number of bins used

The framework supports both Normal Ordering (NO) and Inverted Ordering (IO)

Systematic uncertainties include reactor correlations, detector effects, and background modeling

Get it

LocationRoleHostFormatsSize
https://doi.org/10.5281/zenodo.17810974 primaryZenodo

Metadata

Creators薛景秦
PublisherZenodo
Versionv1.0.0
Published2025-12-04
LicenceCC-BY-4.0 · terms
AccessOpen
PurposeFitting / inference framework
Developmentunknown

Know of another paper or code that uses this, or an input it depends on? Tell us.

Curation

StatusCurated (candidate: harvested, not reviewed · curated: reviewed metadata · verified: resource downloaded and checked against its paper)
Added2026-10-23
Curator notes
• metadata harvested from the repository; tags and summary assigned by the curator from title and abstract

Edit this record · Report a problem · JSON