ISCE_INSAR/contrib/stack/alosStack/Stack.py

427 lines
19 KiB
Python

#!/usr/bin/env python3
#
# Author: Cunren Liang
# Copyright 2015-present, NASA-JPL/Caltech
#
import isce
import isceobj
import iscesys
from iscesys.Component.Application import Application
DATA_DIR = Application.Parameter('dataDir',
public_name='data directory',
default=None,
type=str,
mandatory=False,
doc="directory of data, where data of each date are in an individual directory")
FRAMES = Application.Parameter('frames',
public_name = 'frames',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'frames to process')
POLARIZATION = Application.Parameter('polarization',
public_name='polarization',
default='HH',
type=str,
mandatory=False,
doc="polarization to process")
STARTING_SWATH = Application.Parameter('startingSwath',
public_name='starting swath',
default=None,
type=int,
mandatory=False,
doc="starting swath to process")
ENDING_SWATH = Application.Parameter('endingSwath',
public_name='ending swath',
default=None,
type=int,
mandatory=False,
doc="ending swath to process")
DEM = Application.Parameter('dem',
public_name='dem for coregistration',
default=None,
type=str,
mandatory=False,
doc='dem for coregistration file')
DEM_GEO = Application.Parameter('demGeo',
public_name='dem for geocoding',
default=None,
type=str,
mandatory=False,
doc='dem for geocoding file')
WBD = Application.Parameter('wbd',
public_name='water body',
default=None,
type=str,
mandatory=False,
doc='water body file')
DATE_REFERENCE_STACK = Application.Parameter('dateReferenceStack',
public_name='reference date of the stack',
default=None,
type=str,
mandatory=False,
doc="reference date of the stack")
GRID_FRAME = Application.Parameter('gridFrame',
public_name='grid frame',
default=None,
type=str,
mandatory=False,
doc="resample all frames/swaths to the grid size of this frame")
GRID_SWATH = Application.Parameter('gridSwath',
public_name='grid swath',
default=None,
type=int,
mandatory=False,
doc="resample all frames/swaths to the grid size of this swath")
NUMBER_OF_SUBSEQUENT_DATES = Application.Parameter('numberOfSubsequentDates',
public_name='number of subsequent dates',
default=4,
type=int,
mandatory=False,
doc="number of subsequent dates used to form pairs")
PAIR_TIME_SPAN_MINIMUM = Application.Parameter('pairTimeSpanMinimum',
public_name = 'pair time span minimum in years',
default = None,
type=float,
mandatory=False,
doc = 'pair time span minimum in years')
PAIR_TIME_SPAN_MAXIMUM = Application.Parameter('pairTimeSpanMaximum',
public_name = 'pair time span maximum in years',
default = None,
type=float,
mandatory=False,
doc = 'pair time span maximum in years')
DATES_INCLUDED = Application.Parameter('datesIncluded',
public_name = 'dates to be included',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'dates to be included')
#MUST BE FIRST DATE - SECOND DATE!!!
PAIRS_INCLUDED = Application.Parameter('pairsIncluded',
public_name = 'pairs to be included',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'pairs to be included')
DATES_EXCLUDED = Application.Parameter('datesExcluded',
public_name = 'dates to be excluded',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'dates to be excluded')
#MUST BE FIRST DATE - SECOND DATE!!!
PAIRS_EXCLUDED = Application.Parameter('pairsExcluded',
public_name = 'pairs to be excluded',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'pairs to be excluded')
DATE_REFERENCE_STACK_ION = Application.Parameter('dateReferenceStackIon',
public_name='reference date of the stack for estimating ionosphere',
default=None,
type=str,
mandatory=False,
doc="reference date of the stack in estimating ionosphere")
NUMBER_OF_SUBSEQUENT_DATES_ION = Application.Parameter('numberOfSubsequentDatesIon',
public_name='number of subsequent dates for estimating ionosphere',
default=4,
type=int,
mandatory=False,
doc="number of subsequent dates used to form pairs for estimating ionosphere")
PAIR_TIME_SPAN_MINIMUM_ION = Application.Parameter('pairTimeSpanMinimumIon',
public_name = 'pair time span minimum in years for estimating ionosphere',
default = None,
type=float,
mandatory=False,
doc = 'pair time span minimum in years for estimating ionosphere')
PAIR_TIME_SPAN_MAXIMUM_ION = Application.Parameter('pairTimeSpanMaximumIon',
public_name = 'pair time span maximum in years for estimating ionosphere',
default = None,
type=float,
mandatory=False,
doc = 'pair time span maximum in years for estimating ionosphere')
DATES_INCLUDED_ION = Application.Parameter('datesIncludedIon',
public_name = 'dates to be included for estimating ionosphere',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'dates to be included for estimating ionosphere')
#MUST BE FIRST DATE - SECOND DATE!!!
PAIRS_INCLUDED_ION = Application.Parameter('pairsIncludedIon',
public_name = 'pairs to be included for estimating ionosphere',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'pairs to be included for estimating ionosphere')
DATES_EXCLUDED_ION = Application.Parameter('datesExcludedIon',
public_name = 'dates to be excluded for estimating ionosphere',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'dates to be excluded for estimating ionosphere')
#MUST BE FIRST DATE - SECOND DATE!!!
PAIRS_EXCLUDED_ION = Application.Parameter('pairsExcludedIon',
public_name = 'pairs to be excluded for estimating ionosphere',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'pairs to be excluded for estimating ionosphere')
DATES_REPROCESS = Application.Parameter('datesReprocess',
public_name = 'reprocess already processed dates',
default=False,
type=bool,
mandatory=False,
doc = 'reprocess already processed dates')
PAIRS_REPROCESS = Application.Parameter('pairsReprocess',
public_name = 'reprocess already processed pairs',
default=False,
type=bool,
mandatory=False,
doc = 'reprocess already processed pairs')
PAIRS_REPROCESS_ION = Application.Parameter('pairsReprocessIon',
public_name = 'reprocess already processed pairs for estimating ionosphere',
default=False,
type=bool,
mandatory=False,
doc = 'reprocess already processed pairs for estimating ionosphere')
DATES_PROCESSING_DIR = Application.Parameter('datesProcessingDir',
public_name='dates processing directory',
default='dates',
type=str,
mandatory=False,
doc="directory for processing all dates")
DATES_RESAMPLED_DIR = Application.Parameter('datesResampledDir',
public_name='dates resampled directory',
default='dates_resampled',
type=str,
mandatory=False,
doc="directory for all dates resampled")
PAIRS_PROCESSING_DIR = Application.Parameter('pairsProcessingDir',
public_name='pairs processing directory',
default='pairs',
type=str,
mandatory=False,
doc="directory for processing all pairs")
BASELINE_DIR = Application.Parameter('baselineDir',
public_name='baseline directory',
default='baseline',
type=str,
mandatory=False,
doc="directory for baselines")
DATES_DIR_ION = Application.Parameter('datesDirIon',
public_name='dates directory for ionosphere',
default='dates_ion',
type=str,
mandatory=False,
doc="dates directory for ionosphere")
PAIRS_PROCESSING_DIR_ION = Application.Parameter('pairsProcessingDirIon',
public_name='pairs processing directory for estimating ionosphere',
default='pairs_ion',
type=str,
mandatory=False,
doc="directory for processing all pairs for estimating ionosphere")
#import insar processing parameters from alos2App.py
#from alos2App import REFERENCE_DIR
#from alos2App import SECONDARY_DIR
#from alos2App import REFERENCE_FRAMES
#from alos2App import SECONDARY_FRAMES
#from alos2App import REFERENCE_POLARIZATION
#from alos2App import SECONDARY_POLARIZATION
#from alos2App import STARTING_SWATH
#from alos2App import ENDING_SWATH
#from alos2App import DEM
#from alos2App import DEM_GEO
#from alos2App import WBD
from alos2App import USE_VIRTUAL_FILE
from alos2App import USE_GPU
#from alos2App import BURST_SYNCHRONIZATION_THRESHOLD
#from alos2App import CROP_SLC
from alos2App import USE_WBD_FOR_NUMBER_OFFSETS
from alos2App import NUMBER_RANGE_OFFSETS
from alos2App import NUMBER_AZIMUTH_OFFSETS
from alos2App import NUMBER_RANGE_LOOKS1
from alos2App import NUMBER_AZIMUTH_LOOKS1
from alos2App import NUMBER_RANGE_LOOKS2
from alos2App import NUMBER_AZIMUTH_LOOKS2
from alos2App import NUMBER_RANGE_LOOKS_SIM
from alos2App import NUMBER_AZIMUTH_LOOKS_SIM
from alos2App import SWATH_OFFSET_MATCHING
from alos2App import FRAME_OFFSET_MATCHING
from alos2App import FILTER_STRENGTH
from alos2App import FILTER_WINSIZE
from alos2App import FILTER_STEPSIZE
from alos2App import REMOVE_MAGNITUDE_BEFORE_FILTERING
from alos2App import WATERBODY_MASK_STARTING_STEP
#from alos2App import GEOCODE_LIST
from alos2App import GEOCODE_BOUNDING_BOX
from alos2App import GEOCODE_INTERP_METHOD
#ionospheric correction parameters
from alos2App import DO_ION
from alos2App import APPLY_ION
from alos2App import NUMBER_RANGE_LOOKS_ION
from alos2App import NUMBER_AZIMUTH_LOOKS_ION
from alos2App import MASKED_AREAS_ION
from alos2App import SWATH_PHASE_DIFF_SNAP_ION
from alos2App import SWATH_PHASE_DIFF_LOWER_ION
from alos2App import SWATH_PHASE_DIFF_UPPER_ION
from alos2App import FIT_ION
from alos2App import FILT_ION
from alos2App import FIT_ADAPTIVE_ION
from alos2App import FILT_SECONDARY_ION
from alos2App import FILTERING_WINSIZE_MAX_ION
from alos2App import FILTERING_WINSIZE_MIN_ION
from alos2App import FILTERING_WINSIZE_SECONDARY_ION
from alos2App import FILTER_STD_ION
from alos2App import FILTER_SUBBAND_INT
from alos2App import FILTER_STRENGTH_SUBBAND_INT
from alos2App import FILTER_WINSIZE_SUBBAND_INT
from alos2App import FILTER_STEPSIZE_SUBBAND_INT
from alos2App import REMOVE_MAGNITUDE_BEFORE_FILTERING_SUBBAND_INT
## Common interface for all insar applications.
class Stack(Application):
family = 'stackinsar'
parameter_list = (DATA_DIR,
FRAMES,
POLARIZATION,
STARTING_SWATH,
ENDING_SWATH,
DEM,
DEM_GEO,
WBD,
DATE_REFERENCE_STACK,
GRID_FRAME,
GRID_SWATH,
NUMBER_OF_SUBSEQUENT_DATES,
PAIR_TIME_SPAN_MINIMUM,
PAIR_TIME_SPAN_MAXIMUM,
DATES_INCLUDED,
PAIRS_INCLUDED,
DATES_EXCLUDED,
PAIRS_EXCLUDED,
DATE_REFERENCE_STACK_ION,
NUMBER_OF_SUBSEQUENT_DATES_ION,
PAIR_TIME_SPAN_MINIMUM_ION,
PAIR_TIME_SPAN_MAXIMUM_ION,
DATES_INCLUDED_ION,
PAIRS_INCLUDED_ION,
DATES_EXCLUDED_ION,
PAIRS_EXCLUDED_ION,
DATES_REPROCESS,
PAIRS_REPROCESS,
PAIRS_REPROCESS_ION,
DATES_PROCESSING_DIR,
DATES_RESAMPLED_DIR,
PAIRS_PROCESSING_DIR,
BASELINE_DIR,
DATES_DIR_ION,
PAIRS_PROCESSING_DIR_ION,
#insar processing parameters, same as those in alos2App.py
USE_VIRTUAL_FILE,
USE_GPU,
USE_WBD_FOR_NUMBER_OFFSETS,
NUMBER_RANGE_OFFSETS,
NUMBER_AZIMUTH_OFFSETS,
NUMBER_RANGE_LOOKS1,
NUMBER_AZIMUTH_LOOKS1,
NUMBER_RANGE_LOOKS2,
NUMBER_AZIMUTH_LOOKS2,
NUMBER_RANGE_LOOKS_SIM,
NUMBER_AZIMUTH_LOOKS_SIM,
SWATH_OFFSET_MATCHING,
FRAME_OFFSET_MATCHING,
FILTER_STRENGTH,
FILTER_WINSIZE,
FILTER_STEPSIZE,
REMOVE_MAGNITUDE_BEFORE_FILTERING,
WATERBODY_MASK_STARTING_STEP,
GEOCODE_BOUNDING_BOX,
GEOCODE_INTERP_METHOD,
#ionospheric correction parameters
DO_ION,
APPLY_ION,
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,
FILTER_STEPSIZE_SUBBAND_INT,
REMOVE_MAGNITUDE_BEFORE_FILTERING_SUBBAND_INT)
facility_list = ()
def __init__(self, family='', name='',cmdline=None):
import isceobj
super().__init__(
family=family if family else self.__class__.family, name=name,
cmdline=cmdline)
return None