Separate monolithic beta_spectrum package into:
beta_spectrum — pure theory (components, spectrum, CLI, visualize)
exp_data — experimental data handling (spectrum, calibration,
fitters, corrections)
fitter — analysis framework (model, fit_engine, extractor,
result)
beta_spectrum.visualize — plotting (BetaSpectrumAnalyzer)
Phase 1 — exp_data module:
ExpSpectrum dataclass with metadata, normalization, serialization
EnergyCalibrator (linear/quadratic calibration)
GaussianFitter + PeakFitter for calibration sources
DeadTimeCorrection, PileUpCorrection, BackgroundSubtractor
43 new tests, ruff + mypy clean
Phase 2 — fitter module:
SpectrumModel wraps BetaSpectrum + DetectorResponse with convolution
SpectrumFitter with χ² minimization, covariance, profile likelihood,
confidence intervals, robust loss functions
CWExtractor + GVAExtractor for C(W) and g_V/g_A extraction
AnalysisResult + FitSummary for physics-specific results
CurveFitter general-purpose callable model fitter
34 new tests, ruff + mypy clean
Phase 3 — clean up beta_spectrum:
Remove cw_extractor.py and fitter.py (moved to fitter/)
Clean __init__.py to export only theory classes
Add backward-compat methods to CWExtractor
Fix BetaSpectrumAnalyzer._get_branch_spectrum returning BetaSpectrum
objects instead of numpy arrays (plot fix)
Phase 4 — package structure:
Auto-discovered by setuptools (4 packages)
All imports updated across 26 source files
Black formatting applied
322 tests pass (262 original + 60 new)
ruff + mypy clean on all source files
Bug fixes:
- Fix multi-branch spectrum plotting: universal component keys
(Fermi, Screening, etc.) don't have per-branch prefix; fixed
fallback lookup.
- Fix negative phase space beyond endpoint: BetaSpectrum returns
negative values for W > W0; clamp branch spectra to zero.
39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
"""
|
|
Fitter module — main analysis framework for beta spectrometry.
|
|
|
|
Provides the analysis workhorse: theoretical model + detector convolution,
|
|
multi-parameter fitting, and physics parameter extraction (C(W), g_V, g_A).
|
|
|
|
Usage:
|
|
from fitter import SpectrumModel, SpectrumFitter, AnalysisResult
|
|
|
|
# Build theoretical model with detector response
|
|
model = SpectrumModel(spectrum, detector_response, channel_energies)
|
|
|
|
# Fit model to experimental data
|
|
fitter = SpectrumFitter(model, exp_spectrum)
|
|
result = fitter.fit(
|
|
x0=[endpoint_keV, normalization, background],
|
|
bounds=[(...), (...), (...)],
|
|
)
|
|
|
|
# Extract physics parameters
|
|
print(result.summary())
|
|
"""
|
|
|
|
from .model import SpectrumModel
|
|
from .fit_engine import SpectrumFitter, CurveFitter, FitConfig
|
|
from .result import AnalysisResult, FitSummary
|
|
from .extractor import CWExtractor, GVAExtractor
|
|
|
|
__all__ = [
|
|
"SpectrumModel",
|
|
"SpectrumFitter",
|
|
"CurveFitter",
|
|
"FitConfig",
|
|
"AnalysisResult",
|
|
"FitSummary",
|
|
"CWExtractor",
|
|
"GVAExtractor",
|
|
]
|