new dispersion_parameter parameter
This commit is contained in:
@@ -559,6 +559,7 @@ envelope_rules = default_rules + [
|
|||||||
Rule("c_to_a_factor", pulse.c_to_a_factor),
|
Rule("c_to_a_factor", pulse.c_to_a_factor),
|
||||||
# Dispersion
|
# Dispersion
|
||||||
Rule("beta2_coefficients", fiber.auto_dispersion_coefficients),
|
Rule("beta2_coefficients", fiber.auto_dispersion_coefficients),
|
||||||
|
Rule("beta2_coefficients", fiber.handle_dispersion_paramter),
|
||||||
Rule("beta2_arr", fiber.dispersion_from_coefficients),
|
Rule("beta2_arr", fiber.dispersion_from_coefficients),
|
||||||
Rule("beta2", lambda beta2_coefficients: beta2_coefficients[0]),
|
Rule("beta2", lambda beta2_coefficients: beta2_coefficients[0]),
|
||||||
Rule("beta2", lambda beta2_arr, w0_ind: beta2_arr[w0_ind]),
|
Rule("beta2", lambda beta2_arr, w0_ind: beta2_arr[w0_ind]),
|
||||||
|
|||||||
@@ -325,6 +325,8 @@ class Parameters:
|
|||||||
he_mode: tuple[int, int] = Parameter(int_pair)
|
he_mode: tuple[int, int] = Parameter(int_pair)
|
||||||
fit_parameters: tuple[int, int] = Parameter(float_pair)
|
fit_parameters: tuple[int, int] = Parameter(float_pair)
|
||||||
beta2_coefficients: Iterable[float] = Parameter(num_list)
|
beta2_coefficients: Iterable[float] = Parameter(num_list)
|
||||||
|
dispersion_parameter: float = Parameter(type_checker(*number))
|
||||||
|
dispersion_slope: float = Parameter(type_checker(*number))
|
||||||
dispersion_file: DataFile = Parameter(DataFile.validate)
|
dispersion_file: DataFile = Parameter(DataFile.validate)
|
||||||
model: str = Parameter(
|
model: str = Parameter(
|
||||||
literal("pcf", "marcatili", "marcatili_adjusted", "hasan", "custom"),
|
literal("pcf", "marcatili", "marcatili_adjusted", "hasan", "custom"),
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from scgenerator.physics import units
|
|||||||
from scgenerator.physics.units import c, pi
|
from scgenerator.physics.units import c, pi
|
||||||
|
|
||||||
pipi = 2 * pi
|
pipi = 2 * pi
|
||||||
|
pi2c = 2 * pi * c
|
||||||
T = TypeVar("T")
|
T = TypeVar("T")
|
||||||
|
|
||||||
|
|
||||||
@@ -46,14 +47,29 @@ def is_dynamic_dispersion(pressure=None):
|
|||||||
return out
|
return out
|
||||||
|
|
||||||
|
|
||||||
def beta2_to_D(beta2, l):
|
def beta2_to_dispersion_parameter(beta2: float, wavelength: T) -> T:
|
||||||
"""returns the D parameter corresponding to beta2(l)"""
|
return -(pipi * c) / (wavelength**2) * beta2
|
||||||
return -(pipi * c) / (l**2) * beta2
|
|
||||||
|
|
||||||
|
|
||||||
def D_to_beta2(D, l):
|
def dispersion_parameter_to_beta2(dispersion_parameter: float, wavelength: T) -> T:
|
||||||
"""returns the beta2 parameters corresponding to D(l)"""
|
return -(wavelength**2) / (pipi * c) * dispersion_parameter
|
||||||
return -(l**2) / (pipi * c) * D
|
|
||||||
|
|
||||||
|
def dispersion_slope_to_beta3(
|
||||||
|
dispersion_parameter: float, dispersion_slope: float, wavelength
|
||||||
|
) -> float:
|
||||||
|
return (wavelength**2 / pi2c) ** 2 * (
|
||||||
|
dispersion_slope + 2 * dispersion_parameter / wavelength
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def handle_dispersion_paramter(
|
||||||
|
wavelength: float, dispersion_parameter: float, dispersion_slope: float | None = None
|
||||||
|
) -> list[float]:
|
||||||
|
coeffs = [dispersion_parameter_to_beta2(dispersion_parameter, wavelength)]
|
||||||
|
if dispersion_slope is not None:
|
||||||
|
coeffs.append(dispersion_slope_to_beta3(dispersion_parameter, dispersion_slope, wavelength))
|
||||||
|
return coeffs
|
||||||
|
|
||||||
|
|
||||||
def find_zdw(l: np.ndarray, beta2_arr: np.ndarray) -> list[float]:
|
def find_zdw(l: np.ndarray, beta2_arr: np.ndarray) -> list[float]:
|
||||||
@@ -629,7 +645,7 @@ def load_custom_dispersion(
|
|||||||
wl_file = units.normalize_wavelengths(wl_file)
|
wl_file = units.normalize_wavelengths(wl_file)
|
||||||
|
|
||||||
ind = np.where((l >= wl_file.min()) & (l <= wl_file.max()))[0]
|
ind = np.where((l >= wl_file.min()) & (l <= wl_file.max()))[0]
|
||||||
out[ind] = np.interp(l[ind], wl_file, D_to_beta2(D, wl_file))
|
out[ind] = np.interp(l[ind], wl_file, dispersion_parameter_to_beta2(D, wl_file))
|
||||||
return out, ind
|
return out, ind
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,13 @@
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
import scgenerator as sc
|
import scgenerator as sc
|
||||||
|
|
||||||
|
|
||||||
|
def test_dispersion_logic():
|
||||||
|
params = sc.Parameters(wavelength=1550e-9, dispersion_parameter=5e-6)
|
||||||
|
assert params.compute("beta2_coefficients") == pytest.approx([-6.3772409974749684e-27])
|
||||||
|
|
||||||
|
params = sc.Parameters(wavelength=1550e-9, dispersion_parameter=5e-6, dispersion_slope=25)
|
||||||
|
assert params.compute("beta2_coefficients") == pytest.approx(
|
||||||
|
[-6.3772409974749684e-27, 5.116448086629504e-41]
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user