Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
d1c4d7f
disable polarimetric symmetrization by default
gshiroma Jul 3, 2025
0ef09a8
Merge branch 'isce-framework:develop' into develop
gshiroma Jul 9, 2025
2ac2694
revert changes to `symmetrize_cross_pol_channels`
gshiroma Jul 22, 2025
05d7fda
Update GCOV and GSLC specification XMLs
gshiroma Jul 22, 2025
749058d
Revert changes to the GCOV and GSLC specification XMLs
gshiroma Jul 23, 2025
fc8ac53
Merge branch 'isce-framework:develop' into develop
gshiroma Jul 24, 2025
064d073
Merge branch 'isce-framework:develop' into develop
gshiroma Aug 7, 2025
22464ef
Merge branch 'isce-framework:develop' into develop
gshiroma Aug 7, 2025
a75e7f1
Merge branch 'isce-framework:develop' into develop
gshiroma Aug 11, 2025
ab21d36
Merge branch 'isce-framework:develop' into develop
gshiroma Aug 12, 2025
d61d489
Merge branch 'isce-framework:develop' into develop
gshiroma Aug 18, 2025
0af53dd
Merge branch 'isce-framework:develop' into develop
gshiroma Aug 20, 2025
d454e6a
Merge branch 'isce-framework:develop' into develop
gshiroma Aug 21, 2025
6e7e9d1
Merge branch 'isce-framework:develop' into develop
gshiroma Aug 28, 2025
dd80c38
Merge branch 'isce-framework:develop' into develop
gshiroma Aug 29, 2025
63853b2
Merge branch 'isce-framework:develop' into develop
gshiroma Aug 29, 2025
7c7272f
Merge branch 'isce-framework:develop' into develop
gshiroma Sep 2, 2025
dd18a84
Merge branch 'isce-framework:develop' into develop
gshiroma Sep 17, 2025
d43ca22
Merge branch 'isce-framework:develop' into develop
gshiroma Oct 6, 2025
c62d750
Merge branch 'isce-framework:develop' into develop
gshiroma Oct 29, 2025
5922bbf
Merge branch 'isce-framework:develop' into develop
gshiroma Nov 6, 2025
9cc7088
Merge branch 'isce-framework:develop' into develop
gshiroma Dec 15, 2025
c207327
Merge branch 'isce-framework:develop' into develop
gshiroma Jan 10, 2026
b37c144
Merge branch 'isce-framework:develop' into develop
gshiroma Mar 11, 2026
046a9ce
Merge branch 'isce-framework:develop' into develop
gshiroma Mar 30, 2026
23e6e7f
Merge branch 'isce-framework:develop' into develop
gshiroma Apr 27, 2026
82bc63a
Merge branch 'isce-framework:develop' into develop
gshiroma May 20, 2026
c3be272
Merge branch 'isce-framework:develop' into develop
gshiroma May 28, 2026
c924bec
Merge branch 'isce-framework:develop' into develop
gshiroma Jun 2, 2026
f6256a2
Merge branch 'isce-framework:develop' into develop
gshiroma Jun 8, 2026
29b2c09
Merge branch 'isce-framework:develop' into develop
gshiroma Jun 24, 2026
ff946bc
Merge branch 'isce-framework:develop' into develop
gshiroma Aug 27, 2026
c8ea850
Update GCOV and GSLC writers to handle integer 16 masks
gshiroma Sep 8, 2026
3824ac7
add fill_value to `inputDataExceptionMask` and copy attributes from i…
gshiroma Sep 14, 2026
99bd8cf
add fill_value to `inputDataExceptionMask` and copy attributes from i…
gshiroma Sep 14, 2026
f1a0f4a
add fill_value to `inputDataExceptionMask` and copy attributes from i…
gshiroma Sep 14, 2026
74a8baf
add fill_value to `inputDataExceptionMask` and copy attributes from i…
gshiroma Sep 15, 2026
d7fab91
Merge branch 'isce-framework:develop' into update_gcov_gslc_data_exce…
gshiroma Sep 15, 2026
f09bc10
Merge branch 'isce-framework:develop' into update_gcov_gslc_data_exce…
gshiroma Sep 16, 2026
5ef7539
improve warning messages
gshiroma Sep 16, 2026
9bdbd64
rename inputDataExceptionMask attributes `maskValidPixelFraction` to …
gshiroma Sep 16, 2026
02fbdc6
rename inputDataExceptionMask attributes `maskValidPixelFraction` to …
gshiroma Sep 16, 2026
8d0ab5b
Merge branch 'isce-framework:develop' into update_gcov_gslc_data_exce…
gshiroma Sep 16, 2026
a432d07
Update GCOV and GSLC product specs XMLs
gshiroma Sep 16, 2026
9de41a7
Update GCOV and GSLC product specs XMLs
gshiroma Sep 16, 2026
521f933
Update python/packages/nisar/products/writers/BaseL2WriterSingleInput.py
gshiroma Sep 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 38 additions & 4 deletions python/packages/nisar/products/XML/L2/nisar_L2_GCOV.xml
Original file line number Diff line number Diff line change
Expand Up @@ -367,12 +367,29 @@
<integer name="/science/LSAR/GCOV/grids/frequencyA/inputDataExceptionMask"
shape="realDataFrequencyAShape"
signed="false"
width="8">
width="16">
<annotation app="conformance"
lang="en"
DIMENSION_LIST="HDF5 internal attribute"
valid_min="0"
grid_mapping="projection">Bitwise OR of input data exception codes for each image pixel (0: no anomaly, 2: NISAR LSAR qFSP-H1 sample slip)</annotation>
_FillValue="65535"
rslcValidPixelFractionHH="Ratio of fully focused pixels to total number of pixels in the input RSLC HH mask"
rawValidPulseFractionHH="Ratio of valid pulse count to total pulses required to form the input RSLC HH image"
rslcValidPixelFractionHV="Ratio of fully focused pixels to total number of pixels in the input RSLC HV mask"
rawValidPulseFractionHV="Ratio of valid pulse count to total pulses required to form the input RSLC HV image"
rslcValidPixelFractionVH="Ratio of fully focused pixels to total number of pixels in the input RSLC VH mask"
rawValidPulseFractionVH="Ratio of valid pulse count to total pulses required to form the input RSLC VH image"
rslcValidPixelFractionVV="Ratio of fully focused pixels to total number of pixels in the input RSLC VV mask"
rawValidPulseFractionVV="Ratio of valid pulse count to total pulses required to form the input RSLC VV image"
rslcValidPixelFractionRH="Ratio of fully focused pixels to total number of pixels in the input RSLC RH mask"
rawValidPulseFractionRH="Ratio of valid pulse count to total pulses required to form the input RSLC RH image"
rslcValidPixelFractionRV="Ratio of fully focused pixels to total number of pixels in the input RSLC RV mask"
rawValidPulseFractionRV="Ratio of valid pulse count to total pulses required to form the input RSLC RV image"
rslcValidPixelFractionLH="Ratio of fully focused pixels to total number of pixels in the input RSLC LH mask"
rawValidPulseFractionLH="Ratio of valid pulse count to total pulses required to form the input RSLC LH image"
rslcValidPixelFractionLV="Ratio of fully focused pixels to total number of pixels in the input RSLC LV mask"
rawValidPulseFractionLV="Ratio of valid pulse count to total pulses required to form the input RSLC LV image"
grid_mapping="projection">Bitwise OR of input data exception codes for each image pixel (0: no anomaly, 2: NISAR LSAR qFSP-H1 sample slip). Also includes OR of validity mask bits, where each bit is set on for fully-focused data or off for partially focused or missing data (256:HH, 512:HV, 1024:VH, 2048:VV, 4096:LH, 8192:LV, 16384:RH, 32768:RV)</annotation>
</integer>
<real name="/science/LSAR/GCOV/grids/frequencyA/HHHH"
shape="realDataFrequencyAShape"
Expand Down Expand Up @@ -782,12 +799,29 @@
<integer name="/science/LSAR/GCOV/grids/frequencyB/inputDataExceptionMask"
shape="realDataFrequencyBShape"
signed="false"
width="8">
width="16">
<annotation app="conformance"
lang="en"
DIMENSION_LIST="HDF5 internal attribute"
valid_min="0"
grid_mapping="projection">Bitwise OR of input data exception codes for each image pixel (0: no anomaly, 2: NISAR LSAR qFSP-H1 sample slip)</annotation>
_FillValue="65535"
rslcValidPixelFractionHH="Ratio of fully focused pixels to total number of pixels in the input RSLC HH mask"
rawValidPulseFractionHH="Ratio of valid pulse count to total pulses required to form the input RSLC HH image"
rslcValidPixelFractionHV="Ratio of fully focused pixels to total number of pixels in the input RSLC HV mask"
rawValidPulseFractionHV="Ratio of valid pulse count to total pulses required to form the input RSLC HV image"
rslcValidPixelFractionVH="Ratio of fully focused pixels to total number of pixels in the input RSLC VH mask"
rawValidPulseFractionVH="Ratio of valid pulse count to total pulses required to form the input RSLC VH image"
rslcValidPixelFractionVV="Ratio of fully focused pixels to total number of pixels in the input RSLC VV mask"
rawValidPulseFractionVV="Ratio of valid pulse count to total pulses required to form the input RSLC VV image"
rslcValidPixelFractionRH="Ratio of fully focused pixels to total number of pixels in the input RSLC RH mask"
rawValidPulseFractionRH="Ratio of valid pulse count to total pulses required to form the input RSLC RH image"
rslcValidPixelFractionRV="Ratio of fully focused pixels to total number of pixels in the input RSLC RV mask"
rawValidPulseFractionRV="Ratio of valid pulse count to total pulses required to form the input RSLC RV image"
rslcValidPixelFractionLH="Ratio of fully focused pixels to total number of pixels in the input RSLC LH mask"
rawValidPulseFractionLH="Ratio of valid pulse count to total pulses required to form the input RSLC LH image"
rslcValidPixelFractionLV="Ratio of fully focused pixels to total number of pixels in the input RSLC LV mask"
rawValidPulseFractionLV="Ratio of valid pulse count to total pulses required to form the input RSLC LV image"
grid_mapping="projection">Bitwise OR of input data exception codes for each image pixel (0: no anomaly, 2: NISAR LSAR qFSP-H1 sample slip). Also includes OR of validity mask bits, where each bit is set on for fully-focused data or off for partially focused or missing data (256:HH, 512:HV, 1024:VH, 2048:VV, 4096:LH, 8192:LV, 16384:RH, 32768:RV)</annotation>
</integer>
<real name="/science/LSAR/GCOV/grids/frequencyB/HHHH"
shape="realDataFrequencyBShape"
Expand Down
42 changes: 38 additions & 4 deletions python/packages/nisar/products/XML/L2/nisar_L2_GSLC.xml
Original file line number Diff line number Diff line change
Expand Up @@ -361,12 +361,29 @@
<integer name="/science/LSAR/GSLC/grids/frequencyA/inputDataExceptionMask"
shape="realDataFrequencyAShape"
signed="false"
width="8">
width="16">
<annotation app="conformance"
lang="en"
DIMENSION_LIST="HDF5 internal attribute"
grid_mapping="projection"
valid_min="0">Bitwise OR of input data exception codes for each image pixel (0: no anomaly, 2: NISAR LSAR qFSP-H1 sample slip)</annotation>
_FillValue="65535"
rslcValidPixelFractionHH="Ratio of fully focused pixels to total number of pixels in the input RSLC HH mask"
rawValidPulseFractionHH="Ratio of valid pulse count to total pulses required to form the input RSLC HH image"
rslcValidPixelFractionHV="Ratio of fully focused pixels to total number of pixels in the input RSLC HV mask"
rawValidPulseFractionHV="Ratio of valid pulse count to total pulses required to form the input RSLC HV image"
rslcValidPixelFractionVH="Ratio of fully focused pixels to total number of pixels in the input RSLC VH mask"
rawValidPulseFractionVH="Ratio of valid pulse count to total pulses required to form the input RSLC VH image"
rslcValidPixelFractionVV="Ratio of fully focused pixels to total number of pixels in the input RSLC VV mask"
rawValidPulseFractionVV="Ratio of valid pulse count to total pulses required to form the input RSLC VV image"
rslcValidPixelFractionRH="Ratio of fully focused pixels to total number of pixels in the input RSLC RH mask"
rawValidPulseFractionRH="Ratio of valid pulse count to total pulses required to form the input RSLC RH image"
rslcValidPixelFractionRV="Ratio of fully focused pixels to total number of pixels in the input RSLC RV mask"
rawValidPulseFractionRV="Ratio of valid pulse count to total pulses required to form the input RSLC RV image"
rslcValidPixelFractionLH="Ratio of fully focused pixels to total number of pixels in the input RSLC LH mask"
rawValidPulseFractionLH="Ratio of valid pulse count to total pulses required to form the input RSLC LH image"
rslcValidPixelFractionLV="Ratio of fully focused pixels to total number of pixels in the input RSLC LV mask"
rawValidPulseFractionLV="Ratio of valid pulse count to total pulses required to form the input RSLC LV image"
valid_min="0">Bitwise OR of input data exception codes for each image pixel (0: no anomaly, 2: NISAR LSAR qFSP-H1 sample slip). Also includes OR of validity mask bits, where each bit is set on for fully-focused data or off for partially focused or missing data (256:HH, 512:HV, 1024:VH, 2048:VV, 4096:LH, 8192:LV, 16384:RH, 32768:RV)</annotation>
</integer>
<real name="/science/LSAR/GSLC/grids/frequencyA/HH"
shape="complexDataFrequencyAShape"
Expand Down Expand Up @@ -630,12 +647,29 @@
<integer name="/science/LSAR/GSLC/grids/frequencyB/inputDataExceptionMask"
shape="realDataFrequencyBShape"
signed="false"
width="8">
width="16">
<annotation app="conformance"
lang="en"
DIMENSION_LIST="HDF5 internal attribute"
grid_mapping="projection"
valid_min="0">Bitwise OR of input data exception codes for each image pixel (0: no anomaly, 2: NISAR LSAR qFSP-H1 sample slip)</annotation>
_FillValue="65535"
rslcValidPixelFractionHH="Ratio of fully focused pixels to total number of pixels in the input RSLC HH mask"
rawValidPulseFractionHH="Ratio of valid pulse count to total pulses required to form the input RSLC HH image"
rslcValidPixelFractionHV="Ratio of fully focused pixels to total number of pixels in the input RSLC HV mask"
rawValidPulseFractionHV="Ratio of valid pulse count to total pulses required to form the input RSLC HV image"
rslcValidPixelFractionVH="Ratio of fully focused pixels to total number of pixels in the input RSLC VH mask"
rawValidPulseFractionVH="Ratio of valid pulse count to total pulses required to form the input RSLC VH image"
rslcValidPixelFractionVV="Ratio of fully focused pixels to total number of pixels in the input RSLC VV mask"
rawValidPulseFractionVV="Ratio of valid pulse count to total pulses required to form the input RSLC VV image"
rslcValidPixelFractionRH="Ratio of fully focused pixels to total number of pixels in the input RSLC RH mask"
rawValidPulseFractionRH="Ratio of valid pulse count to total pulses required to form the input RSLC RH image"
rslcValidPixelFractionRV="Ratio of fully focused pixels to total number of pixels in the input RSLC RV mask"
rawValidPulseFractionRV="Ratio of valid pulse count to total pulses required to form the input RSLC RV image"
rslcValidPixelFractionLH="Ratio of fully focused pixels to total number of pixels in the input RSLC LH mask"
rawValidPulseFractionLH="Ratio of valid pulse count to total pulses required to form the input RSLC LH image"
rslcValidPixelFractionLV="Ratio of fully focused pixels to total number of pixels in the input RSLC LV mask"
rawValidPulseFractionLV="Ratio of valid pulse count to total pulses required to form the input RSLC LV image"
valid_min="0">Bitwise OR of input data exception codes for each image pixel (0: no anomaly, 2: NISAR LSAR qFSP-H1 sample slip). Also includes OR of validity mask bits, where each bit is set on for fully-focused data or off for partially focused or missing data (256:HH, 512:HV, 1024:VH, 2048:VV, 4096:LH, 8192:LV, 16384:RH, 32768:RV)</annotation>
</integer>
<real name="/science/LSAR/GSLC/grids/frequencyB/HH"
shape="complexDataFrequencyBShape"
Expand Down
32 changes: 28 additions & 4 deletions python/packages/nisar/products/writers/BaseL2WriterSingleInput.py
Original file line number Diff line number Diff line change
Expand Up @@ -1655,7 +1655,8 @@ def geocode_lut(self, output_h5_group, input_h5_group=None,
input_ds_name_list=None,
skip_if_not_present=False,
compute_stats=False,
data_interpolator=None):
data_interpolator=None,
fill_value=None):
"""
Geocode a look-up table (LUT) from the input product in
radar coordinates to the output product in map coordinates
Expand Down Expand Up @@ -1694,6 +1695,12 @@ def geocode_lut(self, output_h5_group, input_h5_group=None,
Otherwise, if the LUT contains < 5 rows or columns, bilinear
interpolation will be used. Otherwise, biquintic interpolation
will be used.
fill_value : float, optional
Value to populate the HDF5 dataset attribute "_FillValue".
Defaults to "nan" or "(nan+nanj)" if the raster layer
is real- or complex-valued, respectively. If the layer data
type is integer and `fill_value` is None, the attribute "_FillValue"
will not be populated as an attribute of the HDF5 dataset.

Returns
-------
Expand Down Expand Up @@ -1770,7 +1777,8 @@ def geocode_lut(self, output_h5_group, input_h5_group=None,
output_h5_group_path,
skip_if_not_present,
compute_stats,
data_interpolator)
data_interpolator,
fill_value=fill_value)

def geocode_metadata_group(self,
frequency,
Expand All @@ -1781,7 +1789,8 @@ def geocode_metadata_group(self,
output_h5_group_path,
skip_if_not_present,
compute_stats=False,
data_interpolator=None):
data_interpolator=None,
fill_value=None):
"""
Geocode look-up tables (LUTs) from the input product in
radar coordinates to the output product in map coordinates
Expand Down Expand Up @@ -1822,6 +1831,12 @@ def geocode_metadata_group(self,
Otherwise, if the LUT contains < 5 rows or columns, bilinear
interpolation will be used. Otherwise, biquintic interpolation
will be used.
fill_value : float, optional
Value to populate the HDF5 dataset attribute "_FillValue".
Defaults to "nan" or "(nan+nanj)" if the raster layer
is real- or complex-valued, respectively. If the layer data
type is integer and `fill_value` is None, the attribute "_FillValue"
will not be populated as an attribute of the HDF5 dataset.

Returns
-------
Expand Down Expand Up @@ -2182,6 +2197,7 @@ def geocode_metadata_group(self,
metadata_geogrid,
compute_stats,
data_interpolator=data_interpolator,
fill_value=fill_value,
**geocode_kwargs)

input_temp.close()
Expand All @@ -2196,6 +2212,7 @@ def geocode_raster(self,
metadata_geogrid,
compute_stats,
data_interpolator=None,
fill_value=None,
**geocode_kwargs):
"""
Geocode an ISCE3 Raster object containing look-up tables (LUTs)
Expand Down Expand Up @@ -2223,6 +2240,12 @@ def geocode_raster(self,
output raster layer. Defaults to False.
data_interpolator: str, optional
Interpolation algorithm to use for geocoding
fill_value : float, optional
Value to populate the HDF5 dataset attribute "_FillValue".
Defaults to "nan" or "(nan+nanj)" if the raster layer
is real- or complex-valued, respectively. If the layer data
type is integer and `fill_value` is None, the attribute "_FillValue"
will not be populated as an attribute of the HDF5 dataset.
**geocode_kwargs
Keyword arguments to be passed to the `geocode()`.
"""
Expand Down Expand Up @@ -2254,7 +2277,7 @@ def geocode_raster(self,
geo = isce3.geocode.GeocodeCFloat32()
elif input_raster_obj.datatype() == gdal.GDT_CFloat64:
geo = isce3.geocode.GeocodeCFloat64()
elif input_raster_obj.datatype() == gdal.GDT_Byte:
elif input_raster_obj.datatype() in (gdal.GDT_Byte, gdal.GDT_Int16, gdal.GDT_UInt16):
geo = isce3.geocode.GeocodeFloat32()
else:
err_str = 'Unsupported raster type for geocoding'
Expand Down Expand Up @@ -2321,6 +2344,7 @@ def geocode_raster(self,
save_dataset(temp_output.name, self.output_hdf5_obj,
output_h5_group_path,
yds, xds, output_ds_name_list,
fill_value=fill_value,
compute_stats=compute_stats)

temp_output.close()
Expand Down
Loading
Loading