def get_differences(band): with warnings.catch_warnings(): warnings.simplefilter("ignore") RrsR = [ band.convolve(wavelengths_data, R_rs) for wavelengths_data, R_rs in zip(wavelengths, R_rss) ] RrsL = [ band.convolve(wavelengths_data, Lw) / band.convolve(wavelengths_data, Ed) for wavelengths_data, Ed, Lw in zip(wavelengths, Eds, Lws) ] difference_absolute, difference_relative = zip(*[ calculate_differences(reflectance_space, radiance_space) for reflectance_space, radiance_space in zip(RrsR, RrsL) ]) # Get all differences into one array difference_absolute = np.array([x for y in difference_absolute for x in y]) * 1e6 difference_relative = np.array([x for y in difference_relative for x in y]) difference_combined = np.stack([difference_absolute, difference_relative]) print(band) return difference_combined
print(f" {band}") with warnings.catch_warnings(): warnings.simplefilter("ignore") RrsR = [ band.convolve(wavelengths_data, R_rs) for wavelengths_data, R_rs in zip(wavelengths, R_rss) ] RrsL = [ band.convolve(wavelengths_data, Lw) / band.convolve(wavelengths_data, Ed) for wavelengths_data, Ed, Lw in zip(wavelengths, Eds, Lws) ] difference_absolute, difference_relative = zip(*[ calculate_differences(reflectance_space, radiance_space) for reflectance_space, radiance_space in zip(RrsR, RrsL) ]) # Convert to 10^-6 sr difference_absolute = [1e6 * diff for diff in difference_absolute] short_name = band.label.replace('\n', '_').replace(" ", "_") boxplot_single(band, difference_absolute, difference_relative, labels, saveto=f"results/per_band/OLI_Green.pdf", sensor_name="OLI")
wavelengths_central = np.arange(330, 810, 1) FWHMs = np.arange(6, 66, 1) # Arrays for storing results - per FWHM, per central wavelength, absolute/relative medians = np.tile(np.nan, [2, len(FWHMs), len(wavelengths_central)]) # Median perc5s = np.copy(medians) # 5th percentile perc95s = np.copy(medians) # 95th percentile for i,center in enumerate(wavelengths_central): print(f"Central wavelength: {center} nm") for j,fwhm in enumerate(FWHMs): boxcar = load_synthetic_sensor(sensor_type, center, fwhm) reflectance_space = boxcar.band_average(wavelengths_data, R_rs) radiance_space = boxcar.band_average(wavelengths_data, Lw) / boxcar.band_average(wavelengths_data, Ed) difference_absolute, difference_relative = calculate_differences(reflectance_space, radiance_space) difference_combined = np.array([difference_absolute, difference_relative])[:,0] medians[:,j,i] = np.median(difference_combined, axis=1) perc5s[:,j,i] = np.percentile(difference_combined, 5, axis=1) perc95s[:,j,i] = np.percentile(difference_combined, 95, axis=1) results_stacked = np.stack([perc5s, medians, perc95s]) results_absrel = np.moveaxis(results_stacked, 1, 0) results_absrel[0] *= 1e6 # Convert to 10^-6 sr^-1 quantities = ["P5", "Median", "P95"] for results_combined, absrel in zip(results_absrel, ["abs", "rel"]): synthetic_sensor_contourf_combined(wavelengths_central, FWHMs, results_combined, sensor_type=sensor_type, absrel=absrel, label=label, quantities=quantities) inds = np.searchsorted(FWHMs, [6, 10, 15, 20, 30, 40, 50])
from sba.bandaveraging import calculate_differences from sba.io import load_data from sba.chla import satellite_algorithms, satellite_algorithm_labels, satellite_algorithm_colours from matplotlib import pyplot as plt label, wavelengths_data, Ed, Lw, R_rs = load_data() difference_absolute, difference_relative = zip(*[ calculate_differences(*func(wavelengths_data, Ed, Lw, R_rs)) for func in satellite_algorithms ]) fig, ax = plt.subplots(figsize=(7, 1)) bp = ax.boxplot(difference_relative, whis=[5, 95], showfliers=False, labels=satellite_algorithm_labels, patch_artist=True) for patch, colour in zip(bp["boxes"], satellite_algorithm_colours): patch.set_facecolor(colour) ax.set_ylabel("$\Delta$ Chl-a [%]") ax.grid(ls="--") ax.axhline(0, ls="--", c="k") ax.locator_params(axis="y", nbins=5) ax.set_title(f"Convolution error in retrieval algorithms, {label} data") ax2 = ax.twinx() ax2.set_ylabel("$\Delta$ TSM [%]") ax2.boxplot(difference_relative, whis=[5, 95], showfliers=False,
from sba.bandaveraging import calculate_differences from sba.io import load_data_file from sba.chla import HydroColor from matplotlib import pyplot as plt from pathlib import Path data_files = Path("data").glob("*processed.tab") labels, wavelengths, Eds, Lws, R_rss = zip( *[load_data_file(file) for file in data_files]) difference_absolute, difference_relative = zip(*[ calculate_differences(*HydroColor(wavelengths_data, Ed, Lw, R_rs)) for wavelengths_data, Ed, Lw, R_rs in zip(wavelengths, Eds, Lws, R_rss) ]) for difference, absrel in zip([difference_absolute, difference_relative], ["abs", "rel"]): unit = "NTU" if absrel == "abs" else "%" plt.figure(figsize=(7, 2.5), tight_layout=True) bp = plt.boxplot(difference, whis=[5, 95], showfliers=False, labels=labels, patch_artist=True, medianprops={"c": "k"}) for patch in bp["boxes"]: patch.set_facecolor("xkcd:tan") plt.ylabel(f"$\Delta$ Turbidity [{unit}]") plt.grid(ls="--") plt.axhline(0, ls="--", c="k")