Contact Grant Macdonald grantmacdonald@uvic.ca for questions /Files/ FYI_UMD_gridDATA.csv - Contains all processed first-year ice data used in the analysis (sections 3 and 4), including HH and HV backscatter, incidence angle (IA), height (Field_4_me) and roughness (field_4_st). The following beam was excluded from this analysis and used as an independent beam in the section 5 model analysis: UMDRDA_ATL03_20220311103519_12091403_005_01_gt1l_Elevation_McClintockChannel_JoinedAtts MYI_NASA_UMD_gridDATA.csv - Contains all processed multi-year ice data used in the analysis (sections 3 and 4). BeaufortMaryland_ZonalStats.csv - Contains processed backscatter and ICESat-2 topography data for the Beaufort Sea site in section 5. ZonalStats_Baffin_17032022.csv - Contains processed backscatter and ICESat-2 topography data for the Baffin Bay site in section 5. McClintockIndyData_20220324094442.csv - Contains processed backscatter and ICESat-2 topography data for one of the independent set of CAA tracks in section 5. McClintockIndyData_20220324222936.csv - Contains processed backscatter and ICESat-2 topography data for one of the independent set of CAA tracks in section 5. HV_HH_model_NewIA.pkl - model file. Predicts roughness in metres from HV and HH backscatter in dB. Co ## Example of model applied in Python import numpy as np import pandas as pd import joblib import matplotlib.pyplot as plt #Paths to data and model data_path = '/path_to_data/FYI_UMD_gridDATA.csv' #(Data with HV and HH backscatter and incidence angle in degrees) model_path = 'path_to_model/HV_HH_model_NewIA.pkl' full_data = pd.read_csv(data_path) # Filter data to subset for this example layer_filter = (full_data['layer'] == 'UMDRDA_ATL03_20220311103519_12091403_005_01_gt1l_Elevation_McClintockChannel_JoinedAtts') filename_filter = (full_data['Filename'] == 'Maryland26Feb.csv') Zero_filter= (full_data['field_4_st'] != 0) new_data = full_data.loc[layer_filter & filename_filter&Zero_filter].copy() # Convert columns to numeric and drop NaN values for column in ['HV_mean', 'HH_mean', 'IA_mean']: new_data.loc[:, column] = pd.to_numeric(new_data[column], errors='coerce') new_data.dropna(subset=['HV_mean', 'HH_mean', 'IA_mean'], inplace=True) # 'Slopes' based on relationship between incidence angle and backscatter in training data analysis hv_slope = -1.7390836140798094e-05 hh_slope = -0.0010037221810645228 new_data['HV_mean_adj'] = new_data['HV_mean'] - (hv_slope * new_data['IA_mean']) new_data['HH_mean_adj'] = new_data['HH_mean'] - (hh_slope * new_data['IA_mean']) new_data['HV_mean_adj_dB'] = 10 * np.log10(new_data['HV_mean_adj']) new_data['HH_mean_adj_dB'] = 10 * np.log10(new_data['HH_mean_adj']) # Load model adjusted_model = joblib.load(model_path) # Apply model to HV and HH backscatter in dB new_data['predicted_field_4_st_adj'] = adjusted_model.predict(new_data[['HV_mean_adj_dB', 'HH_mean_adj_dB']]) # Convert 'field_4_st' to numeric and drop NaN values new_data['field_4_st'] = pd.to_numeric(new_data['field_4_st'], errors='coerce') new_data.dropna(subset=['field_4_st'], inplace=True)