epyr.physics

EPR Physics Module

Physical constants and unit conversion utilities for EPR/NMR spectroscopy. All values from 2022 CODATA recommendations with proper units and uncertainties.

epyr.physics.gfree(return_uncertainty=False)[source]

Free electron g-factor (dimensionless).

Parameters:

return_uncertaintybool

If True, return (value, standard_uncertainty)

Returns:

float or tuple

Free electron g-factor (dimensionless)

References:

2022 CODATA recommended values

Parameters:

return_uncertainty (bool)

Return type:

float | Tuple[float, float]

epyr.physics.bmagn(return_uncertainty=False)[source]

Bohr magneton in SI units (J T⁻¹).

Parameters:

return_uncertaintybool

If True, return (value, standard_uncertainty)

Returns:

float or tuple

Bohr magneton in J T⁻¹

References:

2022 CODATA recommended values

Parameters:

return_uncertainty (bool)

Return type:

float | Tuple[float, float]

epyr.physics.planck()[source]

Planck constant in SI units (J⋅s = J⋅Hz⁻¹).

Returns:

float

Planck constant in J⋅s

References:

2019 SI redefinition, exact value

Return type:

float

epyr.physics.hbar()[source]

Reduced Planck constant ℏ = h/(2π) in SI units (J⋅s).

Returns:

float

Reduced Planck constant in J⋅s

Return type:

float

epyr.physics.clight()[source]

Speed of light in vacuum in SI units (m⋅s⁻¹).

Returns:

float

Speed of light in m⋅s⁻¹

References:

1983 SI redefinition, exact value

Return type:

float

epyr.physics.boltzm(return_uncertainty=False)[source]

Boltzmann constant in SI units (J⋅K⁻¹).

Parameters:

return_uncertaintybool

If True, return (value, standard_uncertainty)

Returns:

float or tuple

Boltzmann constant in J⋅K⁻¹

References:

2019 SI redefinition, exact value

Parameters:

return_uncertainty (bool)

Return type:

float | Tuple[float, float]

epyr.physics.avogadro(return_uncertainty=False)[source]

Avogadro constant in SI units (mol⁻¹).

Parameters:

return_uncertaintybool

If True, return (value, standard_uncertainty)

Returns:

float or tuple

Avogadro constant in mol⁻¹

References:

2019 SI redefinition, exact value

Parameters:

return_uncertainty (bool)

Return type:

float | Tuple[float, float]

epyr.physics.nmagn(return_uncertainty=False)[source]

Nuclear magneton in SI units (J⋅T⁻¹).

Parameters:

return_uncertaintybool

If True, return (value, standard_uncertainty)

Returns:

float or tuple

Nuclear magneton in J⋅T⁻¹

References:

2022 CODATA recommended values

Parameters:

return_uncertainty (bool)

Return type:

float | Tuple[float, float]

epyr.physics.echarge(return_uncertainty=False)[source]

Elementary charge in SI units (C).

Parameters:

return_uncertaintybool

If True, return (value, standard_uncertainty)

Returns:

float or tuple

Elementary charge in C

References:

2019 SI redefinition, exact value

Parameters:

return_uncertainty (bool)

Return type:

float | Tuple[float, float]

epyr.physics.evolt(return_uncertainty=False)[source]

Electron volt in SI units (J).

Parameters:

return_uncertaintybool

If True, return (value, standard_uncertainty)

Returns:

float or tuple

Electron volt in J

References:

2019 SI redefinition, exact value (e × 1V)

Parameters:

return_uncertainty (bool)

Return type:

float | Tuple[float, float]

epyr.physics.gamma_hz(g_factor=None)[source]

Calculate gyromagnetic ratio in Hz/T for any g-factor.

The gyromagnetic ratio relates frequency to magnetic field: ν = γ B where γ = g μ_B / h

Parameters:

g_factorfloat, optional

g-factor (defaults to free electron g-factor)

Returns:

float

Gyromagnetic ratio in Hz/T

Examples:

>>> # Free electron gyromagnetic ratio
>>> gamma_e = gamma_hz()
>>> print(f"Free electron: {gamma_e:.3e} Hz/T")
>>> # Custom g-factor
>>> gamma_custom = gamma_hz(2.005)
>>> print(f"g=2.005: {gamma_custom:.3e} Hz/T")
>>> # Calculate resonance frequency
>>> B = 0.34  # Tesla (X-band field)
>>> freq = gamma_hz() * B
>>> print(f"X-band frequency: {freq/1e9:.2f} GHz")
Parameters:

