wradlib.atten.correct_attenuation_constrained¶

wradlib.atten.
correct_attenuation_constrained
(gateset, a_max=0.000167, a_min=2.33e05, n_a=4, b_max=0.7, b_min=0.65, n_b=6, gate_length=1.0, constraints=None, constraint_args=None, sector_thr=10)¶ GatebyGate attenuation correction based on the iterative approach of [Kraemer2008] and [Jacobi2016] with a generalized and scalable number of constraints.
Differing from the original approach, the method for addressing small sectors which conflict with the constraints is based on a bisection forward calculating method, and not on backwards attenuation calculation.
Parameters:  gateset (
numpy.ndarray
) –Multidimensional array, where the range gates (over which iteration has to be performed) are supposed to vary along the last arraydimension and the azimuths are supposed to vary along the next to last arraydimension.
Data has to be provided in decibel representation of reflectivity [dBZ].
 a_max (float) –
Initial value for linear coefficient of the kZ relation ( \(k=a \cdot Z^{b}\) ).
Per default set to 1.67e4.
 a_min (float) –
Minimal allowed linear coefficient of the kZ relation ( \(k=a \cdot Z^{b}\) ) in the downwards iteration of ‘a’ in case of breaching one of thresholds
constr_args
of the optional conditionsconstraints
.Per default set to 2.33e5.
 n_a (int) –
Number of iterations from
a_max
toa_min
.Per default set to 4.
 b_max (float) –
Initial value for exponential coefficient of the kZ relation ( \(k=a \cdot Z^{b}\) ).
Per default set to 0.7.
 b_min (float) –
Minimal allowed exponential coefficient of the kZ relation ( \(k=a \cdot Z^{b}\) ) in the downwards iteration of ‘b’ in case of breaching one of thresholds
constr_args
of the optional conditionsconstraints
and the linear coefficient ‘a’ has already reached the lower limita_min
.Per default set to 0.65.
 n_b (int) –
Number of iterations from
b_max
tob_min
.Per default set to 6.
 gate_length (float) –
Radial length of a range gate [km].
Per default set to 1.0.
 constraints (list) – List of constraint functions. The signature of these functions has to be constraint_function(gateset, k, *constr_args). Their return value must be a boolean array of shape gateset.shape[:1] set to True for beams, which do not fulfill the constraint.
 constraint_args (list) – List of lists, which are to be passed to the individual constraint functions using the *args mechanism (len(constr_args) == len(constraints)).
 sector_thr (int) – Number of adjacent beams, for which in case of breaching the
constraints the attenuation with downward iterated
a
andb
 parameters is recalculated. For more narrow sectors the integrated attenuation of the last gate is interpolated and used as reference for the recalculation.
Returns: pia (
numpy.ndarray
) – Array with the same shape asgateset
containing the calculated path integrated attenuation [dB] for each range gate.Examples
Implementing the original Hitschfeld & Bordan (1954) algorithm with otherwise default parameters:
from wradlib.atten import * pia = correct_attenuation_constrained(gateset, a_max=8.e5, b_max=0.731, n_a=1, n_b=1, gate_length=1.0)
Implementing the basic Kraemer algorithm:
pia = atten.correct_attenuation_constrained(gateset, a_max=1.67e4, a_min=2.33e5, n_a=100, b_max=0.7, b_min=0.65, n_b=6, gate_length=1., constraints= [wrl.atten.constraint_dbz], constraint_args=[[59.0]])
Implementing the PIA algorithm by Jacobi et al.:
pia = atten.correct_attenuation_constrained(gateset, a_max=1.67e4, a_min=2.33e5, n_a=100, b_max=0.7, b_min=0.65, n_b=6, gate_length=1., constraints= [wrl.atten.constraint_dbz, wrl.atten.constraint_pia], constraint_args= [[59.0],[20.0]])
 gateset (