ISCE_INSAR/components/zerodop/GPUampcor/GPUampcor.pyx

320 lines
10 KiB
Cython
Raw Normal View History

2019-01-16 19:40:08 +00:00
#
# Author: Joshua Cohen
# Copyright 2016
#
from libc.stdint cimport uint64_t
from libcpp cimport bool
cdef extern from "Ampcor.h":
cdef cppclass Ampcor:
uint64_t imgAccessor1, imgAccessor2, offImgAccessor, offQualImgAccessor
float snrThresh, covThresh, xScaleFactor, yScaleFactor
int imgDatatypes[2]
int imgWidths[2]
int imgBands[2]
int isMag[2]
int firstRow, lastRow, rowSkip, firstCol, lastCol, colSkip, refChipWidth, refChipHeight
int schMarginX, schMarginY, nLookAcross, nLookDown, osampFact, zoomWinSize
int acrossGrossOff, downGrossOff, numRowTable
bool corr_debug, corr_display, usr_enable_gpu
Ampcor() except +
void ampcor()
int getLocationAcrossAt(int)
int getLocationDownAt(int)
float getLocationAcrossOffsetAt(int)
float getLocationDownOffsetAt(int)
float getSnrAt(int)
float getCov1At(int)
float getCov2At(int)
float getCov3At(int)
cdef class PyAmpcor:
cdef Ampcor c_ampcor
def __cinit__(self):
return
@property
def imageBand1(self):
return self.c_ampcor.imgBands[0]
@imageBand1.setter
def imageBand1(self, int a):
self.c_ampcor.imgBands[0] = a
@property
def imageBand2(self):
return self.c_ampcor.imgBands[1]
@imageBand2.setter
def imageBand2(self, int a):
self.c_ampcor.imgBands[1] = a
@property
def imageAccessor1(self):
return self.c_ampcor.imgAccessor1
@imageAccessor1.setter
def imageAccessor1(self, uint64_t a):
self.c_ampcor.imgAccessor1 = a
@property
def imageAccessor2(self):
return self.c_ampcor.imgAccessor2
@imageAccessor2.setter
def imageAccessor2(self, uint64_t a):
self.c_ampcor.imgAccessor2 = a
@property
def offsetImageAccessor(self):
return self.c_ampcor.offImgAccessor
@offsetImageAccessor.setter
def offsetImageAccessor(self, uint64_t a):
self.c_ampcor.offImgAccessor = a
@property
def offsetQualImageAccessor(self):
return self.c_ampcor.offQualImgAccessor
@offsetQualImageAccessor.setter
def offsetQualImageAccessor(self, uint64_t a):
self.c_ampcor.offQualImgAccessor = a
@property
def thresholdSNR(self):
return self.c_ampcor.snrThresh
@thresholdSNR.setter
def thresholdSNR(self, float a):
self.c_ampcor.snrThresh = a
@property
def thresholdCov(self):
return self.c_ampcor.covThresh
@thresholdCov.setter
def thresholdCov(self, float a):
self.c_ampcor.covThresh = a
@property
def scaleFactorX(self):
return self.c_ampcor.xScaleFactor
@scaleFactorX.setter
def scaleFactorX(self, float a):
self.c_ampcor.xScaleFactor = a
@property
def scaleFactorY(self):
return self.c_ampcor.yScaleFactor
@scaleFactorY.setter
def scaleFactorY(self, float a):
self.c_ampcor.yScaleFactor = a
@property
def datatype1(self):
dt = self.c_ampcor.imgDatatypes[0]
mg = self.c_ampcor.isMag[0]
if (dt + mg == 0):
return 'real'
elif (dt + mg == 1):
return 'complex'
else: # dt + mg == 2
return 'mag'
@datatype1.setter
def datatype1(self, str a):
if (a[0].lower() == 'r'):
self.c_ampcor.isMag[0] = 0
self.c_ampcor.imgDatatypes[0] = 0
elif (a[0].lower() == 'c'):
self.c_ampcor.isMag[0] = 0
self.c_ampcor.imgDatatypes[0] = 1
elif (a[0].lower() == 'm'):
self.c_ampcor.isMag[0] = 1
self.c_ampcor.imgDatatypes[0] = 1
else:
print("Error: Unrecognized datatype. Expected 'complex', 'real', or 'mag'.")
@property
def datatype2(self):
dt = self.c_ampcor.imgDatatypes[1]
mg = self.c_ampcor.isMag[1]
if (dt + mg == 0):
return 'real'
elif (dt + mg == 1):
return 'complex'
else: # dt + mg == 2
return 'mag'
@datatype2.setter
def datatype2(self, str a):
if (a[0].lower() == 'r'):
self.c_ampcor.isMag[1] = 0
self.c_ampcor.imgDatatypes[1] = 0
elif (a[0].lower() == 'c'):
self.c_ampcor.isMag[1] = 0
self.c_ampcor.imgDatatypes[1] = 1
elif (a[0].lower() == 'm'):
self.c_ampcor.isMag[1] = 1
self.c_ampcor.imgDatatypes[1] = 1
else:
print("Error: Unrecognized datatype. Expected 'complex', 'real', or 'mag'.")
@property
def lineLength1(self):
return self.c_ampcor.imgWidths[0]
@lineLength1.setter
def lineLength1(self, int a):
self.c_ampcor.imgWidths[0] = a
@property
def lineLength2(self):
return self.c_ampcor.imgWidths[1]
@lineLength2.setter
def lineLength2(self, int a):
self.c_ampcor.imgWidths[1] = a
@property
def firstSampleDown(self):
return self.c_ampcor.firstRow
@firstSampleDown.setter
def firstSampleDown(self, int a):
self.c_ampcor.firstRow = a
@property
def lastSampleDown(self):
return self.c_ampcor.lastRow
@lastSampleDown.setter
def lastSampleDown(self, int a):
self.c_ampcor.lastRow = a
@property
def skipSampleDown(self):
return self.c_ampcor.rowSkip
@skipSampleDown.setter
def skipSampleDown(self, int a):
self.c_ampcor.rowSkip = a
@property
def firstSampleAcross(self):
return self.c_ampcor.firstCol
@firstSampleAcross.setter
def firstSampleAcross(self, int a):
self.c_ampcor.firstCol = a
@property
def lastSampleAcross(self):
return self.c_ampcor.lastCol
@lastSampleAcross.setter
def lastSampleAcross(self, int a):
self.c_ampcor.lastCol = a
@property
def skipSampleAcross(self):
return self.c_ampcor.colSkip
@skipSampleAcross.setter
def skipSampleAcross(self, int a):
self.c_ampcor.colSkip = a
@property
def windowSizeWidth(self):
return self.c_ampcor.refChipWidth
@windowSizeWidth.setter
def windowSizeWidth(self, int a):
self.c_ampcor.refChipWidth = a
@property
def windowSizeHeight(self):
return self.c_ampcor.refChipHeight
@windowSizeHeight.setter
def windowSizeHeight(self, int a):
self.c_ampcor.refChipHeight = a
@property
def searchWindowSizeWidth(self):
return self.c_ampcor.schMarginX
@searchWindowSizeWidth.setter
def searchWindowSizeWidth(self, int a):
self.c_ampcor.schMarginX = a
@property
def searchWindowSizeHeight(self):
return self.c_ampcor.schMarginY
@searchWindowSizeHeight.setter
def searchWindowSizeHeight(self, int a):
self.c_ampcor.schMarginY = a
@property
def acrossLooks(self):
return self.c_ampcor.nLookAcross
@acrossLooks.setter
def acrossLooks(self, int a):
self.c_ampcor.nLookAcross = a
@property
def downLooks(self):
return self.c_ampcor.nLookDown
@downLooks.setter
def downLooks(self, int a):
self.c_ampcor.nLookDown = a
@property
def oversamplingFactor(self):
return self.c_ampcor.osampFact
@oversamplingFactor.setter
def oversamplingFactor(self, int a):
self.c_ampcor.osampFact = a
@property
def zoomWindowSize(self):
return self.c_ampcor.zoomWinSize
@zoomWindowSize.setter
def zoomWindowSize(self, int a):
self.c_ampcor.zoomWinSize = a
@property
def acrossGrossOffset(self):
return self.c_ampcor.acrossGrossOff
@acrossGrossOffset.setter
def acrossGrossOffset(self, int a):
self.c_ampcor.acrossGrossOff = a
@property
def downGrossOffset(self):
return self.c_ampcor.downGrossOff
@downGrossOffset.setter
def downGrossOffset(self, int a):
self.c_ampcor.downGrossOff = a
@property
def debugFlag(self):
return self.c_ampcor.corr_debug
@debugFlag.setter
def debugFlag(self, bool a):
self.c_ampcor.corr_debug = a
@property
def displayFlag(self):
return self.c_ampcor.corr_display
@displayFlag.setter
def displayFlag(self, bool a):
self.c_ampcor.corr_display = a
@property
def usr_enable_gpu(self):
return self.c_ampcor.usr_enable_gpu
@usr_enable_gpu.setter
def usr_enable_gpu(self, bool a):
self.c_ampcor.usr_enable_gpu = a
@property
def numElem(self):
return self.c_ampcor.numRowTable
def runAmpcor(self):
self.c_ampcor.ampcor()
def getLocationAcrossAt(self, int idx):
if (idx >= self.numElem):
print("Error: Invalid element number ("+str(self.numElem)+" elements available).")
else:
return self.c_ampcor.getLocationAcrossAt(idx)
def getLocationDownAt(self, int idx):
if (idx >= self.numElem):
print("Error: Invalid element number ("+str(self.numElem)+" elements available).")
else:
return self.c_ampcor.getLocationDownAt(idx)
def getLocationAcrossOffsetAt(self, int idx):
if (idx >= self.numElem):
print("Error: Invalid element number ("+str(self.numElem)+" elements available).")
else:
return self.c_ampcor.getLocationAcrossOffsetAt(idx)
def getLocationDownOffsetAt(self, int idx):
if (idx >= self.numElem):
print("Error: Invalid element number ("+str(self.numElem)+" elements available).")
else:
return self.c_ampcor.getLocationDownOffsetAt(idx)
def getSNRAt(self, int idx):
if (idx >= self.numElem):
print("Error: Invalid element number ("+str(self.numElem)+" elements available).")
else:
return self.c_ampcor.getSnrAt(idx)
def getCov1At(self, int idx):
if (idx >= self.numElem):
print("Error: Invalid element number ("+str(self.numElem)+" elements available).")
else:
return self.c_ampcor.getCov1At(idx)
def getCov2At(self, int idx):
if (idx >= self.numElem):
print("Error: Invalid element number ("+str(self.numElem)+" elements available).")
else:
return self.c_ampcor.getCov2At(idx)
def getCov3At(self, int idx):
if (idx >= self.numElem):
print("Error: Invalid element number ("+str(self.numElem)+" elements available).")
else:
return self.c_ampcor.getCov3At(idx)