isce-framework / nisar-workflows

3 stars 1 forks source link

Potential Error in the way the elevation and incidence angles are computed in the geolocation grid. #3

Closed fastice closed 1 month ago

fastice commented 7 months ago

This notebook documents what I think is an error in the way the elevation/incidence angles are computed in the RUNW products.

https://github.com/fastice/nisarTestNotebooks/blob/main/LocationGridTest.ipynb

I get similar results when I also run it on one of the Antarctic Frames. Seem summary in notebook for more detail.

gshiroma commented 6 months ago

Thank you so much, @fastice , for reporting this.

In your notebook, you are utilizing the zero-Doppler azimuth time zeroDopplerPt to interpolate the orbit and retrieve the platform position. While this method provides an approximation of the platform position, in order to get the actual platform position, we must employ the "native Doppler". In ISCE3, this is done here. Please note that while NISAR L1 products are represented over the zero-Doppler grid, focused sample of that grid may have been acquired with a "squint angle".

These are the steps we perform to compute the getGeolocationGrid cubes for L1 products:

  1. Call the function that computes the geolocationGrid cube getGeolocationGrid() providing both the Doppler grid (zero-Doppler) look-up table (LUT) grid_doppler and native-Doppler LUT native_doppler.
  2. Within the function, compute the geographical location of each range-Doppler pixel (or "target") using rdr2geo() and the zero-Doppler look-up table (LUT) (code here).
  3. With the target position on the ground, we run geo2rdr() here with the native Doppler LUT to determine the actual azimuth time native_azimuth_time corresponding to the target observation.
  4. Interpolate the orbit using the "native-Doppler" azimuth time here and use the resulting satellite position to compute all radar geometry layers, including the incidence angle and elevation angles.

I believe this would explain the discrepancy between your results and the geolocationGrid cubes saved within the RUNW. Please, let us know if you have any thoughts or questions. Thanks again.

gshiroma commented 1 month ago

Metadata cubes of L1 products are created using the zero-Doppler grid, but with radar geometry parameters (e.g., incidence or elevation angle) calculated based on the actual platform position (i.e., accounting for the squint angle). This explains why the geometry values from @fastice's notebook diverge from those stored in the RUNW product.