diff --git a/components/zerodop/geozero/Geozero.py b/components/zerodop/geozero/Geozero.py index 81f1172..1692e25 100755 --- a/components/zerodop/geozero/Geozero.py +++ b/components/zerodop/geozero/Geozero.py @@ -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() diff --git a/components/zerodop/geozero/bindings/geozeromodule.cpp b/components/zerodop/geozero/bindings/geozeromodule.cpp index fd23155..bce1765 100644 --- a/components/zerodop/geozero/bindings/geozeromodule.cpp +++ b/components/zerodop/geozero/bindings/geozeromodule.cpp @@ -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) diff --git a/components/zerodop/geozero/include/geozeromodule.h b/components/zerodop/geozero/include/geozeromodule.h index efe06a5..61ba1d9 100644 --- a/components/zerodop/geozero/include/geozeromodule.h +++ b/components/zerodop/geozero/include/geozeromodule.h @@ -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 *); diff --git a/components/zerodop/geozero/src/geozero.f90 b/components/zerodop/geozero/src/geozero.f90 index 0c15318..ca64503 100644 --- a/components/zerodop/geozero/src/geozero.f90 +++ b/components/zerodop/geozero/src/geozero.f90 @@ -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