irfpy.util.emission

Emission functions.

An emission function, \(p_\Omega(\theta, \phi)\), are determined as a probability function in terms of the solid angle (steradian, \(\Omega\)).

\[\int p_\Omega(\theta, \phi) d\Omega = 1\]

It is not interms of :math`theta, phi`.

In this module, the surface-emission is considered, so that the angle \(\theta\) (polar angle) shall be 0 to 90 degrees. Beyond 90 degrees, the emission should be zero.

The angle \(\theta\) is defined from the local zenith (normal vector of surface). The angle \(\phi\) is measured from the opposite direction of the reference vector. (Forward scattering shall be defined as zero phi). Increasing phi corresponds to the anti-clockwize looking from zenith.

  • For the uniform (isotropic) case, the emission function is \(1/2\pi\).

  • For the cosine-normal case, the emission function is \((\gamma+1)/2\pi cos^\gamma \theta\).

  • For the forward-specular model, the cosine-normal function is tilted by the given angle.

  • For the backward-specular model, the cosine-nomal function is tilted (backward) by the given angle.

irfpy.util.emission.emission_uniform(theta, phi)[source]

Isotropic emission function.

Parameters:
  • theta – The polar angle in deg. [0, 180]. (>90, the returned value is nan).

  • phi – The azimuth angle in deg. (-180, 180]

>>> print(emission_uniform([30, 90, 120], [50, 50, 50]))   
[0.15915494 0.15915494 nan]
irfpy.util.emission.emission_cosnorm(theta, phi, gamma=1)[source]

Cosine-normal emission function.

Parameters:
  • theta – The polar angle in deg. [0, 180]. (>90, the returned value is nan).

  • phi – The azimuth angle in deg. (-180, 180]

>>> theta = [30, 50, 120]
>>> phi = [50, 20, -30]
>>> print(emission_uniform(theta, phi))   
[0.15915494 0.15915494 nan]
class irfpy.util.emission.POMSP[source]

Bases: object

classmethod getObject(tilt_angle, gamma, normalize_accuracy=360)[source]
classmethod clear_cache()[source]
irfpy.util.emission.clear_cache()[source]
irfpy.util.emission.emission_specular(theta, phi, tilt_angle=0, gamma=1, normalize_accuracy=360)[source]

Specular reflection

Parameters:
  • theta – The polar angle in deg. [0, 180]. (>90, the returned value is nan).

  • phi – The azimuth angle in deg. (-180, 180]

  • tilt_angle – The tilt angle for specular reflection for the forward scattering. [0, 90] Usually, the angle is the same as the incoming angle of the projectile. If you set it as 0 (default), the result is the same as cosing_normal.

  • gamma – The gamma paramter for the cosine normal function.

  • normalize_accuracy – To normalize the results, this function integrate numerically over the half-sphere. This parameter defines how accurate the normalization should be.

>>> print('{:.3g}'.format(emission_specular(30, 0, tilt_angle=0, gamma=1)))
0.275
>>> print('{:.3g}'.format(emission_specular(30, 0, tilt_angle=30, gamma=1)))
0.341
>>> print('{:.3g}'.format(emission_specular(30, 20, tilt_angle=30, gamma=1)))
0.336
>>> print('{:.3g}'.format(emission_specular(30, -20, tilt_angle=30, gamma=1)))
0.336
>>> print('{:.3g}'.format(emission_specular(30, -30, tilt_angle=30, gamma=1)))
0.329
>>> print('{:.3g}'.format(emission_specular(80, 20, tilt_angle=70, gamma=3)))
0.682
>>> print('{:.3g}'.format(emission_specular(80, -20, tilt_angle=70, gamma=3)))
0.682
>>> print('{:.3g}'.format(emission_specular(100, -20, tilt_angle=70, gamma=3)))
nan
irfpy.util.emission.emission_backward(theta, phi, tilt_angle=0, gamma=1, normalize_accuracy=360)[source]

Emission function of backscattering

Parameters:
  • theta – The polar angle in deg. [0, 180]. (>90, the returned value is nan).

  • phi – The azimuth angle in deg. (-180, 180]

  • tilt_angle – The tilt angle for specular reflection for the backward scattering. [0, 90] Usually, the angle is the same as the incoming angle of the projectile. If you set it as 0 (default), the result is the same as cosing_normal.

  • gamma – The gamma paramter for the cosine normal function.

  • normalize_accuracy – To normalize the results, this function integrate numerically over the half-sphere. This parameter defines how accurate the normalization should be.

>>> print('{:.3g}'.format(emission_backward(30, 180, tilt_angle=0, gamma=1)))
0.275
>>> print('{:.3g}'.format(emission_backward(30, 180, tilt_angle=30, gamma=1)))
0.341
>>> print('{:.3g}'.format(emission_backward(30, 160, tilt_angle=30, gamma=1)))
0.336
>>> print('{:.3g}'.format(emission_backward(30, -160, tilt_angle=30, gamma=1)))
0.336
>>> print('{:.3g}'.format(emission_backward(30, -150, tilt_angle=30, gamma=1)))
0.329
>>> print('{:.3g}'.format(emission_backward(80, 160, tilt_angle=70, gamma=3)))
0.682
>>> print('{:.3g}'.format(emission_backward(80, -160, tilt_angle=70, gamma=3)))
0.682
>>> print('{:.3g}'.format(emission_backward(100, -160, tilt_angle=70, gamma=3)))
nan