diff --git a/python/packages/nisar/products/writers/BaseL2WriterSingleInput.py b/python/packages/nisar/products/writers/BaseL2WriterSingleInput.py index 02370a170..6dbb78980 100644 --- a/python/packages/nisar/products/writers/BaseL2WriterSingleInput.py +++ b/python/packages/nisar/products/writers/BaseL2WriterSingleInput.py @@ -52,7 +52,8 @@ def _get_attribute_dict(band, valid_max=None, stats_obj_list=None, stats_real_imag_obj_list=None, - to_string_function=str): + to_string_function=str, + to_data_format_function=lambda x: x): ''' Get attribute dictionary for a raster layer @@ -79,6 +80,8 @@ def _get_attribute_dict(band, List of complex stats object to_string_function: function, optional Function to convert input data type to string + to_data_format_function: function, optional + Function to convert input data type to the desired output data type. Returns ------- @@ -97,33 +100,42 @@ def _get_attribute_dict(band, attr_dict['units'] = to_string_function(units) if fill_value is not None: - attr_dict['_FillValue'] = fill_value + attr_dict['_FillValue'] = to_data_format_function(fill_value) if stats_obj_list is not None: stats_obj = stats_obj_list[band] - attr_dict['min_value'] = stats_obj.min - attr_dict['mean_value'] = stats_obj.mean - attr_dict['max_value'] = stats_obj.max - attr_dict['sample_stddev'] = stats_obj.sample_stddev + attr_dict['min_value'] = to_data_format_function(stats_obj.min) + attr_dict['mean_value'] = to_data_format_function(stats_obj.mean) + attr_dict['max_value'] = to_data_format_function(stats_obj.max) + attr_dict['sample_stddev'] = \ + to_data_format_function(stats_obj.sample_stddev) elif stats_real_imag_obj_list is not None: stats_obj = stats_real_imag_obj_list[band] - attr_dict['min_real_value'] = stats_obj.real.min - attr_dict['mean_real_value'] = stats_obj.real.mean - attr_dict['max_real_value'] = stats_obj.real.max - attr_dict['sample_stddev_real'] = stats_obj.real.sample_stddev - - attr_dict['min_imag_value'] = stats_obj.imag.min - attr_dict['mean_imag_value'] = stats_obj.imag.mean - attr_dict['max_imag_value'] = stats_obj.imag.max - attr_dict['sample_stddev_imag'] = stats_obj.imag.sample_stddev + attr_dict['min_real_value'] = \ + to_data_format_function(stats_obj.real.min) + attr_dict['mean_real_value'] = \ + to_data_format_function(stats_obj.real.mean) + attr_dict['max_real_value'] = \ + to_data_format_function(stats_obj.real.max) + attr_dict['sample_stddev_real'] = \ + to_data_format_function(stats_obj.real.sample_stddev) + + attr_dict['min_imag_value'] = \ + to_data_format_function(stats_obj.imag.min) + attr_dict['mean_imag_value'] = \ + to_data_format_function(stats_obj.imag.mean) + attr_dict['max_imag_value'] = \ + to_data_format_function(stats_obj.imag.max) + attr_dict['sample_stddev_imag'] = \ + to_data_format_function(stats_obj.imag.sample_stddev) if valid_min is not None: - attr_dict['valid_min'] = valid_min + attr_dict['valid_min'] = to_data_format_function(valid_min) if valid_max is not None: - attr_dict['valid_max'] = valid_max + attr_dict['valid_max'] = to_data_format_function(valid_max) return attr_dict @@ -456,6 +468,9 @@ def save_hdf5_dataset(ds_filename, h5py_obj, root_path, for band in range(nbands): gdal_band = gdal_ds.GetRasterBand(band+1) + to_data_format_function = gdal_array.GDALTypeCodeToNumericTypeCode( + gdal_band.DataType) + attr_dict = _get_attribute_dict( band, standard_name=standard_name, @@ -466,7 +481,8 @@ def save_hdf5_dataset(ds_filename, h5py_obj, root_path, valid_max=valid_max, stats_obj_list=stats_obj_list, stats_real_imag_obj_list=stats_real_imag_obj_list, - to_string_function=np.bytes_) + to_string_function=np.bytes_, + to_data_format_function=to_data_format_function) if isinstance(output_ds_name, str): output_ds_name_band = output_ds_name @@ -675,6 +691,9 @@ def save_raster(ds_filename, output_ds_name, if mantissa_nbits is not None: truncate_mantissa(data, mantissa_nbits) + to_data_format_function = gdal_array.GDALTypeCodeToNumericTypeCode( + gdal_band.DataType) + attr_dict = _get_attribute_dict( band, standard_name=standard_name, @@ -684,7 +703,8 @@ def save_raster(ds_filename, output_ds_name, valid_min=valid_min, valid_max=valid_max, stats_obj_list=stats_obj_list, - stats_real_imag_obj_list=stats_real_imag_obj_list) + stats_real_imag_obj_list=stats_real_imag_obj_list, + to_data_format_function=to_data_format_function) if isinstance(output_ds_name, str): output_ds_name_band = output_ds_name