Skip to content

Commit

Permalink
Merge pull request #175 from CunrenLiang/main
Browse files Browse the repository at this point in the history
new alosStack, PRF change of ALOS-1, update of TOPS ionospheric correction, new ionospheric filter
  • Loading branch information
rtburns-jpl authored Mar 4, 2021
2 parents 7292d56 + 89973d7 commit d0ec8c1
Show file tree
Hide file tree
Showing 119 changed files with 13,107 additions and 5,457 deletions.
98 changes: 96 additions & 2 deletions applications/alos2App.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,13 @@
mandatory=False,
doc='water body file')

DO_INSAR = Application.Parameter('doInSAR',
public_name='do InSAR',
default = True,
type = bool,
mandatory = False,
doc = 'do InSAR')

USE_VIRTUAL_FILE = Application.Parameter('useVirtualFile',
public_name = 'use virtual file',
default=True,
Expand Down Expand Up @@ -323,27 +330,86 @@
container = list,
doc = 'areas masked out in ionospheric phase estimation')

SWATH_PHASE_DIFF_SNAP_ION = Application.Parameter('swathPhaseDiffSnapIon',
public_name = 'swath phase difference snap to fixed values',
default = None,
type = bool,
mandatory = False,
container = list,
doc = 'swath phase difference snap to fixed values')

SWATH_PHASE_DIFF_LOWER_ION = Application.Parameter('swathPhaseDiffLowerIon',
public_name = 'swath phase difference of lower band',
default = None,
type = float,
mandatory = False,
container = list,
doc = 'swath phase difference of lower band')

SWATH_PHASE_DIFF_UPPER_ION = Application.Parameter('swathPhaseDiffUpperIon',
public_name = 'swath phase difference of upper band',
default = None,
type = float,
mandatory = False,
container = list,
doc = 'swath phase difference of upper band')

FIT_ION = Application.Parameter('fitIon',
public_name = 'apply polynomial fit before filtering ionosphere phase',
default = True,
type = bool,
mandatory = False,
doc = 'apply polynomial fit before filtering ionosphere phase')

FILT_ION = Application.Parameter('filtIon',
public_name = 'whether filtering ionosphere phase',
default = True,
type = bool,
mandatory = False,
doc = 'whether filtering ionosphere phase')

FIT_ADAPTIVE_ION = Application.Parameter('fitAdaptiveIon',
public_name = 'apply polynomial fit in adaptive filtering window',
default = True,
type = bool,
mandatory = False,
doc = 'apply polynomial fit in adaptive filtering window')

FILT_SECONDARY_ION = Application.Parameter('filtSecondaryIon',
public_name = 'whether do secondary filtering of ionosphere phase',
default = True,
type = bool,
mandatory = False,
doc = 'whether do secondary filtering of ionosphere phase')

FILTERING_WINSIZE_MAX_ION = Application.Parameter('filteringWinsizeMaxIon',
public_name='maximum window size for filtering ionosphere phase',
default=151,
default=301,
type=int,
mandatory=False,
doc='maximum window size for filtering ionosphere phase')

FILTERING_WINSIZE_MIN_ION = Application.Parameter('filteringWinsizeMinIon',
public_name='minimum window size for filtering ionosphere phase',
default=41,
default=11,
type=int,
mandatory=False,
doc='minimum window size for filtering ionosphere phase')

FILTERING_WINSIZE_SECONDARY_ION = Application.Parameter('filteringWinsizeSecondaryIon',
public_name='window size of secondary filtering of ionosphere phase',
default=5,
type=int,
mandatory=False,
doc='window size of secondary filtering of ionosphere phase')

FILTER_STD_ION = Application.Parameter('filterStdIon',
public_name = 'standard deviation of ionosphere phase after filtering',
default = None,
type=float,
mandatory = False,
doc = 'standard deviation of ionosphere phase after filtering')

