irfpy.util.emission

Emission functions.

An emission function, pΩ(θ,ϕ), are determined as a probability function in terms of the solid angle (steradian, Ω).

pΩ(θ,ϕ)dΩ=1

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

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

The angle θ is defined from the local zenith (normal vector of surface). The angle ϕ 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π.

  • For the cosine-normal case, the emission function is (γ+1)/2πcosγθ.

  • 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