solprop.tools.capillary#

Soliton parameters of a mode or a gas-filled capillary, and capillary designs.

The full set of design numbers for a pulse in a mode (soliton_params()) or a capillary (capillary_params()), the capillary that gives a soliton order (capillary_design()) and the gas mixing ratio of a bulk dispersion (gas_ratio()).

Functions

capillary_design(radius, gas, *, ...[, ...])

Return the pressure and energy that give a capillary a soliton design.

capillary_params(radius, gas[, pressure, ...])

Return the design numbers of a pulse in a gas-filled capillary.

gas_ratio(gas_a, gas_b, wavelength, *[, ...])

Return the ratios of bulk dispersion and Kerr response of two gases.

soliton_params(mode, gas[, pressure, shape, ...])

Return the design numbers of a pulse in any mode.

Classes

GasRatio(beta2, chi3)

Ratios of the bulk dispersion and the Kerr response of two gases.

SolitonParams(energy, fwhm, width, omega, ...)

The design numbers of one pulse in one mode and one fill.

class solprop.tools.capillary.GasRatio(beta2, chi3)[source]#

Bases: object

Ratios of the bulk dispersion and the Kerr response of two gases.

Attributes:
beta2float

Ratio of the bulk group-velocity dispersions, first gas over second.

chi3float

Ratio of the third-order susceptibilities, first gas over second.

beta2: float#
chi3: float#
class solprop.tools.capillary.SolitonParams(energy, fwhm, width, omega, wavelength, gas, pressure, temperature, shape, peak_power, beta2, density, index, n2, gamma, soliton_order, soliton_content, intensity, peak_intensity, critical_power, dispersion_length, nonlinear_length, fission_length, zdw, loss_length, effective_area, mode)[source]#

Bases: Displayed

The design numbers of one pulse in one mode and one fill.

Attributes:
energyfloat

Pulse energy in J.

fwhmfloat

Full width at half maximum of the power in s.

widthfloat

Natural width tau0 of the shape in s (pulse_width()).

omegafloat

Angular frequency of the pump in rad/s.

wavelengthfloat

Vacuum wavelength of the pump in m.

gasstr

The fill’s species labels, joined by +.

pressurefloat

Total pressure at the position in bar; NaN for a mixture of independent populations, which has no single pressure.

temperaturefloat

Fill temperature in K.

shape{‘sech’, ‘gauss’}

"sech" or "gauss".

peak_powerfloat

Peak power in W.

beta2float

Group-velocity dispersion of the mode at the pump in s^2/m.

densityfloat

Total number density of the fill in m^-3.

indexfloat

Linear refractive index of the fill at the pump.

n2float

Nonlinear index of the fill in m^2/W.

gammafloat

Nonlinear coefficient in rad/(W m).

soliton_orderfloat

sqrt(L_D / L_NL).

soliton_contentSolitonContent or None

Unchirped NLSE constituent count and largest soliton; None for normal GVD.

intensityfloat

Mode-averaged intensity peak_power / effective_area in W/m^2.

peak_intensityfloat

On-axis intensity of the mode at the peak power in W/m^2: what a run’s peak_intensity statistic reports at its first plane. For the fundamental of a capillary it is 1.77 times intensity. NaN for a mode without a transverse profile (a dispersion-specified one).

critical_powerfloat

Self-focusing power in W (self_focusing_power()).

dispersion_lengthfloat

In m.

nonlinear_lengthfloat

In m.

fission_lengthfloat

In m.

zdwfloat

Zero-dispersion wavelength in m within 100 nm to 3 um, or NaN when the dispersion does not change sign there. No second, guess-seeded search is tried.

loss_lengthfloat

The 1/e power loss length of the mode at the pump in m.

effective_areafloat

In m^2.

modeMode

The mode.

beta2: float#
critical_power: float#
density: float#
dispersion_length: float#
effective_area: float#
energy: float#
fission_length: float#
fwhm: float#
gamma: float#
gas: str#
index: float#
intensity: float#
loss_length: float#
mode: Mode#
n2: float#
nonlinear_length: float#
omega: float#
peak_intensity: float#
peak_power: float#
pressure: float#
shape: Literal['sech', 'gauss']#
soliton_content: SolitonContent | None#
soliton_order: float#
temperature: float#
wavelength: float#
width: float#
zdw: float#
solprop.tools.capillary.capillary_design(radius, gas, *, zdw_wavelength, fwhm, wavelength, soliton_order=None, soliton_count=None, largest_eigenvalue=None, shape='sech', temperature=293.15, m=1, model='full', loss=True, cladding=None, materials=None, pressure_max=100.0)[source]#

