From 5febeb94cfa70dbd412827deb11f01cca64dd54b Mon Sep 17 00:00:00 2001 From: Robin MARQUART Date: Thu, 22 Feb 2024 13:44:04 +0000 Subject: [PATCH 1/6] Processing functions to process l1b and l1c files to l2 wave --- sarwaveifrproc/l2_wave.py | 325 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 325 insertions(+) create mode 100644 sarwaveifrproc/l2_wave.py diff --git a/sarwaveifrproc/l2_wave.py b/sarwaveifrproc/l2_wave.py new file mode 100644 index 0000000..8999833 --- /dev/null +++ b/sarwaveifrproc/l2_wave.py @@ -0,0 +1,325 @@ +import numpy as np +import xarray as xr +import datatree as dtt +from scipy import special + + +attributes_missing_variables = \ +{ + 'sigma0_filt': {'long_name': 'calibrated sigma0 with BT correction', 'units': 'linear'}, + 'normalized_variance_filt': {'long_name': 'normalized variance with BT correction', 'units': ''}, + 'azimuth_cutoff': {'long_name': 'Azimuthal cut-off (2tau)', 'units': 'm'}, + 'cwave_params': {'long_name': 'CWAVE parameters'}, + 'k_gp': {'long_name': 'Gegenbauer polynoms dimension'}, + 'phi_hf': {'long_name': 'Harmonic functions dimension (odd number)'} +} + +def generate_l2_wave_product(xdt, intraburst_model, interburst_model, intraburst_scaler, interburst_scaler, intraburst_bins, interburst_bins, predicted_variables): + """ + Generate a level-2 wave (L2 WAV) product. + + Parameters: + - xdt (dict): DataTree containing intraburst and interburst datasets. + - intraburst_model (tf.keras.Model): Machine learning model for intraburst predictions. + - interburst_model (tf.keras.Model): Machine learning model for interburst predictions. + - intraburst_scaler (Union[StandardScaler, MinMaxScaler, RobustScaler]): Scaler used for intraburst normalization. + - interburst_scaler (Union[StandardScaler, MinMaxScaler, RobustScaler]): Scaler used for interburst normalization. + - intraburst_bins (dict): Dictionary containing bins for intraburst variables. + - interburst_bins (dict): Dictionary containing bins for interburst variables. + - predicted_variables (list): List of predicted variable names. + Returns: + - l2_wave_product (dtt.DataTree): Level-2 wave product. + + Notes: + - The scaler objects should be one of StandardScaler, MinMaxScaler, or RobustScaler from sklearn.preprocessing. + """ + + kept_variables = ['corner_longitude', 'corner_latitude', 'land_flag', 'sigma0_filt', 'normalized_variance_filt', 'incidence', 'azimuth_cutoff', 'cwave_params'] + + ds_intraburst = generate_intermediate_product(xdt['intraburst'].ds, intraburst_model, intraburst_scaler, intraburst_bins, predicted_variables, kept_variables) + ds_interburst = generate_intermediate_product(xdt['interburst'].ds, interburst_model, interburst_scaler, interburst_bins, predicted_variables, kept_variables) + + l2_wave_product = dtt.DataTree.from_dict({"intraburst": ds_intraburst, "interburst": ds_interburst}) + return l2_wave_product + + +def generate_intermediate_product(ds, model, scaler, bins, predicted_variables, kept_variables): + """ + Generate an intermediate l2 product, depending of the input dataset (intraburst or interburst). + + Parameters: + - ds (xarray.Dataset): Input dataset. + - model: Machine learning model for predicting sea parameters. + - scaler: Scaler used for normalization. + - bins (dict): Dictionary containing bins for each variable. + - predicted_variables (list): List of predicted variable names. + - kept_variables (list): List of variables from the input dataset that are kept in the final product. + + Returns: + - ds_pred (xarray.Dataset): Intermediate predictions dataset. + """ + + if ds['land_flag'].all(): + return generate_product_on_land(ds, predicted_variables, kept_variables, bins) + + if '2tau' in ds.dims: + ds = ds.squeeze(dim='2tau') + + tiles = ds[['sigma0_filt', 'normalized_variance_filt', 'incidence', 'azimuth_cutoff', 'cwave_params']] + tiles_stacked = tiles.stack(all_tiles = ['burst', 'tile_line','tile_sample'], k_phi = ['phi_hf', 'k_gp']) + + output_dims = [['all_tiles', f'{v}_mid'] for v in predicted_variables] + inds = np.cumsum([0] + [len(bins[v]) -1 for v in predicted_variables]) + + predictions = xr.apply_ufunc(predict_variables, + tiles_stacked['sigma0_filt'], tiles_stacked['normalized_variance_filt'], tiles_stacked['incidence'], + tiles_stacked['azimuth_cutoff'], tiles_stacked['cwave_params'], + model, scaler, inds, + input_core_dims=[['all_tiles'], ['all_tiles'], ['all_tiles'], ['all_tiles'], ['all_tiles','k_phi'], [], [], []], + output_core_dims=output_dims, + vectorize=False) + + ds_pred = format_dataset(ds, predictions, predicted_variables, kept_variables, bins) + + return ds_pred + +def generate_product_on_land(ds, predicted_variables, kept_variables, bins): + """ + Patch function when input dataset does not contain all necessary variables. + + Parameters: + - ds (xarray.Dataset): Input dataset. + - predicted_variables (list): List of predicted variable names. + - kept_variables (list): List of variables from the input dataset that are kept in the final product. + - bins (dict): Dictionary containing bins for each variable. + """ + ds = ds[['corner_longitude', 'corner_latitude', 'incidence', 'land_flag']] + + shape = ds['land_flag'].shape + dims = ds['land_flag'].dims + + data_to_merge = [] + + if set(predicted_variables).issubset(ds.keys()): + kept_variables = kept_variables + predicted_variables + + for v in kept_variables: + if v not in ds.variables: + v_array = xr.DataArray(data = np.full(shape, np.nan), dims = dims).rename(v) + v_array.attrs = attributes_missing_variables[v] + data_to_merge.append(v_array) + + # Add CWAVES independently because the required dimensions are not in the input dataset when there is only land. + k_gp = xr.DataArray(data=range(1, 5), dims='k_gp') + k_gp.attrs = attributes_missing_variables['k_gp'] + phi_hf = xr.DataArray(data=range(1, 6), dims='phi_hf') + phi_hf.attrs = attributes_missing_variables['phi_hf'] + + cwaves = xr.DataArray(data=np.full(shape + (4, 5), np.nan), dims=dims + ('k_gp', 'phi_hf')).rename('cwave_params') + cwaves.attrs = attributes_missing_variables['cwave_params'] + data_to_merge.append(cwaves.assign_coords({'k_gp': k_gp, 'phi_hf': phi_hf})) + + for v in predicted_variables: + attributes = get_attributes(v) + v_mid = xr.DataArray(data=(bins[v][:-1] + bins[v][1:])/2, dims=f'{v}_mid') + v_mid.attrs = attributes['mid'] + + v_pdf = xr.DataArray(data=np.full(v_mid.shape + shape, np.nan), dims=(f'{v}_mid', ) + dims).rename(f'{v}_pdf') + v_pdf.attrs = attributes['pdf'] + data_to_merge.append(v_pdf.assign_coords({f'{v}_mid': v_mid})) + + v_mean = xr.DataArray(data=np.full(shape, np.nan), dims=dims).rename(f'{v}_mean') + v_mean.attrs = attributes['mean'] + data_to_merge.append(v_mean) + + v_most_likely = xr.DataArray(data=np.full(shape, np.nan), dims=dims).rename(f'{v}_most_likely') + v_most_likely.attrs = attributes['most_likely'] + data_to_merge.append(v_most_likely) + + v_std = xr.DataArray(data=np.full(shape, np.nan), dims=dims).rename(f'{v}_std') + v_std.attrs = attributes['std'] + data_to_merge.append(v_std) + + ds = xr.merge([ds] + data_to_merge) + + ds.attrs.pop('name', None) + ds.attrs.pop('multidataset', None) + return ds + +def predict_variables(sigma0, normalized_variance, incidence, azimuth_cutoff, cwave_params, model, scaler, indices): + """ + Launch predictions using a neural model. + + Parameters: + - sigma0 (xarray.DataArray): Array containing sigma0 values. + - normalized_variance (xarray.DataArray): Array containing normalized variance values. + - incidence (xarray.DataArray): Array containing incidence values. + - azimuth_cutoff (xarray.DataArray): Array containing azimuth cutoff values. + - cwave_params (xarray.DataArray): Array containing the cwave parameters. + - model (tf.keras.Model): Machine learning model for predicting sea parameters. + - scaler (Union[StandardScaler, MinMaxScaler, RobustScaler]): Scaler used for normalization. + - indices (list): List of indices to segment predictions. + + Returns: + - res (tuple): Tuple containing predictions for each variable. + """ + X_stacked = np.vstack([sigma0, normalized_variance, incidence, azimuth_cutoff]).T + X_stacked = np.hstack([X_stacked, cwave_params]) + X_normalized = scaler.transform(X_stacked) + + predictions = model.predict(X_normalized) + + res = tuple(predictions[:, indices[i]:indices[i+1]] for i in range(len(indices)-1)) + + return res + +def format_dataset(ds, predictions, predicted_variables, kept_variables, bins): + """ + Format a dataset based on predictions, variables, and bins. + + Parameters: + - ds (xarray.Dataset): Input dataset (l1b or l1c). + - predictions (list): Predictions for each variable. + - predicted_variables (list): List of predicted variable names. + - kept_variables (list): List of variables from the input dataset that are kept in the final product. + - bins (dict): Dictionary containing bin values for each variable. + + Returns: + - ds_pred (xarray.Dataset): Formatted dataset with predictions and original data. + + The function computes various statistical values (mean, most likely, standard deviation) + from the predictions and adds them to the new dataset. It also includes original data + from the input dataset and some additional attributes. + """ + + data_to_merge = [] + + n = len(predicted_variables) + for i in range(n): + v = predicted_variables[i] + attributes = get_attributes(v) + v_mid = xr.DataArray(data = (bins[v][:-1] + bins[v][1:])/2, dims = f'{v}_mid') + v_mid.attrs = attributes['mid'] + + v_pdf = special.softmax(predictions[i], axis=1).rename(f'{v}_pdf').assign_coords({f'{v}_mid': v_mid}).to_dataset() + v_pdf[f'{v}_pdf'].attrs = attributes['pdf'] + data_to_merge.append(v_pdf) + + v_mean = compute_values(v_pdf, v, compute_mean).rename(f'{v}_mean') + v_mean.attrs = attributes['mean'] + data_to_merge.append(v_mean) + + v_most_likely = compute_values(v_pdf, v, get_most_likely).rename(f'{v}_most_likely') + v_most_likely.attrs = attributes['most_likely'] + data_to_merge.append(v_most_likely) + + v_std = compute_values(v_pdf, v, compute_std, True).rename(f'{v}_std') + v_std.attrs = attributes['std'] + data_to_merge.append(v_std) + + if set(predicted_variables).issubset(ds.keys()): + kept_variables = kept_variables + predicted_variables + + data_to_merge = [ds.unstack() for ds in data_to_merge] + ds = ds[kept_variables] + + ds = xr.merge([ds] + data_to_merge) + ds = ds.drop_vars(['tile_line', 'tile_sample']) + + ds.attrs.pop('name', None) + ds.attrs.pop('multidataset', None) + + return ds + +def compute_values(ds, var, function, vectorize=False): + """ + Compute values for the given variable using the given function. + + Args: + ds (xr.Dataset): Dataset containing the data. + var (str): Variable name. + function (callable): Function to compute values. + vectorize (bool): Whether to vectorize the computation. + + Returns: + xr.DataArray: Computed values. + """ + values = xr.apply_ufunc(function, + ds[f'{var}_mid'], ds[f'{var}_pdf'], + input_core_dims=[[f'{var}_mid'],[f'{var}_mid']], + vectorize=vectorize) + return values + +def get_attributes(var): + """ + Generate a dictionary of attributes for a given variable. + + Parameters: + - var (str): The variable name for which attributes are to be generated. This should correspond to keys in the `spec_dict`. + + Returns: + - attributes (dict): A dictionary containing various attributes for the given variable. + + The function uses a predefined `spec_dict` to look up information about the variable. + If the variable is not found in `spec_dict`, default attributes are generated with the variable name itself. + """ + spec_dict = { + 'hs': {'long_name': 'significant wave height', 'units': 'm'}, + 'phs0': {'long_name': 'wind sea significant wave height', 'units': 'm'}, + 't0m1': {'long_name': 'mean wave period', 'units': 's'}, + } + + var_spec = spec_dict.get(var, {"long_name": f'{var}', 'units': ''}) + + attributes = { + 'mid': {'long_name': f'central values of the bins used for discretizing the range of {var_spec["long_name"]} encountered during neural model training', 'units': var_spec['units']}, + 'pdf': {'long name': f'{var_spec["long_name"]} discrete probability density function', 'units': 'probability'}, + 'mean': {'long name': f'first-order moment of the {var_spec["long_name"]} discrete probability density function', 'units': var_spec['units']}, + 'most_likely': {'long name': f'most likely value of {var_spec["long_name"]} given its discrete probability density function', 'units': var_spec['units']}, + 'std': {'long name': f'square root of the second-order moment of the {var_spec["long_name"]} discrete probability density function', 'units': var_spec['units']} + } + + return attributes + +def get_most_likely(x, y): + """ + Get the maximum of probability for each prediction. + + Args: + x (np.ndarray): Input values. + y (np.ndarray): Probabilities. + + Returns: + np.ndarray: Most likely values. + """ + i_max = np.argmax(y, axis=1) + most_likely = x[i_max] + return most_likely + +def compute_mean(x, y): + """ + Compute the expected value. + + Args: + x (np.ndarray): Input values. + y (np.ndarray): Probabilities. + + Returns: + np.ndarray: Expected value. + """ + return np.sum(x * y, axis=1) + +def compute_std(x, y): + """ + Compute the standard deviation. + + Args: + x (np.ndarray): Input values. + y (np.ndarray): Probabilities. + + Returns: + np.ndarray: Standard deviation. + """ + mean = np.sum(x * y) + variance = np.sum(y * (x - mean) ** 2) + return np.sqrt(variance) From b0eaed6030520df4f34e9ce1e70309c1ac973eed Mon Sep 17 00:00:00 2001 From: Robin MARQUART Date: Fri, 1 Mar 2024 11:24:40 +0000 Subject: [PATCH 2/6] Updated code to include main and allow use of L2-wave-processor --- pyproject.toml | 20 ++-- sarwaveifrproc/config.yaml | 10 ++ sarwaveifrproc/l2_wave.py | 5 +- sarwaveifrproc/main.py | 83 ++++++++++++++++ sarwaveifrproc/utils.py | 198 +++++++++++++++++++++++++++++++++++++ 5 files changed, 303 insertions(+), 13 deletions(-) create mode 100644 sarwaveifrproc/config.yaml create mode 100644 sarwaveifrproc/main.py create mode 100644 sarwaveifrproc/utils.py diff --git a/pyproject.toml b/pyproject.toml index a784b94..fbc5e56 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,30 +1,27 @@ [project] name = "sarwaveifrproc" requires-python = ">= 3.9" -description = "Python library to generate Level-2 WAVE Product starting from Ifremer Level-1B SAR files" +description = "Python library to generate Level-2 WAVE Product starting from Ifremer Level-1B or Level-1C SAR files" readme.file = "README.md" readme.content-type = "text/markdown" license = {text = "MIT"} keywords = ["SAR", "wave", "reseach","sea-state"] authors = [ + {name = "Robin Marquart"}, {name = "Antoine Grouazel"} ] classifiers = [ "Programming Language :: Python :: 3", ] dependencies = [ - 'PyYAML', "xarray", - "numpy", "netCDF4", - "shapely", - "xarray-datatree", - 'tqdm', - "zarr", - 'fsspec', - 'scipy', - 'aiohttp', -] + "pyyaml", + "scipy", + "tensorflow", + "xarray-datatree" + ] + dynamic = ["version"] [build-system] @@ -45,3 +42,4 @@ default_section = "THIRDPARTY" known_first_party = "sarwaveifrproc" [project.scripts] +L2-wave-processor = "sarwaveifrproc.main:main" diff --git a/sarwaveifrproc/config.yaml b/sarwaveifrproc/config.yaml new file mode 100644 index 0000000..d932ae5 --- /dev/null +++ b/sarwaveifrproc/config.yaml @@ -0,0 +1,10 @@ +model_intraburst: 'model_intraburst.keras' +model_interburst: 'model_interburst.keras' +scaler_intraburst: 'scaler_intraburst.npy' +scaler_interburst: 'scaler_interburst.npy' +bins_intraburst: 'bins_intraburst' +bins_interburst: 'bins_interburst' +predicted_variables: + - 'hs' + - 'phs0' + - 't0m1' \ No newline at end of file diff --git a/sarwaveifrproc/l2_wave.py b/sarwaveifrproc/l2_wave.py index 8999833..3626b51 100644 --- a/sarwaveifrproc/l2_wave.py +++ b/sarwaveifrproc/l2_wave.py @@ -200,8 +200,9 @@ def format_dataset(ds, predictions, predicted_variables, kept_variables, bins): attributes = get_attributes(v) v_mid = xr.DataArray(data = (bins[v][:-1] + bins[v][1:])/2, dims = f'{v}_mid') v_mid.attrs = attributes['mid'] - - v_pdf = special.softmax(predictions[i], axis=1).rename(f'{v}_pdf').assign_coords({f'{v}_mid': v_mid}).to_dataset() + + v_pdf = xr.apply_ufunc(lambda x: special.softmax(x, axis=1), + predictions[i]).rename(f'{v}_pdf').assign_coords({f'{v}_mid': v_mid}).to_dataset() v_pdf[f'{v}_pdf'].attrs = attributes['pdf'] data_to_merge.append(v_pdf) diff --git a/sarwaveifrproc/main.py b/sarwaveifrproc/main.py new file mode 100644 index 0000000..553c63b --- /dev/null +++ b/sarwaveifrproc/main.py @@ -0,0 +1,83 @@ +import argparse +import logging +import os +import sys + +def parse_args(): + + parser = argparse.ArgumentParser(description="Generate a L2 WAVE product from a L1B or L1C SAFE.") + + # Define arguments + parser.add_argument("--input_safe", required=True, help="l1b or l1c safe path.") + parser.add_argument("--save_directory", required=True, help="where to save output data.") + parser.add_argument("--product_id", required=True, help="3 digits ID representing the processing options. Ex: E00.") + + # Group related arguments under 'model' and 'bins' + model_group = parser.add_argument_group('model', 'Arguments related to the neural models') + model_group.add_argument("--model_intraburst", required=False, help="neural model path to predict sea states on intraburst data.") + model_group.add_argument("--model_interburst", required=False, help="neural model path to predict sea states on interburst data.") + + model_group.add_argument("--scaler_intraburst", required=False, help="scaler path to standardize intraburst data before feeding it to the neural model.") + model_group.add_argument("--scaler_interburst", required=False, help="scaler path to standardize interburst data before feeding it to the neural model.") + + model_group.add_argument("--bins_intraburst", required=False, help="bins path that depicts the range of predictions on intraburst data.") + model_group.add_argument("--bins_interburst", required=False, help="bins path that depicts the range of predictions on interburst data.") + + model_group.add_argument("--predicted_variables", required=False, help="list of sea states variables to predict.") + + # Other arguments + parser.add_argument("--overwrite", action="store_true", default=False, help="overwrite the existing outputs") + parser.add_argument("--verbose", action="store_true", default=False) + + if '--help' in sys.argv or '-h' in sys.argv: + parser.print_help() + sys.exit(0) + else: + args = parser.parse_args() + return args + +def main(): + + args = parse_args() + + if args.verbose: + logging.basicConfig(level=logging.INFO) + + os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' # Suppress TensorFlow INFO and WARNING messages + os.environ['CUDA_VISIBLE_DEVICES'] = '-1' # Hide CUDA devices + + from sarwaveifrproc.utils import get_output_safe, load_config + + logging.info("Loading configuration file...") + conf = load_config() + + # Parse arguments + input_safe = args.input_safe + save_directory = args.save_directory + product_id = args.product_id + predicted_variables = args.predicted_variables or conf['predicted_variables'] + + logging.info("Checking if output safe already exists...") + output_safe = get_output_safe(input_safe, save_directory, product_id) + if os.path.exists(output_safe) and not (args.overwrite): + logging.info(f"{output_safe} already exists and overwriting is not allowed. Use --overwrite to overwrite existing files.") + return None + + from sarwaveifrproc.utils import load_models, process_files + + # Define the paths. When args paths are None, the conf paths are set by default (the "or" operator returns first element if true, second element if first is None).  + paths = { + 'model_intraburst': args.model_intraburst or conf['model_intraburst'], + 'model_interburst': args.model_interburst or conf['model_interburst'], + 'scaler_intraburst': args.scaler_intraburst or conf['scaler_intraburst'], + 'scaler_interburst': args.scaler_interburst or conf['scaler_interburst'], + 'bins_intraburst': args.bins_intraburst or conf['bins_intraburst'], + 'bins_interburst': args.bins_interburst or conf['bins_interburst'], + } + logging.info('Loading models...') + model_intraburst, model_interburst, scaler_intraburst, scaler_interburst, bins_intraburst, bins_interburst = load_models(paths, predicted_variables) + logging.info('Models loaded.') + + logging.info('Processing files...') + process_files(input_safe, output_safe, model_intraburst, model_interburst, scaler_intraburst, scaler_interburst, bins_intraburst, bins_interburst, predicted_variables, product_id) + logging.info(f'Processing terminated. Output directory: \n{output_safe}') diff --git a/sarwaveifrproc/utils.py b/sarwaveifrproc/utils.py new file mode 100644 index 0000000..d57100d --- /dev/null +++ b/sarwaveifrproc/utils.py @@ -0,0 +1,198 @@ +import sarwaveifrproc +import tensorflow as tf +import datatree as dtt +import numpy as np +import glob +import logging +import yaml +import pickle +import os +from datetime import datetime +from sarwaveifrproc.l2_wave import generate_l2_wave_product + +def get_safe_date(safe): + """ + Extracts and returns the date and time from a given SAFE directory name. + + Parameters: + safe (str): SAFE directory name. + + Returns: + datetime: A datetime object representing the extracted date and time. + """ + date_str = safe.split('_')[5] + date = datetime.strptime(date_str, '%Y%m%dT%H%M%S') + return date + +def get_output_safe(l1x_safe, root_savepath, tail='E00'): + """ + Generates the final SAFE filename with specified modifications. + + Parameters: + l1x_safe (str): The input SAFE path. + root_savepath (str): The root path for saving the output. + tail (str): The tail to append to the filename. Defaults to 'E00'. + + Returns: + str: The output savepath. + + Raises: + ValueError: If the input SAFE does not meet the filename requirements. + """ + safe = l1x_safe.split(os.sep)[-1] + final_safe = safe + + if all((pattern in safe) for pattern in ['XSP_', '1SDV', '.SAFE']): + + date = get_safe_date(safe) + + final_safe = final_safe.replace('XSP_', 'WAV_') + final_safe = final_safe.replace('1SDV', '2SDV') + final_safe = final_safe.replace('.SAFE', f'_{tail.upper()}.SAFE') + + output_safe = os.path.join(root_savepath, date.strftime('%Y'), date.strftime('%j'), final_safe) + + return output_safe + + else: + raise ValueError(f"The input SAFE does not meet the filename requirements.") + +def get_output_filename(l1x_path, output_safe, tail='e00'): + """ + Constructs and returns the file path for saving a processed file based on input parameters. + + Parameters: + l1x_path (str): The path to the input file. It can be either a L1B or L1C file. + root_savepath (str): The root directory where the processed file will be saved. + tail (str, optional): The tail string to be appended to the filename corresponding to the processing options. Defaults to 'e00'. + + Returns: + str: File path for saving the processed file. + """ + filename = l1x_path.split(os.sep)[-1] + filename_exploded = filename.split('-') + final_filename = '-'.join([*filename_exploded[:3], 'dv', *filename_exploded[4:-1], f'{tail.lower()}.nc']) + + savepath = os.path.join(output_safe, final_filename) + return savepath + +def load_config(): + """ + + Returns: + conf: dict + """ + local_config_path = os.path.join(os.path.dirname(sarwaveifrproc.__file__), 'localconfig.yaml') + + if os.path.exists(local_config_path): + config_path = local_config_path + else: + config_path = os.path.join(os.path.dirname(sarwaveifrproc.__file__), 'config.yaml') + + logging.info('config path: %s', config_path) + stream = open(config_path, 'r') + conf = yaml.load(stream, Loader=yaml.CLoader) + return conf + + +def load_models(paths, predicted_variables): + """ + Loads models, scalers, and bins necessary for prediction. + + Parameters: + paths (dict): Dictionary containing paths to model files, scaler files, and bin files. + Keys: + - 'model_intraburst': Path to the intraburst model file. + - 'model_interburst': Path to the interburst model file. + - 'scaler_intraburst': Path to the intraburst scaler file. + - 'scaler_interburst': Path to the interburst scaler file. + - 'bins_intraburst': Path to the intraburst bins directory. + - 'bins_interburst': Path to the interburst bins directory. + predicted_variables (list): List of variable names to be predicted. + +Returns: + tuple: Tuple containing the following items: + - model_intraburst (tf.keras.Model): Intraburst model loaded from the provided path. + - model_interburst (tf.keras.Model): Interburst model loaded from the provided path. + - scaler_intraburst (RobustScaler): Intraburst scaler loaded from the provided path. + - scaler_interburst (RobustScaler): Interburst scaler loaded from the provided path. + - bins_intraburst (dict): Dictionary containing intraburst bins for each predicted variable. + - bins_interburst (dict): Dictionary containing interburst bins for each predicted variable. + """ + # Unpack paths + path_model_intraburst, path_model_interburst, path_scaler_intraburst, path_scaler_interburst, path_bins_intraburst, path_bins_interburst = paths.values() + + # Load models and scalers using paths provided + model_intraburst = tf.keras.models.load_model(path_model_intraburst, compile=False) + scaler_intraburst_array = np.load(path_scaler_intraburst) + scaler_intraburst = RobustScaler(medians=scaler_intraburst_array[0], iqrs=scaler_intraburst_array[1]) + + model_interburst = tf.keras.models.load_model(path_model_interburst, compile=False) + scaler_interburst_array = np.load(path_scaler_interburst) + scaler_interburst = RobustScaler(medians=scaler_interburst_array[0], iqrs=scaler_interburst_array[1]) + + bins_intraburst = {f'{var}': np.load(os.path.join(path_bins_intraburst, f'bins_{var}.npy')) for var in predicted_variables} + bins_interburst = {f'{var}': np.load(os.path.join(path_bins_interburst, f'bins_{var}.npy')) for var in predicted_variables} + + return model_intraburst, model_interburst, scaler_intraburst, scaler_interburst, bins_intraburst, bins_interburst + + +def process_files(input_safe, output_safe, model_intraburst, model_interburst, scaler_intraburst, scaler_interburst, bins_intraburst, bins_interburst, predicted_variables, product_id): + """ + Processes files in the input directory, generates predictions, and saves results in the output directory. + + Parameters: + input_safe (str): Input safe path. + output_safe (str): Path to the directory where output data will be saved. + model_intraburst (tf.keras.Model): Intraburst model for prediction. + model_interburst (tf.keras.Model): Interburst model for prediction. + scaler_intraburst (RobustScaler): Scaler for intraburst data. + scaler_interburst (RobustScaler): Scaler for interburst data. + bins_intraburst (dict): Dictionary containing intraburst bins for each predicted variable. + bins_interburst (dict): Dictionary containing interburst bins for each predicted variable. + predicted_variables (list): List of variable names to be predicted. + product_id (str): Identifier for the output product. + + Returns: + None + """ + subswath_filenames = glob.glob(os.path.join(input_safe, '*-vv-*.nc')) + logging.info(f'{len(subswath_filenames)} subswaths found in given safe.') + + for path in subswath_filenames: + xdt = dtt.open_datatree(path) + l2_product = generate_l2_wave_product(xdt, model_intraburst, model_interburst, scaler_intraburst, scaler_interburst, bins_intraburst, bins_interburst, predicted_variables) + + os.makedirs(output_safe, exist_ok=True) + savepath = get_output_filename(path, output_safe, product_id) + l2_product.to_netcdf(savepath) + + +class RobustScaler: + """ + Class to mimic scikit-learn RobustScaler. This is done in order to prevent warning messages when using pickle to load the scikit-learn scaler. + """ + + def __init__(self, medians, iqrs): + """ + Initialize the RobustScaler with provided medians and IQRs. + + Parameters: + medians (np.ndarray): Median values for each feature. + iqrs (np.ndarray): Interquartile ranges (IQRs) for each feature. + """ + self.medians = medians + self.iqrs = iqrs + + def transform(self, X): + """ + Scale the input data X using the stored medians and IQRs. + + Parameters: + X (np.ndarray): Input data to be scaled. + + Returns: + X_scaled (np.ndarray): Scaled data. + """ + X_scaled = (X - self.medians) / self.iqrs + return X_scaled From c221802902a891d917f1b4d3b6b89636e42d1032 Mon Sep 17 00:00:00 2001 From: agrouaze Date: Thu, 4 Apr 2024 21:29:46 +0200 Subject: [PATCH 3/6] add a unit test for prediction --- ...35702-20231128t035727-051412-063451-e01.nc | Bin 0 -> 372928 bytes ...063451-002_L1B_xspec_IFR_3.7.6nospectra.nc | Bin 0 -> 143267 bytes ...063451-005_L1B_xspec_IFR_3.7.6nospectra.nc | Bin 0 -> 143267 bytes tests/test_predict.py | 64 ++++++++++++++++++ 4 files changed, 64 insertions(+) create mode 100644 sarwaveifrproc/reference_data/s1a-iw2-slc-dv-20231128t035702-20231128t035727-051412-063451-e01.nc create mode 100644 sarwaveifrproc/reference_data/s1a-iw2-slc-vh-20231128t035702-20231128t035727-051412-063451-002_L1B_xspec_IFR_3.7.6nospectra.nc create mode 100644 sarwaveifrproc/reference_data/s1a-iw2-slc-vv-20231128t035702-20231128t035727-051412-063451-005_L1B_xspec_IFR_3.7.6nospectra.nc create mode 100644 tests/test_predict.py diff --git a/sarwaveifrproc/reference_data/s1a-iw2-slc-dv-20231128t035702-20231128t035727-051412-063451-e01.nc b/sarwaveifrproc/reference_data/s1a-iw2-slc-dv-20231128t035702-20231128t035727-051412-063451-e01.nc new file mode 100644 index 0000000000000000000000000000000000000000..f838fef466e0c8c2a7df22557e614db0812a9774 GIT binary patch literal 372928 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 Date: Fri, 5 Apr 2024 16:34:23 +0200 Subject: [PATCH 4/6] no burst trick --- sarwaveifrproc/l2_wave.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sarwaveifrproc/l2_wave.py b/sarwaveifrproc/l2_wave.py index 3626b51..abac890 100644 --- a/sarwaveifrproc/l2_wave.py +++ b/sarwaveifrproc/l2_wave.py @@ -66,7 +66,10 @@ def generate_intermediate_product(ds, model, scaler, bins, predicted_variables, ds = ds.squeeze(dim='2tau') tiles = ds[['sigma0_filt', 'normalized_variance_filt', 'incidence', 'azimuth_cutoff', 'cwave_params']] - tiles_stacked = tiles.stack(all_tiles = ['burst', 'tile_line','tile_sample'], k_phi = ['phi_hf', 'k_gp']) + if 'burst' in ds.coords: + tiles_stacked = tiles.stack(all_tiles = ['burst', 'tile_line','tile_sample'], k_phi = ['phi_hf', 'k_gp']) + else: + tiles_stacked = tiles.stack(all_tiles = ['tile_line','tile_sample'], k_phi = ['phi_hf', 'k_gp']) output_dims = [['all_tiles', f'{v}_mid'] for v in predicted_variables] inds = np.cumsum([0] + [len(bins[v]) -1 for v in predicted_variables]) From 508b69e16155439a4ba6be063d68acd701ddce56 Mon Sep 17 00:00:00 2001 From: Robin MARQUART Date: Sun, 7 Apr 2024 18:18:54 +0000 Subject: [PATCH 5/6] Modifying code according to the reviews --- sarwaveifrproc/l2_wave.py | 1 + sarwaveifrproc/main.py | 10 +++------- sarwaveifrproc/utils.py | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/sarwaveifrproc/l2_wave.py b/sarwaveifrproc/l2_wave.py index 3626b51..1e745fe 100644 --- a/sarwaveifrproc/l2_wave.py +++ b/sarwaveifrproc/l2_wave.py @@ -64,6 +64,7 @@ def generate_intermediate_product(ds, model, scaler, bins, predicted_variables, if '2tau' in ds.dims: ds = ds.squeeze(dim='2tau') + ds.attrs['squeezed_dimensions']='2tau' tiles = ds[['sigma0_filt', 'normalized_variance_filt', 'incidence', 'azimuth_cutoff', 'cwave_params']] tiles_stacked = tiles.stack(all_tiles = ['burst', 'tile_line','tile_sample'], k_phi = ['phi_hf', 'k_gp']) diff --git a/sarwaveifrproc/main.py b/sarwaveifrproc/main.py index 553c63b..d5ade91 100644 --- a/sarwaveifrproc/main.py +++ b/sarwaveifrproc/main.py @@ -28,13 +28,9 @@ def parse_args(): # Other arguments parser.add_argument("--overwrite", action="store_true", default=False, help="overwrite the existing outputs") parser.add_argument("--verbose", action="store_true", default=False) - - if '--help' in sys.argv or '-h' in sys.argv: - parser.print_help() - sys.exit(0) - else: - args = parser.parse_args() - return args + + args = parser.parse_args() + return args def main(): diff --git a/sarwaveifrproc/utils.py b/sarwaveifrproc/utils.py index d57100d..db1b261 100644 --- a/sarwaveifrproc/utils.py +++ b/sarwaveifrproc/utils.py @@ -156,7 +156,7 @@ def process_files(input_safe, output_safe, model_intraburst, model_interburst, s Returns: None """ - subswath_filenames = glob.glob(os.path.join(input_safe, '*-vv-*.nc')) + subswath_filenames = glob.glob(os.path.join(input_safe, '*-?v-*.nc')) logging.info(f'{len(subswath_filenames)} subswaths found in given safe.') for path in subswath_filenames: From d7c4a8c15b573417864942e8078ffaa2e1f4d6ea Mon Sep 17 00:00:00 2001 From: grouazel Date: Mon, 8 Apr 2024 14:15:58 +0200 Subject: [PATCH 6/6] trailing slash --- sarwaveifrproc/utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sarwaveifrproc/utils.py b/sarwaveifrproc/utils.py index d57100d..40737a0 100644 --- a/sarwaveifrproc/utils.py +++ b/sarwaveifrproc/utils.py @@ -39,6 +39,7 @@ def get_output_safe(l1x_safe, root_savepath, tail='E00'): Raises: ValueError: If the input SAFE does not meet the filename requirements. """ + l1x_safe = l1x_safe.rstrip('/') # remove trailing slash safe = l1x_safe.split(os.sep)[-1] final_safe = safe