Parameters

BING provides pre-configured parameter sets for common ocean color analysis scenarios.

Overview

The parameters module provides:

  • Standard parameter configurations for different satellites

  • Model combinations for various water types

  • Prior distributions for Bayesian inference

  • Noise models for uncertainty estimation

Standard Parameter Sets

The bing.parameters.standard module provides ready-to-use configurations:

ExpBricaud + PowerLaw

Most commonly used combination:

from bing.parameters import standard

# Basic configuration
params = standard.expb_pow(
    satellite='PACE',    # 'PACE', 'MODIS', 'SeaWiFS', 'SBG'
    add_noise=True,      # Add realistic noise
    nsteps=40000,        # MCMC steps
    nburn=1000          # Burn-in period
)

print(params.model_names)  # ['ExpBricaud', 'PowerLaw']
print(params.wv_min, params.wv_max)  # 400.0 700.0

GIOP Configuration

NASA’s operational algorithm:

params = standard.giop(
    satellite='PACE',
    set_Sdg=True,        # Fix CDOM slope
    sSdg=0.018           # CDOM slope value
)

GSM Configuration

Empirical model for Case 1 waters:

params = standard.gsm_gsm(
    satellite='MODIS',
    beta=1.0             # Backscattering slope constraint
)

Custom Parameter Sets

Creating Custom Configurations

Use the parameter tuple generator:

from bing.parameters import p_ntuple

# Define custom configuration
custom_params = p_ntuple.gen(
    model_names=['ExpBricaud', 'Lee'],
    satellite='PACE',
    wv_min=400.0,
    wv_max=700.0,
    add_noise=True,
    nsteps=20000,
    nburn=500,
    scl_noise=1.0,
    apriors=[
        {'flavor': 'log_uniform', 'pmin': -6, 'pmax': 2},
        {'flavor': 'uniform', 'pmin': 0.3, 'pmax': 1.0},
        {'flavor': 'gaussian', 'mean': 0.015, 'std': 0.003}
    ],
    bpriors=[
        {'flavor': 'log_uniform', 'pmin': -6, 'pmax': 0}
    ]
)

Parameter Structure

Parameter tuples contain:

# Access parameters
params.model_names      # List of model names
params.satellite       # Satellite configuration
params.wv_min         # Minimum wavelength
params.wv_max         # Maximum wavelength
params.add_noise      # Noise flag
params.scl_noise      # Noise scaling
params.nsteps         # MCMC steps
params.nburn          # Burn-in steps
params.apriors        # Absorption priors
params.bpriors        # Backscattering priors
params.set_Sdg        # CDOM slope flag
params.sSdg           # CDOM slope value
params.beta           # Backscattering constraint

Satellite-Specific Settings

PACE

params = standard.expb_pow(satellite='PACE')
# Optimized for 400-700 nm range
# Higher spectral resolution

MODIS

params = standard.expb_pow(satellite='MODIS')
# Limited bands in visible
# Adjusted noise model

SeaWiFS

params = standard.expb_pow(satellite='SeaWiFS')
# Historical data compatibility
# 8 visible bands

Future Missions (SBG)

params = standard.expb_pow(satellite='SBG')
# Surface Biology and Geology
# Hyperspectral configuration

Prior Distributions

Prior Types

BING supports several prior distribution types:

# Uniform prior
uniform_prior = {
    'flavor': 'uniform',
    'pmin': 0.0,
    'pmax': 1.0
}

# Log-uniform prior (scale-invariant)
log_uniform_prior = {
    'flavor': 'log_uniform',
    'pmin': -6,  # log10(min)
    'pmax': 2    # log10(max)
}

# Gaussian prior
gaussian_prior = {
    'flavor': 'gaussian',
    'mean': 0.5,
    'std': 0.1
}

# Truncated Gaussian
truncated_gaussian = {
    'flavor': 'truncated_gaussian',
    'mean': 0.5,
    'std': 0.1,
    'pmin': 0.0,
    'pmax': 1.0
}

Setting Model-Specific Priors

from bing.priors import priors as bing_priors

# Standard priors for models
model_priors = bing_priors.set_standard_priors(models)

