synospec.etc.vph module

Various efficiency calculations


License

Copyright © 2020, Kyle B. Westfall


class synospec.etc.vph.VPHGrating(line_density, n_bulk, n_mod, thickness, peak_wave=None, wave_lim=None)[source]

Bases: object

Object for generic computations for a volume-phase holographic grating.

Parameters
  • line_density (float) – Line density of the grating in lines per mm.

  • n_bulk (float) – Bulk index of refraction.

  • n_mod (float) – Modulation in the index of refraction.

  • thickness (float) – Grating thickness in micron.

  • peak_wave (float, optional) – Wavelength in angstroms of peak efficiency. This can be calculated using the properties of the grating, but a reasonable set of wavelength limits (see wave_lim) are required, both minimum and maximum. If provided directly, this is not checked against this direct calculation.

  • wave_lim (tuple, optional) – Two-tuple with the lower and upper wavelength limits in angstroms to allow for any calculations for this grating. If None, no limits are imposed. Elements of the tuple can be None, meaning the specific limit is undefined; i.e., to define an upper limit only, set wave_lim=(None,5400).

_check_wavelengths(wave)[source]

Ensure there are valid wavelengths.

Parameters

wave (float, numpy.ndarray) – Wavelength in angstroms.

_return(wave, value, indx)[source]

For calculations involving wavelength, this is a convenience function that does the type jiggering.

angular_dispersion(wave, alpha=None, m=1)[source]

Return the angular dispersion in radians per angstrom.

Parameters
  • wave (float, numpy.ndarray) – Wavelengths for the computation.

  • alpha (float, optional) – The angle of incidence on the grating. If None, the angle is the Bragg angle for each wavelength; ie., you should basically always be providing alpha.

  • m (int, optional) – Grating order.

Returns

The angular dispersion in radians per angstrom.

Return type

float, numpy.ndarray, numpy.ma.MaskedArray

bragg_angle(wave, radians=False)[source]

Compute the Bragg incidence angle for the grating.

Based on IDL code provided Jason Fucik (CalTech), 7 Apr 2020.

Parameters
  • wave (float, numpy.ndarray) – Wavelength at which to calculate the Bragg angle (angstroms in air).

  • radians (bool, optional) – Provide the angle in radians, instead of degrees.

Returns

The super-blaze incidence angle.

Return type

float, numpy.ndarray, numpy.ma.MaskedArray

bragg_angle_dcg(wave, sine_of=False)[source]

Calculate the grating Bragg angle in degrees in the DCG layer.

Based on IDL code provided Jason Fucik (CalTech), 7 Apr 2020.

Parameters
  • wave (float, numpy.ndarray) – Wavelength at which to calculate the Bragg angle (angstroms in air).

  • sine_of (bool, optional) – Return the sine of the angle instead of the angle itself.

Returns

The (sine of) the Bragg angle.

Return type

float, numpy.ndarray, numpy.ma.MaskedArray

diffracted_wave(beta, alpha=None, m=1)[source]

Compute the wavelength at the provided angle of diffraction.

Parameters
  • beta (float) – Angle of diffraction.

  • alpha (float, optional) – The angle of incidence on the grating. If None, assumed to be the same as the diffraction angle and the Littrow wavelength is returned; see littrow_wavelength().

  • m (int, optional) – Grating order.

Returns

Wavelength in angstroms at the provided angle of diffraction.

Return type

float

diffraction_angle(wave, alpha=None, m=1, radians=False)[source]

Compute the diffraction angle for the provided wavelengths.

Parameters
  • wave (float, numpy.ndarray) – Wavelengths for the computation.

  • alpha (float, optional) – The angle of incidence on the grating. If None, the angle is the Bragg angle for each wavelength; ie., you should basically always be providing alpha.

  • m (int, optional) – Grating order.

  • radians (bool, optional) – Provide the angle in radians, instead of degrees.

Returns

The angle of diffraction for each wavelength.

Return type

float, numpy.ndarray, numpy.ma.MaskedArray

efficiency(wave, tilt=0.0, alpha=None)[source]

Calculate the efficiency at the provided wavelengths.

Based on IDL code provided Jason Fucik (CalTech), 7 Apr 2020.

Parameters
  • wave (float, numpy.ndarray) – Wavelengths in angstroms at which to calculate the efficiency.

  • tilt (float, optional) – Grating tilt in degrees. Only used if

  • alpha (float, optional) – Angle of incidence onto the grating. If None, return the super-blaze function.

Returns

The grating efficiency. The type returned matches the type provided for wave.

Return type

float, numpy.ndarray

littrow_angle(wave, m=1)[source]

Calculate the Littrow indicence angle for the provided wavelength.

Parameters
  • wave (float) – Wavelength in angstroms.

  • m (int, optional) – Grating order.

Returns

Input/output angle in degrees.

Return type

float

littrow_wavelength(alpha, m=1)[source]

Compute the Littrow wavelength at the provided incidence angle.

Parameters
  • alpha (float) – Incidence angle in degrees.

  • m (int, optional) – Grating order.

Returns

Wavelength in angstroms.

Return type

float

property peak_wave

The wavelength with the peak super-blaze efficiency.

Computation is approximate based on sampling the super-blaze and picking the sample with the highest efficiency.