This PR builds on top of #253 as it adds functionality to L2toL3.py.
Surface height processing
The idea of the surface height processing is that there are many cases where automated adjustments can be made. F.e. if the z_pt_cor is working fine, then we can adjust the two SR50 to the end of the ablation period. Or if z_pt_cor is missing but that z_stake is available, then z_stake can be used to describe the ablation of ice instead of the pressure transducer. There are many test being done in combineSurfaceHeight corresponding to recurring situations where the continuity in at least one of the three surface-sensing instruments would allow to adjust the two others.
However, there are still many situations where manual adjustments are needed: e.g. when the station, the stake assembly or the pressure transducer are being maintained, the shift introduced needs to be removed manually. So it is an iterative process between what can be done automatically and what needed to be done manually. A clear tutorial on how to make those adjustment should follow once the PR is implemented.
The result is a z_surf_combined ensuring continuity from year to year and combining information from all three surface-sensing instruments. For the ablation stations, the minimum of z_surf_combined in the past one year (or in other words the "only-decreasing" version of z_surf_combined) represents z_ice_surf. The different between z_surf_combined and z_ice_surf (always positive) is the snow_height.
The surface height processing does the following:
It calculates z_surf_1 from z_boom_u, z_surf_2 from either z_boom_l or z_boom_l, and z_ice_surf from z_pt_cor
After z_surf_1, z_surf_2 and z_ice_surf_1 are created, they are partially adjusted using the QC adjustData function.
The processing is different is the station is defined as site_type = 'accumulation' or site_type = 'ablation' in the updated config files on aws-l0
For the accumulation sites, the z_surf_combined and snow_height are both defined as the average of z_surf_1 and z_surf_2 (after the jumps due to maintenance are being removed)
For the ablation sites, combineSurfaceHeight makes a list of tests and adjustments based on recurrent situations at the station. It first determines for each year the duration of the ablation period (first from z_pt_cor, and if not available, from z_stake, and if not available from the month). Once those periods estimated, then the adjustment loop can begin and is basically a long list of test like "if pressure transducer was working all summer, then adjust the the surface height derived from the two SR50s to the ice surface height on the last ablation day".
Eventually z_surf_combined is taken (to put it simply) as the combination of z_pt_cor and z_stake in the ablation period and as the combination of z_boom_u and z_stake in the summer. It should be continuous from year to year and should take its reference "zero" height as the surface height at installation. It only includes surface processes and therefore does not describes completely the elevation change at that site. For this the height change due to ice dynamic should be added to z_surf_combined
For each timestamp, the minimum of z_surf_combined in the past one year (or in other words the "only-decreasing" version of z_surf_combined) represents z_ice_surf. The different between z_surf_combined and z_ice_surf (always positive) is the snow_height.
Thermistor depth calculation
Besides a continuous surface height, the thermistor depth calculation needs a list of thermistor re-installation and, if available, the non-standard depths at which they were installed. This info was digitized from maintenance sheet and posted on PROMICE-AWS-data-issues (we can discuss where we can have this file so that it is easy to update and easy to pull by our processing scripts.
The depth for each thermistor d_t_* s calculated from surface height change (burial when surface height increases and inversely) and depth are reset each time there is a maintenance. These depth then indicate whenever thermistors are likely melting out due to ablation, and therefore can be used to further clean the t_i_* variables.
After those depths are calculates, and interpolation function allows to calculate, for each timestamp the 10 m subsurface temperature t_i_10m (if there are thermistors close enough to that depth). Note that, in the accumulation area, we assume that the snow and firn compaction does not affect the spacing between the thermistor.
This PR builds on top of #253 as it adds functionality to L2toL3.py.
Surface height processing
The idea of the surface height processing is that there are many cases where automated adjustments can be made. F.e. if the z_pt_cor is working fine, then we can adjust the two SR50 to the end of the ablation period. Or if z_pt_cor is missing but that z_stake is available, then z_stake can be used to describe the ablation of ice instead of the pressure transducer. There are many test being done in combineSurfaceHeight corresponding to recurring situations where the continuity in at least one of the three surface-sensing instruments would allow to adjust the two others.
However, there are still many situations where manual adjustments are needed: e.g. when the station, the stake assembly or the pressure transducer are being maintained, the shift introduced needs to be removed manually. So it is an iterative process between what can be done automatically and what needed to be done manually. A clear tutorial on how to make those adjustment should follow once the PR is implemented.
The result is a
z_surf_combined
ensuring continuity from year to year and combining information from all three surface-sensing instruments. For the ablation stations, the minimum ofz_surf_combined
in the past one year (or in other words the "only-decreasing" version ofz_surf_combined
) representsz_ice_surf
. The different betweenz_surf_combined
andz_ice_surf
(always positive) is thesnow_height
.The surface height processing does the following:
It calculates
z_surf_1
fromz_boom_u
,z_surf_2
from eitherz_boom_l
orz_boom_l
, andz_ice_surf
fromz_pt_cor
After
z_surf_1
,z_surf_2
andz_ice_surf_1
are created, they are partially adjusted using the QC adjustData function.The processing is different is the station is defined as
site_type = 'accumulation'
orsite_type = 'ablation'
in the updated config files onaws-l0
For the accumulation sites, the
z_surf_combined
andsnow_height
are both defined as the average ofz_surf_1
andz_surf_2
(after the jumps due to maintenance are being removed)For the ablation sites, combineSurfaceHeight makes a list of tests and adjustments based on recurrent situations at the station. It first determines for each year the duration of the ablation period (first from z_pt_cor, and if not available, from z_stake, and if not available from the month). Once those periods estimated, then the adjustment loop can begin and is basically a long list of test like "if pressure transducer was working all summer, then adjust the the surface height derived from the two SR50s to the ice surface height on the last ablation day".
Eventually
z_surf_combined
is taken (to put it simply) as the combination ofz_pt_cor
andz_stake
in the ablation period and as the combination ofz_boom_u
andz_stake
in the summer. It should be continuous from year to year and should take its reference "zero" height as the surface height at installation. It only includes surface processes and therefore does not describes completely the elevation change at that site. For this the height change due to ice dynamic should be added toz_surf_combined
For each timestamp, the minimum of
z_surf_combined
in the past one year (or in other words the "only-decreasing" version ofz_surf_combined
) representsz_ice_surf
. The different betweenz_surf_combined
andz_ice_surf
(always positive) is thesnow_height
.Thermistor depth calculation
Besides a continuous surface height, the thermistor depth calculation needs a list of thermistor re-installation and, if available, the non-standard depths at which they were installed. This info was digitized from maintenance sheet and posted on PROMICE-AWS-data-issues (we can discuss where we can have this file so that it is easy to update and easy to pull by our processing scripts.
The depth for each thermistor
d_t_*
s calculated from surface height change (burial when surface height increases and inversely) and depth are reset each time there is a maintenance. These depth then indicate whenever thermistors are likely melting out due to ablation, and therefore can be used to further clean thet_i_*
variables.After those depths are calculates, and interpolation function allows to calculate, for each timestamp the 10 m subsurface temperature
t_i_10m
(if there are thermistors close enough to that depth). Note that, in the accumulation area, we assume that the snow and firn compaction does not affect the spacing between the thermistor.