FILTER_SUBBAND_INT = Application.Parameter('filterSubbandInt',
public_name = 'filter subband interferogram',
default = False,
Expand Down Expand Up @@ -579,6 +645,7 @@ class Alos2InSAR(Application):
DEM,
DEM_GEO,
WBD,
DO_INSAR,
USE_VIRTUAL_FILE,
USE_GPU,
BURST_SYNCHRONIZATION_THRESHOLD,
Expand Down Expand Up @@ -608,9 +675,17 @@ class Alos2InSAR(Application):
NUMBER_RANGE_LOOKS_ION,
NUMBER_AZIMUTH_LOOKS_ION,
MASKED_AREAS_ION,
SWATH_PHASE_DIFF_SNAP_ION,
SWATH_PHASE_DIFF_LOWER_ION,
SWATH_PHASE_DIFF_UPPER_ION,
FIT_ION,
FILT_ION,
FIT_ADAPTIVE_ION,
FILT_SECONDARY_ION,
FILTERING_WINSIZE_MAX_ION,
FILTERING_WINSIZE_MIN_ION,
FILTERING_WINSIZE_SECONDARY_ION,
FILTER_STD_ION,
FILTER_SUBBAND_INT,
FILTER_STRENGTH_SUBBAND_INT,
FILTER_WINSIZE_SUBBAND_INT,
Expand Down Expand Up @@ -750,6 +825,7 @@ def endup(self):
## Add instance attribute RunWrapper functions, which emulate methods.
def _add_methods(self):
self.runPreprocessor = Alos2Proc.createPreprocessor(self)
self.runBaseline = Alos2Proc.createBaseline(self)
self.runDownloadDem = Alos2Proc.createDownloadDem(self)
self.runPrepareSlc = Alos2Proc.createPrepareSlc(self)
self.runSlcOffset = Alos2Proc.createSlcOffset(self)
Expand All @@ -768,6 +844,7 @@ def _add_methods(self):
self.runIonSubband = Alos2Proc.createIonSubband(self)
self.runIonUwrap = Alos2Proc.createIonUwrap(self)
self.runIonFilt = Alos2Proc.createIonFilt(self)
self.runIonCorrect = Alos2Proc.createIonCorrect(self)
self.runFilt = Alos2Proc.createFilt(self)
self.runUnwrapSnaphu = Alos2Proc.createUnwrapSnaphu(self)
self.runGeocode = Alos2Proc.createGeocode(self)
Expand Down Expand Up @@ -797,6 +874,13 @@ def _steps(self):
)
)

self.step('baseline',
func=self.runBaseline,
doc=(
"""compute baseline, burst synchronization etc"""
)
)

self.step('download_dem',
func=self.runDownloadDem,
doc=(
Expand Down Expand Up @@ -909,6 +993,12 @@ def _steps(self):
)
)

self.step('ion_correct', func=self.runIonCorrect,
doc=(
"""resample ionospheric phase and ionospheric correction"""
)
)

self.step('filt', func=self.runFilt,
doc=(
"""filter interferogram"""
Expand Down Expand Up @@ -970,6 +1060,8 @@ def main(self):
# Run a preprocessor for the two sets of frames
self.runPreprocessor()

self.runBaseline()

self.runDownloadDem()

self.runPrepareSlc()
Expand Down Expand Up @@ -1006,6 +1098,8 @@ def main(self):

self.runIonFilt()

self.runIonCorrect()

self.runFilt()

self.runUnwrapSnaphu()
Expand Down
89 changes: 87 additions & 2 deletions applications/alos2burstApp.py
Original file line number Diff line number Diff line change
Expand Up @@ -313,27 +313,86 @@
container = list,
doc = 'areas masked out in ionospheric phase estimation')

SWATH_PHASE_DIFF_SNAP_ION = Application.Parameter('swathPhaseDiffSnapIon',
public_name = 'swath phase difference snap to fixed values',
default = None,
type = bool,
mandatory = False,
container = list,
doc = 'swath phase difference snap to fixed values')

SWATH_PHASE_DIFF_LOWER_ION = Application.Parameter('swathPhaseDiffLowerIon',
public_name = 'swath phase difference of lower band',
default = None,
type = float,
mandatory = False,
container = list,
doc = 'swath phase difference of lower band')

SWATH_PHASE_DIFF_UPPER_ION = Application.Parameter('swathPhaseDiffUpperIon',
public_name = 'swath phase difference of upper band',
default = None,
type = float,
mandatory = False,
container = list,
doc = 'swath phase difference of upper band')

FIT_ION = Application.Parameter('fitIon',
public_name = 'apply polynomial fit before filtering ionosphere phase',
default = True,
type = bool,
mandatory = False,
doc = 'apply polynomial fit before filtering ionosphere phase')

FILT_ION = Application.Parameter('filtIon',
public_name = 'whether filtering ionosphere phase',
default = True,
type = bool,
mandatory = False,
doc = 'whether filtering ionosphere phase')

FIT_ADAPTIVE_ION = Application.Parameter('fitAdaptiveIon',
public_name = 'apply polynomial fit in adaptive filtering window',
default = True,
type = bool,
mandatory = False,
doc = 'apply polynomial fit in adaptive filtering window')

FILT_SECONDARY_ION = Application.Parameter('filtSecondaryIon',
public_name = 'whether do secondary filtering of ionosphere phase',
default = True,
type = bool,
mandatory = False,
doc = 'whether do secondary filtering of ionosphere phase')

FILTERING_WINSIZE_MAX_ION = Application.Parameter('filteringWinsizeMaxIon',
public_name='maximum window size for filtering ionosphere phase',
default=151,
default=301,
type=int,
mandatory=False,
doc='maximum window size for filtering ionosphere phase')

FILTERING_WINSIZE_MIN_ION = Application.Parameter('filteringWinsizeMinIon',
public_name='minimum window size for filtering ionosphere phase',
default=41,
default=11,
type=int,
mandatory=False,
doc='minimum window size for filtering ionosphere phase')

FILTERING_WINSIZE_SECONDARY_ION = Application.Parameter('filteringWinsizeSecondaryIon',
public_name='window size of secondary filtering of ionosphere phase',
default=5,
type=int,
mandatory=False,
doc='window size of secondary filtering of ionosphere phase')

FILTER_STD_ION = Application.Parameter('filterStdIon',
public_name = 'standard deviation of ionosphere phase after filtering',
default = None,
type=float,
mandatory = False,
doc = 'standard deviation of ionosphere phase after filtering')

FILTER_SUBBAND_INT = Application.Parameter('filterSubbandInt',
public_name = 'filter subband interferogram',
default = False,
Expand Down Expand Up @@ -543,9 +602,17 @@ class Alos2burstInSAR(Application):
NUMBER_RANGE_LOOKS_ION,
NUMBER_AZIMUTH_LOOKS_ION,
MASKED_AREAS_ION,
SWATH_PHASE_DIFF_SNAP_ION,
SWATH_PHASE_DIFF_LOWER_ION,
SWATH_PHASE_DIFF_UPPER_ION,
FIT_ION,
FILT_ION,
FIT_ADAPTIVE_ION,
FILT_SECONDARY_ION,
FILTERING_WINSIZE_MAX_ION,
FILTERING_WINSIZE_MIN_ION,
FILTERING_WINSIZE_SECONDARY_ION,
FILTER_STD_ION,
FILTER_SUBBAND_INT,
FILTER_STRENGTH_SUBBAND_INT,
FILTER_WINSIZE_SUBBAND_INT,
Expand Down Expand Up @@ -679,6 +746,7 @@ def endup(self):
## Add instance attribute RunWrapper functions, which emulate methods.
def _add_methods(self):
self.runPreprocessor = Alos2burstProc.createPreprocessor(self)
self.runBaseline = Alos2burstProc.createBaseline(self)
self.runExtractBurst = Alos2burstProc.createExtractBurst(self)
self.runDownloadDem = Alos2burstProc.createDownloadDem(self)
self.runCoregGeom = Alos2burstProc.createCoregGeom(self)
Expand All @@ -698,6 +766,7 @@ def _add_methods(self):
self.runIonSubband = Alos2burstProc.createIonSubband(self)
self.runIonUwrap = Alos2burstProc.createIonUwrap(self)
self.runIonFilt = Alos2burstProc.createIonFilt(self)
self.runIonCorrect = Alos2burstProc.createIonCorrect(self)
self.runFilt = Alos2burstProc.createFilt(self)
self.runUnwrapSnaphu = Alos2burstProc.createUnwrapSnaphu(self)
self.runGeocode = Alos2burstProc.createGeocode(self)
Expand All @@ -724,6 +793,12 @@ def _steps(self):
)
)

self.step('baseline', func=self.runBaseline,
doc=(
"""compute baseline, burst synchronization etc"""
)
)

self.step('extract_burst', func=self.runExtractBurst,
doc=(
"""extract bursts from full aperture images"""
Expand Down Expand Up @@ -838,6 +913,12 @@ def _steps(self):
)
)

self.step('ion_correct', func=self.runIonCorrect,
doc=(
"""resample ionospheric phase and ionospheric correction"""
)
)

self.step('filt', func=self.runFilt,
doc=(
"""filter interferogram"""
Expand Down Expand Up @@ -891,6 +972,8 @@ def main(self):
# Run a preprocessor for the two sets of frames
self.runPreprocessor()

self.runBaseline()

self.runExtractBurst()

self.runDownloadDem()
Expand Down Expand Up @@ -929,6 +1012,8 @@ def main(self):

self.runIonFilt()

self.runIonCorrect()

self.runFilt()

self.runUnwrapSnaphu()
Expand Down
19 changes: 19 additions & 0 deletions applications/topsApp.py
Original file line number Diff line number Diff line change
Expand Up @@ -438,6 +438,20 @@
mandatory = False,
doc = '')

ION_APPLY_ION = Application.Parameter('ION_applyIon',
public_name = 'apply ionosphere correction',
default = False,
type = bool,
mandatory = False,
doc = '')

ION_CONSIDER_BURST_PROPERTIES = Application.Parameter('ION_considerBurstProperties',
public_name = 'consider burst properties in ionosphere computation',
default = False,
type = bool,
mandatory = False,
doc = '')

ION_START_STEP = Application.Parameter(
'ION_startStep',
public_name='start ionosphere step',
Expand Down Expand Up @@ -649,6 +663,8 @@ class TopsInSAR(Application):
########################################################
#for ionospheric correction
ION_DO_ION,
ION_APPLY_ION,
ION_CONSIDER_BURST_PROPERTIES,
ION_START_STEP,
ION_END_STEP,
ION_ION_HEIGHT,
Expand Down Expand Up @@ -734,6 +750,9 @@ def _configure(self):
if(self.geocode_list is None):
#if not provided by the user use the list from InsarProc
self.geocode_list = self.insar.geocode_list
#for ionosphere
if 'topophase.ion' not in self.geocode_list:
self.geocode_list.append('topophase.ion')
else:
#if geocode_list defined here, then give it to InsarProc
#for consistency between insarApp and InsarProc and warn the user
Expand Down
Loading

0 comments on commit d0ec8c1

Please sign in to comment.