Add lookside check to geozero, fixes #294 (#302)

* Add lookside check to geozero, fixes #294

comparison is based on 0eb175f86f/cxx/isce3/geometry/detail/Geo2Rdr.icc (L83-L89)

This gets rid of the duplicate image for UAVSAR geocoding with diagonal heading

* fix bindings and include for new number of arguments
LT1AB
Scott Staniewicz 2021-07-21 01:00:09 -05:00 committed by GitHub
parent eb5790a884
commit b99aa5975f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 28 additions and 9 deletions

View File

@ -247,7 +247,7 @@ class Geocode(Component):
demCropAcc = 0
geozero.geozero_Py(demAccessor, inputAccessor, demCropAcc,
self.geoAccessor, inband, outband,
int(complexFlag), int(self.interp_methods[self.method]))
int(complexFlag), int(self.interp_methods[self.method]), int(self.lookSide))
combinedlibmodule.freeCOrbit(cOrbit)
self.getState()

View File

@ -75,15 +75,15 @@ PyObject * geozero_C(PyObject* self, PyObject* args)
uint64_t var1;
uint64_t var2;
uint64_t var3;
int b1, b2, b3,b4;
if(!PyArg_ParseTuple(args, "KKKKiiii", &var0, &var1, &var2, &var3,
&b1,&b2,&b3,&b4))
int b1, b2, b3, b4, b5;
if(!PyArg_ParseTuple(args, "KKKKiiiii", &var0, &var1, &var2, &var3,
&b1,&b2,&b3,&b4,&b5))
{
return NULL;
}
b1++; //Python bandnumber to Fortran bandnumber
b2++; //Python bandnumber to Fortran bandnumber
geozero_f(&var0,&var1,&var2,&var3,&b1,&b2,&b3,&b4);
geozero_f(&var0,&var1,&var2,&var3,&b1,&b2,&b3,&b4,&b5);
return Py_BuildValue("i", 0);
}
PyObject * setEllipsoidMajorSemiAxis_C(PyObject* self, PyObject* args)

View File

@ -41,7 +41,7 @@ extern "C"
#include "poly1d.h"
void geozero_f(uint64_t *, uint64_t *, uint64_t *, uint64_t *,
int*, int*, int*, int*);
int*, int*, int*, int*, int*);
PyObject * geozero_C(PyObject *, PyObject *);
void setEllipsoidMajorSemiAxis_f(double *);
PyObject * setEllipsoidMajorSemiAxis_C(PyObject *, PyObject *);

View File

@ -1,4 +1,4 @@
subroutine geozero(demAccessor,inAccessor,demCropAccessor,outAccessor,inband,outband,iscomplex,method)
subroutine geozero(demAccessor,inAccessor,demCropAccessor,outAccessor,inband,outband,iscomplex,method,lookSide)
use geozeroState
use geozeroReadWrite
use geozeroMethods
@ -16,7 +16,7 @@ subroutine geozero(demAccessor,inAccessor,demCropAccessor,outAccessor,inband,out
!! DECLARE LOCAL VARIABLES
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
integer inband,outband
integer iscomplex,method
integer iscomplex,method,lookSide
integer stat,cnt
integer*8 inAccessor,demAccessor
integer*8 outAccessor,demCropAccessor
@ -69,6 +69,10 @@ subroutine geozero(demAccessor,inAccessor,demCropAccessor,outAccessor,inband,out
real*8 BAD_VALUE
parameter(BAD_VALUE = -10000.0d0)
!! Cross product holder, for comparison to lookSide
real*8 :: look_side_vec(3)
real*8 look_side_sign
integer pixel_side
!Doppler factor
type(poly1dType) :: fdvsrng, fddotvsrng
@ -300,6 +304,22 @@ subroutine geozero(demAccessor,inAccessor,demCropAccessor,outAccessor,inband,out
satx = xyz_mid
satv = vel_mid
! Check that the pixel is on the correct side of the platform
! https://github.com/isce-framework/isce2/issues/294#issuecomment-853413396
dr = xyz - satx
call cross(dr, satv, look_side_vec)
look_side_sign = dot(look_side_vec, satx)
if(look_side_sign.gt.0) then
pixel_side = -1
else
pixel_side = 1
endif
! Skip if the current pixel side doesn't matches the look side
if(pixel_side.ne.lookSide) then
! print *, "Skipp. lookSide ", lookSide, "look_side_sign", look_side_sign
goto 100
endif
do k=1,21
tprev = tline
!! print *, pixel, k, tline
@ -321,7 +341,6 @@ subroutine geozero(demAccessor,inAccessor,demCropAccessor,outAccessor,inband,out
tline = tline + c1/(c2-c3)
stat = interpolateWGS84Orbit_f(orbit,tline,satx,satv)
if (stat.ne.0) then