diff --git a/mvcm/main_tests_only.py b/mvcm/main_tests_only.py
index e58a6233350ddc301cdab769e6b6cf9b870610c0..3f397b6b3fc429f5b8965fbd387ebae6a8b2ca75 100644
--- a/mvcm/main_tests_only.py
+++ b/mvcm/main_tests_only.py
@@ -431,6 +431,7 @@ def main(
integer_cloud_mask[(csc <= 0.95) & (csc > 0.66)] = 1
integer_cloud_mask[csc <= 0.66] = 0
integer_cloud_mask = integer_cloud_mask.astype(np.int8)
+ spi = utils.cloud_mask_spi(viirs_data)
# logger.debug(f"Memory: {tracemalloc.get_traced_memory()}")
cloud_mask = np.zeros((6, csc.shape[0], csc.shape[1]), dtype=np.byte)
@@ -448,6 +449,7 @@ def main(
"cloud_mask": {"dims": ("bits", "x", "y"), "data": cloud_mask},
"quality_assurance": {"dims": ("x", "y", "qa"), "data": quality_assurance},
"integer_cloud_mask": {"dims": ("x", "y"), "data": integer_cloud_mask},
+ "spi": {"dims": ("x1", "y1"), "data": spi.values},
}
old_debug_data = {
diff --git a/mvcm/spectral_tests.py b/mvcm/spectral_tests.py
index 2b5b2df879568b16f36a37e6f75497cc52ceb17b..8eda2fee36ac664c41f95cd95410bb9fe43f401a 100644
--- a/mvcm/spectral_tests.py
+++ b/mvcm/spectral_tests.py
@@ -776,16 +776,18 @@ class CloudTests:
sunglint = scene_for_sunglint.find_sunglint(
self.thresholds["Sun_Glint"]["bounds"][3], day_flag
).values
+
# sunglint = scn.find_scene(self.data, self.thresholds["Sun_Glint"]["bounds"][3])[
# "sunglint"
# ]
- idx = np.nonzero((solar_zenith <= 85) & (sunglint == 1))
+ # idx = np.nonzero((solar_zenith <= 85) & (sunglint == 1))
thr_no_sunglint = np.array([threshold["thr"][i] for i in range(8)])
thr_sunglint = np.array([self.thresholds["Sun_Glint"]["snglnt"][i] for i in range(8)])
temp_conf[sunglint == 0] = conf.conf_test_dble(rad[sunglint == 0], thr_no_sunglint)
- temp_conf[idx] = conf.conf_test_dble(rad[idx], thr_sunglint)
+
+ temp_conf[sunglint == 1] = conf.conf_test_dble(rad[sunglint == 1], thr_sunglint)
kwargs["confidence"][self.scene_idx] = temp_conf[self.scene_idx]
idx = np.nonzero(
diff --git a/mvcm/utility_functions.py b/mvcm/utility_functions.py
index 1b7b97f3ce7fd82164bbbfd0d917bf5c7913c1fa..eae3144b9faaeae37d8eee8cf458d45fa5753ea0 100644
--- a/mvcm/utility_functions.py
+++ b/mvcm/utility_functions.py
@@ -3,9 +3,19 @@
from typing import Dict
import numpy as np
+import xarray as xr
from numpy.lib.stride_tricks import sliding_window_view
+def cloud_mask_spi(data: xr.Dataset):
+ temp_da = xr.DataArray(data.M05.values, dims=("number_of_lines", "number_of_pixels"))
+ spi = 100 * (
+ temp_da.coarsen(number_of_lines=2, number_of_pixels=2).std()
+ / temp_da.coarsen(number_of_lines=2, number_of_pixels=2).mean()
+ )
+ return spi
+
+
def local_nxn_mean(arr: np.ndarray, x: int = 3, y: int = 3) -> np.ndarray:
"""Return the mean value of each NxM (default 3) pixel region for a given array."""
local_mean = (
diff --git a/mvcm/write_output.py b/mvcm/write_output.py
index ffdb63199ddd3170caf77cddd0e5502a3dbd10fa..23eed6908a747c917f8eddfc2cda6f1c47420c10 100644
--- a/mvcm/write_output.py
+++ b/mvcm/write_output.py
@@ -181,6 +181,17 @@ def save_output(
"valid_max": 3,
},
},
+ "SPI": {
+ "dims": ("number_of_lines", "number_of_pixels"),
+ "data": data.spi.values,
+ "attrs": {
+ "units": "none",
+ "long_name": "VIIRS SPI",
+ "_FillValue": -999.9,
+ "valid_min": 0.0,
+ "valid_max": 100.0,
+ },
+ },
}
if debug is True: