Pollynet_Processing_Chain icon indicating copy to clipboard operation
Pollynet_Processing_Chain copied to clipboard

Height generation and absolute zero deviation

Open yZenox opened this issue 8 months ago • 3 comments

@georgmueller and I identified two issues within the processing chain.

  1. The first issue concerns the Height generation in the subfile pollyPreprocess.m. Specifically, this section of the code:

%% Height (first bin height correction) data.height = double((0:(size(data.signal, 2)-1)) * data.hRes * cos(data.zenithAng / 180 * pi) + config.firstBinHeight); % [m] data.alt = double(data.height + config.asl); % geopotential height data.distance0 = double(data.height ./ cos(data.zenithAng / 180 * pi)); % distance between range bin and system.

data.distance0 is used throughout the PPC, while data.height is stored in the generated nc files. It seems that the distance0 is calculated by dividing height by the zenith angle component, but we suspect a miscalculation occurs because the offset (config.firstBinHeight) is not considered. This leads to a general offset in the height bins, deviating from the expected 3.75m (like in pollyXT arielle).

We suggest updating the distance calculation to: data.distance0 = double((0:(size(data.signal, 2)-1)) * data.hRes + config.firstBinHeight);

  1. The second issue involves the absolute zero constant used in the PPC. The constant is set to 273.17, but the physical value should be -273.15°C (source: [Wikipedia](https://en.wikipedia.org/wiki/Absolute_zero)). Is it possible that the triplet point of water, which is 273.16K, was intended instead?

yZenox avatar Apr 03 '25 11:04 yZenox

Thanks for notifying, @georgmueller @yZenox

Issue 1 would be correctly fixed with: data.height = double((0:(size(data.signal, 2)-1)) * data.hRes * cos(data.zenithAng / 180 * pi) + config.firstBinHeight* cos(data.zenithAng / 180 * pi));

and your proposed solution:

data.distance0 = double((0:(size(data.signal, 2)-1)) * data.hRes + config.firstBinHeight);

Correct? Because the firstbin height need also be to adapted according to the tilting angle....

HolgerPollyNet avatar Apr 04 '25 09:04 HolgerPollyNet

For your second point, could you refer to the exact lines in the code to know where and for what it is used?

HolgerPollyNet avatar Apr 04 '25 09:04 HolgerPollyNet

I think youre right. I wasnt sure what the physical meaning of the first height bin is, but it seems tied to the hRes parameter as its exactly half of it. Therefor its probably the distance from first bin to device, not the height. So data.height must be modified the way you suggetsed.

The second issue, occurs throughout the PPC. The first time here: [mBsc532, mExt532] = rayleigh_scattering(532, pressure, temperature + 273.17, 380, 70); Seems like its used when calling the rayleigh_scattering, pollyRamanExt and pollyRamanExtStd function. So probably every time the temperature is needed in Kelvin. And also within the subfiles like pollyOVLCalcRaman.m 273.17 is added to the temperature data.

yZenox avatar Apr 04 '25 10:04 yZenox