Unexpected difference in BT from VIIRS compact and VIIRS sdr
Describe the bug When comparing BT for channel 11µm and 12µm between VIIRS compact and VIIRS sdr there is a difference around 0.2K to 0.4K. I think the problem is the CentralWaveLength attributs in the VIIRS compact files which is set to 11.81µm for M16 both for NOAA-21 and SNPP in the VIIRS compact files all though they have quite different SDRS. I manually changed the CentralWaveLenght to 11.89 for NOAA-21 M16 and then BT temperatures difference became much smaller. A suggestion is we use central wave length from pyspectral instead of the CentralWaveLength attribute to for the BT calculations.
Cloud products using the VIIRS compact look bad for NOAA-21 as the feature 11µm - 12µm has too high values.
To Reproduce
# Your code here
Expected behavior I expected smaller differences
Actual results Text output of actual results or error messages including full tracebacks if applicable.
Screenshots If applicable, add screenshots to help explain your problem.
Environment Info:
- OS: [e.g. OSX, Windows, Linux]
- Satpy Version: [e.g. 0.9.0]
- PyResample Version:
- Readers and writers dependencies (when relevant): [run
from satpy.utils import check_satpy; check_satpy()]
Additional context Add any other context about the problem here.
En example image showing 11µm - 12µm feature for a NOAA-21 scene 20250818 12:32. SMHI is using SDR and EARS are using VIIRS compact for the BT.
Quite dramatic differences indeed! Just to refresh my memory, does this mean that the SDR reader uses the central wavelength from pyspectral as you suggest doing for the compact reader? And just to make sure I have the whole picture, how do you conclude that the compact reader has a problem and not the SDR reader?
In the SDR files there are already brightness temperatures retrieved and satpy does no conversion. So I assume these are correct.
Also looking at level 2 cloud products for the same scene NOAA-20 SDR, NOAA-20 VIIRS COMPACT, NOAA-21 SDR all look more similar and fine and NOAA-21 VIIRS COMPACT is the one that has problems.
And it does not make sense that NOAA-21 and NOAA-20 should use the same central wavelength for the conversion as the SRF are different.
I have compared the data using level1c4pps which uses the cf_writer to write nc files.
I agree with Nina that the SDR file brightness temperatures should be considered correct and the BTs from the compact files are not correct.
However, to me it looks like this is an issue with the compact files themselves and therefore it needs to be addressed by EUMETSAT and not with changes in satpy. The reason I say this is because even if we adjust satpy to use the central wavelength from pyspectral this will not solve the problem: There's also two additional coefficients, BandCorrectionCoefficientA and BandCorrectionCoefficientB that are needed to compute the BT for the CVIIRS thermal bands. The values of these coefficients is incorrect for NOAA-21 and possibly incorrect for SNPP+N20 as well.
Furthermore, the corresponding coefficients for the VIS channels, EquivalentWidth and IntegratedSolarIrradiance are incorrect as well - meaning that the reflectance data calculated for the CVIIRS files is also likely to be wrong.
In short, EUM must fix the actual compact VIIRS data attributes, and there's only a limited amount we can do in satpy to solve this. That said, as a temporary measure it would help reduce the bias to adopt Nina's suggestion of using the central wavelength from pyspectral rather than that given in the data files...
Just now looking at an S-NPP and a NOAA-21 SVMC file from the EARS VIIRS. And indeed the attributes in the Radiance dataset are identical between the both! That is a bit unexpected and suspicious I would say. I here show the J02 attributes. M16 that is.
And here is what I see for NOAA-20:
So looks like coefficients have been copied from S-NPP to NOAA-21.
Yes, indeed. This matches my understanding. Hopefully Nina hears back from EUM about this soon.
So looks like coefficients have been copied from S-NPP to NOAA-21.
Hmm, well, the CentralWaveLength is identical between S-NPP and NOAA-20! That is very suspicious too, So apparently not only a problem for NOAA-21
With Pyspectral I get the central wavelength for detector 1 for S-NPP, NOAA-21 and NOAA-20 as:
In [15]: print(npp.rsr['M16']['det-1']['central_wavelength'])
11.826792833719056
In [16]: print(j02.rsr['M16']['det-1']['central_wavelength'])
11.918104312810028
In [22]: print(j01.rsr['M16']['det-1']['central_wavelength'])
11.86087432494572
It does vary a bit between detectors, so I assume the above should be an average over all detectors?
I have got the information from EUMETSAT that this is a configuration issue on their side. And an update is planned for 17th September.
@adybbroe @ninahakansson can you confirm things look better now?
Yes, it looks much better when comparing the locally produced NWCSAF/PPS products with the centrally produced ones (using the same input as provided by the EARS-VIIRS service). See here https://nwcsaf.smhi.se/EARSNWC_validation.php or the plot here below:
I can also confirm that the attributes have now changed in the NOAA-21 files:
The NOAA-20 and S-NPP attributes (also for Band 16) from most recent EARS-VIIRS files receiedv here:
I still find it a bit odd that the central wavelengths are identical in the attributes beweten S-NPP and NOAA-20, but EUMETSAT says it is correct....
Yes indeed, that is not correct - SNPP and N20 have different spectral responses in that band...the central wavelength given above doesn't match either satellite!!
what does the sdr files say for central wavelength? It should be the same between sdr and compact I guess...