Ocean Color Forum

The forum is locked.
The Ocean Color Forum has transitioned over to the Earthdata Forum (https://forum.earthdata.nasa.gov/). The information existing below will be retained for historical reference. Please sign into the Earthdata Forum for active user support.
Topic Products and Algorithms / Satellite Data Products & Algorithms / chlor_a Hu color index wavebands and coefficients
Hi everyone!
I'm trying to figure out how to implement NASA's chlor_a algorithm in R for MODIS-Aqua, SeaWiFS, and VIIRS-SNPP. The OCx part of it has been no problem, but I'm having trouble finding which wavebands and coefficients to use for the Hu color index algorithm. I've been looking through the 3 sources below and gathering bits and pieces of information, but it would be nice to have a full table of sensor-specific wavebands and optimized coefficients.
NASA chlor_a algorithms
https://oceancolor.gsfc.nasa.gov/atbd/chlor_a/
Hu et al. (2012)
Chlorophyll-a algorithms for oligotrophic oceans: A novel approach based on three‐band reflectance difference
https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2011JC007395
Hu et al. (2019)
Improving Satellite Global Chlorophyll-a Data Products Through Algorithm Refinement and Data Recovery
https://www.researchgate.net/publication/331098463_Improving_Satellite_Global_Chlorophyll_a_Data_Products_Through_Algorithm_Refinement_and_Data_Recovery
Can anyone point me in the right direction?
Thanks!
-Stephanie
I'm trying to figure out how to implement NASA's chlor_a algorithm in R for MODIS-Aqua, SeaWiFS, and VIIRS-SNPP. The OCx part of it has been no problem, but I'm having trouble finding which wavebands and coefficients to use for the Hu color index algorithm. I've been looking through the 3 sources below and gathering bits and pieces of information, but it would be nice to have a full table of sensor-specific wavebands and optimized coefficients.
NASA chlor_a algorithms
https://oceancolor.gsfc.nasa.gov/atbd/chlor_a/
Hu et al. (2012)
Chlorophyll-a algorithms for oligotrophic oceans: A novel approach based on three‐band reflectance difference
https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2011JC007395
Hu et al. (2019)
Improving Satellite Global Chlorophyll-a Data Products Through Algorithm Refinement and Data Recovery
https://www.researchgate.net/publication/331098463_Improving_Satellite_Global_Chlorophyll_a_Data_Products_Through_Algorithm_Refinement_and_Data_Recovery
Can anyone point me in the right direction?
Thanks!
-Stephanie
The definitive reference for details of algorithms used by
Building
l2gen
is the OCSSW source ($OCSSWROOT/ocssw_src/src/l2gen/get_chl.c
). Many of the coefficients used by l2gen
come from sensor-specific parameter files so it is often easier if you can build l2gen
from source locally and add some print statements. If you have access to macOS or linux you can install the current source from the SeaDAS 8 GUI. I think the instructions for installing the OCSSW software manually are outdated, but that may not matter for the Hu algorithm.Building
l2gen
should be straightforward if you can arrange to use one of the OS versions used by NASA, e.g., in a VM. Newer linux versions have removed some functions from glibc
so the 3rd party sources won't build.
Stephanie,
The Hu CI does not have sensor specific coefficients. The first reference you list identifies the current coefficients (and bands) to use for the OCx alogrithms.
Coincidentally, I was just fiddling around with an analysis and wanted to apply the OCx/Hu algorithms to some insitu data...I used Python, but should be easy enough to translate to R. Since you have OCx under control, here's what you can do for Hu and "OCI" (the blending we do operationally for our chlor_a product). (The functions below are based on the code George referenced.)
Hu from the 2019 paper (the coefficients differ from the 2012 paper, but otherwise it's the same):
To blend the OCx and Hu. This uses the 2019 paper as well, but with a lower max threshold value because the Hu algorithm with the 2019 coefficients doesn't produce a value above about 0.37 mg/m3. To mimic what we do operationally (until we reprocess), set
The OCx coefficients for the reprocessing will also change to those from the O'Reilly and Werdell (2019) paper:
https://doi.org/10.1016/j.rse.2019.04.021
Hope this helps.
Sean
The Hu CI does not have sensor specific coefficients. The first reference you list identifies the current coefficients (and bands) to use for the OCx alogrithms.
Coincidentally, I was just fiddling around with an analysis and wanted to apply the OCx/Hu algorithms to some insitu data...I used Python, but should be easy enough to translate to R. Since you have OCx under control, here's what you can do for Hu and "OCI" (the blending we do operationally for our chlor_a product). (The functions below are based on the code George referenced.)
Hu from the 2019 paper (the coefficients differ from the 2012 paper, but otherwise it's the same):
def hu(rrs443,rrs555,rrs670):
w = np.array([443., 555., 670.])
a = np.array([-0.4287, 230.47])
#For the 2012 version use:
# a = np.array([-0.4909, 191.6590])
chl = np.NaN
ci = np.min([rrs555 - (rrs443 + (w[1] - w[0]) / (w[2] - w[0])*(rrs670 - rrs443)), 0.0]);
if ci <= 0.0:
chl = np.power(10.0,(a[0] + a[1] * ci))
return chl
To blend the OCx and Hu. This uses the 2019 paper as well, but with a lower max threshold value because the Hu algorithm with the 2019 coefficients doesn't produce a value above about 0.37 mg/m3. To mimic what we do operationally (until we reprocess), set
t1=0.15; t2=0.20
:def oci(hu,ocx):
t1 = 0.25
t2 = 0.35
chl = np.NaN
if ~np.isnan(hu):
if (hu <= t1):
chl = hu
else:
if (hu >= t2):
chl = ocx
else:
chl = hu * (t2 - hu) / (t2 - t1) + ocx * (hu - t1) / (t2 - t1);
else:
chl = ocx
return chl
The OCx coefficients for the reprocessing will also change to those from the O'Reilly and Werdell (2019) paper:
https://doi.org/10.1016/j.rse.2019.04.021
Hope this helps.
Sean
Topic Products and Algorithms / Satellite Data Products & Algorithms / chlor_a Hu color index wavebands and coefficients
Powered by mwForum 2.29.7 © 1999-2015 Markus Wichitill