# 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 :maththeta, 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