"""
Calculation of volume and particle depolarization coefficient.
"""
import numpy as np
from scipy import stats
[docs]def calibration_constant_cross_total_profile(signal_cross_plus45, signal_cross_minus45,
signal_total_plus45, signal_total_minus45,
r_cross, r_total):
r"""
Calculate the calibration constant profile, in a lidar system that is able
to detect the cross-to-total depolarization ratio.
Parameters
----------
signal_cross_plus45: vector
The input vertical profile from the cross channel. Calibrator angle phi=45.
signal_total_plus45: array
The input vertical profile from the total channel. Calibrator angle phi=45.
signal_cross_minus45: vector
The input vertical profile from the cross channel. Calibrator angle phi=-45.
signal_total_minus45: vector
The input vertical profile from the total channel. Calibrator angle phi=-45.
r_cross: float
The transmission ratio of the cross channel (Rc).
r_total: float
The transmission ratio of the total channel (Rt).
Returns
-------
c_profile: vector
The vertical profile of the calibration constant.
Notes
-----
The calibration constant is calculated by the following formula:
.. math::
C = \frac{1 + R_t}{1 + R_c} \cdot \sqrt{\delta'_{+45} \cdot \delta'_{-45}}
References
----------
Engelmann, R. et al. The automated multiwavelength Raman polarization and water-vapor lidar
Polly XT: the neXT generation. Atmos. Meas. Tech., 9, 1767-1784 (2016)
"""
# Calculate the signal ratio for the +45 position.
delta_v45_plus = signal_cross_plus45 / signal_total_plus45
# Calculate the signal ratio for the -45 position.
delta_v45_minus = signal_cross_minus45 / signal_total_minus45
# Calculate the calibration constant vertical profile.
c_profile = ((1 + r_total) / (1 + r_cross)) * np.sqrt(delta_v45_plus * delta_v45_minus)
return c_profile
[docs]def calibration_constant_cross_parallel_profile(signal_cross_plus45, signal_cross_minus45,
signal_parallel_plus45, signal_parallel_minus45,
t_cross, t_parallel, r_cross, r_parallel):
r"""
Calculate the calibration constant in a lidar system that is able to
detect the cross-to-parallel depolarization ratio.
Parameters
----------
signal_cross_plus45: vector
The input vertical profile from the cross channel. Calibrator angle phi=45.
signal_parallel_plus45: vector
The input vertical profile from the total channel. Calibrator angle phi=45.
signal_cross_minus45: vector
The input vertical profile from the cross channel. Calibrator angle phi=-45.
signal_parallel_minus45: vector
The input vertical profile from the total channel. Calibrator angle phi=-45.
t_cross: float
Transmittance of cross component through transmitted path.
t_parallel: float
Transmittance of parallel component through transmitted path.
r_cross: float
Transmittance of cross component through reflected path.
r_parallel: float
Transmittance of parallel component through reflected path.
Returns
-------
v_star_mean: float
Calibration constant's mean value (vertical axis).
v_star_sem: float
Calibration constant's standard error of the mean (vertical axis).
Notes
-----
The calibration constant is calculated by the following formula:
.. math::
V^* = \frac{[1 + \delta^V tan^2 (\phi)]T_p + [tan^2 (\phi) + \delta^V]T_s}
{[1 + \delta^V tan^2 (\phi)]R_p + [tan^2 (\phi) + \delta^V]R_s} \cdot \delta^* (\phi)
References
----------
Freudenthaler, V. et al. Depolarization ratio profiling at several wavelengths in pure
Saharan dust during SAMUM 2006. Tellus, 61B, 165-179 (2008)
"""
# Calculate the signal ratio for the +45 position.
delta_v45_plus = signal_cross_plus45 / signal_parallel_plus45
# Calculate the signal ratio for the -45 position.
delta_v45_minus = signal_cross_minus45 / signal_parallel_minus45
# Calculate the calibration constant vertical profile.
v_star_profile = ((t_parallel + t_cross) / (r_parallel + r_cross)) * np.sqrt(delta_v45_plus * delta_v45_minus)
return v_star_profile
[docs]def calibration_constant_value(calibration_constant_profile, first_bin,
bin_length, lower_limit, upper_limit):
r"""
Calculate the mean calibration constant and its standard error of the mean,
from the calibration constant profile.
Parameters
----------
c_profile: vector
The vertical profile of the calibration constant.
first_bin: integer
The first bin of the system.
bin_length: float
The length of each bin. (in meters)
lower_limit: float
The lower vertical limit for the calculation. (in meters)
upper_limit: float
The lower vertical limit for the calculation. (in meters)
Returns
-------
c_mean: float
Calibration constant's mean value (vertical axis).
c_sem: float
Calibration constant's standard error of the mean (vertical axis).
"""
# Convert the lower and upper limit from meters to bins.
lower_limit = int(first_bin + (lower_limit // bin_length))
upper_limit = int(first_bin + (upper_limit // bin_length))
# Select the area of interest.
c_profile = calibration_constant_profile[lower_limit:(upper_limit+1)]
# Calculate statistics.
c_mean = np.mean(c_profile)
c_sem = stats.sem(c_profile)
# Return the statistics.
return (c_mean, c_sem)
[docs]def volume_depolarization_cross_total(signal_cross, signal_total, r_cross, r_total, c):
r"""
Calculate the linear volume depolarization ratio in a lidar system that is
able to detect the cross-to-total depolarization ratio.
The calibration factor from the delta-90 calibration is being used.
Parameters
----------
signal_cross: vector
The input vertical profile from the cross channel. Normal measurement (phi=0).
signal_total: vector
The input vertical profile from the total channel. Normal measurement (phi=0).
r_cross: float
The transmission ratio of the cross channel (Rc).
r_total: float
The transmission ratio of the total channel (Rt).
c: float
The calibration constant.
Returns
-------
delta_v: vector
The linear volume depolarization.
Notes
-----
The linear volume depolarization ratio is calculated by the formula:
.. math::
\delta^V = \frac{1 - \frac{\delta'}{C}}{\frac{\delta'R_t}{C} - R_C}
References
----------
Engelmann, R. et al. The automated multiwavelength Raman polarization and water-vapor
lidar Polly XT: the neXT generation. Atmos. Meas. Tech., 9, 1767-1784 (2016)
"""
delta_quote = signal_cross / signal_total
delta_v = (1 - (delta_quote / c)) / ((delta_quote * r_total / c) - r_cross)
return delta_v
[docs]def volume_depolarization_cross_parallel(signal_cross, signal_parallel,
t_cross, t_parallel, r_cross, r_parallel,
v_star):
r"""
Calculate the linear volume depolarization ratio in a lidar system that is
able to detect the cross-to-parallel depolarization ratio.
The calibration factor from the delta-90 calibration is being used.
Parameters
----------
signal_cross: vector
The input vertical profile from the cross channel. Normal measurement (phi=0).
signal_parallel: vector
The input vertical profile from the parallel channel. Normal measurement (phi=0).
t_cross: float
Transmittance of cross component through transmitted path.
t_parallel: float
Transmittance of parallel component through transmitted path.
r_cross: float
Transmittance of cross component through reflected path.
r_parallel: float
Transmittance of parallel component through reflected path.
v_star: float
The calibration constant.
Returns
-------
delta_v: vector
The linear volume depolarization.
Notes
-----
The linear volume depolarization ratio is calculated by the formula:
.. math::
\delta^V = \frac{\frac{\delta^*}{V^*}T_p - R_p}{R_s - \frac{\delta^*}{V^*}T_s}
References
----------
Freudenthaler, V. et al. Depolarization ratio profiling at several wavelengths in pure
Saharan dust during SAMUM 2006. Tellus, 61B, 165-179 (2008)
"""
delta_star = signal_cross / signal_parallel
delta_v = ((delta_star * t_parallel / v_star) - r_parallel) / (r_cross - (delta_star * t_cross / v_star))
return delta_v
[docs]def particle_depolarization(delta_m, delta_v, molecular_backscatter, particle_backscatter):
r"""
Calculate the linear particle depolarization ratio.
Parameters
----------
delta_m: vector
The linear molecular depolarization ratio.
delta_v: vector
The linear volume depolarization ratio.
molecular_backscatter: vector
The molecular component of the total backscatter coefficient.
particle_backscatter: vector
The particle component of the total backscatter coefficient.
Returns
-------
delta_p: vector
The linear particle depolarization ratio.
Notes
-----
The linear particle depolarization ratio is calculated by the formula:
.. math::
\delta^p = \frac{(1 + \delta^m)\delta^V \mathbf{R} - (1 + \delta^V)\delta^m}
{(1 + \delta^m)\mathbf{R} - (1 + \delta^V)}
References
----------
Freudenthaler, V. et al. Depolarization ratio profiling at several wavelengths in pure
Saharan dust during SAMUM 2006. Tellus, 61B, 165-179 (2008)
"""
r = (molecular_backscatter + particle_backscatter) / molecular_backscatter
delta_p = ((1 + delta_m) * delta_v * r - (1 + delta_v) * delta_m) \
/ ((1 + delta_m) * r - (1 + delta_v))
return delta_p