g_factor (float | None)

Return type:

float

epyr.physics.magnetic_field_to_frequency(B_tesla, g_factor=None)[source]

Convert magnetic field to resonance frequency.

Uses the fundamental EPR/NMR relation: ν = γB = gμ_B B/h

Parameters:

B_teslafloat

Magnetic field in Tesla

g_factorfloat, optional

g-factor (defaults to free electron g-factor)

Returns:

float

Resonance frequency in Hz

Examples:

>>> # X-band EPR at ~9.5 GHz
>>> B = 0.34  # Tesla
>>> freq = magnetic_field_to_frequency(B)  # Hz
>>> print(f"Frequency: {freq/1e9:.2f} GHz")
Parameters:
Return type:

float

epyr.physics.frequency_to_magnetic_field(freq_hz, g_factor=None)[source]

Convert frequency to magnetic field.

Parameters:

freq_hzfloat

Frequency in Hz

g_factorfloat, optional

g-factor (defaults to free electron g-factor)

Returns:

float

Magnetic field in Tesla

Examples:

>>> # What field for 9.5 GHz EPR?
>>> freq = 9.5e9  # Hz
>>> B = frequency_to_magnetic_field(freq)
>>> print(f"Magnetic field: {B*1000:.1f} mT")
Parameters:
Return type:

float

epyr.physics.thermal_energy(temperature_k)[source]

Thermal energy k_B T at given temperature.

Parameters:

temperature_kfloat

Temperature in Kelvin

Returns:

float

Thermal energy in J

Examples:

>>> # Room temperature thermal energy
>>> E_thermal = thermal_energy(295)  # K
>>> print(f"kT = {E_thermal/(1.602176634e-19):.3f} meV")
Parameters:

temperature_k (float)

Return type:

float

epyr.physics.wavelength_to_frequency(wavelength_m)[source]

Convert wavelength to frequency.

Parameters:

wavelength_mfloat

Wavelength in meters

Returns:

float

Frequency in Hz

Examples:

>>> # 3 cm microwave wavelength
>>> freq = wavelength_to_frequency(0.03)  # m
>>> print(f"Frequency: {freq/1e9:.1f} GHz")
Parameters:

wavelength_m (float)

Return type:

float

epyr.physics.unitconvert(value, units, g_factor=None)[source]

Convert between spectroscopic units.

Supported conversions: - cm⁻¹ ↔ eV, K, mT, MHz - eV ↔ cm⁻¹, K, mT, MHz - K ↔ cm⁻¹, eV, mT, MHz - mT ↔ cm⁻¹, eV, K, MHz - MHz ↔ cm⁻¹, eV, K, mT

Parameters:
  • value (float or array) – Input value(s) to convert

  • units (str) – Conversion string in format ‘unit_from->unit_to’ e.g., ‘cm^-1->MHz’, ‘eV->mT’

  • g_factor (float or array, optional) – g-factor for magnetic field conversions Defaults to free electron g-factor (2.002319…)

Returns:

Converted value(s)

Return type:

float or array

Examples

>>> # Convert wavenumbers to frequency
>>> freq = unitconvert(1000, 'cm^-1->MHz')  # 1000 cm⁻¹ to MHz
>>> print(f"{freq:.3f} MHz")
>>> # Convert with custom g-factor
>>> field = unitconvert(100, 'cm^-1->mT', g_factor=2.005)
>>> print(f"{field:.2f} mT")
>>> # Vector conversion
>>> energies = np.array([100, 200, 300])  # cm⁻¹
>>> temps = unitconvert(energies, 'cm^-1->K')
>>> print(f"Temperatures: {temps}")
epyr.physics.list_conversions()[source]

List all supported unit conversions.

epyr.physics.demo_conversions()[source]

Demonstrate common unit conversions in EPR spectroscopy.

epyr.physics.mhz_to_mt(frequency_mhz, g_factor=None)[source]

Convert frequency in MHz to magnetic field in mT.

Uses the fundamental EPR relation: B = h*nu / (g*mu_B)

Parameters:

frequency_mhzfloat or array

Frequency in MHz

g_factorfloat or array, optional

g-factor (defaults to free electron g-factor = 2.002319…)

Returns:

float or array

Magnetic field in mT

