Files
beta_shape_pnpi/README.md
T
Evgeniy Unzhakov d8804421cc Update README.md
Remove notebooks/ dir description (it is no longer tracked)
2026-04-17 15:43:12 +03:00

289 lines
5.2 KiB
Markdown

# Beta Spectrum Calculation Toolkit
## Overview
This project provides a modular and extensible framework for calculating high-precision **beta decay energy spectra**. It is designed to model the spectral shape of a given nuclear transition by combining well-established physical corrections into a coherent and configurable pipeline.
The primary goal is to enable accurate numerical evaluation of the beta spectrum:
* from near-zero kinetic energies up to the endpoint
* with controlled inclusion of higher-order corrections
* using a clean, composable architecture
The framework focuses purely on **spectrum formation**, independent of any specific experimental or phenomenological application.
---
## Core Concept
The beta spectrum is constructed as a product of independent correction factors:
[
N(W) \propto p W (W_0 - W)^2 \times \prod_i C_i(W)
]
Each correction is implemented as a standalone component:
* phase space
* Coulomb interaction (Fermi function)
* finite nuclear size
* screening
* exchange
* radiative corrections
* recoil effects
This modular approach allows:
* easy validation of individual corrections
* selective enabling/disabling of physics effects
* flexible extension with new components
---
## Project Structure
```
beta_corr_pnpi/
├── beta_spectrum/
│ ├── base.py
│ ├── spectrum.py
│ ├── constants.py
│ ├── utils.py
│ │
│ ├── components/
│ │ ├── phase_space.py
│ │ ├── fermi.py
│ │ ├── finite_size.py
│ │ ├── screening.py
│ │ ├── exchange.py
│ │ ├── radiative.py
│ │ └── recoil.py
│ │
│ ├── data/
│ │ └── exchange_coeff.csv
│ │
│ └── __init__.py
│
├── tests/
│
├── pyproject.toml
├── README.md
```
---
## Architecture
### `SpectrumComponent` (base class)
Defined in `base.py`.
All physics corrections inherit from this class and implement:
```python
def __call__(self, W: np.ndarray) -> np.ndarray
```
This makes every component:
* stateless (or minimally stateful)
* vectorized
* composable
---
### `Spectrum`
Defined in `spectrum.py`.
Responsible for:
* combining all components
* evaluating the total spectrum
* managing energy grids
Typical usage pattern:
```python
spectrum = Spectrum(
components=[
PhaseSpace(W0),
FermiFunction(Z),
ScreeningCorrection(Z),
ExchangeCorrection(Z),
RadiativeCorrection(W0),
]
)
values = spectrum(W)
```
---
## Components
Each correction is implemented as an independent module under:
```
beta_spectrum/components/
```
---
### Phase Space (`phase_space.py`)
Implements:
[
p W (W_0 - W)^2
]
Provides the baseline spectral shape.
---
### Fermi Function (`fermi.py`)
Accounts for Coulomb interaction between the emitted electron and nucleus.
---
### Finite Size (`finite_size.py`)
Corrects for non-pointlike nuclear charge distribution.
---
### Screening (`screening.py`)
Includes atomic electron screening effects.
* modifies low-energy behavior
* becomes negligible at high energies
---
### Exchange (`exchange.py`)
Accounts for electron exchange with atomic orbitals.
* dominant at very low energies
* requires empirical coefficients (loaded from CSV)
---
### Radiative (`radiative.py`)
Implements outer radiative corrections:
* based on analytical expressions
* includes optional endpoint resummation
* handles logarithmic divergences near endpoint
---
### Recoil (`recoil.py`)
Includes nuclear recoil corrections.
---
## Data Files
### `exchange_coeff.csv`
Contains tabulated coefficients for exchange correction.
Loaded dynamically based on nuclear charge ( Z ).
---
## Design Principles
### 1. Modularity
Each physical effect is isolated in its own component.
---
### 2. Numerical Stability
Special care is taken near:
* ( W \to 1 ) (threshold)
* ( W \to W_0 ) (endpoint)
Typical strategies include:
* small epsilon regularization
* safe evaluation of logarithms and powers
* masking invalid regions
---
### 3. Vectorization
All components operate on NumPy arrays:
* no Python loops in hot paths
* efficient evaluation over dense grids
---
### 4. Extensibility
New corrections can be added by subclassing:
```python
class NewCorrection(SpectrumComponent):
def __call__(self, W):
return ...
```
---
## Typical Workflow
1. Define endpoint energy ( W_0 )
2. Construct energy grid
3. Initialize components
4. Combine into spectrum
5. Evaluate and plot
---
## Future Extensions
Planned improvements include:
* support for multiple decay branches
* nuclear shape factor implementations
* improved atomic corrections
* validation against reference spectra
* export utilities and CLI tools
---
## Notes
* Units are typically expressed in natural units ( m_e = 1 )
* Energies can be converted from MeV externally
* The framework assumes familiarity with beta decay theory
---
## License / Usage
(To be defined)
---
## Author Notes
This project is under active development and serves both as:
* a computational tool
* a structured reference for beta spectrum calculations
Updates may refine both physics implementations and code structure.