Return the pressure and energy that give a capillary a soliton design.

The inverse of capillary_params(): the pressure puts the zero-dispersion point at zdw_wavelength (pressure_zdw()), and the energy then gives the pulse one soliton target. At that pressure \(\beta_2\) and \(\gamma\) do not depend on the energy and \(N^2 = \gamma P_0\tau_0^2/|\beta_2|\), so the peak power is \(P_0 = N^2|\beta_2|/(\gamma\tau_0^2)\). Give exactly one target:

  • soliton_order, the conventional \(N\);

  • soliton_count, a number \(M\) of solitons in the scattering content (soliton_content()): the pulse area is set to \(M\pi\), the middle of the band of areas with \(M\) solitons, which is \(N = M\) for sech and \(N = M\sqrt{\pi/2}\) for a Gaussian;

  • largest_eigenvalue, the \(\eta\) of the largest constituent, which fixes its width \(\tau_0/(2\eta)\): \(N = \eta + 1/2\) for sech, and a root of the Gaussian scattering problem otherwise.

Parameters:
radiusfloat

Core radius in m, > 0.

gasGas or str

A single built-in gas, as pressure_zdw() takes it.

zdw_wavelengthfloat

Wavelength at which the dispersion should vanish, m.

fwhmfloat

Full width at half maximum of the power in s, > 0.

wavelengthfloat

Pump wavelength in m, > 0.

soliton_orderfloat or None, optional

Target conventional soliton order, > 0.

soliton_countint or None, optional

Target number of solitons, >= 1.

largest_eigenvaluefloat or None, optional

Target imaginary part of the largest Zakharov-Shabat eigenvalue, dimensionless with time in units of the shape’s natural width, > 0.

shape{‘sech’, ‘gauss’}, optional

The pulse shape, used for the width, the peak power and the content.

temperaturefloat, optional

Fill temperature in K.

mint, optional

Radial index of the HE_1m mode.

model{‘full’, ‘reduced’}, optional

Marcatili model.

lossbool, float or callable, optional

Loss policy of the mode in the returned numbers.

claddingGlassIndex, complex or None, optional

Cladding index; None is fused silica.

materialsMaterialSelection or None, optional

Design under this selection, as capillary_params() and pressure_zdw() do. None is MaterialSelection().

pressure_maxfloat, optional

Upper end of the pressure bracket in bar.

Returns:
SolitonParams

The numbers at the designed pressure and energy, with the mode; the pressure is .pressure (bar) and the energy .energy (J).

Raises:
ToolsError

If not exactly one target is given or it is out of range, no pressure in the bracket gives the zero-dispersion point, or a content target is asked of a pump in normal dispersion.

Examples

>>> from solprop.tools import capillary_design
>>> p = capillary_design(125e-6, "Ar", zdw_wavelength=500e-9, fwhm=10e-15,
...                      wavelength=800e-9, soliton_order=3.0, cladding=1.45)
>>> f"{p.pressure:.4f} bar {p.energy * 1e6:.1f} uJ N = {p.soliton_order:.3f}"
'0.0664 bar 100.5 uJ N = 3.000'
>>> g = capillary_design(125e-6, "Ar", zdw_wavelength=500e-9, fwhm=10e-15,
...                      wavelength=800e-9, soliton_count=2, shape="gauss",
...                      cladding=1.45)
>>> f"{g.soliton_order:.4f} {g.soliton_content.count}"
'2.5066 2'
solprop.tools.capillary.capillary_params(radius, gas, pressure=None, *, energy, fwhm, wavelength, shape='sech', temperature=None, n=1, m=1, kind='HE', model='full', loss=True, cladding=None, materials=None)[source]#

Return the design numbers of a pulse in a gas-filled capillary.

Builds the mode as solprop.driver.interface.prop_capillary() does for the same arguments – a MarcatiliMode over the fill’s mixture – and hands it to soliton_params().

Parameters:
radiusfloat

Core radius in m, > 0.

gasGas, str, Mapping or Mixture

The fill, as prop_capillary takes it.

pressurefloat or None, optional

Total pressure in bar; None is one bar. For a gradient, evaluate at the pressure of the position of interest.

energyfloat

Pulse energy in J, > 0.

fwhmfloat

Full width at half maximum of the power in s, > 0.

wavelengthfloat

Pump wavelength in m, > 0.

shape{‘sech’, ‘gauss’}, optional

The pulse shape.

temperaturefloat or None, optional

Fill temperature in K; None is room temperature, or the mixture’s own beside a Mixture, which refuses any other.

nint, optional

Azimuthal mode index.

mint, optional

