ISCE_INSAR/components/isceobj/Sensor/MultiMode/Swath.py

245 lines
7.6 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
#Author: Cunren Liang, 2015-
import isce
import datetime
import isceobj
import numpy as np
from iscesys.Component.Component import Component
from isceobj.Image.Image import Image
from isceobj.Orbit.Orbit import Orbit
from isceobj.Util.decorators import type_check
from iscesys.Traits import datetimeType
####List of parameters
SWATH_NUMBER = Component.Parameter('swathNumber',
public_name = 'swath number',
default = None,
type = int,
mandatory = True,
doc = 'swath number for bookkeeping')
POLARIZATION = Component.Parameter('polarization',
public_name = 'polarization',
default = None,
type = str,
mandatory = True,
doc = 'polarization')
NUMBER_OF_SAMPLES = Component.Parameter('numberOfSamples',
public_name='number of samples',
default=None,
type=int,
mandatory=True,
doc='width of the burst slc')
NUMBER_OF_LINES = Component.Parameter('numberOfLines',
public_name='number of lines',
default=None,
type=int,
mandatory=True,
doc='length of the burst slc')
STARTING_RANGE = Component.Parameter('startingRange',
public_name='starting range',
default=None,
type=float,
mandatory=True,
doc='slant range to first pixel in m')
RANGE_SAMPLING_RATE = Component.Parameter('rangeSamplingRate',
public_name = 'range sampling rate',
default = None,
type = float,
mandatory = True,
doc = 'range sampling rate in Hz')
RANGE_PIXEL_SIZE = Component.Parameter('rangePixelSize',
public_name = 'range pixel size',
default = None,
type=float,
mandatory = True,
doc = 'slant range pixel size in m')
RANGE_BANDWIDTH = Component.Parameter('rangeBandwidth',
public_name = 'range bandwidth',
default = None,
type=float,
mandatory = True,
doc = 'range bandwidth in Hz')
SENSING_START = Component.Parameter('sensingStart',
public_name='sensing start',
default=None,
type=datetimeType,
mandatory=True,
doc='UTC time corresponding to first line of swath SLC')
PRF = Component.Parameter('prf',
public_name = 'pulse repetition frequency',
default = None,
type = float,
mandatory = True,
doc = 'pulse repetition frequency in Hz')
AZIMUTH_PIXEL_SIZE = Component.Parameter('azimuthPixelSize',
public_name = 'azimuth pixel size',
default = None,
type=float,
mandatory = True,
doc = 'azimuth pixel size on ground in m')
AZIMUTH_BANDWIDTH = Component.Parameter('azimuthBandwidth',
public_name = 'azimuth bandwidth',
default = None,
type=float,
mandatory = True,
doc = 'azimuth bandwidth in Hz')
AZIMUTH_LINE_INTERVAL = Component.Parameter('azimuthLineInterval',
public_name = 'azimuth line interval',
default = None,
type=float,
mandatory = True,
doc = 'azimuth line interval in s')
DOPPLER_VS_PIXEL = Component.Parameter('dopplerVsPixel',
public_name = 'doppler vs pixel',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'Doppler (Hz) polynomial coefficients vs range pixel number')
AZIMUTH_FMRATE_VS_PIXEL = Component.Parameter('azimuthFmrateVsPixel',
public_name = 'azimuth fm rate vs pixel',
default = [],
type = float,
mandatory = True,
container = list,
doc = 'azimuth FM rate (Hz/s) polynomial coefficients vs range pixel number')
#for ScanSAR full-aperture product
BURST_LENGTH = Component.Parameter('burstLength',
public_name = 'Burst Length',
default = None,
type = float,
# type = int,
mandatory = False,
doc = 'number of pulses in a raw burst')
BURST_CYCLE_LENGTH = Component.Parameter('burstCycleLength',
public_name = 'Burst cycle length',
default = None,
type = float,
mandatory = False,
doc = 'number of pulses in a raw burst cycle')
BURST_START_TIME = Component.Parameter('burstStartTime',
public_name='Burst start time',
default=None,
type=datetimeType,
mandatory=False,
doc='start time of a raw burst')
#for ScanSAR burst-by-burst processing
PRF_FRACTION = Component.Parameter('prfFraction',
public_name = 'prf fraction',
default = None,
type = float,
mandatory = False,
doc = 'fraction of PRF for extracting bursts for bookkeeping')
NUMBER_OF_BURSTS = Component.Parameter('numberOfBursts',
public_name='number of bursts',
default=None,
type=int,
mandatory=False,
doc='number of bursts in a swath')
FIRST_BURST_RAW_START_TIME = Component.Parameter('firstBurstRawStartTime',
public_name='start time of first raw burst',
default=None,
type=datetimeType,
mandatory=False,
doc='start time of first raw burst')
FIRST_BURST_SLC_START_TIME = Component.Parameter('firstBurstSlcStartTime',
public_name='start time of first burst slc',
default=None,
type=datetimeType,
mandatory=False,
doc='start time of first burst slc')
BURST_SLC_FIRST_LINE_OFFSETS = Component.Parameter('burstSlcFirstLineOffsets',
public_name = 'burst SLC first line offsets',
default = None,
type = int,
mandatory = False,
container = list,
doc = 'burst SLC first line offsets')
BURST_SLC_NUMBER_OF_SAMPLES = Component.Parameter('burstSlcNumberOfSamples',
public_name='burst slc number of samples',
default=None,
type=int,
mandatory=False,
doc='burst slc width of the burst slc')
BURST_SLC_NUMBER_OF_LINES = Component.Parameter('burstSlcNumberOfLines',
public_name='burst slc number of lines',
default=None,
type=int,
mandatory=False,
doc='burst slc length of the burst slc')
class Swath(Component):
"""A class to represent a swath SLC"""
family = 'swath'
logging_name = 'isce.swath'
parameter_list = (SWATH_NUMBER,
POLARIZATION,
NUMBER_OF_SAMPLES,
NUMBER_OF_LINES,
STARTING_RANGE,
RANGE_SAMPLING_RATE,
RANGE_PIXEL_SIZE,
RANGE_BANDWIDTH,
SENSING_START,
PRF,
AZIMUTH_PIXEL_SIZE,
AZIMUTH_BANDWIDTH,
AZIMUTH_LINE_INTERVAL,
DOPPLER_VS_PIXEL,
AZIMUTH_FMRATE_VS_PIXEL,
BURST_LENGTH,
BURST_CYCLE_LENGTH,
BURST_START_TIME,
PRF_FRACTION,
NUMBER_OF_BURSTS,
FIRST_BURST_RAW_START_TIME,
FIRST_BURST_SLC_START_TIME,
BURST_SLC_FIRST_LINE_OFFSETS,
BURST_SLC_NUMBER_OF_SAMPLES,
BURST_SLC_NUMBER_OF_LINES
)
def __init__(self,name=''):
super(Swath, self).__init__(family=self.__class__.family, name=name)
return None
def clone(self):
import copy
res = copy.deepcopy(self)
res.image._accessor = None
res.image._factory = None
return res