ISCE_INSAR/library/isceLib/pyx/Pegtrans.pyx

135 lines
3.9 KiB
Cython

#cython: language_level=3
#
# Author: Joshua Cohen
# Copyright 2017
#
cdef extern from "Pegtrans.h" namespace "isceLib":
cdef cppclass Pegtrans:
double mat[3][3]
double matinv[3][3]
double ov[3]
double radcur
Pegtrans() except +
Pegtrans(const Pegtrans&) except +
void radarToXYZ(Ellipsoid&,Peg&)
void convertSCHtoXYZ(double[3],double[3],int)
void convertSCHdotToXYZdot(double[3],double[3],double[3],double[3],int)
void SCHbasis(double[3],double[3][3],double[3][3])
cdef class PyPegtrans:
cdef Pegtrans c_pegtrans
def __cinit__(self): # Never will be initialized with values, so no need to check
return
@property
def mat(self):
a = [[0.,0.,0.],[0.,0.,0.],[0.,0.,0.]]
for i in range(3):
for j in range(3):
a[i][j] = self.c_pegtrans.mat[i][j]
return a
@mat.setter
def mat(self, a):
if ((len(a) != 3) or (len(a[0]) != 3)):
print("Error: Invalid input size.")
return
for i in range(3):
for j in range(3):
self.c_pegtrans.mat[i][j] = a[i][j]
@property
def matinv(self):
a = [[0.,0.,0.],[0.,0.,0.],[0.,0.,0.]]
for i in range(3):
for j in range(3):
a[i][j] = self.c_pegtrans.matinv[i][j]
return a
@matinv.setter
def matinv(self, a):
if ((len(a) != 3) or (len(a[0]) != 3)):
print("Error: Invalid input size.")
return
for i in range(3):
for j in range(3):
self.c_pegtrans.matinv[i][j] = a[i][j]
@property
def ov(self):
a = [0.,0.,0.]
for i in range(3):
a[i] = self.c_pegtrans.ov[i]
return a
@ov.setter
def ov(self, a):
if (len(a) != 3):
print("Error: Invalid input size.")
return
for i in range(3):
self.c_pegtrans.ov[i] = a[i]
@property
def radcur(self):
return self.c_pegtrans.radcur
@radcur.setter
def radcur(self, double a):
self.c_pegtrans.radcur = a
def dPrint(self):
m = self.mat
mi = self.matinv
o = self.ov
r = self.radcur
print("Mat = "+str(m)+", matinv = "+str(mi)+", ov = "+str(o)+", radcur = "+str(r))
def copy(self, pt):
try:
self.mat = pt.mat
self.matinv = pt.matinv
self.ov = pt.ov
self.radcur = pt.radcur
except:
print("Error: Object passed in is not of type PyPegtrans.")
def radarToXYZ(self, PyEllipsoid a, PyPeg b):
self.c_pegtrans.radarToXYZ(a.c_ellipsoid,b.c_peg)
def convertSCHtoXYZ(self, list a, list b, int c):
cdef double _a[3]
cdef double _b[3]
for i in range(3):
_a[i] = a[i]
_b[i] = b[i]
self.c_pegtrans.convertSCHtoXYZ(_a,_b,c)
for i in range(3):
a[i] = _a[i]
b[i] = _b[i]
def convertSCHdotToXYZdot(self, list a, list b, list c, list d, int e):
cdef double _a[3]
cdef double _b[3]
cdef double _c[3]
cdef double _d[3]
for i in range(3):
_a[i] = a[i]
_b[i] = b[i]
_c[i] = c[i]
_d[i] = d[i]
self.c_pegtrans.convertSCHdotToXYZdot(_a,_b,_c,_d,e)
for i in range(3):
a[i] = _a[i]
b[i] = _b[i]
c[i] = _c[i]
d[i] = _d[i]
def SCHbasis(self, list a, list b, list c):
cdef double _a[3]
cdef double _b[3][3]
cdef double _c[3][3]
for i in range(3):
_a[i] = a[i]
for j in range(3):
_b[i][j] = b[i][j]
_c[i][j] = c[i][j]
self.c_pegtrans.SCHbasis(_a,_b,_c)
for i in range(3):
a[i] = _a[i]
for j in range(3):
b[i][j] = _b[i][j]
c[i][j] = _c[i][j]