Examples:

>>> # X-band EPR frequency
>>> field = mhz_to_mt(9500)  # 9.5 GHz
>>> print(f"Field: {field:.1f} mT")
>>> # Different g-factors
>>> fields = mhz_to_mt(9500, g_factor=[2.000, 2.005, 2.010])
>>> print(f"Fields: {fields}")
Parameters:
Return type:

float | ndarray

epyr.physics.mt_to_mhz(field_mt, g_factor=None)[source]

Convert magnetic field in mT to frequency in MHz.

Uses the fundamental EPR relation: nu = g*mu_B*B / h

Parameters:

field_mtfloat or array

Magnetic field in mT

g_factorfloat or array, optional

g-factor (defaults to free electron g-factor = 2.002319…)

Returns:

float or array

Frequency in MHz

Examples:

>>> # What frequency for 340 mT field?
>>> freq = mt_to_mhz(340)
>>> print(f"Frequency: {freq:.1f} MHz")
>>> # Array of fields
>>> freqs = mt_to_mhz([100, 200, 300, 400])
>>> print(f"Frequencies: {freqs}")
Parameters:
Return type:

float | ndarray

epyr.physics.cm_inv_to_mhz(wavenumber_cm_inv)[source]

Convert wavenumber in cm^-1 to frequency in MHz.

Uses the relation: nu = c * wavenumber where c is the speed of light.

Parameters:

wavenumber_cm_invfloat or array

Wavenumber in cm^-1

Returns:

float or array

Frequency in MHz

Examples:

>>> # Convert 1000 cm^-1 to MHz
>>> freq = cm_inv_to_mhz(1000)
>>> print(f"Frequency: {freq:.3e} MHz")
>>> # Array conversion
>>> freqs = cm_inv_to_mhz([100, 500, 1000, 2000])
>>> print(f"Frequencies: {freqs}")
Parameters:

wavenumber_cm_inv (float | ndarray)

Return type:

float | ndarray

epyr.physics.mhz_to_cm_inv(frequency_mhz)[source]

Convert frequency in MHz to wavenumber in cm^-1.

Uses the relation: wavenumber = nu / c where c is the speed of light.

Parameters:

frequency_mhzfloat or array

Frequency in MHz

Returns:

float or array

Wavenumber in cm^-1

Examples:

>>> # Convert 30000 MHz (30 GHz) to cm^-1
>>> wn = mhz_to_cm_inv(30000)
>>> print(f"Wavenumber: {wn:.3f} cm^-1")
>>> # Array conversion
>>> wns = mhz_to_cm_inv([1000, 5000, 10000, 30000])
>>> print(f"Wavenumbers: {wns}")
Parameters:

frequency_mhz (float | ndarray)

Return type:

float | ndarray

epyr.physics.frequency_field_conversion_table(frequencies_ghz=None, g_factors=None)[source]

Log a frequency-vs-field conversion table for common EPR bands.

Parameters:
  • frequencies_ghz (list of float, optional) – Microwave frequencies in GHz. Default [1, 3, 9.5, 34, 95, 263] (L, S, X, Q, W, J bands).

  • g_factors (list of float, optional) – Electron g-factors to use for the conversion. Default [2.000, 2.002, 2.005, 2.010].

Returns:

Output goes through the module logger; nothing is returned.

Return type:

None

Examples

>>> from epyr.physics import frequency_field_conversion_table
>>> frequency_field_conversion_table(frequencies_ghz=[9.5])  # X-band only
epyr.physics.energy_conversion_table(energies_cm_inv=None)[source]

Log an energy conversion table covering cm⁻¹, MHz, GHz, eV, K, meV.

Parameters:

energies_cm_inv (list of float, optional) – Wavenumbers in cm⁻¹. Default [1, 10, 100, 1000, 5000, 10000], covering the typical EPR / zero-field-splitting range.

Return type:

None

Examples

>>> from epyr.physics import energy_conversion_table
>>> energy_conversion_table(energies_cm_inv=[1, 1000])
epyr.physics.constants_summary()[source]

Print summary of all physical constants with units and values.

Modules

constants

Physical constants for EPR/NMR spectroscopy All values from 2022 CODATA recommendations with proper units and uncertainties Constants available in both SI and CGS units.

conversions

Direct conversion functions for EPR spectroscopy

units

Unit conversion utilities for EPR/NMR spectroscopy