Initial README
To be edited
This commit is contained in:
@@ -0,0 +1,304 @@
|
|||||||
|
# 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 ).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notebooks
|
||||||
|
|
||||||
|
Located in:
|
||||||
|
|
||||||
|
```
|
||||||
|
notebooks/
|
||||||
|
```
|
||||||
|
|
||||||
|
Used for:
|
||||||
|
|
||||||
|
* testing corrections individually
|
||||||
|
* plotting spectra
|
||||||
|
* debugging numerical behavior
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 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.
|
||||||
|
|||||||
Reference in New Issue
Block a user