Radial mode index, >= 1.

kind{‘HE’, ‘TE’, ‘TM’}, optional

Mode family.

model{‘full’, ‘reduced’}, optional

Marcatili model.

lossbool, float or callable, optional

Loss policy of the mode.

claddingGlassIndex, complex or None, optional

Cladding index; None is fused silica.

materialsMaterialSelection or None, optional

Build the capillary as prop_capillary does under the same materials=: the fill from optmat (index, density and Kerr coefficient at wavelength) and cladding=None as optmat’s recommended fused silica. None is MaterialSelection().

Returns:
SolitonParams

The numbers, with the mode that was built.

Examples

>>> from solprop.tools import capillary_params
>>> p = capillary_params(125e-6, "He", 0.4, energy=300e-6, fwhm=10e-15,
...                      wavelength=800e-9, model="reduced", cladding=1.45)
>>> f"{p.gamma:.3e} {p.intensity:.3e}"
'4.884e-11 1.130e+18'
solprop.tools.capillary.gas_ratio(gas_a, gas_b, wavelength, *, pressure=1.0, temperature=293.15, materials=None)[source]#

Return the ratios of bulk dispersion and Kerr response of two gases.

The bulk (unguided) dispersion of each gas, not a mode’s: it answers “how much more pressure of B matches A”, which is a property of the gases alone.

Parameters:
gas_aGas or str

The numerator’s species.

gas_bGas or str

The denominator’s species.

wavelengthfloat

Wavelength in m at which the dispersions are compared, > 0.

pressurefloat, optional

Pressure of both gases in bar, > 0.

temperaturefloat, optional

Temperature of both in K.

materialsMaterialSelection or None, optional

Take both gases from optmat under this selection, as a run’s materials= does: their index, their density and their Kerr coefficient at wavelength; "air" is nitrogen and oxygen. None is MaterialSelection().

Returns:
GasRatio

Named beta2 and chi3 ratios.

Raises:
ToolsError

If the selection names a carrier other than wavelength, or a gas has no Kerr data under it.

Examples

>>> from solprop.tools import gas_ratio
>>> ratio = gas_ratio("Ar", "He", 800e-9)
>>> f"{ratio.beta2:.1f} {ratio.chi3:.1f}"
'18.6 28.4'
solprop.tools.capillary.soliton_params(mode, gas, pressure=None, *, energy, fwhm, wavelength, shape='sech', temperature=None, z=0.0, materials=None)[source]#

Return the design numbers of a pulse in any mode.

The mode supplies the dispersion, the area and the loss; the fill supplies the nonlinear index. They are separate arguments because a mode need not know its fill’s Kerr response (a tabulated mode does not), and the caller is trusted to give the fill the mode was built with – capillary_params() does both.

Parameters:
modeMode

Any mode: a capillary, an antiresonant or tabulated fibre, a rectangular guide.

gasGas, str, Mapping or Mixture

The fill: a registry species, "air", mole fractions, or a mixture. A mixture of species selected from optmat takes their Kerr coefficients at wavelength, the carrier.

pressurefloat or None, optional

Total pressure in bar; None is one bar, and is required beside a Mixture.

energyfloat

Pulse energy in J, > 0.

fwhmfloat

Full width at half maximum of the power in s, > 0.

wavelengthfloat

Pump wavelength in m, > 0.

shape{‘sech’, ‘gauss’}, optional

The pulse shape, used consistently for the width and the peak power.

temperaturefloat or None, optional

Fill temperature in K; None is room temperature, or the mixture’s own beside a Mixture, which refuses any other.

zfloat, optional

Position along the waveguide at which everything is evaluated, m.

materialsMaterialSelection or None, optional

Resolve a named fill from optmat under this selection, as a run’s materials= does: its index, density and Kerr coefficient at wavelength. None is MaterialSelection(); a Mixture is taken as it is. The mode is the caller’s either way.

Returns:
SolitonParams

The numbers, with the mode.

Raises:
ToolsError

If a quantity is not positive, the shape is unknown, the mode has no dispersion at the pump, a component of the fill has no Kerr data, the selection names a carrier other than wavelength, or a pressure or a temperature other than its own is given beside a Mixture.

Examples

>>> from solprop.modes import MarcatiliMode
>>> from solprop.tools import soliton_params
>>> mode = MarcatiliMode(125e-6, "He", 0.4, model="reduced", cladding=1.45)
>>> p = soliton_params(mode, "He", 0.4, energy=300e-6, fwhm=10e-15,
...                    wavelength=800e-9)
>>> f"{p.soliton_order:.2f} {p.fission_length:.2f}"
'2.26 1.75'