chlor_a Hu color index wavebands and coefficients

Use this Forum to find information on, or ask a question about, NASA Earth Science data.
Post Reply
clays_bio
Posts: 12
Joined: Tue Oct 16, 2018 10:45 am America/New_York
Answers: 0

chlor_a Hu color index wavebands and coefficients

by clays_bio » Thu Feb 25, 2021 6:49 pm America/New_York

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

Tags:

gnwiii
Posts: 713
Joined: Fri Jan 29, 2021 5:51 pm America/New_York
Answers: 2
Has thanked: 1 time

chlor_a Hu color index wavebands and coefficients

by gnwiii » Sat Feb 27, 2021 11:20 am America/New_York

The definitive reference for details of algorithms used by 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.

OB.DAAC - SeanBailey
User Services
User Services
Posts: 1464
Joined: Wed Sep 18, 2019 6:15 pm America/New_York
Answers: 1
Been thanked: 4 times

chlor_a Hu color index wavebands and coefficients

by OB.DAAC - SeanBailey » Sat Feb 27, 2021 11:49 am America/New_York

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):
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

clays_bio
Posts: 12
Joined: Tue Oct 16, 2018 10:45 am America/New_York
Answers: 0

Re: chlor_a Hu color index wavebands and coefficients

by clays_bio » Tue Mar 02, 2021 7:04 am America/New_York

Thanks for your help! That clears up my question about the coefficients, but I'm still a little unclear about the non-SeaWiFS wavebands used in the algorithm:

The chlor_a description page says the algorithm uses the instrument-specific wavebands closest to 443, 555, and 670... so for MODIS this should be 443, 555, 667, and for VIIRS 443, 551, 671.
... but I've read the algorithm uses MODIS 547 instead... is this true, and is it for consistency with the OCx algorithm?
Also I've seen mentions in those papers of the non-SeaWiFS green bands (MODIS 547 and VIIRS 551) being shifted to 555nm using results from regressions with NOMAD data, but the details don't appear to be in the paper, and I didn't see any mention of them doing the same with the red bands...
... Are the MODIS and VIIRS bands shifted to 555nm and 670nm, and if so, what factor is being used?

Thanks!

-Steph

OB.DAAC - SeanBailey
User Services
User Services
Posts: 1464
Joined: Wed Sep 18, 2019 6:15 pm America/New_York
Answers: 1
Been thanked: 4 times

Re: chlor_a Hu color index wavebands and coefficients

by OB.DAAC - SeanBailey » Tue Mar 02, 2021 8:47 am America/New_York

The MODIS "ocean" band closest to the SeaWiFS 555nm band is 547nm (which was originally defined as 551nm, but turned out to be 547nm, so we stopped calling it 551nm. The SNPP-VIIRS band is 551nm, but the NOAA-20-VIIRS band is 556nm. Clear as mud.). The MODIS 555nm band is a "land" band and has quite a wide spectral bandpass. It also has a lower SNR than the 547nm "ocean" band.

Since the impact of such a small shift in wavelength from 547 to 555nm can be rather large (8-10% in clear waters) ,there is a conversion factor applied to the Rrs from the non-555nm bands to approximate Rrs at 555nm. Yes, it was derived from the NOMAD dataset, but I don't think this method was ever published. We don't exactly hide it, though I'll admit it's not exactly obvious where to find it...the function to derive this conversion factor can be found here:
https://oceancolor.sci.gsfc.nasa.gov/do ... ource.html. It's simple enough that you should have no trouble converting it to R.

The difference in the Rrs for the red bands is *much* smaller and so a similar adjustment was not derived for the 670nm-ish bands.

Regards,
Sean

clays_bio
Posts: 12
Joined: Tue Oct 16, 2018 10:45 am America/New_York
Answers: 0

Re: chlor_a Hu color index wavebands and coefficients

by clays_bio » Wed Mar 03, 2021 9:09 am America/New_York

Awesome! I think that answers all my questions about it. In the future it would be good to have this info available on the chlor_a description page (formula for the conversion of the color index to chlorophyll and the current coefficients in use, the blending formula, and the link to the conv_rrs_to_555 function for different green wavebands).

Thanks for all your help!

Post Reply