# Custom priors for ExpBricaud model
custom_apriors = [
    {'flavor': 'log_uniform', 'pmin': -6, 'pmax': 2},  # A_ph
    {'flavor': 'uniform', 'pmin': 0.3, 'pmax': 1.0},   # E_ph
    {'flavor': 'gaussian', 'mean': 0.015, 'std': 0.003} # S_dg
]

# Custom priors for PowerLaw model
custom_bpriors = [
    {'flavor': 'log_uniform', 'pmin': -6, 'pmax': 0},  # b_bp
    {'flavor': 'uniform', 'pmin': 0.0, 'pmax': 2.0}    # Y
]

Noise Models

Instrument-Specific Noise

# PACE noise model
def pace_noise(Rrs, scale=1.0):
    """PACE-specific noise model"""
    base_noise = 5e-4
    relative_noise = 0.02
    return scale * np.sqrt(
        (base_noise)**2 + (relative_noise * Rrs)**2
    )

# MODIS noise model
def modis_noise(Rrs, scale=1.0):
    """MODIS-specific noise model"""
    base_noise = 1e-3
    relative_noise = 0.05
    return scale * np.sqrt(
        (base_noise)**2 + (relative_noise * Rrs)**2
    )

Adding Synthetic Noise

from bing.utils import add_noise

# Add realistic noise to synthetic data
Rrs_noisy = add_noise(
    Rrs_true,
    params.satellite,
    scale=params.scl_noise
)

Parameter Validation

Checking Parameters

def validate_parameters(params):
    """Validate parameter configuration"""

    # Check wavelength range
    assert params.wv_min < params.wv_max
    assert params.wv_min >= 350
    assert params.wv_max <= 900

    # Check MCMC settings
    assert params.nsteps > params.nburn
    assert params.nburn >= 100

    # Check model compatibility
    valid_models = ['ExpBricaud', 'PowerLaw', 'Lee',
                   'GIOP', 'GSM', 'QAA', 'Constant']
    for model in params.model_names:
        assert model in valid_models

    # Check priors
    if params.apriors:
        assert len(params.apriors) == expected_n_params_abs
    if params.bpriors:
        assert len(params.bpriors) == expected_n_params_bb

    return True

Parameter Bounds

# Physical bounds for parameters
bounds = {
    'A_ph': (1e-6, 10),      # Phytoplankton amplitude
    'E_ph': (0.3, 1.0),      # Phytoplankton exponent
    'S_dg': (0.01, 0.025),   # CDOM slope
    'b_bp': (1e-6, 0.1),     # Particulate backscattering
    'Y': (0.0, 3.0),         # Backscattering slope
    'Chl': (0.01, 100),      # Chlorophyll concentration
    'a_dg_443': (1e-6, 1.0)  # CDOM absorption at 443nm
}

Best Practices

  1. Model Selection

    • Use ExpBricaud+PowerLaw for general purposes

    • Use GIOP for NASA compatibility

    • Use GSM for empirical analysis

  2. Prior Selection

    • Use log-uniform for scale parameters

    • Use uniform for bounded parameters

    • Use Gaussian when mean is known

  3. MCMC Settings

    • Start with nsteps=10000 for testing

    • Use nsteps=40000+ for publication

    • Set nburn to 10-25% of nsteps

  4. Noise Configuration

    • Use satellite-specific noise models

    • Scale noise based on data quality

    • Include noise in synthetic studies

  5. Wavelength Range

    • 400-700 nm for ocean color

    • Extend to 350-750 for full visible

    • Consider NIR for turbid waters

Examples

High Chlorophyll Waters

# Configuration for productive waters
params = standard.expb_pow(
    satellite='PACE',
    add_noise=True
)

# Adjust priors for high Chl
params.apriors[0] = {'flavor': 'log_uniform', 'pmin': -4, 'pmax': 2}

Clear Ocean Waters

# Configuration for oligotrophic waters
params = p_ntuple.gen(
    model_names=['QAA', 'Lee'],
    satellite='MODIS',
    apriors=[
        {'flavor': 'log_uniform', 'pmin': -8, 'pmax': -2}
    ]
)

Coastal Waters

# Configuration for complex coastal waters
params = standard.giop(
    satellite='PACE',
    set_Sdg=False  # Variable CDOM slope
)

References

  • Standard parameter sets based on literature values

  • Prior distributions from field measurements

  • Noise models from instrument specifications