FLO Functions
Background
The Ocean Observatories Initiative deploys the WET Labs ECO fluorometer family across its moored, profiling, and mobile platforms to measure fluorescence and optical backscatter. Two instrument classes are covered by this module.
| Class | Hardware | Channels | Designator meaning |
|---|---|---|---|
| FLORT | WET Labs ECO Triplet | 3 | Fluorometer, Three Wavelength |
| FLORD | WET Labs ECO Dual | 2 | Fluorometer, Two Wavelength |
Fixed-platform instruments include a wiper to actively limit biofouling. Mobile-platform instruments (profilers, gliders, AUVs) use only passive mitigation (copper faceplates).
flo_functions.py converts raw L0 count data from these instruments into
three L1 data products — fluorometric chlorophyll-a concentration
(CHLAFLO_L1), fluorometric CDOM concentration (CDOMFLO_L1), and the
volume scattering function (FLUBSCT_L1) — and one L2 product, the total
optical backscatter coefficient (FLUBSCT_L2). All calibration coefficients
are from factory calibration sheets.
CHLAFLO and CDOMFLO — Fluorescence Concentrations
Raw output from the FLORD/FLORT instrument is in counts, ranging from 0 to approximately 4096. The L1 fluorescence concentrations are computed from a linear scale-and-offset equation using factory-supplied calibration coefficients:
where \(C_\text{output}\) is the raw count output, \(C_\text{dc}\) is the dark count from the factory calibration sheet, and SF is the scale factor from the factory calibration sheet. The same equation applies to both CHLAFLO and CDOMFLO; only the calibration coefficients and units differ.
For CHLAFLO (chlorophyll-a), SF has units of \(\mu g\ L^{-1}\ \text{count}^{-1}\) and the output is in \(\mu g\ L^{-1}\). The instrument measures at excitation/emission wavelengths of 470/695 nm.
For CDOMFLO, SF has units of \(\text{ppb}\ \text{count}^{-1}\) and the output is in parts per billion (ppb). The instrument measures at excitation/emission wavelengths of 370/460 nm.
The dark count is the instrument's signal output in clean water with black tape over the detector, measured at the factory. The scale factor is calculated at the factory by obtaining a consistent output in a solution of known concentration and subtracting the dark count.
FLORT/FLORD gliders and AUVs: Raw data from fluorometers on gliders
and AUVs are processed onboard the vehicle using vendor software and
transmitted already in decimal engineering units; ion-functions is not
invoked for those deployments.
FLUBSCT_L1: Total Volume Scattering Function
The L1 optical backscatter product is the total volume scattering function \(\beta(\theta, \lambda)\) (\(\text{m}^{-1}\ \text{sr}^{-1}\)) at the instrument's effective (centroid) backscatter angle \(\theta\) and measurement wavelength \(\lambda\). It is computed from raw counts using the same scale-and-offset equation as the fluorescence products:
where SF has units of \((\text{m}^{-1}\ \text{sr}^{-1})\ \text{count}^{-1}\). Raw counts range from 0 to approximately 4210. The dark count and scale factor are from the factory calibration sheet.
The centroid angle \(\theta\) and chi factor \(\chi\) (used below) are instrument-dependent:
| Instrument type | OOI classes | \(\theta\) | \(\chi\) |
|---|---|---|---|
| ECO 3-channel (FLORT D/J/K/M/N/O, FLORD D) | FLORT, FLORD | 124 deg | 1.076 |
| ECO 2-channel (FLORD G/L/M, FLNTU A) | FLORD, FLNTU | 140 deg | 1.096 |
All FLORD and FLORT backscatter channels use a nominal measurement wavelength of 700 nm. The ECO-BB3 (FLORT series O) is an exception with three backscatter channels at different visible wavelengths.
FLUBSCT_L2: Total Optical Backscatter Coefficient
The L2 product is the total optical backscatter coefficient \(b_b\) (\(\text{m}^{-1}\)), computed in four steps:
Step 1 — Compute the seawater volume scattering function \(\beta_\text{sw}\) and total seawater scattering coefficient \(b_\text{sw}\) using the Zhang et al. (2009) model with co-located CTD temperature and salinity:
Step 2 — Subtract the seawater contribution to obtain the particulate volume scattering function:
Step 3 — Convert to the particulate backscattering coefficient using the chi factor \(\chi\):
The factor of \(2\pi\) arises from integration over the polar angle. The chi factor relates the particulate volume scattering at angle \(\theta\) to the total particulate backscattering coefficient integrated over all backward angles.
Step 4 — Add the seawater backscattering contribution. Because seawater scattering is symmetric in forward and backward directions, the backward component is half the total:
Zhang et al. (2009) Seawater Scattering Model
The seawater scattering model (flo_zhang_scatter_coeffs) computes the
volume scattering function of pure seawater at a specified angle and the
total seawater scattering coefficient. The model sums contributions from
density fluctuations and concentration fluctuations:
The density fluctuation term \(\beta_\text{df}\) depends on the isothermal compressibility (Lepple and Millero, 1971), absolute temperature, and the density derivative of the refractive index (PMH model). The concentration fluctuation term \(\beta_\text{cf}\) depends on the partial derivative of the refractive index with respect to salinity (Quan and Fry, 1994) and the water activity (Millero and Leung, 1976). The total scattering coefficient is obtained by integrating \(\beta_{90,\text{sw}}\) over all angles. The volume scattering function at angle \(\theta\) is then:
where \(\delta = 0.039\) is the default depolarization ratio (Farinato and Roswell, 1976). Seawater density uses the UNESCO (1981) formulation. The refractive index of air uses the Ciddor (1996) formula.
Core functions
flo_scale_and_offset(counts_output, counts_dark, scale_factor)
Apply scale-and-offset calibration to raw fluorometer counts.
Converts raw L0 digital counts from WET Labs ECO fluorometers to calibrated L1 concentration or volume scattering function values. This is the core algorithm shared by flo_chla (CHLAFLO_L1), flo_cdom (CDOMFLO_L1), and flo_beta (FLUBSCT_L1).
| Parameters: |
|
|---|
| Returns: |
|
|---|
Source code in ion_functions/data/flo_functions.py
347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 | |
Additional Notes
This is the shared core algorithm for all three L1 FLORT/FLORD data
products. The named OOI wrappers flo_chla, flo_cdom, and flo_beta
each call this function with product-specific calibration coefficients.
External users should call this function directly rather than the wrappers
when a single computation is needed for multiple products.
History
| Date | Author | Change |
|---|---|---|
| 2014-01-30 | Craig Risien | Initial code |
| 2023-08-15 | Samuel Dahlberg | Removed use of numexpr |
| 2025-04-17 | Christopher Wingard | Converted to NumPy docstring format; updated documentation |
flo_bback_total(beta, degC, psu, theta, wlngth, xfactor)
Compute total optical backscatter coefficient (FLUBSCT_L2).
Derives the total (seawater + particulate) optical backscatter coefficient from the L1 volume scattering function (FLUBSCT_L1) and co-located CTD data. The seawater volume scattering function and total scattering coefficient are computed using the Zhang et al. (2009) model via flo_zhang_scatter_coeffs.
| Parameters: |
|
|---|
| Returns: |
|
|---|
Notes
The chi factor is a function of angle and sensor geometry. It scales particulate scattering at the measurement angle to the particulate total backscatter coefficient (the integral over all backward angles of the volume scattering function due to particles). Values for theta and xfactor are instrument-dependent; see the DPS for FLUBSCT (OOI, 2014, DCN 1341-00540) for details.
Source code in ion_functions/data/flo_functions.py
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | |
History
| Date | Author | Change |
|---|---|---|
| 2013-07-16 | Christopher Wingard | Initial code |
| 2014-04-23 | Christopher Wingard | Revised to address integration issues and meet DPS intent |
| 2015-10-26 | Russell Desiderio | Removed default argument values; revised documentation |
| 2025-04-17 | Christopher Wingard | Converted to NumPy docstring format; updated documentation |
Helper Functions
flo_zhang_scatter_coeffs(degC, psu, theta, wlngth, delta=0.039)
Compute seawater scattering coefficients using the Zhang et al. (2009) model.
Calculates the volume scattering function of pure seawater at a given angle (betasw) and the total seawater scattering coefficient (bsw) at a given wavelength. The computation follows the model described in Zhang et al. (2009) and implemented in the DPS for FLUBSCT (OOI, 2014, DCN 1341-00540). This code is derived from MATLAB code provided by Dr. Xiaodong Zhang, University of North Dakota.
| Parameters: |
|
|---|
| Returns: |
|
|---|
Notes
The model combines scattering contributions from density fluctuations and concentration fluctuations. Isothermal compressibility is from Lepple and Millero (1971). Seawater density is from UNESCO Technical Papers in Marine Science No. 38 (1981). Water activity is from Millero and Leung (1976). The refractive index of seawater is from Quan and Fry (1994) and the refractive index of air is from Ciddor (1996). The PMH model is used for the density derivative of the refractive index.
Source code in ion_functions/data/flo_functions.py
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | |
History
| Date | Author | Change |
|---|---|---|
| 2013-07-15 | Christopher Wingard | Initial code |
| 2023-08-15 | Samuel Dahlberg | Removed use of numexpr |
| 2025-04-17 | Christopher Wingard | Converted to NumPy docstring format; updated documentation |
flo_refractive_index(wlngth, degC, psu)
Compute the absolute refractive index of seawater.
Helper function for flo_zhang_scatter_coeffs. Computes the absolute refractive index of seawater (nsw) and its partial derivative with respect to salinity (dnds). The refractive index of air uses the Ciddor (1996) formula; the refractive index of seawater uses the Quan and Fry (1994) formula.
| Parameters: |
|
|---|
| Returns: |
|
|---|
Source code in ion_functions/data/flo_functions.py
214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 | |
History
| Date | Author | Change |
|---|---|---|
| 2014-02-21 | Christopher Wingard | Initial code |
| 2023-08-15 | Samuel Dahlberg | Removed use of numexpr |
| 2025-04-17 | Christopher Wingard | Converted to NumPy docstring format; updated documentation |
flo_isotherm_compress(degC, psu)
Compute seawater isothermal compressibility.
Helper function for flo_zhang_scatter_coeffs. Computes seawater isothermal compressibility from the secant bulk modulus using Millero (1980) for pure water and the seawater correction following Lepple and Millero (1971).
| Parameters: |
|
|---|
| Returns: |
|
|---|
Source code in ion_functions/data/flo_functions.py
265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 | |
History
| Date | Author | Change |
|---|---|---|
| 2014-02-21 | Christopher Wingard | Initial code |
| 2023-08-15 | Samuel Dahlberg | Removed use of numexpr |
| 2025-04-17 | Christopher Wingard | Converted to NumPy docstring format; updated documentation |
flo_density_seawater(degC, psu)
Compute the density of seawater.
Helper function for flo_zhang_scatter_coeffs. Computes seawater density from the UNESCO Technical Papers in Marine Science No. 38 (1981) formulation.
| Parameters: |
|
|---|
| Returns: |
|
|---|
Source code in ion_functions/data/flo_functions.py
300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 | |
History
| Date | Author | Change |
|---|---|---|
| 2014-02-21 | Christopher Wingard | Initial code |
| 2023-08-15 | Samuel Dahlberg | Removed use of numexpr |
| 2025-04-17 | Christopher Wingard | Converted to NumPy docstring format; updated documentation |
Wrapper Functions
flo_scat_seawater(degC, psu, theta, wlngth, delta=0.039)
Compute the total scattering coefficient of pure seawater.
Thin wrapper around flo_zhang_scatter_coeffs that returns only the total scattering coefficient bsw. Used where only bsw is required without the volume scattering function betasw.
| Parameters: |
|
|---|
| Returns: |
|
|---|
Source code in ion_functions/data/flo_functions.py
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | |
History
| Date | Author | Change |
|---|---|---|
| 2014-04-24 | Christopher Wingard | Initial code |
| 2025-04-17 | Christopher Wingard | Converted to NumPy docstring format; updated documentation |
The three functions below are named-product wrappers that apply
flo_scale_and_offset under instrument- and product-specific names to
satisfy the OOI single-output data product requirement. External users
should call flo_scale_and_offset directly.
flo_chla(counts_output, counts_dark, scale_factor)
OOI single-output wrapper for CHLAFLO_L1. Returns fluorometric chlorophyll-a concentration [ug L^-1].
See Also
flo_scale_and_offset : Core algorithm; use directly where the same scale-and-offset calculation is needed for other data products.
Source code in ion_functions/data/flo_functions.py
376 377 378 379 380 381 382 383 384 385 386 387 | |
History
| Date | Author | Change |
|---|---|---|
| 2014-01-30 | Craig Risien | Initial code |
| 2025-04-17 | Christopher Wingard | Converted to NumPy docstring format; updated documentation |
flo_cdom(counts_output, counts_dark, scale_factor)
OOI single-output wrapper for CDOMFLO_L1. Returns fluorometric CDOM concentration [ppb].
See Also
flo_scale_and_offset : Core algorithm; use directly where the same scale-and-offset calculation is needed for other data products.
Source code in ion_functions/data/flo_functions.py
390 391 392 393 394 395 396 397 398 399 400 401 | |
History
| Date | Author | Change |
|---|---|---|
| 2014-01-30 | Craig Risien | Initial code |
| 2025-04-17 | Christopher Wingard | Converted to NumPy docstring format; updated documentation |
flo_beta(counts_output, counts_dark, scale_factor)
OOI single-output wrapper for FLUBSCT_L1. Returns the volume scattering function at the instrument centroid angle [m^-1 sr^-1].
See Also
flo_scale_and_offset : Core algorithm; use directly where the same scale-and-offset calculation is needed for other data products. flo_bback_total : Computes FLUBSCT_L2 from the L1 beta value.
Source code in ion_functions/data/flo_functions.py
404 405 406 407 408 409 410 411 412 413 414 415 416 | |
History
| Date | Author | Change |
|---|---|---|
| 2014-01-30 | Craig Risien | Initial code |
| 2015-10-23 | Russell Desiderio | Revised documentation |
| 2025-04-17 | Christopher Wingard | Converted to NumPy docstring format; updated documentation |
References
Ciddor, P. E. (1996). Refractive index of air: New equations for the visible and near infrared. Applied Optics, 35(9), 1566-1573.
Farinato, R. S. and Roswell, R. L. (1976). New values of the light scattering depolarization and anisotropy of water. Journal of Chemical Physics, 65(2), 593-595.
Lepple, F. K. and Millero, F. J. (1971). The isothermal compressibility of seawater near one atmosphere. Deep-Sea Research, 18(12), 1233-1254.
Millero, F. J. and Leung, W. H. (1976). The thermodynamics of seawater at one atmosphere. American Journal of Science, 276, 1035-1077.
Millero, F. J. (1980). The equation of state of seawater. Deep-Sea Research, 27(3-4), 255-274.
Quan, X. and Fry, E. S. (1994). Empirical equation for the index of refraction of seawater. Applied Optics, 33(15), 3241-3243.
Sullivan, J. M., Twardowski, M. S., Zaneveld, J. R. V., and Moore, C. C. (2013). Measuring optical backscattering in water. In A. A. Kokhanovsky (Ed.), Light Scattering Reviews 7 (pp. 189-224). Springer.
UNESCO (1981). Tenth report of the joint panel on oceanographic tables and standards. UNESCO Technical Papers in Marine Science No. 38. UNESCO, Paris.
Zhang, X., Hu, L., and He, M. (2009). Scattering by pure seawater: Effect of salinity. Optics Express, 17(7), 5698-5710.