Kinematics for nuclear reactions
Project description
reaction-kinematics
This is a Python library for calculating relativistic two-body nuclear reaction kinematics.
This package is designed for students and researchers working in nuclear and particle physics who need fast, reliable kinematic calculations for reactions of the form:
projectile + target → ejectile + recoil
Features
This code can do:
- Relativistic two-body kinematics
- Automatic unit handling
- Center-of-mass and lab-frame quantities
- Energy, angle, momentum, and velocity calculations
- Support for multi-valued kinematic solutions
- Simple plotting and data export
Installation
pip install -reaction-kinematics
Basic Usage
The main interface is the TwoBody class.
from reaction_kinematics.reaction_kinematics import TwoBody
Create a reaction by specifying the particle masses and projectile kinetic energy.
Units
- Masses are internally stored in MeV/c²
- Energies are in MeV by default
- Velocities are given as fractions of c
- Angles are in radians
You may specify alternative units using EnergyUnit and MassInput.
Example: Proton + Tritium Reaction
rxn = TwoBody("p", "3H", "n", "3He", 1.2)
This represents:
p + 3H → n + 3He
with a projectile energy of 1.2 MeV.
Computing Kinematic Arrays
To generate arrays of kinematic quantities over all center-of-mass angles, use compute_arrays().
data = rxn.compute_arrays()
This will return a dictionary containing the following:
coscm: cos(θ_CM)theta_cm: CM angle (rad)theta3: Ejectile lab angle (rad)theta4: Recoil lab angle (rad)e3: Ejectile energy (MeV)e4: Recoil energy (MeV)v3: Ejectile velocity (c)v4: Recoil velocity (c)
Example
theta4 = data["theta4"]
e3 = data["e3"]
Accessing Individual Values
To evaluate kinematic quantities at a specific value, use at_value().
This method automatically handles multi-valued solutions and always returns lists.
Syntax
rxn.at_value(x_name, x_value, y_names=None)
Parameters:
x_name: Independent variable (e.g."theta4","theta_cm","coscm")x_value: Value at which to evaluatey_names: Dependent variables (string or list)
Example: Single Quantity
import math
angle = 10 * math.pi / 180
vals = rxn.at_value("theta4", angle, y_names="e3")
print(vals)
Output:
{'e3': [0.3447, 0.0364]}
Multiple values indicate multiple physical solutions.
Example: Multiple Quantities
vals = rxn.at_value(
"theta4",
angle,
y_names=["e3", "v3", "p3"]
)
print(vals)
Example output:
{
'e3': [0.3447, 0.0364],
'v3': [0.025, 0.009],
'p3': [23.7, 8.2]
}
Example: Full State at a Given CM Angle
If y_names is omitted, all quantities are returned.
vals = rxn.at_value("theta_cm", 0.8)
print(vals)
Example output:
{
'coscm': [...],
'theta3': [...],
'theta4': [...],
'e3': [...],
'e4': [...],
'v3': [...],
'v4': [...],
'p3': [...],
'p4': [...]
}
Convert to NumPy Arrays
import numpy as np
data = rxn.compute_arrays()
theta4 = np.array(data["theta4"])
e3 = np.array(data["e3"])
Using Explicit Mass Values
rxn = TwoBody(
938.272,
11177.928,
938.272,
11177.928,
5.0,
mass_unit="MeV"
)
Plotting Example
You can use matplotlib to visualize kinematic relationships.
Example: Ejectile Energy vs Recoil Angle
import matplotlib.pyplot as plt
data = rxn.compute_arrays()
plt.plot(data["theta4"], data["e3"])
plt.xlabel("Recoil Angle θ₄ (rad)")
plt.ylabel("Ejectile Energy E₃ (MeV)")
plt.title("E₃ vs θ₄")
plt.grid(True)
plt.show()
Numerical Notes
- Some kinematic variables are multi-valued.
- Near kinematic extrema, solution branches may merge numerically.
- The library automatically removes duplicate solutions within tolerance of 1e**-6.
License
GPL-2.0 license
Contact
For questions, issues, or contributions, please open an issue on GitHub.
Project Docs
For how to install uv and Python, see installation.md.
For development workflows, see development.md.
For instructions on publishing to PyPI, see publishing.md.
This project was built from simple-modern-uv.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file reaction_kinematics-0.1.3.tar.gz.
File metadata
- Download URL: reaction_kinematics-0.1.3.tar.gz
- Upload date:
- Size: 58.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
321731aa2cb7682e2f0eea74d4a52fa99ec6442c4afa704848ff06c484dffb0b
|
|
| MD5 |
94b71eef51b20e795c55e2faab572dc2
|
|
| BLAKE2b-256 |
e88c7c91847f162f96259c245c006d11a3f6a89dea8975cd2e6e1601b063ffbb
|
File details
Details for the file reaction_kinematics-0.1.3-py3-none-any.whl.
File metadata
- Download URL: reaction_kinematics-0.1.3-py3-none-any.whl
- Upload date:
- Size: 45.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a61420b08d570dcaa5cd15999178853a41179aebbdf4cfb23c4921add16f2e0
|
|
| MD5 |
97e3cb6191415b166b2468766235a8c2
|
|
| BLAKE2b-256 |
5a8fbc9c4abc7ce239f42def12766453ebc1e283877ccf95ea925808591a059f
|