diversity: replaced oppressive language with neutral definitions of the images that comprise an interferogram through the entire repository

LT1AB
Paul A Rosen 2020-07-02 12:40:49 -07:00
parent edea69d4b6
commit e03042f4e5
435 changed files with 6229 additions and 6049 deletions

View File

@ -58,7 +58,7 @@ git reset --hard origin/master
```
git checkout master
(potentially update your local master against upstream, as described above)
(potentially update your local reference against upstream, as described above)
git checkout -b my_new_feature_branch
# do work. For example:

View File

@ -451,7 +451,7 @@ for example:
>>> f = open("PICKLE/formslc")
>>> import pickle
>>> a = pickle.load(f)
>>> o = f.getMasterOrbit()
>>> o = f.getReferenceOrbit()
>>> t, x, p, off = o._unpackOrbit()
>>> print(t)
>>> print(x)
@ -529,7 +529,7 @@ The basic (ALOS) input file looks like this (indentation is optional):
<stripmapApp>
<component name="stripmapApp">
<property name="sensor name">ALOS</property>
<component name="Master">
<component name="Reference">
<property name="IMAGEFILE">
/a/b/c/20070215/IMG-HH-ALPSRP056480670-H1.0__A
</property>
@ -538,7 +538,7 @@ The basic (ALOS) input file looks like this (indentation is optional):
</property>
<property name="OUTPUT">20070215</property>
</component>
<component name="Slave">
<component name="Secondary">
<property name="IMAGEFILE">
/a/b/c/20061231/IMG-HH-ALPSRP049770670-H1.0__A
</property>
@ -564,7 +564,7 @@ properties and other components that are configurable. The property tags
give the values of a single variable in the ISCE code. One of the properties
defined in stripmapApp.py is the "sensor name" property. In the above example
it is given the value ALOS. In order to run stripmapApp.py two images need to
be specified. These are defined as components named 'Master' and 'Slave'.
be specified. These are defined as components named 'Reference' and 'Secondary'.
These components have properties named 'IMAGEFILE', 'LEADERFILE', and 'OUTPUT'
with the values given in the above example.
@ -587,10 +587,10 @@ between three files as follows:
<stripmapApp>
<component name="insar">
<property name="Sensor name">ALOS</property>
<component name="master">
<component name="reference">
<catalog>20070215.xml</catalog>
</component>
<component name="slave">
<component name="secondary">
<catalog>20061231.xml</catalog>
</component>
</component>
@ -600,7 +600,7 @@ between three files as follows:
#### 20070215.xml
```xml
<component name="Master">
<component name="Reference">
<property name="IMAGEFILE">
/a/b/c/20070215/IMG-HH-ALPSRP056480670-H1.0__A
</property>
@ -614,7 +614,7 @@ between three files as follows:
#### 20061231.xml
```xml
<component name="Slave">
<component name="Secondary">
<property name="IMAGEFILE">
/a/b/c/20061231/IMG-HH-ALPSRP049770670-H1.0__A
</property>
@ -636,7 +636,7 @@ The inputs are Sentinel GRD zipfiles
<property name="epsg id">32618</property>
<property name="geocode spacing">100</property>
<property name="geocode interpolation method">bilinear</property>
<component name="master">
<component name="reference">
<property name="safe">$dir$/rtcApp/data/S1A_IW_GRDH_1SDV_20181221T225104_20181221T225129_025130_02C664_B46C.zip</property>
<property name="orbit directory">$dir$/orbits</property>
<property name="output directory">$dir$/rtcApp/output</property>
@ -679,7 +679,7 @@ This line creates an instance of the class Insar (that is given the family name
Other applications could be created that could make several different instances
of the Insar. Each instance would have the family name "insar" and would be
given a unique instance name. This is possible for every component. In the
above example xml files instances name "Master" and "Slave" of a family named
above example xml files instances name "Reference" and "Secondary" of a family named
"alos" are created.
### Component Configuration Files: Locations, Names, Priorities
@ -710,23 +710,23 @@ the filename can be anything you choose. Configuration parameters can also be
entered directly on the command line as in the following example:
```bash
> stripmapApp.py insar.master.output=master_c.raw
> stripmapApp.py insar.reference.output=reference_c.raw
```
This example indicates that the variable named 'output' of the Component
named 'master' belonging to the Component (or Application) named 'insar'
will be given the name "master\_c.raw".
named 'reference' belonging to the Component (or Application) named 'insar'
will be given the name "reference\_c.raw".
The priority sequence on the command line goes from lowest priority on the left
to highest priority on the right. So, if we use the command line,
```bash
> stripmapApp.py myInputFile.xml insar.master.output=master_c.raw
> stripmapApp.py myInputFile.xml insar.reference.output=reference_c.raw
```
where the myInputFile.xml file also gives a value for the insar master output
file as master\_d.raw, then the one defined on the right will win, i.e.,
master\_c.raw.
where the myInputFile.xml file also gives a value for the insar reference output
file as reference\_d.raw, then the one defined on the right will win, i.e.,
reference\_c.raw.
(2) The next priority location is the local directory in which stripmapApp.py is
executed. Any xml file placed in this directory named according to either the
@ -799,16 +799,16 @@ will see that the call to \_\_init\_\_ passes 'family=self.class.family' and
'name=name' to the Component constructor (super class of Ampcor). The family
name is given as "nstage" on line 265. The instance name is passed as the
value of the 'name=name' and was passed to it from whatever program created it.
Nstage is created in components/isceobj/StripmapProc/runRefineSlaveTiming.py where
it is given the name 'master_offset1' on line 35. If you are setting a parameter that
Nstage is created in components/isceobj/StripmapProc/runRefineSecondaryTiming.py where
it is given the name 'reference_offset1' on line 35. If you are setting a parameter that
should be the same for all uses of Ampcor, then you can use the
family name 'ampcor' for the name of the xml file as 'ampcor.xml'. It is more
likely that you will want to use the instance name 'master\_offset1.xml'
likely that you will want to use the instance name 'reference\_offset1.xml'
Use the family name 'ampcor' for the component tag 'name'.
Example for SLC matching use of Ampcor:
Filename: master\_offset1.xml:
Filename: reference\_offset1.xml:
```xml
<dummy>

View File

@ -26,8 +26,8 @@ class insarProcXML(object):
def raw_rsc(self, key=None, write=False):
'''Write out the RSC files for Raw data.'''
if key not in ['master', 'slave']:
raise ValueError('Raw Files can only be written for master or slave.')
if key not in ['reference', 'secondary']:
raise ValueError('Raw Files can only be written for reference or secondary.')
rsc = OrderedDict()
@ -137,8 +137,8 @@ class insarProcXML(object):
Create rsc files for all the interferograms generated by ISCE.
'''
if key not in ['master', 'slave']:
raise ValueError('SLC files can only be written for master or slave.')
if key not in ['reference', 'secondary']:
raise ValueError('SLC files can only be written for reference or secondary.')
if raw is None:
rsc = self.raw_rsc(key=key, write=False)
@ -221,8 +221,8 @@ if __name__ == '__main__':
'''Run the test on input xml file.'''
converter = insarProcXML()
master_raw_rsc = converter.raw_rsc(key='master', write=True)
slave_raw_rsc = converter.raw_rsc(key='slave', write=True)
reference_raw_rsc = converter.raw_rsc(key='reference', write=True)
secondary_raw_rsc = converter.raw_rsc(key='secondary', write=True)
master_slc_rsc = converter.slc_rsc(raw=master_raw_rsc, key='master', write=True)
slave_slc_rsc = converter.slc_rsc(raw=slave_raw_rsc, key='slave', write=True)
reference_slc_rsc = converter.slc_rsc(raw=reference_raw_rsc, key='reference', write=True)
secondary_slc_rsc = converter.slc_rsc(raw=secondary_raw_rsc, key='secondary', write=True)

View File

@ -78,7 +78,7 @@ class orbit_info:
self.slook = np.sqrt(1-self.clook**2)
# print('Estimated Look Angle: %3.2f degrees'%(np.arccos(self.clook)*180.0/np.pi))
def getBaseline(self, slave):
def getBaseline(self, secondary):
'''Compute baseline between current object and another orbit object.'''
ind = np.int(self.nvec/2)
@ -93,17 +93,17 @@ class orbit_info:
vvec = np.cross(crp, rvec)
mvel = np.linalg.norm(mvel)
ind = np.int(slave.nvec/2) #First guess
spos = np.array(slave.pos[ind])
svel = np.array(slave.vel[ind])
ind = np.int(secondary.nvec/2) #First guess
spos = np.array(secondary.pos[ind])
svel = np.array(secondary.vel[ind])
svel = np.linalg.norm(svel)
dx = spos - mpos;
z_offset = slave.prf*np.dot(dx, vvec)/mvel
z_offset = secondary.prf*np.dot(dx, vvec)/mvel
ind = np.int(ind - z_offset) #Refined estimate
spos = slave.pos[ind]
svel = slave.vel[ind]
spos = secondary.pos[ind]
svel = secondary.vel[ind]
svel = np.linalg.norm(svel)
dx = spos-mpos
@ -169,16 +169,16 @@ if __name__ == '__main__':
Days = np.zeros(nSar)
#######Setting the first scene as temporary reference.
master = Orbits[0]
reference = Orbits[0]
Dopplers[0] = master.fd
Days[0] = master.dt.toordinal()
Dopplers[0] = reference.fd
Days[0] = reference.dt.toordinal()
for k in xrange(1,nSar):
slave = Orbits[k]
Bperp[k] = master.getBaseline(slave)
Dopplers[k] = slave.fd
Days[k] = slave.dt.toordinal()
secondary = Orbits[k]
Bperp[k] = reference.getBaseline(secondary)
Dopplers[k] = secondary.fd
Days[k] = secondary.dt.toordinal()
print("************************************")
@ -193,7 +193,7 @@ if __name__ == '__main__':
geomRho = (1-np.clip(np.abs(Bperp[:,None]-Bperp[None,:])/inps.Bcrit, 0., 1.))
tempRho = np.exp(-1.0*np.abs(Days[:,None]-Days[None,:])/inps.Tau)
dopRho = (np.abs(Dopplers[:,None] - Dopplers[None,:])/ master.prf) < inps.dop
dopRho = (np.abs(Dopplers[:,None] - Dopplers[None,:])/ reference.prf) < inps.dop
Rho = geomRho * tempRho * dopRho
for kk in xrange(nSar):
@ -205,17 +205,17 @@ if __name__ == '__main__':
####Currently sorting on average coherence.
masterChoice = np.argsort(avgRho)
masterOrbit = Orbits[masterChoice[0]]
masterBperp = Bperp[masterChoice[0]]
referenceChoice = np.argsort(avgRho)
referenceOrbit = Orbits[referenceChoice[0]]
referenceBperp = Bperp[referenceChoice[0]]
print('*************************************')
print('Ranking for Master Scene Selection: ')
print('Ranking for Reference Scene Selection: ')
print('**************************************')
print('Rank Index Date nViable Avg. Coh.' )
for kk in xrange(nSar):
ind = masterChoice[kk]
ind = referenceChoice[kk]
print('{0:>3} {1:>3} {2:>10} {3:>4} {4:>2.3f}'.format(kk+1, ind+1, Orbits[ind].dt.strftime('%Y-%m-%d'), numViable[ind], avgRho[ind]))
print('***************************************')
@ -234,31 +234,31 @@ if __name__ == '__main__':
[ii,jj] = np.where(Rho > inps.cThresh)
print('Master Slave Bperp Deltat')
print('Reference Secondary Bperp Deltat')
for mind, sind in itertools.izip(ii,jj):
master = Orbits[mind]
slave = Orbits[sind]
if master.dt > slave.dt:
print('{0:>10} {1:>10} {2:>4.2f} {3:>4.2f}'.format(master.dt.strftime('%Y-%m-%d'), slave.dt.strftime('%Y-%m-%d'), Bperp[mind]-Bperp[sind], Days[mind] - Days[sind]))
xmlname = '%s/insar_%s_%s.xml'%(inps.dirname, master.dt.strftime('%Y%m%d'), slave.dt.strftime('%Y%m%d'))
reference = Orbits[mind]
secondary = Orbits[sind]
if reference.dt > secondary.dt:
print('{0:>10} {1:>10} {2:>4.2f} {3:>4.2f}'.format(reference.dt.strftime('%Y-%m-%d'), secondary.dt.strftime('%Y-%m-%d'), Bperp[mind]-Bperp[sind], Days[mind] - Days[sind]))
xmlname = '%s/insar_%s_%s.xml'%(inps.dirname, reference.dt.strftime('%Y%m%d'), secondary.dt.strftime('%Y%m%d'))
# sarxml.sartoinsarXML(master.filename, slave.filename, base=inps.base, out=xmlname)
# sarxml.sartoinsarXML(reference.filename, secondary.filename, base=inps.base, out=xmlname)
print('***************************************')
#######Currently picks master peg point.
#######Currently picks reference peg point.
print('***************************************')
commonPeg = masterOrbit.peg
commonPeg = referenceOrbit.peg
print('Common peg point: ')
print(commonPeg)
print('Bperp Range: [%f , %f] '%(Bperp.min()-masterBperp, Bperp.max()-masterBperp))
print('Bperp Range: [%f , %f] '%(Bperp.min()-referenceBperp, Bperp.max()-referenceBperp))
######Choose median doppler
commonDop = np.median(Dopplers)
maxDop = np.max(Dopplers)
minDop = np.min(Dopplers)
varDop = np.max(np.abs(Dopplers-commonDop))/masterOrbit.prf
varDop = np.max(np.abs(Dopplers-commonDop))/referenceOrbit.prf
print('Common Doppler: ', commonDop)
print('Doppler Range: [%f, %f]'%(minDop, maxDop))

View File

@ -28,49 +28,49 @@ logging.config.fileConfig(
logger = logging.getLogger('isce.insar')
MASTER_DIR = Application.Parameter('masterDir',
public_name='master directory',
REFERENCE_DIR = Application.Parameter('referenceDir',
public_name='reference directory',
default=None,
type=str,
mandatory=False,
doc="master data directory")
doc="reference data directory")
SLAVE_DIR = Application.Parameter('slaveDir',
public_name='slave directory',
SECONDARY_DIR = Application.Parameter('secondaryDir',
public_name='secondary directory',
default=None,
type=str,
mandatory=False,
doc="slave data directory")
doc="secondary data directory")
MASTER_FRAMES = Application.Parameter('masterFrames',
public_name = 'master frames',
REFERENCE_FRAMES = Application.Parameter('referenceFrames',
public_name = 'reference frames',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'master frames to process')
doc = 'reference frames to process')
SLAVE_FRAMES = Application.Parameter('slaveFrames',
public_name = 'slave frames',
SECONDARY_FRAMES = Application.Parameter('secondaryFrames',
public_name = 'secondary frames',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'slave frames to process')
doc = 'secondary frames to process')
MASTER_POLARIZATION = Application.Parameter('masterPolarization',
public_name='master polarization',
REFERENCE_POLARIZATION = Application.Parameter('referencePolarization',
public_name='reference polarization',
default='HH',
type=str,
mandatory=False,
doc="master polarization to process")
doc="reference polarization to process")
SLAVE_POLARIZATION = Application.Parameter('slavePolarization',
public_name='slave polarization',
SECONDARY_POLARIZATION = Application.Parameter('secondaryPolarization',
public_name='secondary polarization',
default='HH',
type=str,
mandatory=False,
doc="slave polarization to process")
doc="secondary polarization to process")
#for ScanSAR-stripmap, always process all swaths,
#user's settings are overwritten
@ -524,21 +524,21 @@ RENDERER = Application.Parameter('renderer',
#####################################################################
#Facility declarations
MASTER = Application.Facility('master',
public_name='master',
REFERENCE = Application.Facility('reference',
public_name='reference',
module='isceobj.Sensor.MultiMode',
factory='createSensor',
args=('ALOS2', 'master'),
args=('ALOS2', 'reference'),
mandatory=True,
doc="master component")
doc="reference component")
SLAVE = Application.Facility('slave',
public_name='slave',
SECONDARY = Application.Facility('secondary',
public_name='secondary',
module='isceobj.Sensor.MultiMode',
factory='createSensor',
args=('ALOS2','slave'),
args=('ALOS2','secondary'),
mandatory=True,
doc="slave component")
doc="secondary component")
# RUN_UNWRAPPER = Application.Facility('runUnwrapper',
# public_name='Run unwrapper',
@ -568,12 +568,12 @@ _INSAR = Application.Facility('_insar',
## Common interface for all insar applications.
class Alos2InSAR(Application):
family = 'alos2insar'
parameter_list = (MASTER_DIR,
SLAVE_DIR,
MASTER_FRAMES,
SLAVE_FRAMES,
MASTER_POLARIZATION,
SLAVE_POLARIZATION,
parameter_list = (REFERENCE_DIR,
SECONDARY_DIR,
REFERENCE_FRAMES,
SECONDARY_FRAMES,
REFERENCE_POLARIZATION,
SECONDARY_POLARIZATION,
STARTING_SWATH,
ENDING_SWATH,
DEM,
@ -637,8 +637,8 @@ class Alos2InSAR(Application):
PICKLE_LOAD_DIR,
RENDERER)
facility_list = (MASTER,
SLAVE,
facility_list = (REFERENCE,
SECONDARY,
#RUN_UNWRAPPER,
#RUN_UNWRAP_2STAGE,
_INSAR)
@ -793,7 +793,7 @@ class Alos2InSAR(Application):
self.step('preprocess',
func=self.runPreprocessor,
doc=(
"""Preprocess the master and slave sensor data to raw images"""
"""Preprocess the reference and secondary sensor data to raw images"""
)
)
@ -1064,10 +1064,10 @@ class Alos2InSAR(Application):
if self.wbd != None:
self._insar.wbd = self.wbd
if self._insar.masterDate != None and self._insar.slaveDate != None and \
if self._insar.referenceDate != None and self._insar.secondaryDate != None and \
self._insar.numberRangeLooks1 != None and self._insar.numberAzimuthLooks1 != None and \
self._insar.numberRangeLooks2 != None and self._insar.numberAzimuthLooks2 != None:
self._insar.setFilename(masterDate=self._insar.masterDate, slaveDate=self._insar.slaveDate,
self._insar.setFilename(referenceDate=self._insar.referenceDate, secondaryDate=self._insar.secondaryDate,
nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1,
nrlks2=self._insar.numberRangeLooks2, nalks2=self._insar.numberAzimuthLooks2)

View File

@ -28,49 +28,49 @@ logging.config.fileConfig(
logger = logging.getLogger('isce.insar')
MASTER_DIR = Application.Parameter('masterDir',
public_name='master directory',
REFERENCE_DIR = Application.Parameter('referenceDir',
public_name='reference directory',
default=None,
type=str,
mandatory=False,
doc="master data directory")
doc="reference data directory")
SLAVE_DIR = Application.Parameter('slaveDir',
public_name='slave directory',
SECONDARY_DIR = Application.Parameter('secondaryDir',
public_name='secondary directory',
default=None,
type=str,
mandatory=False,
doc="slave data directory")
doc="secondary data directory")
MASTER_FRAMES = Application.Parameter('masterFrames',
public_name = 'master frames',
REFERENCE_FRAMES = Application.Parameter('referenceFrames',
public_name = 'reference frames',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'master frames to process')
doc = 'reference frames to process')
SLAVE_FRAMES = Application.Parameter('slaveFrames',
public_name = 'slave frames',
SECONDARY_FRAMES = Application.Parameter('secondaryFrames',
public_name = 'secondary frames',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'slave frames to process')
doc = 'secondary frames to process')
MASTER_POLARIZATION = Application.Parameter('masterPolarization',
public_name='master polarization',
REFERENCE_POLARIZATION = Application.Parameter('referencePolarization',
public_name='reference polarization',
default='HH',
type=str,
mandatory=False,
doc="master polarization to process")
doc="reference polarization to process")
SLAVE_POLARIZATION = Application.Parameter('slavePolarization',
public_name='slave polarization',
SECONDARY_POLARIZATION = Application.Parameter('secondaryPolarization',
public_name='secondary polarization',
default='HH',
type=str,
mandatory=False,
doc="slave polarization to process")
doc="secondary polarization to process")
STARTING_SWATH = Application.Parameter('startingSwath',
public_name='starting swath',
@ -460,21 +460,21 @@ RENDERER = Application.Parameter('renderer',
#####################################################################
#Facility declarations
MASTER = Application.Facility('master',
public_name='master',
REFERENCE = Application.Facility('reference',
public_name='reference',
module='isceobj.Sensor.MultiMode',
factory='createSensor',
args=('ALOS2', 'master'),
args=('ALOS2', 'reference'),
mandatory=True,
doc="master component")
doc="reference component")
SLAVE = Application.Facility('slave',
public_name='slave',
SECONDARY = Application.Facility('secondary',
public_name='secondary',
module='isceobj.Sensor.MultiMode',
factory='createSensor',
args=('ALOS2','slave'),
args=('ALOS2','secondary'),
mandatory=True,
doc="slave component")
doc="secondary component")
# RUN_UNWRAPPER = Application.Facility('runUnwrapper',
# public_name='Run unwrapper',
@ -504,12 +504,12 @@ _INSAR = Application.Facility('_insar',
## Common interface for all insar applications.
class Alos2burstInSAR(Application):
family = 'alos2burstinsar'
parameter_list = (MASTER_DIR,
SLAVE_DIR,
MASTER_FRAMES,
SLAVE_FRAMES,
MASTER_POLARIZATION,
SLAVE_POLARIZATION,
parameter_list = (REFERENCE_DIR,
SECONDARY_DIR,
REFERENCE_FRAMES,
SECONDARY_FRAMES,
REFERENCE_POLARIZATION,
SECONDARY_POLARIZATION,
STARTING_SWATH,
ENDING_SWATH,
DEM,
@ -566,8 +566,8 @@ class Alos2burstInSAR(Application):
PICKLE_LOAD_DIR,
RENDERER)
facility_list = (MASTER,
SLAVE,
facility_list = (REFERENCE,
SECONDARY,
#RUN_UNWRAPPER,
#RUN_UNWRAP_2STAGE,
_INSAR)
@ -720,7 +720,7 @@ class Alos2burstInSAR(Application):
# Run a preprocessor for the two acquisitions
self.step('preprocess', func=self.runPreprocessor,
doc=(
"""Preprocess the master and slave sensor data to raw images"""
"""Preprocess the reference and secondary sensor data to raw images"""
)
)
@ -991,17 +991,17 @@ class Alos2burstInSAR(Application):
if self.wbd != None:
self._insar.wbd = self.wbd
if self._insar.masterDate != None and self._insar.slaveDate != None and \
if self._insar.referenceDate != None and self._insar.secondaryDate != None and \
self._insar.numberRangeLooks1 != None and self._insar.numberAzimuthLooks1 != None and \
self._insar.numberRangeLooks2 != None and self._insar.numberAzimuthLooks2 != None:
self._insar.setFilename(masterDate=self._insar.masterDate, slaveDate=self._insar.slaveDate,
self._insar.setFilename(referenceDate=self._insar.referenceDate, secondaryDate=self._insar.secondaryDate,
nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1,
nrlks2=self._insar.numberRangeLooks2, nalks2=self._insar.numberAzimuthLooks2)
if self._insar.masterDate != None and self._insar.slaveDate != None and \
if self._insar.referenceDate != None and self._insar.secondaryDate != None and \
self._insar.numberRangeLooks1 != None and self._insar.numberAzimuthLooks1 != None and \
self._insar.numberRangeLooksSd != None and self._insar.numberAzimuthLooksSd != None:
self._insar.setFilenameSd(masterDate=self._insar.masterDate, slaveDate=self._insar.slaveDate,
self._insar.setFilenameSd(referenceDate=self._insar.referenceDate, secondaryDate=self._insar.secondaryDate,
nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1,
nrlks_sd=self._insar.numberRangeLooksSd, nalks_sd=self._insar.numberAzimuthLooksSd, nsd=3)

View File

@ -39,16 +39,16 @@ from mroipac.baseline.Baseline import Baseline
class calculateBaselineApp(FactoryInit):
def main(self):
masterFrame = self.populateFrame(self.masterObj)
slaveFrame = self.populateFrame(self.slaveObj)
referenceFrame = self.populateFrame(self.referenceObj)
secondaryFrame = self.populateFrame(self.secondaryObj)
# Calculate the baseline information
baseline = Baseline()
baseline.wireInputPort(name='masterFrame',object=masterFrame)
baseline.wireInputPort(name='slaveFrame',object=slaveFrame)
baseline.wireInputPort(name='masterOrbit',object=masterFrame.getOrbit())
baseline.wireInputPort(name='slaveOrbit',object=slaveFrame.getOrbit())
baseline.wireInputPort(name='ellipsoid',object=masterFrame.getInstrument().getPlatform().getPlanet().get_elp())
baseline.wireInputPort(name='referenceFrame',object=referenceFrame)
baseline.wireInputPort(name='secondaryFrame',object=secondaryFrame)
baseline.wireInputPort(name='referenceOrbit',object=referenceFrame.getOrbit())
baseline.wireInputPort(name='secondaryOrbit',object=secondaryFrame.getOrbit())
baseline.wireInputPort(name='ellipsoid',object=referenceFrame.getInstrument().getPlatform().getPlanet().get_elp())
baseline.baseline()
print(baseline)
@ -68,8 +68,8 @@ class calculateBaselineApp(FactoryInit):
def __init__(self,arglist):
FactoryInit.__init__(self)
self.initFactory(arglist)
self.masterObj = self.getComponent('Master')
self.slaveObj = self.getComponent('Slave')
self.referenceObj = self.getComponent('Reference')
self.secondaryObj = self.getComponent('Secondary')
self.logger = logging.getLogger('isce.calculateBaseline')
if __name__ == "__main__":

View File

@ -81,9 +81,9 @@ def main():
fi.defaultInitModule = 'InitFromXmlFile'
fi.initComponentFromFile()
master = fi.getComponent('Master')
reference = fi.getComponent('Reference')
toGeneric = ToGeneric(rawObj=master)
toGeneric = ToGeneric(rawObj=reference)
toGeneric.convert()
if __name__ == "__main__":

View File

@ -215,12 +215,12 @@ class Dpm(_InsarBase):
minLat, maxLat, minLon, maxLon = self.insar.topo.snwe
planet = self.insar.masterFrame.instrument.getPlatform().getPlanet()
planet = self.insar.referenceFrame.instrument.getPlatform().getPlanet()
objGeo = stdproc.createGeocode()
objGeo.listInputPorts()
objGeo.wireInputPort(name='peg',object=self.insar.peg)
objGeo.wireInputPort(name='frame',object=self.insar.masterFrame)
objGeo.wireInputPort(name='frame',object=self.insar.referenceFrame)
objGeo.wireInputPort(name='planet',object=planet)
objGeo.wireInputPort(name='dem',object=demImage)
objGeo.wireInputPort(name='interferogram',object=intImage)
@ -240,7 +240,7 @@ class Dpm(_InsarBase):
mocompPosition1 = objFormSlc1.getMocompPosition()
posIndx = 1
objGeo.referenceOrbit = mocompPosition1[posIndx]
prf1 = self.insar.masterFrame.instrument.getPulseRepetitionFrequency()
prf1 = self.insar.referenceFrame.instrument.getPulseRepetitionFrequency()
dp = self.insar.dopplerCentroid.getDopplerCoefficients(inHz=False)[0]
v = self.insar.procVelocity
h = self.insar.averageHeight
@ -311,16 +311,16 @@ class Dpm(_InsarBase):
print("objTopo.maxLon = ", maxLon)
pause(message="Paused in runGeocode4rlks")
planet = self.insar.masterFrame.instrument.getPlatform().getPlanet()
planet = self.insar.referenceFrame.instrument.getPlatform().getPlanet()
objGeo = stdproc.createGeocode()
objGeo.listInputPorts()
objGeo.wireInputPort(name='peg',object=self.insar.peg)
# objGeo.wireInputPort(name='frame',object=self.insar.masterFrame)
objGeo.rangeFirstSample = self.insar.masterFrame.getStartingRange()
objGeo.slantRangePixelSpacing = self.insar.masterFrame.instrument.getRangePixelSize()*4
objGeo.prf = self.insar.masterFrame.instrument.getPulseRepetitionFrequency()
objGeo.radarWavelength = self.insar.masterFrame.instrument.getRadarWavelength()
# objGeo.wireInputPort(name='frame',object=self.insar.referenceFrame)
objGeo.rangeFirstSample = self.insar.referenceFrame.getStartingRange()
objGeo.slantRangePixelSpacing = self.insar.referenceFrame.instrument.getRangePixelSize()*4
objGeo.prf = self.insar.referenceFrame.instrument.getPulseRepetitionFrequency()
objGeo.radarWavelength = self.insar.referenceFrame.instrument.getRadarWavelength()
objGeo.wireInputPort(name='planet',object=planet)
objGeo.wireInputPort(name='dem',object=demImage)
objGeo.wireInputPort(name='interferogram',object=intImage)
@ -340,7 +340,7 @@ class Dpm(_InsarBase):
mocompPosition1 = objFormSlc1.getMocompPosition()
posIndx = 1
objGeo.setReferenceOrbit(mocompPosition1[posIndx])
prf1 = self.insar.masterFrame.instrument.getPulseRepetitionFrequency()
prf1 = self.insar.referenceFrame.instrument.getPulseRepetitionFrequency()
dp = self.insar.dopplerCentroid.getDopplerCoefficients(inHz=False)[0]
v = self.insar.procVelocity
h = self.insar.averageHeight
@ -425,11 +425,11 @@ class Dpm(_InsarBase):
minLat, maxLat, minLon, maxLon = self.insar.topo.snwe
planet = self.insar.masterFrame.instrument.getPlatform().getPlanet()
planet = self.insar.referenceFrame.instrument.getPlatform().getPlanet()
objGeo = stdproc.createGeocode()
objGeo.wireInputPort(name='peg',object=self.insar.peg)
objGeo.wireInputPort(name='frame',object=self.insar.masterFrame)
objGeo.wireInputPort(name='frame',object=self.insar.referenceFrame)
objGeo.wireInputPort(name='planet',object=planet)
objGeo.wireInputPort(name='dem',object=demImage)
objGeo.wireInputPort(name='interferogram',object=intImage)
@ -443,7 +443,7 @@ class Dpm(_InsarBase):
objGeo.stdWriter = self.stdWriter.set_file_tags("geocode", "log", "err", "out")
# see mocompbaseline
objGeo.setReferenceOrbit(mocompPosition1[posIndx])
prf1 = self.insar.masterFrame.instrument.getPulseRepetitionFrequency()
prf1 = self.insar.referenceFrame.instrument.getPulseRepetitionFrequency()
dp = self.insar.dopplerCentroid.getDopplerCoefficients(inHz=False)[0]
v = self.insar.procVelocity
h = self.insar.averageHeight

View File

@ -315,9 +315,9 @@ def main():
fi.defaultInitModule = 'InitFromXmlFile'
fi.initComponentFromFile()
master = fi.getComponent('Master')
reference = fi.getComponent('Reference')
focuser = Focuser(rawObj=master)
focuser = Focuser(rawObj=reference)
focuser.focuser()
if __name__ == "__main__":

View File

@ -82,7 +82,7 @@ PEG_SELECT = Application.Parameter(
public_name='peg select',
default='average',
mandatory=False,
doc='Peg selection method. Can be master, slave or average'
doc='Peg selection method. Can be reference, secondary or average'
)
PEG_LAT = Application.Parameter(
@ -156,7 +156,7 @@ USE_DOP = Application.Parameter(
default="average",
type=float,
mandatory=False,
doc="Choose whether to use master, slave, or average Doppler for processing."
doc="Choose whether to use reference, secondary, or average Doppler for processing."
)
UNWRAPPER_NAME = Application.Parameter(
@ -414,44 +414,44 @@ RENDERER = Application.Parameter(
)
#Facility declarations
MASTER = Application.Facility(
'master',
public_name='Master',
REFERENCE = Application.Facility(
'reference',
public_name='Reference',
module='isceobj.Sensor',
factory='createSensor',
args=(SENSOR_NAME, 'master'),
args=(SENSOR_NAME, 'reference'),
mandatory=True,
doc="Master raw data component"
doc="Reference raw data component"
)
SLAVE = Application.Facility(
'slave',
public_name='Slave',
SECONDARY = Application.Facility(
'secondary',
public_name='Secondary',
module='isceobj.Sensor',
factory='createSensor',
args=(SENSOR_NAME,'slave'),
args=(SENSOR_NAME,'secondary'),
mandatory=True,
doc="Slave raw data component"
doc="Secondary raw data component"
)
MASTERDOP = Application.Facility(
'masterdop',
public_name='Master Doppler',
REFERENCEDOP = Application.Facility(
'referencedop',
public_name='Reference Doppler',
module='isceobj.Doppler',
factory='createDoppler',
args=(DOPPLER_METHOD,),
mandatory=False,
doc="Master Doppler calculation method"
doc="Reference Doppler calculation method"
)
SLAVEDOP = Application.Facility(
'slavedop',
public_name='Slave Doppler',
SECONDARYDOP = Application.Facility(
'secondarydop',
public_name='Secondary Doppler',
module='isceobj.Doppler',
factory='createDoppler',
args=(DOPPLER_METHOD,),
mandatory=False,
doc="Master Doppler calculation method"
doc="Reference Doppler calculation method"
)
DEM = Application.Facility(
@ -591,10 +591,10 @@ class _InsarBase(Application, FrameMixin):
UNWRAPPER_2STAGE_NAME,
SOLVER_2STAGE)
facility_list = (MASTER,
SLAVE,
MASTERDOP,
SLAVEDOP,
facility_list = (REFERENCE,
SECONDARY,
REFERENCEDOP,
SECONDARYDOP,
DEM,
DEM_STITCHER,
RUN_ESTIMATE_HEIGHTS,
@ -842,9 +842,9 @@ class _InsarBase(Application, FrameMixin):
from isceobj.Util.decorators import use_api
@use_api
def verifyDEM(self):
masterF = self._insar.masterFrame
slaveF = self._insar.slaveFrame
info = self.extractInfo(masterF, slaveF)
referenceF = self._insar.referenceFrame
secondaryF = self._insar.secondaryFrame
info = self.extractInfo(referenceF, secondaryF)
#if an image has been specified, then no need to create one
if not self.dem.filename:
self.createDem(info)
@ -962,7 +962,7 @@ class _InsarBase(Application, FrameMixin):
self.step('preprocess',
func=self.runPreprocessor,
doc=(
"""Preprocess the master and slave sensor data to raw images"""
"""Preprocess the reference and secondary sensor data to raw images"""
)
)

View File

@ -8,9 +8,9 @@ import xml.etree.ElementTree as ElementTree
class App(Tkinter.Frame):
def __init__(self,master=None):
Tkinter.Frame.__init__(self,master)
self.master.title('ISSI Input File Generator')
def __init__(self,reference=None):
Tkinter.Frame.__init__(self,reference)
self.reference.title('ISSI Input File Generator')
self.filterList = None
self.filterX = Tkinter.IntVar()

View File

@ -49,7 +49,7 @@ SENSOR = Application.Facility('sensor',
factory='createSensor',
args=(SENSOR_NAME, ),
mandatory=True,
doc="Master raw data component"
doc="Reference raw data component"
)
DOPPLER = Application.Facility('doppler',
public_name='doppler',
@ -57,7 +57,7 @@ DOPPLER = Application.Facility('doppler',
factory='createDoppler',
args=(DOPPLER_METHOD, ),
mandatory=False,
doc="Master Doppler calculation method"
doc="Reference Doppler calculation method"
)
class makeRawApp(Application):

View File

@ -194,12 +194,12 @@ GEOCODE_LIST = Application.Parameter(
#Facility declarations
MASTER = Application.Facility(
'master',
public_name='Master',
REFERENCE = Application.Facility(
'reference',
public_name='Reference',
module='isceobj.Sensor.GRD',
factory='createSensor',
args=(SENSOR_NAME, 'master'),
args=(SENSOR_NAME, 'reference'),
mandatory=True,
doc="GRD data component"
)
@ -246,7 +246,7 @@ class GRDSAR(Application):
POLARIZATIONS,
GEOCODE_LIST)
facility_list = (MASTER,
facility_list = (REFERENCE,
DEM_STITCHER,
_GRD)

View File

@ -57,24 +57,24 @@ SENSOR_NAME = Application.Parameter(
default = None,
type = str,
mandatory = False,
doc = 'Sensor name for both master and slave')
doc = 'Sensor name for both reference and secondary')
MASTER_SENSOR_NAME = Application.Parameter(
'masterSensorName',
public_name='master sensor name',
REFERENCE_SENSOR_NAME = Application.Parameter(
'referenceSensorName',
public_name='reference sensor name',
default = None,
type=str,
mandatory = True,
doc = "Master sensor name if mixing sensors")
doc = "Reference sensor name if mixing sensors")
SLAVE_SENSOR_NAME = Application.Parameter(
'slaveSensorName',
public_name='slave sensor name',
SECONDARY_SENSOR_NAME = Application.Parameter(
'secondarySensorName',
public_name='secondary sensor name',
default = None,
type=str,
mandatory = True,
doc = "Slave sensor name if mixing sensors")
doc = "Secondary sensor name if mixing sensors")
CORRELATION_METHOD = Application.Parameter(
@ -89,17 +89,17 @@ CORRELATION_METHOD = Application.Parameter(
phase_gradient=phase gradient"""
)
)
MASTER_DOPPLER_METHOD = Application.Parameter(
'masterDopplerMethod',
public_name='master doppler method',
REFERENCE_DOPPLER_METHOD = Application.Parameter(
'referenceDopplerMethod',
public_name='reference doppler method',
default=None,
type=str, mandatory=False,
doc= "Doppler calculation method.Choices: 'useDOPIQ', 'useDefault'."
)
SLAVE_DOPPLER_METHOD = Application.Parameter(
'slaveDopplerMethod',
public_name='slave doppler method',
SECONDARY_DOPPLER_METHOD = Application.Parameter(
'secondaryDopplerMethod',
public_name='secondary doppler method',
default=None,
type=str, mandatory=False,
doc="Doppler calculation method. Choices: 'useDOPIQ','useDefault'.")
@ -448,24 +448,24 @@ DISPERSIVE_FILTER_COHERENCE_THRESHOLD = Application.Parameter('dispersive_filter
doc='Coherence threshold to generate a mask file which gets used in the iterative filtering of the dispersive and non-disperive phase')
#Facility declarations
MASTER = Application.Facility(
'master',
public_name='Master',
REFERENCE = Application.Facility(
'reference',
public_name='Reference',
module='isceobj.StripmapProc.Sensor',
factory='createSensor',
args=(SENSOR_NAME, MASTER_SENSOR_NAME, 'master'),
args=(SENSOR_NAME, REFERENCE_SENSOR_NAME, 'reference'),
mandatory=False,
doc="Master raw data component"
doc="Reference raw data component"
)
SLAVE = Application.Facility(
'slave',
public_name='Slave',
SECONDARY = Application.Facility(
'secondary',
public_name='Secondary',
module='isceobj.StripmapProc.Sensor',
factory='createSensor',
args=(SENSOR_NAME, SLAVE_SENSOR_NAME,'slave'),
args=(SENSOR_NAME, SECONDARY_SENSOR_NAME,'secondary'),
mandatory=False,
doc="Slave raw data component"
doc="Secondary raw data component"
)
DEM_STITCHER = Application.Facility(
@ -516,12 +516,12 @@ class _RoiBase(Application, FrameMixin):
family = 'insar'
## Define Class parameters in this list
parameter_list = (SENSOR_NAME,
MASTER_SENSOR_NAME,
SLAVE_SENSOR_NAME,
REFERENCE_SENSOR_NAME,
SECONDARY_SENSOR_NAME,
FILTER_STRENGTH,
CORRELATION_METHOD,
MASTER_DOPPLER_METHOD,
SLAVE_DOPPLER_METHOD,
REFERENCE_DOPPLER_METHOD,
SECONDARY_DOPPLER_METHOD,
UNWRAPPER_NAME,
DO_UNWRAP,
DO_UNWRAP_2STAGE,
@ -564,8 +564,8 @@ class _RoiBase(Application, FrameMixin):
DISPERSIVE_FILTER_MASK_TYPE,
DISPERSIVE_FILTER_COHERENCE_THRESHOLD)
facility_list = (MASTER,
SLAVE,
facility_list = (REFERENCE,
SECONDARY,
DEM_STITCHER,
RUN_UNWRAPPER,
RUN_UNWRAP_2STAGE,
@ -729,7 +729,7 @@ class _RoiBase(Application, FrameMixin):
self.runTopo = StripmapProc.createTopo(self)
self.runGeo2rdr = StripmapProc.createGeo2rdr(self)
self.runResampleSlc = StripmapProc.createResampleSlc(self)
self.runRefineSlaveTiming = StripmapProc.createRefineSlaveTiming(self)
self.runRefineSecondaryTiming = StripmapProc.createRefineSecondaryTiming(self)
self.runDenseOffsets = StripmapProc.createDenseOffsets(self)
self.runRubbersheetRange = StripmapProc.createRubbersheetRange(self) #Modified by V. Brancato 10.07.2019
self.runRubbersheetAzimuth =StripmapProc.createRubbersheetAzimuth(self) #Modified by V. Brancato 10.07.2019
@ -752,7 +752,7 @@ class _RoiBase(Application, FrameMixin):
self.step('preprocess',
func=self.runPreprocessor,
doc=(
"""Preprocess the master and slave sensor data to raw images"""
"""Preprocess the reference and secondary sensor data to raw images"""
)
)
@ -776,7 +776,7 @@ class _RoiBase(Application, FrameMixin):
self.step('coarse_resample', func=self.runResampleSlc,
args=('coarse',))
self.step('misregistration', func=self.runRefineSlaveTiming)
self.step('misregistration', func=self.runRefineSecondaryTiming)
self.step('refined_resample', func=self.runResampleSlc,
args=('refined',))
@ -856,7 +856,7 @@ class _RoiBase(Application, FrameMixin):
self.runResampleSlc('coarse')
# refine geometry offsets using offsets computed by cross correlation
self.runRefineSlaveTiming()
self.runRefineSecondaryTiming()
# resampling using refined offsets
self.runResampleSlc('refined')
@ -966,7 +966,7 @@ class Insar(_RoiBase):
self.runResampleSlc()
#self.runResamp_only()
self.runRefineSlaveTiming()
self.runRefineSecondaryTiming()
#self.insar.topoIntImage=self.insar.resampOnlyImage
#self.runTopo()

View File

@ -535,24 +535,24 @@ ION_NUMBER_RANGE_LOOKS0 = Application.Parameter('ION_numberRangeLooks0',
#####################################################################
#Facility declarations
MASTER = Application.Facility(
'master',
public_name='Master',
REFERENCE = Application.Facility(
'reference',
public_name='Reference',
module='isceobj.Sensor.TOPS',
factory='createSensor',
args=(SENSOR_NAME, 'master'),
args=(SENSOR_NAME, 'reference'),
mandatory=True,
doc="Master raw data component"
doc="Reference raw data component"
)
SLAVE = Application.Facility(
'slave',
public_name='Slave',
SECONDARY = Application.Facility(
'secondary',
public_name='Secondary',
module='isceobj.Sensor.TOPS',
factory='createSensor',
args=(SENSOR_NAME,'slave'),
args=(SENSOR_NAME,'secondary'),
mandatory=True,
doc="Slave raw data component"
doc="Secondary raw data component"
)
DEM_STITCHER = Application.Facility(
@ -665,8 +665,8 @@ class TopsInSAR(Application):
########################################################
)
facility_list = (MASTER,
SLAVE,
facility_list = (REFERENCE,
SECONDARY,
DEM_STITCHER,
RUN_UNWRAPPER,
RUN_UNWRAP_2STAGE,
@ -858,7 +858,7 @@ class TopsInSAR(Application):
self.step('preprocess',
func=self.runPreprocessor,
doc=(
"""Preprocess the master and slave sensor data to raw images"""
"""Preprocess the reference and secondary sensor data to raw images"""
)
)
@ -901,7 +901,7 @@ class TopsInSAR(Application):
###Estimate fine offsets
self.step('fineoffsets', func=self.runFineOffsets)
###Resample slave bursts
###Resample secondary bursts
self.step('fineresamp', func=self.runFineResamp)
###calculate ionospheric phase
@ -986,7 +986,7 @@ class TopsInSAR(Application):
###Estimate fine offsets
self.runFineOffsets()
###Resample slave bursts
###Resample secondary bursts
self.runFineResamp()
###calculate ionospheric phase

View File

@ -108,4 +108,4 @@ if __name__ == "__main__":
import sys
ds = Stitcher('wbdstitcher')
ds.configure()
ds.run()
ds.run()

View File

@ -11,19 +11,19 @@ from iscesys.DateTimeUtil.DateTimeUtil import DateTimeUtil as DTU
from iscesys.Compatibility import Compatibility
MASTER_DATE = Component.Parameter('masterDate',
public_name='master date',
REFERENCE_DATE = Component.Parameter('referenceDate',
public_name='reference date',
default=None,
type=str,
mandatory=True,
doc='master acquistion date')
doc='reference acquistion date')
SLAVE_DATE = Component.Parameter('slaveDate',
public_name='slave date',
SECONDARY_DATE = Component.Parameter('secondaryDate',
public_name='secondary date',
default=None,
type=str,
mandatory=True,
doc='slave acquistion date')
doc='secondary acquistion date')
MODE_COMBINATION = Component.Parameter('modeCombination',
public_name='mode combination',
@ -32,21 +32,21 @@ MODE_COMBINATION = Component.Parameter('modeCombination',
mandatory=True,
doc='mode combination')
MASTER_FRAMES = Component.Parameter('masterFrames',
public_name = 'master frames',
REFERENCE_FRAMES = Component.Parameter('referenceFrames',
public_name = 'reference frames',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'master frames to process')
doc = 'reference frames to process')
SLAVE_FRAMES = Component.Parameter('slaveFrames',
public_name = 'slave frames',
SECONDARY_FRAMES = Component.Parameter('secondaryFrames',
public_name = 'secondary frames',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'slave frames to process')
doc = 'secondary frames to process')
STARTING_SWATH = Component.Parameter('startingSwath',
public_name='starting swath',
@ -76,135 +76,135 @@ BURST_SYNCHRONIZATION = Component.Parameter('burstSynchronization',
mandatory = False,
doc = 'average burst synchronization of all swaths and frames in percentage')
SWATH_RANGE_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('swathRangeOffsetGeometricalMaster',
public_name = 'swath range offset from geometry master',
SWATH_RANGE_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('swathRangeOffsetGeometricalReference',
public_name = 'swath range offset from geometry reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath range offset from geometry master')
doc = 'swath range offset from geometry reference')
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('swathAzimuthOffsetGeometricalMaster',
public_name = 'swath azimuth offset from geometry master',
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('swathAzimuthOffsetGeometricalReference',
public_name = 'swath azimuth offset from geometry reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath azimuth offset from geometry master')
doc = 'swath azimuth offset from geometry reference')
SWATH_RANGE_OFFSET_MATCHING_MASTER = Component.Parameter('swathRangeOffsetMatchingMaster',
public_name = 'swath range offset from matching master',
SWATH_RANGE_OFFSET_MATCHING_REFERENCE = Component.Parameter('swathRangeOffsetMatchingReference',
public_name = 'swath range offset from matching reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath range offset from matching master')
doc = 'swath range offset from matching reference')
SWATH_AZIMUTH_OFFSET_MATCHING_MASTER = Component.Parameter('swathAzimuthOffsetMatchingMaster',
public_name = 'swath azimuth offset from matching master',
SWATH_AZIMUTH_OFFSET_MATCHING_REFERENCE = Component.Parameter('swathAzimuthOffsetMatchingReference',
public_name = 'swath azimuth offset from matching reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath azimuth offset from matching master')
doc = 'swath azimuth offset from matching reference')
SWATH_RANGE_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('swathRangeOffsetGeometricalSlave',
public_name = 'swath range offset from geometry slave',
SWATH_RANGE_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('swathRangeOffsetGeometricalSecondary',
public_name = 'swath range offset from geometry secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath range offset from geometry slave')
doc = 'swath range offset from geometry secondary')
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('swathAzimuthOffsetGeometricalSlave',
public_name = 'swath azimuth offset from geometry slave',
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('swathAzimuthOffsetGeometricalSecondary',
public_name = 'swath azimuth offset from geometry secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath azimuth offset from geometry slave')
doc = 'swath azimuth offset from geometry secondary')
SWATH_RANGE_OFFSET_MATCHING_SLAVE = Component.Parameter('swathRangeOffsetMatchingSlave',
public_name = 'swath range offset from matching slave',
SWATH_RANGE_OFFSET_MATCHING_SECONDARY = Component.Parameter('swathRangeOffsetMatchingSecondary',
public_name = 'swath range offset from matching secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath range offset from matching slave')
doc = 'swath range offset from matching secondary')
SWATH_AZIMUTH_OFFSET_MATCHING_SLAVE = Component.Parameter('swathAzimuthOffsetMatchingSlave',
public_name = 'swath azimuth offset from matching slave',
SWATH_AZIMUTH_OFFSET_MATCHING_SECONDARY = Component.Parameter('swathAzimuthOffsetMatchingSecondary',
public_name = 'swath azimuth offset from matching secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath azimuth offset from matching slave')
doc = 'swath azimuth offset from matching secondary')
FRAME_RANGE_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('frameRangeOffsetGeometricalMaster',
public_name = 'frame range offset from geometry master',
FRAME_RANGE_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('frameRangeOffsetGeometricalReference',
public_name = 'frame range offset from geometry reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame range offset from geometry master')
doc = 'frame range offset from geometry reference')
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('frameAzimuthOffsetGeometricalMaster',
public_name = 'frame azimuth offset from geometry master',
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('frameAzimuthOffsetGeometricalReference',
public_name = 'frame azimuth offset from geometry reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame azimuth offset from geometry master')
doc = 'frame azimuth offset from geometry reference')
FRAME_RANGE_OFFSET_MATCHING_MASTER = Component.Parameter('frameRangeOffsetMatchingMaster',
public_name = 'frame range offset from matching master',
FRAME_RANGE_OFFSET_MATCHING_REFERENCE = Component.Parameter('frameRangeOffsetMatchingReference',
public_name = 'frame range offset from matching reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame range offset from matching master')
doc = 'frame range offset from matching reference')
FRAME_AZIMUTH_OFFSET_MATCHING_MASTER = Component.Parameter('frameAzimuthOffsetMatchingMaster',
public_name = 'frame azimuth offset from matching master',
FRAME_AZIMUTH_OFFSET_MATCHING_REFERENCE = Component.Parameter('frameAzimuthOffsetMatchingReference',
public_name = 'frame azimuth offset from matching reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame azimuth offset from matching master')
doc = 'frame azimuth offset from matching reference')
FRAME_RANGE_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('frameRangeOffsetGeometricalSlave',
public_name = 'frame range offset from geometry slave',
FRAME_RANGE_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('frameRangeOffsetGeometricalSecondary',
public_name = 'frame range offset from geometry secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame range offset from geometry slave')
doc = 'frame range offset from geometry secondary')
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('frameAzimuthOffsetGeometricalSlave',
public_name = 'frame azimuth offset from geometry slave',
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('frameAzimuthOffsetGeometricalSecondary',
public_name = 'frame azimuth offset from geometry secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame azimuth offset from geometry slave')
doc = 'frame azimuth offset from geometry secondary')
FRAME_RANGE_OFFSET_MATCHING_SLAVE = Component.Parameter('frameRangeOffsetMatchingSlave',
public_name = 'frame range offset from matching slave',
FRAME_RANGE_OFFSET_MATCHING_SECONDARY = Component.Parameter('frameRangeOffsetMatchingSecondary',
public_name = 'frame range offset from matching secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame range offset from matching slave')
doc = 'frame range offset from matching secondary')
FRAME_AZIMUTH_OFFSET_MATCHING_SLAVE = Component.Parameter('frameAzimuthOffsetMatchingSlave',
public_name = 'frame azimuth offset from matching slave',
FRAME_AZIMUTH_OFFSET_MATCHING_SECONDARY = Component.Parameter('frameAzimuthOffsetMatchingSecondary',
public_name = 'frame azimuth offset from matching secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame azimuth offset from matching slave')
doc = 'frame azimuth offset from matching secondary')
NUMBER_RANGE_LOOKS1 = Component.Parameter('numberRangeLooks1',
public_name='number of range looks 1',
@ -279,75 +279,75 @@ RADAR_DEM_AFFINE_TRANSFORM = Component.Parameter('radarDemAffineTransform',
doc = 'radar dem affine transform parameters')
MASTER_SLC = Component.Parameter('masterSlc',
public_name='master slc',
REFERENCE_SLC = Component.Parameter('referenceSlc',
public_name='reference slc',
default=None,
type=str,
mandatory=False,
doc='master slc file')
doc='reference slc file')
SLAVE_SLC = Component.Parameter('slaveSlc',
public_name='slave slc',
SECONDARY_SLC = Component.Parameter('secondarySlc',
public_name='secondary slc',
default=None,
type=str,
mandatory=False,
doc='slave slc file')
doc='secondary slc file')
MASTER_SWATH_OFFSET = Component.Parameter('masterSwathOffset',
public_name='master swath offset',
REFERENCE_SWATH_OFFSET = Component.Parameter('referenceSwathOffset',
public_name='reference swath offset',
default=None,
type=str,
mandatory=False,
doc='master swath offset file')
doc='reference swath offset file')
SLAVE_SWATH_OFFSET = Component.Parameter('slaveSwathOffset',
public_name='slave swath offset',
SECONDARY_SWATH_OFFSET = Component.Parameter('secondarySwathOffset',
public_name='secondary swath offset',
default=None,
type=str,
mandatory=False,
doc='slave swath offset file')
doc='secondary swath offset file')
MASTER_FRAME_OFFSET = Component.Parameter('masterFrameOffset',
public_name='master frame offset',
REFERENCE_FRAME_OFFSET = Component.Parameter('referenceFrameOffset',
public_name='reference frame offset',
default=None,
type=str,
mandatory=False,
doc='master frame offset file')
doc='reference frame offset file')
SLAVE_FRAME_OFFSET = Component.Parameter('slaveFrameOffset',
public_name='slave frame offset',
SECONDARY_FRAME_OFFSET = Component.Parameter('secondaryFrameOffset',
public_name='secondary frame offset',
default=None,
type=str,
mandatory=False,
doc='slave frame offset file')
doc='secondary frame offset file')
MASTER_FRAME_PARAMETER = Component.Parameter('masterFrameParameter',
public_name='master frame parameter',
REFERENCE_FRAME_PARAMETER = Component.Parameter('referenceFrameParameter',
public_name='reference frame parameter',
default=None,
type=str,
mandatory=False,
doc='master frame parameter file')
doc='reference frame parameter file')
SLAVE_FRAME_PARAMETER = Component.Parameter('slaveFrameParameter',
public_name='slave frame parameter',
SECONDARY_FRAME_PARAMETER = Component.Parameter('secondaryFrameParameter',
public_name='secondary frame parameter',
default=None,
type=str,
mandatory=False,
doc='slave frame parameter file')
doc='secondary frame parameter file')
MASTER_TRACK_PARAMETER = Component.Parameter('masterTrackParameter',
public_name='master track parameter',
REFERENCE_TRACK_PARAMETER = Component.Parameter('referenceTrackParameter',
public_name='reference track parameter',
default=None,
type=str,
mandatory=False,
doc='master track parameter file')
doc='reference track parameter file')
SLAVE_TRACK_PARAMETER = Component.Parameter('slaveTrackParameter',
public_name='slave track parameter',
SECONDARY_TRACK_PARAMETER = Component.Parameter('secondaryTrackParameter',
public_name='secondary track parameter',
default=None,
type=str,
mandatory=False,
doc='slave track parameter file')
doc='secondary track parameter file')
DEM = Component.Parameter('dem',
public_name='dem for coregistration',
@ -618,12 +618,12 @@ OFFSET_IMAGE_LEFTOFFSET = Component.Parameter('offsetImageLeftoffset',
mandatory=False,
doc="offset image left offset in samples")
SLAVE_SLC_COREGISTERED = Component.Parameter('slaveSlcCoregistered',
public_name='coregistered slave slc',
SECONDARY_SLC_COREGISTERED = Component.Parameter('secondarySlcCoregistered',
public_name='coregistered secondary slc',
default=None,
type=str,
mandatory=False,
doc='coregistered slave slc file')
doc='coregistered secondary slc file')
DENSE_OFFSET = Component.Parameter('denseOffset',
public_name='dense offset',
@ -681,31 +681,31 @@ class Alos2Proc(Component):
to modify and return their values.
"""
parameter_list = (MASTER_DATE,
SLAVE_DATE,
parameter_list = (REFERENCE_DATE,
SECONDARY_DATE,
MODE_COMBINATION,
MASTER_FRAMES,
SLAVE_FRAMES,
REFERENCE_FRAMES,
SECONDARY_FRAMES,
STARTING_SWATH,
ENDING_SWATH,
BURST_UNSYNCHRONIZED_TIME,
BURST_SYNCHRONIZATION,
SWATH_RANGE_OFFSET_GEOMETRICAL_MASTER,
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_MASTER,
SWATH_RANGE_OFFSET_MATCHING_MASTER,
SWATH_AZIMUTH_OFFSET_MATCHING_MASTER,
SWATH_RANGE_OFFSET_GEOMETRICAL_SLAVE,
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE,
SWATH_RANGE_OFFSET_MATCHING_SLAVE,
SWATH_AZIMUTH_OFFSET_MATCHING_SLAVE,
FRAME_RANGE_OFFSET_GEOMETRICAL_MASTER,
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_MASTER,
FRAME_RANGE_OFFSET_MATCHING_MASTER,
FRAME_AZIMUTH_OFFSET_MATCHING_MASTER,
FRAME_RANGE_OFFSET_GEOMETRICAL_SLAVE,
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE,
FRAME_RANGE_OFFSET_MATCHING_SLAVE,
FRAME_AZIMUTH_OFFSET_MATCHING_SLAVE,
SWATH_RANGE_OFFSET_GEOMETRICAL_REFERENCE,
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE,
SWATH_RANGE_OFFSET_MATCHING_REFERENCE,
SWATH_AZIMUTH_OFFSET_MATCHING_REFERENCE,
SWATH_RANGE_OFFSET_GEOMETRICAL_SECONDARY,
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY,
SWATH_RANGE_OFFSET_MATCHING_SECONDARY,
SWATH_AZIMUTH_OFFSET_MATCHING_SECONDARY,
FRAME_RANGE_OFFSET_GEOMETRICAL_REFERENCE,
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE,
FRAME_RANGE_OFFSET_MATCHING_REFERENCE,
FRAME_AZIMUTH_OFFSET_MATCHING_REFERENCE,
FRAME_RANGE_OFFSET_GEOMETRICAL_SECONDARY,
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY,
FRAME_RANGE_OFFSET_MATCHING_SECONDARY,
FRAME_AZIMUTH_OFFSET_MATCHING_SECONDARY,
NUMBER_RANGE_LOOKS1,
NUMBER_AZIMUTH_LOOKS1,
NUMBER_RANGE_LOOKS2,
@ -716,16 +716,16 @@ class Alos2Proc(Component):
NUMBER_AZIMUTH_LOOKS_ION,
SUBBAND_RADAR_WAVLENGTH,
RADAR_DEM_AFFINE_TRANSFORM,
MASTER_SLC,
SLAVE_SLC,
MASTER_SWATH_OFFSET,
SLAVE_SWATH_OFFSET,
MASTER_FRAME_OFFSET,
SLAVE_FRAME_OFFSET,
MASTER_FRAME_PARAMETER,
SLAVE_FRAME_PARAMETER,
MASTER_TRACK_PARAMETER,
SLAVE_TRACK_PARAMETER,
REFERENCE_SLC,
SECONDARY_SLC,
REFERENCE_SWATH_OFFSET,
SECONDARY_SWATH_OFFSET,
REFERENCE_FRAME_OFFSET,
SECONDARY_FRAME_OFFSET,
REFERENCE_FRAME_PARAMETER,
SECONDARY_FRAME_PARAMETER,
REFERENCE_TRACK_PARAMETER,
SECONDARY_TRACK_PARAMETER,
DEM,
DEM_GEO,
WBD,
@ -764,7 +764,7 @@ class Alos2Proc(Component):
GEO_ION,
OFFSET_IMAGE_TOPOFFSET,
OFFSET_IMAGE_LEFTOFFSET,
SLAVE_SLC_COREGISTERED,
SECONDARY_SLC_COREGISTERED,
DENSE_OFFSET,
DENSE_OFFSET_SNR,
DENSE_OFFSET_COV,
@ -785,12 +785,12 @@ class Alos2Proc(Component):
self.procDoc = procDoc
return None
def setFilename(self, masterDate, slaveDate, nrlks1, nalks1, nrlks2, nalks2):
def setFilename(self, referenceDate, secondaryDate, nrlks1, nalks1, nrlks2, nalks2):
# if masterDate == None:
# masterDate = self.masterDate
# if slaveDate == None:
# slaveDate = self.slaveDate
# if referenceDate == None:
# referenceDate = self.referenceDate
# if secondaryDate == None:
# secondaryDate = self.secondaryDate
# if nrlks1 == None:
# nrlks1 = self.numberRangeLooks1
# if nalks1 == None:
@ -800,20 +800,20 @@ class Alos2Proc(Component):
# if nalks2 == None:
# nalks2 = self.numberAzimuthLooks2
ms = masterDate + '-' + slaveDate
ms = referenceDate + '-' + secondaryDate
ml1 = '_{}rlks_{}alks'.format(nrlks1, nalks1)
ml2 = '_{}rlks_{}alks'.format(nrlks1*nrlks2, nalks1*nalks2)
self.masterSlc = masterDate + '.slc'
self.slaveSlc = slaveDate + '.slc'
self.masterSwathOffset = 'swath_offset_' + masterDate + '.txt'
self.slaveSwathOffset = 'swath_offset_' + slaveDate + '.txt'
self.masterFrameOffset = 'frame_offset_' + masterDate + '.txt'
self.slaveFrameOffset = 'frame_offset_' + slaveDate + '.txt'
self.masterFrameParameter = masterDate + '.frame.xml'
self.slaveFrameParameter = slaveDate + '.frame.xml'
self.masterTrackParameter = masterDate + '.track.xml'
self.slaveTrackParameter = slaveDate + '.track.xml'
self.referenceSlc = referenceDate + '.slc'
self.secondarySlc = secondaryDate + '.slc'
self.referenceSwathOffset = 'swath_offset_' + referenceDate + '.txt'
self.secondarySwathOffset = 'swath_offset_' + secondaryDate + '.txt'
self.referenceFrameOffset = 'frame_offset_' + referenceDate + '.txt'
self.secondaryFrameOffset = 'frame_offset_' + secondaryDate + '.txt'
self.referenceFrameParameter = referenceDate + '.frame.xml'
self.secondaryFrameParameter = secondaryDate + '.frame.xml'
self.referenceTrackParameter = referenceDate + '.track.xml'
self.secondaryTrackParameter = secondaryDate + '.track.xml'
#self.dem =
#self.demGeo =
#self.wbd =
@ -850,7 +850,7 @@ class Alos2Proc(Component):
self.geoCoherence = ms + ml2 + '.cor.geo'
self.geoLos = ms + ml2 + '.los.geo'
#dense offset field
self.slaveSlcCoregistered = slaveDate + '_coreg.slc'
self.secondarySlcCoregistered = secondaryDate + '_coreg.slc'
self.denseOffset = ms + '_denseoffset.off'
self.denseOffsetSnr = ms + '_denseoffset.snr'
self.denseOffsetCov = ms + '_denseoffset.cov'
@ -891,42 +891,42 @@ class Alos2Proc(Component):
return None
def loadTrack(self, master=True):
def loadTrack(self, reference=True):
'''
Load the track using Product Manager.
'''
if master:
track = self.loadProduct(self.masterTrackParameter)
if reference:
track = self.loadProduct(self.referenceTrackParameter)
else:
track = self.loadProduct(self.slaveTrackParameter)
track = self.loadProduct(self.secondaryTrackParameter)
track.frames = []
for i, frameNumber in enumerate(self.masterFrames):
for i, frameNumber in enumerate(self.referenceFrames):
os.chdir('f{}_{}'.format(i+1, frameNumber))
if master:
track.frames.append(self.loadProduct(self.masterFrameParameter))
if reference:
track.frames.append(self.loadProduct(self.referenceFrameParameter))
else:
track.frames.append(self.loadProduct(self.slaveFrameParameter))
track.frames.append(self.loadProduct(self.secondaryFrameParameter))
os.chdir('../')
return track
def saveTrack(self, track, master=True):
def saveTrack(self, track, reference=True):
'''
Save the track to XML files using Product Manager.
'''
if master:
self.saveProduct(track, self.masterTrackParameter)
if reference:
self.saveProduct(track, self.referenceTrackParameter)
else:
self.saveProduct(track, self.slaveTrackParameter)
self.saveProduct(track, self.secondaryTrackParameter)
for i, frameNumber in enumerate(self.masterFrames):
for i, frameNumber in enumerate(self.referenceFrames):
os.chdir('f{}_{}'.format(i+1, frameNumber))
if master:
self.saveProduct(track.frames[i], self.masterFrameParameter)
if reference:
self.saveProduct(track.frames[i], self.referenceFrameParameter)
else:
self.saveProduct(track.frames[i], self.slaveFrameParameter)
self.saveProduct(track.frames[i], self.secondaryFrameParameter)
os.chdir('../')
return None

View File

@ -154,11 +154,11 @@ def cal_coherence_1(inf, win=5):
def computeOffsetFromOrbit(masterSwath, masterTrack, slaveSwath, slaveTrack, masterSample, masterLine):
def computeOffsetFromOrbit(referenceSwath, referenceTrack, secondarySwath, secondaryTrack, referenceSample, referenceLine):
'''
compute range and azimuth offsets using orbit. all range/azimuth indexes start with 0
masterSample: master sample where offset is computed, no need to be integer
masterLine: master line where offset is computed, no need to be integer
referenceSample: reference sample where offset is computed, no need to be integer
referenceLine: reference line where offset is computed, no need to be integer
'''
import datetime
@ -166,14 +166,14 @@ def computeOffsetFromOrbit(masterSwath, masterTrack, slaveSwath, slaveTrack, mas
#compute a pair of range and azimuth offsets using geometry
#using Piyush's code for computing range and azimuth offsets
midRange = masterSwath.startingRange + masterSwath.rangePixelSize * masterSample
midSensingStart = masterSwath.sensingStart + datetime.timedelta(seconds = masterLine / masterSwath.prf)
llh = masterTrack.orbit.rdr2geo(midSensingStart, midRange, side=pointingDirection[masterTrack.pointingDirection])
slvaz, slvrng = slaveTrack.orbit.geo2rdr(llh, side=pointingDirection[masterTrack.pointingDirection])
midRange = referenceSwath.startingRange + referenceSwath.rangePixelSize * referenceSample
midSensingStart = referenceSwath.sensingStart + datetime.timedelta(seconds = referenceLine / referenceSwath.prf)
llh = referenceTrack.orbit.rdr2geo(midSensingStart, midRange, side=pointingDirection[referenceTrack.pointingDirection])
slvaz, slvrng = secondaryTrack.orbit.geo2rdr(llh, side=pointingDirection[referenceTrack.pointingDirection])
###Translate to offsets
#at this point, slave range pixel size and prf should be the same as those of master
rgoff = ((slvrng - slaveSwath.startingRange) / masterSwath.rangePixelSize) - masterSample
azoff = ((slvaz - slaveSwath.sensingStart).total_seconds() * masterSwath.prf) - masterLine
#at this point, secondary range pixel size and prf should be the same as those of reference
rgoff = ((slvrng - secondarySwath.startingRange) / referenceSwath.rangePixelSize) - referenceSample
azoff = ((slvaz - secondarySwath.sensingStart).total_seconds() * referenceSwath.prf) - referenceLine
return (rgoff, azoff)
@ -589,7 +589,7 @@ def cal_coherence(inf, win=5, edge=0):
'''
compute coherence uisng only interferogram (phase).
This routine still follows the regular equation for computing coherence,
but assumes the amplitudes of master and slave are one, so that coherence
but assumes the amplitudes of reference and secondary are one, so that coherence
can be computed using phase only.
inf: interferogram
@ -974,9 +974,9 @@ def mosaicBurstAmplitude(swath, burstPrefix, outputFile, numberOfLooksThreshold=
create_xml(outputFile, swath.numberOfSamples, swath.numberOfLines, 'float')
def resampleBursts(masterSwath, slaveSwath,
masterBurstDir, slaveBurstDir, slaveBurstResampledDir, interferogramDir,
masterBurstPrefix, slaveBurstPrefix, slaveBurstResampledPrefix, interferogramPrefix,
def resampleBursts(referenceSwath, secondarySwath,
referenceBurstDir, secondaryBurstDir, secondaryBurstResampledDir, interferogramDir,
referenceBurstPrefix, secondaryBurstPrefix, secondaryBurstResampledPrefix, interferogramPrefix,
rangeOffset, azimuthOffset, rangeOffsetResidual=0, azimuthOffsetResidual=0):
import os
@ -985,119 +985,119 @@ def resampleBursts(masterSwath, slaveSwath,
import numpy.matlib
from contrib.alos2proc.alos2proc import resamp
os.makedirs(slaveBurstResampledDir, exist_ok=True)
os.makedirs(secondaryBurstResampledDir, exist_ok=True)
os.makedirs(interferogramDir, exist_ok=True)
#get burst file names
masterBurstSlc = [masterBurstPrefix+'_%02d.slc'%(i+1) for i in range(masterSwath.numberOfBursts)]
slaveBurstSlc = [slaveBurstPrefix+'_%02d.slc'%(i+1) for i in range(slaveSwath.numberOfBursts)]
slaveBurstSlcResampled = [slaveBurstPrefix+'_%02d.slc'%(i+1) for i in range(masterSwath.numberOfBursts)]
interferogram = [interferogramPrefix+'_%02d.int'%(i+1) for i in range(masterSwath.numberOfBursts)]
referenceBurstSlc = [referenceBurstPrefix+'_%02d.slc'%(i+1) for i in range(referenceSwath.numberOfBursts)]
secondaryBurstSlc = [secondaryBurstPrefix+'_%02d.slc'%(i+1) for i in range(secondarySwath.numberOfBursts)]
secondaryBurstSlcResampled = [secondaryBurstPrefix+'_%02d.slc'%(i+1) for i in range(referenceSwath.numberOfBursts)]
interferogram = [interferogramPrefix+'_%02d.int'%(i+1) for i in range(referenceSwath.numberOfBursts)]
length = masterSwath.burstSlcNumberOfLines
width = masterSwath.burstSlcNumberOfSamples
lengthSlave = slaveSwath.burstSlcNumberOfLines
widthSlave = slaveSwath.burstSlcNumberOfSamples
length = referenceSwath.burstSlcNumberOfLines
width = referenceSwath.burstSlcNumberOfSamples
lengthSecondary = secondarySwath.burstSlcNumberOfLines
widthSecondary = secondarySwath.burstSlcNumberOfSamples
#slave burst slc start times
slaveBurstStartTimesSlc = [slaveSwath.firstBurstSlcStartTime + \
datetime.timedelta(seconds=slaveSwath.burstSlcFirstLineOffsets[i]*slaveSwath.azimuthLineInterval) \
for i in range(slaveSwath.numberOfBursts)]
#slave burst raw start times
slaveBurstStartTimesRaw = [slaveSwath.firstBurstRawStartTime + \
datetime.timedelta(seconds=i*slaveSwath.burstCycleLength/slaveSwath.prf) \
for i in range(slaveSwath.numberOfBursts)]
#secondary burst slc start times
secondaryBurstStartTimesSlc = [secondarySwath.firstBurstSlcStartTime + \
datetime.timedelta(seconds=secondarySwath.burstSlcFirstLineOffsets[i]*secondarySwath.azimuthLineInterval) \
for i in range(secondarySwath.numberOfBursts)]
#secondary burst raw start times
secondaryBurstStartTimesRaw = [secondarySwath.firstBurstRawStartTime + \
datetime.timedelta(seconds=i*secondarySwath.burstCycleLength/secondarySwath.prf) \
for i in range(secondarySwath.numberOfBursts)]
for i in range(masterSwath.numberOfBursts):
for i in range(referenceSwath.numberOfBursts):
##########################################################################
# 1. get offsets and corresponding slave burst
# 1. get offsets and corresponding secondary burst
##########################################################################
#range offset
with open(rangeOffset, 'rb') as f:
f.seek(masterSwath.burstSlcFirstLineOffsets[i] * width * np.dtype(np.float32).itemsize, 0)
f.seek(referenceSwath.burstSlcFirstLineOffsets[i] * width * np.dtype(np.float32).itemsize, 0)
rgoffBurst = np.fromfile(f, dtype=np.float32, count=length*width).reshape(length,width)
if type(rangeOffsetResidual) == np.ndarray:
residual = rangeOffsetResidual[0+masterSwath.burstSlcFirstLineOffsets[i]:length+masterSwath.burstSlcFirstLineOffsets[i],:]
residual = rangeOffsetResidual[0+referenceSwath.burstSlcFirstLineOffsets[i]:length+referenceSwath.burstSlcFirstLineOffsets[i],:]
rgoffBurst[np.nonzero(rgoffBurst!=-999999.0)] += residual[np.nonzero(rgoffBurst!=-999999.0)]
else:
rgoffBurst[np.nonzero(rgoffBurst!=-999999.0)] += rangeOffsetResidual
#azimuth offset
with open(azimuthOffset, 'rb') as f:
f.seek(masterSwath.burstSlcFirstLineOffsets[i] * width * np.dtype(np.float32).itemsize, 0)
f.seek(referenceSwath.burstSlcFirstLineOffsets[i] * width * np.dtype(np.float32).itemsize, 0)
azoffBurst = np.fromfile(f, dtype=np.float32, count=length*width).reshape(length,width)
if type(azimuthOffsetResidual) == np.ndarray:
residual = azimuthOffsetResidual[0+masterSwath.burstSlcFirstLineOffsets[i]:length+masterSwath.burstSlcFirstLineOffsets[i],:]
residual = azimuthOffsetResidual[0+referenceSwath.burstSlcFirstLineOffsets[i]:length+referenceSwath.burstSlcFirstLineOffsets[i],:]
azoffBurst[np.nonzero(azoffBurst!=-999999.0)] += residual[np.nonzero(azoffBurst!=-999999.0)]
else:
azoffBurst[np.nonzero(azoffBurst!=-999999.0)] += azimuthOffsetResidual
#find the corresponding slave burst
#find the corresponding secondary burst
#get mean offset to use
#remove BAD_VALUE = -999999.0 as defined in geo2rdr.f90
#single precision is not accurate enough to compute mean
azoffBurstMean = np.mean(azoffBurst[np.nonzero(azoffBurst!=-999999.0)], dtype=np.float64)
iSlave = -1
for j in range(slaveSwath.numberOfBursts):
if abs(masterSwath.burstSlcFirstLineOffsets[i] + azoffBurstMean - slaveSwath.burstSlcFirstLineOffsets[j]) < (masterSwath.burstLength / masterSwath.prf * 2.0) / masterSwath.azimuthLineInterval:
iSlave = j
iSecondary = -1
for j in range(secondarySwath.numberOfBursts):
if abs(referenceSwath.burstSlcFirstLineOffsets[i] + azoffBurstMean - secondarySwath.burstSlcFirstLineOffsets[j]) < (referenceSwath.burstLength / referenceSwath.prf * 2.0) / referenceSwath.azimuthLineInterval:
iSecondary = j
break
#output zero resampled burst/interferogram if no slave burst found
if iSlave == -1:
print('\nburst pair, master: %2d, slave: no'%(i+1))
#output zero resampled burst/interferogram if no secondary burst found
if iSecondary == -1:
print('\nburst pair, reference: %2d, secondary: no'%(i+1))
#output an interferogram with all pixels set to zero
os.chdir(interferogramDir)
np.zeros((length, width), dtype=np.complex64).astype(np.complex64).tofile(interferogram[i])
create_xml(interferogram[i], width, length, 'int')
os.chdir('../')
#output a resampled slave image with all pixels set to zero
os.chdir(slaveBurstResampledDir)
np.zeros((length, width), dtype=np.complex64).astype(np.complex64).tofile(slaveBurstSlcResampled[i])
create_xml(slaveBurstSlcResampled[i], width, length, 'slc')
#output a resampled secondary image with all pixels set to zero
os.chdir(secondaryBurstResampledDir)
np.zeros((length, width), dtype=np.complex64).astype(np.complex64).tofile(secondaryBurstSlcResampled[i])
create_xml(secondaryBurstSlcResampled[i], width, length, 'slc')
os.chdir('../')
continue
else:
print('\nburst pair, master: %2d, slave: %3d'%(i+1, iSlave+1))
print('\nburst pair, reference: %2d, secondary: %3d'%(i+1, iSecondary+1))
#adjust azimuth offset accordingly, since original azimuth offset assumes master and slave start with sensingStart
azoffBurst -= (slaveSwath.burstSlcFirstLineOffsets[iSlave]-masterSwath.burstSlcFirstLineOffsets[i])
#adjust azimuth offset accordingly, since original azimuth offset assumes reference and secondary start with sensingStart
azoffBurst -= (secondarySwath.burstSlcFirstLineOffsets[iSecondary]-referenceSwath.burstSlcFirstLineOffsets[i])
##########################################################################
# 2. compute deramp and reramp signals
##########################################################################
cj = np.complex64(1j)
tbase = (slaveBurstStartTimesSlc[iSlave] - (slaveBurstStartTimesRaw[iSlave] + \
datetime.timedelta(seconds=(slaveSwath.burstLength - 1.0) / 2.0 / slaveSwath.prf))).total_seconds()
tbase = (secondaryBurstStartTimesSlc[iSecondary] - (secondaryBurstStartTimesRaw[iSecondary] + \
datetime.timedelta(seconds=(secondarySwath.burstLength - 1.0) / 2.0 / secondarySwath.prf))).total_seconds()
#compute deramp signal
index1 = np.matlib.repmat(np.arange(widthSlave), lengthSlave, 1)
index2 = np.matlib.repmat(np.arange(lengthSlave).reshape(lengthSlave, 1), 1, widthSlave)
ka = slaveSwath.azimuthFmrateVsPixel[3] * index1**3 + slaveSwath.azimuthFmrateVsPixel[2] * index1**2 + \
slaveSwath.azimuthFmrateVsPixel[1] * index1 + slaveSwath.azimuthFmrateVsPixel[0]
index1 = np.matlib.repmat(np.arange(widthSecondary), lengthSecondary, 1)
index2 = np.matlib.repmat(np.arange(lengthSecondary).reshape(lengthSecondary, 1), 1, widthSecondary)
ka = secondarySwath.azimuthFmrateVsPixel[3] * index1**3 + secondarySwath.azimuthFmrateVsPixel[2] * index1**2 + \
secondarySwath.azimuthFmrateVsPixel[1] * index1 + secondarySwath.azimuthFmrateVsPixel[0]
#use the convention that ka > 0
ka = -ka
t = tbase + index2*slaveSwath.azimuthLineInterval
t = tbase + index2*secondarySwath.azimuthLineInterval
deramp = np.exp(cj * np.pi * (-ka) * t**2)
#compute reramp signal
index1 = np.matlib.repmat(np.arange(width), length, 1) + rgoffBurst
index2 = np.matlib.repmat(np.arange(length).reshape(length, 1), 1, width) + azoffBurst
ka = slaveSwath.azimuthFmrateVsPixel[3] * index1**3 + slaveSwath.azimuthFmrateVsPixel[2] * index1**2 + \
slaveSwath.azimuthFmrateVsPixel[1] * index1 + slaveSwath.azimuthFmrateVsPixel[0]
ka = secondarySwath.azimuthFmrateVsPixel[3] * index1**3 + secondarySwath.azimuthFmrateVsPixel[2] * index1**2 + \
secondarySwath.azimuthFmrateVsPixel[1] * index1 + secondarySwath.azimuthFmrateVsPixel[0]
#use the convention that ka > 0
ka = -ka
t = tbase + index2*slaveSwath.azimuthLineInterval
t = tbase + index2*secondarySwath.azimuthLineInterval
reramp = np.exp(cj * np.pi * (ka) * t**2)
##########################################################################
# 3. resample slave burst
# 3. resample secondary burst
##########################################################################
#go to slave directory to do resampling
os.chdir(slaveBurstDir)
#go to secondary directory to do resampling
os.chdir(secondaryBurstDir)
#output offsets
rgoffBurstFile = "burst_rg.off"
@ -1105,39 +1105,39 @@ def resampleBursts(masterSwath, slaveSwath,
rgoffBurst.astype(np.float32).tofile(rgoffBurstFile)
azoffBurst.astype(np.float32).tofile(azoffBurstFile)
#deramp slave burst
slaveBurstDerampedFile = "slave.slc"
sburst = np.fromfile(slaveBurstSlc[iSlave], dtype=np.complex64).reshape(lengthSlave, widthSlave)
(deramp * sburst).astype(np.complex64).tofile(slaveBurstDerampedFile)
create_xml(slaveBurstDerampedFile, widthSlave, lengthSlave, 'slc')
#deramp secondary burst
secondaryBurstDerampedFile = "secondary.slc"
sburst = np.fromfile(secondaryBurstSlc[iSecondary], dtype=np.complex64).reshape(lengthSecondary, widthSecondary)
(deramp * sburst).astype(np.complex64).tofile(secondaryBurstDerampedFile)
create_xml(secondaryBurstDerampedFile, widthSecondary, lengthSecondary, 'slc')
#resampled slave burst
slaveBurstResampFile = 'slave_resamp.slc'
#resampled secondary burst
secondaryBurstResampFile = 'secondary_resamp.slc'
#resample slave burst
#resample secondary burst
#now doppler has bigger impact now, as it's value is about 35 Hz (azimuth resampling frequency is now only 1/20 * PRF)
#we don't know if this doppler value is accurate or not, so we set it to zero, which seems to give best resampling result
#otherwise if it is not accurate and we still use it, it will significantly affect resampling result
dopplerVsPixel = slaveSwath.dopplerVsPixel
dopplerVsPixel = secondarySwath.dopplerVsPixel
dopplerVsPixel = [0.0, 0.0, 0.0, 0.0]
resamp(slaveBurstDerampedFile, slaveBurstResampFile, rgoffBurstFile, azoffBurstFile, width, length, 1.0/slaveSwath.azimuthLineInterval, dopplerVsPixel,
resamp(secondaryBurstDerampedFile, secondaryBurstResampFile, rgoffBurstFile, azoffBurstFile, width, length, 1.0/secondarySwath.azimuthLineInterval, dopplerVsPixel,
rgcoef=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
azcoef=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
azpos_off=0.0)
#read resampled slave burst and reramp
sburstResamp = reramp * (np.fromfile(slaveBurstResampFile, dtype=np.complex64).reshape(length, width))
#read resampled secondary burst and reramp
sburstResamp = reramp * (np.fromfile(secondaryBurstResampFile, dtype=np.complex64).reshape(length, width))
#clear up
os.remove(rgoffBurstFile)
os.remove(azoffBurstFile)
os.remove(slaveBurstDerampedFile)
os.remove(slaveBurstDerampedFile+'.vrt')
os.remove(slaveBurstDerampedFile+'.xml')
os.remove(slaveBurstResampFile)
os.remove(slaveBurstResampFile+'.vrt')
os.remove(slaveBurstResampFile+'.xml')
os.remove(secondaryBurstDerampedFile)
os.remove(secondaryBurstDerampedFile+'.vrt')
os.remove(secondaryBurstDerampedFile+'.xml')
os.remove(secondaryBurstResampFile)
os.remove(secondaryBurstResampFile+'.vrt')
os.remove(secondaryBurstResampFile+'.xml')
os.chdir('../')
@ -1145,14 +1145,14 @@ def resampleBursts(masterSwath, slaveSwath,
##########################################################################
# 4. dump results
##########################################################################
#dump resampled slave burst
os.chdir(slaveBurstResampledDir)
sburstResamp.astype(np.complex64).tofile(slaveBurstSlcResampled[i])
create_xml(slaveBurstSlcResampled[i], width, length, 'slc')
#dump resampled secondary burst
os.chdir(secondaryBurstResampledDir)
sburstResamp.astype(np.complex64).tofile(secondaryBurstSlcResampled[i])
create_xml(secondaryBurstSlcResampled[i], width, length, 'slc')
os.chdir('../')
#dump burst interferogram
mburst = np.fromfile(os.path.join(masterBurstDir, masterBurstSlc[i]), dtype=np.complex64).reshape(length, width)
mburst = np.fromfile(os.path.join(referenceBurstDir, referenceBurstSlc[i]), dtype=np.complex64).reshape(length, width)
os.chdir(interferogramDir)
(mburst * np.conj(sburstResamp)).astype(np.complex64).tofile(interferogram[i])
create_xml(interferogram[i], width, length, 'int')

View File

@ -1,10 +1,10 @@
on the following paramters might be changed in the denseoffset steps:
=======================================================================
if self.frameOffsetMatching == False:
self._insar.frameRangeOffsetMatchingMaster = offsetMaster[2]
self._insar.frameAzimuthOffsetMatchingMaster = offsetMaster[3]
self._insar.frameRangeOffsetMatchingSlave = offsetSlave[2]
self._insar.frameAzimuthOffsetMatchingSlave = offsetSlave[3]
self._insar.frameRangeOffsetMatchingReference = offsetReference[2]
self._insar.frameAzimuthOffsetMatchingReference = offsetReference[3]
self._insar.frameRangeOffsetMatchingSecondary = offsetSecondary[2]
self._insar.frameAzimuthOffsetMatchingSecondary = offsetSecondary[3]
Therefore these denseoffset steps could be moved to after 'frame_mosaic' step

View File

@ -18,8 +18,8 @@ def runCoherence(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
#masterTrack = self._insar.loadTrack(master=True)
#slaveTrack = self._insar.loadTrack(master=False)
#referenceTrack = self._insar.loadTrack(reference=True)
#secondaryTrack = self._insar.loadTrack(reference=False)
insarDir = 'insar'
os.makedirs(insarDir, exist_ok=True)

View File

@ -27,8 +27,8 @@ def runDenseOffset(self):
os.makedirs(denseOffsetDir, exist_ok=True)
os.chdir(denseOffsetDir)
#masterTrack = self._insar.loadProduct(self._insar.masterTrackParameter)
#slaveTrack = self._insar.loadProduct(self._insar.slaveTrackParameter)
#referenceTrack = self._insar.loadProduct(self._insar.referenceTrackParameter)
#secondaryTrack = self._insar.loadProduct(self._insar.secondaryTrackParameter)
#########################################################################################
@ -101,24 +101,24 @@ def runDenseOffsetCPU(self):
from isceobj.Alos2Proc.Alos2ProcPublic import runCmd
####For this module currently, we need to create an actual file on disk
for infile in [self._insar.masterSlc, self._insar.slaveSlcCoregistered]:
for infile in [self._insar.referenceSlc, self._insar.secondarySlcCoregistered]:
if os.path.isfile(infile):
continue
cmd = 'gdal_translate -of ENVI {0}.vrt {0}'.format(infile)
runCmd(cmd)
m = isceobj.createSlcImage()
m.load(self._insar.masterSlc + '.xml')
m.load(self._insar.referenceSlc + '.xml')
m.setAccessMode('READ')
s = isceobj.createSlcImage()
s.load(self._insar.slaveSlcCoregistered + '.xml')
s.load(self._insar.secondarySlcCoregistered + '.xml')
s.setAccessMode('READ')
#objOffset.numberThreads = 1
print('\n************* dense offset estimation parameters *************')
print('master SLC: %s' % (self._insar.masterSlc))
print('slave SLC: %s' % (self._insar.slaveSlcCoregistered))
print('reference SLC: %s' % (self._insar.referenceSlc))
print('secondary SLC: %s' % (self._insar.secondarySlcCoregistered))
print('dense offset estimation window width: %d' % (self.offsetWindowWidth))
print('dense offset estimation window hight: %d' % (self.offsetWindowHeight))
print('dense offset search window width: %d' % (self.offsetSearchWindowWidth))
@ -216,23 +216,23 @@ def runDenseOffsetGPU(self):
####For this module currently, we need to create an actual file on disk
for infile in [self._insar.masterSlc, self._insar.slaveSlcCoregistered]:
for infile in [self._insar.referenceSlc, self._insar.secondarySlcCoregistered]:
if os.path.isfile(infile):
continue
cmd = 'gdal_translate -of ENVI {0}.vrt {0}'.format(infile)
runCmd(cmd)
m = isceobj.createSlcImage()
m.load(self._insar.masterSlc + '.xml')
m.load(self._insar.referenceSlc + '.xml')
m.setAccessMode('READ')
s = isceobj.createSlcImage()
s.load(self._insar.slaveSlcCoregistered + '.xml')
s.load(self._insar.secondarySlcCoregistered + '.xml')
s.setAccessMode('READ')
print('\n************* dense offset estimation parameters *************')
print('master SLC: %s' % (self._insar.masterSlc))
print('slave SLC: %s' % (self._insar.slaveSlcCoregistered))
print('reference SLC: %s' % (self._insar.referenceSlc))
print('secondary SLC: %s' % (self._insar.secondarySlcCoregistered))
print('dense offset estimation window width: %d' % (self.offsetWindowWidth))
print('dense offset estimation window hight: %d' % (self.offsetWindowHeight))
print('dense offset search window width: %d' % (self.offsetSearchWindowWidth))
@ -249,12 +249,12 @@ def runDenseOffsetGPU(self):
objOffset.nStreams = 2
#original ampcor program in roi_pac uses phase gradient to deramp
objOffset.derampMethod = 2
objOffset.masterImageName = self._insar.masterSlc
objOffset.masterImageHeight = m.length
objOffset.masterImageWidth = m.width
objOffset.slaveImageName = self._insar.slaveSlcCoregistered
objOffset.slaveImageHeight = s.length
objOffset.slaveImageWidth = s.width
objOffset.referenceImageName = self._insar.referenceSlc
objOffset.referenceImageHeight = m.length
objOffset.referenceImageWidth = m.width
objOffset.secondaryImageName = self._insar.secondarySlcCoregistered
objOffset.secondaryImageHeight = s.length
objOffset.secondaryImageWidth = s.width
objOffset.offsetImageName = self._insar.denseOffset
objOffset.snrImageName = self._insar.denseOffsetSnr
@ -273,8 +273,8 @@ def runDenseOffsetGPU(self):
objOffset.grossOffsetAcrossStatic = 0
objOffset.grossOffsetDownStatic = 0
objOffset.masterStartPixelDownStatic = self.offsetWindowHeight//2
objOffset.masterStartPixelAcrossStatic = self.offsetWindowWidth//2
objOffset.referenceStartPixelDownStatic = self.offsetWindowHeight//2
objOffset.referenceStartPixelAcrossStatic = self.offsetWindowWidth//2
objOffset.numberWindowDown = (m.length - 2*self.offsetSearchWindowHeight - self.offsetWindowHeight) // self.offsetSkipHeight
objOffset.numberWindowAcross = (m.width - 2*self.offsetSearchWindowWidth - self.offsetWindowWidth) // self.offsetSkipWidth

View File

@ -18,15 +18,15 @@ def runDiffInterferogram(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
referenceTrack = self._insar.loadTrack(reference=True)
insarDir = 'insar'
os.makedirs(insarDir, exist_ok=True)
os.chdir(insarDir)
rangePixelSize = self._insar.numberRangeLooks1 * masterTrack.rangePixelSize
radarWavelength = masterTrack.radarWavelength
rangePixelSize = self._insar.numberRangeLooks1 * referenceTrack.rangePixelSize
radarWavelength = referenceTrack.radarWavelength
cmd = "imageMath.py -e='a*exp(-1.0*J*b*4.0*{}*{}/{}) * (b!=0)' --a={} --b={} -o {} -t cfloat".format(np.pi, rangePixelSize, radarWavelength, self._insar.interferogram, self._insar.rectRangeOffset, self._insar.differentialInterferogram)
runCmd(cmd)

View File

@ -20,10 +20,10 @@ def runDownloadDem(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
bboxGeo = getBboxGeo(masterTrack)
bboxGeo = getBboxGeo(referenceTrack)
bbox = np.array(bboxGeo)
bboxStr = '{} {} {} {}'.format(np.int(np.floor(bbox[0])), np.int(np.ceil(bbox[1])), np.int(np.floor(bbox[2])), np.int(np.ceil(bbox[3])))

View File

@ -24,8 +24,8 @@ def runFilt(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
#masterTrack = self._insar.loadTrack(master=True)
#slaveTrack = self._insar.loadTrack(master=False)
#referenceTrack = self._insar.loadTrack(reference=True)
#secondaryTrack = self._insar.loadTrack(reference=False)
insarDir = 'insar'
os.makedirs(insarDir, exist_ok=True)

View File

@ -28,8 +28,8 @@ def runFiltOffset(self):
os.makedirs(denseOffsetDir, exist_ok=True)
os.chdir(denseOffsetDir)
#masterTrack = self._insar.loadProduct(self._insar.masterTrackParameter)
#slaveTrack = self._insar.loadProduct(self._insar.slaveTrackParameter)
#referenceTrack = self._insar.loadProduct(self._insar.referenceTrackParameter)
#secondaryTrack = self._insar.loadProduct(self._insar.secondaryTrackParameter)
#########################################################################################

View File

@ -21,10 +21,10 @@ def runFormInterferogram(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
@ -33,27 +33,27 @@ def runFormInterferogram(self):
print('forming interferogram frame {}, swath {}'.format(frameNumber, swathNumber))
masterSwath = masterTrack.frames[i].swaths[j]
slaveSwath = slaveTrack.frames[i].swaths[j]
referenceSwath = referenceTrack.frames[i].swaths[j]
secondarySwath = secondaryTrack.frames[i].swaths[j]
#############################################
#1. form interferogram
#############################################
refinedOffsets = readOffset('cull.off')
intWidth = int(masterSwath.numberOfSamples / self._insar.numberRangeLooks1)
intLength = int(masterSwath.numberOfLines / self._insar.numberAzimuthLooks1)
dopplerVsPixel = [i/slaveSwath.prf for i in slaveSwath.dopplerVsPixel]
intWidth = int(referenceSwath.numberOfSamples / self._insar.numberRangeLooks1)
intLength = int(referenceSwath.numberOfLines / self._insar.numberAzimuthLooks1)
dopplerVsPixel = [i/secondarySwath.prf for i in secondarySwath.dopplerVsPixel]
#master slc
#reference slc
mSLC = isceobj.createSlcImage()
mSLC.load(self._insar.masterSlc+'.xml')
mSLC.load(self._insar.referenceSlc+'.xml')
mSLC.setAccessMode('read')
mSLC.createImage()
#slave slc
#secondary slc
sSLC = isceobj.createSlcImage()
sSLC.load(self._insar.slaveSlc+'.xml')
sSLC.load(self._insar.secondarySlc+'.xml')
sSLC.setAccessMode('read')
sSLC.createImage()
@ -86,14 +86,14 @@ def runFormInterferogram(self):
objResamp.wireInputPort(name='offsets', object=refinedOffsets)
objResamp.stdWriter = stdWriter
objResamp.setNumberFitCoefficients(6)
objResamp.setNumberRangeBin1(masterSwath.numberOfSamples)
objResamp.setNumberRangeBin2(slaveSwath.numberOfSamples)
objResamp.setNumberRangeBin1(referenceSwath.numberOfSamples)
objResamp.setNumberRangeBin2(secondarySwath.numberOfSamples)
objResamp.setStartLine(1)
objResamp.setNumberLines(masterSwath.numberOfLines)
objResamp.setNumberLines(referenceSwath.numberOfLines)
objResamp.setFirstLineOffset(1)
objResamp.setDopplerCentroidCoefficients(dopplerVsPixel)
objResamp.setRadarWavelength(slaveTrack.radarWavelength)
objResamp.setSlantRangePixelSpacing(slaveSwath.rangePixelSize)
objResamp.setRadarWavelength(secondaryTrack.radarWavelength)
objResamp.setSlantRangePixelSpacing(secondarySwath.rangePixelSize)
objResamp.setNumberRangeLooks(self._insar.numberRangeLooks1)
objResamp.setNumberAzimuthLooks(self._insar.numberAzimuthLooks1)
objResamp.setFlattenWithOffsetFitFlag(0)

View File

@ -20,17 +20,17 @@ def runFrameMosaic(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
mosaicDir = 'insar'
os.makedirs(mosaicDir, exist_ok=True)
os.chdir(mosaicDir)
numberOfFrames = len(masterTrack.frames)
numberOfFrames = len(referenceTrack.frames)
if numberOfFrames == 1:
import shutil
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.masterFrames[0]))
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.referenceFrames[0]))
if not os.path.isfile(self._insar.interferogram):
os.symlink(os.path.join('../', frameDir, self._insar.interferogram), self._insar.interferogram)
#shutil.copy2() can overwrite
@ -51,75 +51,75 @@ def runFrameMosaic(self):
#update track parameters
#########################################################
#mosaic size
masterTrack.numberOfSamples = masterTrack.frames[0].numberOfSamples
masterTrack.numberOfLines = masterTrack.frames[0].numberOfLines
referenceTrack.numberOfSamples = referenceTrack.frames[0].numberOfSamples
referenceTrack.numberOfLines = referenceTrack.frames[0].numberOfLines
#NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE
#range parameters
masterTrack.startingRange = masterTrack.frames[0].startingRange
masterTrack.rangeSamplingRate = masterTrack.frames[0].rangeSamplingRate
masterTrack.rangePixelSize = masterTrack.frames[0].rangePixelSize
referenceTrack.startingRange = referenceTrack.frames[0].startingRange
referenceTrack.rangeSamplingRate = referenceTrack.frames[0].rangeSamplingRate
referenceTrack.rangePixelSize = referenceTrack.frames[0].rangePixelSize
#azimuth parameters
masterTrack.sensingStart = masterTrack.frames[0].sensingStart
masterTrack.prf = masterTrack.frames[0].prf
masterTrack.azimuthPixelSize = masterTrack.frames[0].azimuthPixelSize
masterTrack.azimuthLineInterval = masterTrack.frames[0].azimuthLineInterval
referenceTrack.sensingStart = referenceTrack.frames[0].sensingStart
referenceTrack.prf = referenceTrack.frames[0].prf
referenceTrack.azimuthPixelSize = referenceTrack.frames[0].azimuthPixelSize
referenceTrack.azimuthLineInterval = referenceTrack.frames[0].azimuthLineInterval
#update track parameters, slave
#update track parameters, secondary
#########################################################
#mosaic size
slaveTrack.numberOfSamples = slaveTrack.frames[0].numberOfSamples
slaveTrack.numberOfLines = slaveTrack.frames[0].numberOfLines
secondaryTrack.numberOfSamples = secondaryTrack.frames[0].numberOfSamples
secondaryTrack.numberOfLines = secondaryTrack.frames[0].numberOfLines
#NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE
#range parameters
slaveTrack.startingRange = slaveTrack.frames[0].startingRange
slaveTrack.rangeSamplingRate = slaveTrack.frames[0].rangeSamplingRate
slaveTrack.rangePixelSize = slaveTrack.frames[0].rangePixelSize
secondaryTrack.startingRange = secondaryTrack.frames[0].startingRange
secondaryTrack.rangeSamplingRate = secondaryTrack.frames[0].rangeSamplingRate
secondaryTrack.rangePixelSize = secondaryTrack.frames[0].rangePixelSize
#azimuth parameters
slaveTrack.sensingStart = slaveTrack.frames[0].sensingStart
slaveTrack.prf = slaveTrack.frames[0].prf
slaveTrack.azimuthPixelSize = slaveTrack.frames[0].azimuthPixelSize
slaveTrack.azimuthLineInterval = slaveTrack.frames[0].azimuthLineInterval
secondaryTrack.sensingStart = secondaryTrack.frames[0].sensingStart
secondaryTrack.prf = secondaryTrack.frames[0].prf
secondaryTrack.azimuthPixelSize = secondaryTrack.frames[0].azimuthPixelSize
secondaryTrack.azimuthLineInterval = secondaryTrack.frames[0].azimuthLineInterval
else:
#choose offsets
if self.frameOffsetMatching:
rangeOffsets = self._insar.frameRangeOffsetMatchingMaster
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingMaster
rangeOffsets = self._insar.frameRangeOffsetMatchingReference
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingReference
else:
rangeOffsets = self._insar.frameRangeOffsetGeometricalMaster
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalMaster
rangeOffsets = self._insar.frameRangeOffsetGeometricalReference
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalReference
#list of input files
inputInterferograms = []
inputAmplitudes = []
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
inputInterferograms.append(os.path.join('../', frameDir, 'mosaic', self._insar.interferogram))
inputAmplitudes.append(os.path.join('../', frameDir, 'mosaic', self._insar.amplitude))
#note that track parameters are updated after mosaicking
#mosaic amplitudes
frameMosaic(masterTrack, inputAmplitudes, self._insar.amplitude,
frameMosaic(referenceTrack, inputAmplitudes, self._insar.amplitude,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
updateTrack=False, phaseCompensation=False, resamplingMethod=0)
#mosaic interferograms
frameMosaic(masterTrack, inputInterferograms, self._insar.interferogram,
frameMosaic(referenceTrack, inputInterferograms, self._insar.interferogram,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
updateTrack=True, phaseCompensation=True, resamplingMethod=1)
create_xml(self._insar.amplitude, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'amp')
create_xml(self._insar.interferogram, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'int')
create_xml(self._insar.amplitude, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'amp')
create_xml(self._insar.interferogram, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'int')
#update slave parameters here
#do not match for slave, always use geometrical
rangeOffsets = self._insar.frameRangeOffsetGeometricalSlave
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalSlave
frameMosaicParameters(slaveTrack, rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
#update secondary parameters here
#do not match for secondary, always use geometrical
rangeOffsets = self._insar.frameRangeOffsetGeometricalSecondary
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalSecondary
frameMosaicParameters(secondaryTrack, rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
os.chdir('../')
#save parameter file
self._insar.saveProduct(masterTrack, self._insar.masterTrackParameter)
self._insar.saveProduct(slaveTrack, self._insar.slaveTrackParameter)
self._insar.saveProduct(referenceTrack, self._insar.referenceTrackParameter)
self._insar.saveProduct(secondaryTrack, self._insar.secondaryTrackParameter)
catalog.printToLog(logger, "runFrameMosaic")
self._insar.procDoc.addAllFromCatalog(catalog)

View File

@ -16,14 +16,14 @@ def runFrameOffset(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
mosaicDir = 'insar'
os.makedirs(mosaicDir, exist_ok=True)
os.chdir(mosaicDir)
if len(masterTrack.frames) > 1:
if len(referenceTrack.frames) > 1:
if (self._insar.modeCombination == 21) or \
(self._insar.modeCombination == 22) or \
(self._insar.modeCombination == 31) or \
@ -33,21 +33,21 @@ def runFrameOffset(self):
matchingMode=1
#compute swath offset
offsetMaster = frameOffset(masterTrack, self._insar.masterSlc, self._insar.masterFrameOffset,
offsetReference = frameOffset(referenceTrack, self._insar.referenceSlc, self._insar.referenceFrameOffset,
crossCorrelation=self.frameOffsetMatching, matchingMode=matchingMode)
#only use geometrical offset for slave
offsetSlave = frameOffset(slaveTrack, self._insar.slaveSlc, self._insar.slaveFrameOffset,
#only use geometrical offset for secondary
offsetSecondary = frameOffset(secondaryTrack, self._insar.secondarySlc, self._insar.secondaryFrameOffset,
crossCorrelation=False, matchingMode=matchingMode)
self._insar.frameRangeOffsetGeometricalMaster = offsetMaster[0]
self._insar.frameAzimuthOffsetGeometricalMaster = offsetMaster[1]
self._insar.frameRangeOffsetGeometricalSlave = offsetSlave[0]
self._insar.frameAzimuthOffsetGeometricalSlave = offsetSlave[1]
self._insar.frameRangeOffsetGeometricalReference = offsetReference[0]
self._insar.frameAzimuthOffsetGeometricalReference = offsetReference[1]
self._insar.frameRangeOffsetGeometricalSecondary = offsetSecondary[0]
self._insar.frameAzimuthOffsetGeometricalSecondary = offsetSecondary[1]
if self.frameOffsetMatching:
self._insar.frameRangeOffsetMatchingMaster = offsetMaster[2]
self._insar.frameAzimuthOffsetMatchingMaster = offsetMaster[3]
#self._insar.frameRangeOffsetMatchingSlave = offsetSlave[2]
#self._insar.frameAzimuthOffsetMatchingSlave = offsetSlave[3]
self._insar.frameRangeOffsetMatchingReference = offsetReference[2]
self._insar.frameAzimuthOffsetMatchingReference = offsetReference[3]
#self._insar.frameRangeOffsetMatchingSecondary = offsetSecondary[2]
#self._insar.frameAzimuthOffsetMatchingSecondary = offsetSecondary[3]
os.chdir('../')
@ -188,8 +188,8 @@ def estimateFrameOffset(swath1, swath2, image1, image2, matchingMode=0):
else:
raise Exception('file type not supported yet.')
ampcor.setMasterSlcImage(mSLC)
ampcor.setSlaveSlcImage(sSLC)
ampcor.setReferenceSlcImage(mSLC)
ampcor.setSecondarySlcImage(sSLC)
#MATCH REGION
#compute an offset at image center to use

View File

@ -16,7 +16,7 @@ def runGeo2Rdr(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
slaveTrack = self._insar.loadTrack(master=False)
secondaryTrack = self._insar.loadTrack(reference=False)
insarDir = 'insar'
os.makedirs(insarDir, exist_ok=True)
@ -25,10 +25,10 @@ def runGeo2Rdr(self):
hasGPU= self.useGPU and self._insar.hasGPU()
if hasGPU:
geo2RdrGPU(slaveTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
geo2RdrGPU(secondaryTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.rangeOffset, self._insar.azimuthOffset)
else:
geo2RdrCPU(slaveTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
geo2RdrCPU(secondaryTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.rangeOffset, self._insar.azimuthOffset)
os.chdir('../')
@ -37,7 +37,7 @@ def runGeo2Rdr(self):
self._insar.procDoc.addAllFromCatalog(catalog)
def geo2RdrCPU(slaveTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFile, hgtFile, rangeOffsetFile, azimuthOffsetFile):
def geo2RdrCPU(secondaryTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFile, hgtFile, rangeOffsetFile, azimuthOffsetFile):
import datetime
from zerodop.geo2rdr import createGeo2rdr
from isceobj.Planet.Planet import Planet
@ -61,20 +61,20 @@ def geo2RdrCPU(slaveTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFil
topo = createGeo2rdr()
topo.configure()
#set parameters
topo.slantRangePixelSpacing = numberRangeLooks * slaveTrack.rangePixelSize
topo.prf = 1.0 / (numberAzimuthLooks*slaveTrack.azimuthLineInterval)
topo.radarWavelength = slaveTrack.radarWavelength
topo.orbit = slaveTrack.orbit
topo.width = slaveTrack.numberOfSamples
topo.length = slaveTrack.numberOfLines
topo.slantRangePixelSpacing = numberRangeLooks * secondaryTrack.rangePixelSize
topo.prf = 1.0 / (numberAzimuthLooks*secondaryTrack.azimuthLineInterval)
topo.radarWavelength = secondaryTrack.radarWavelength
topo.orbit = secondaryTrack.orbit
topo.width = secondaryTrack.numberOfSamples
topo.length = secondaryTrack.numberOfLines
topo.demLength = demImage.length
topo.demWidth = demImage.width
topo.wireInputPort(name='planet', object=planet)
topo.numberRangeLooks = 1 #
topo.numberAzimuthLooks = 1 # must be set to be 1
topo.lookSide = pointingDirection[slaveTrack.pointingDirection]
topo.setSensingStart(slaveTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*slaveTrack.azimuthLineInterval))
topo.rangeFirstSample = slaveTrack.startingRange + (numberRangeLooks-1.0)/2.0*slaveTrack.rangePixelSize
topo.lookSide = pointingDirection[secondaryTrack.pointingDirection]
topo.setSensingStart(secondaryTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*secondaryTrack.azimuthLineInterval))
topo.rangeFirstSample = secondaryTrack.startingRange + (numberRangeLooks-1.0)/2.0*secondaryTrack.rangePixelSize
topo.dopplerCentroidCoeffs = [0.] # we are using zero doppler geometry
#set files
topo.latImage = latImage
@ -88,7 +88,7 @@ def geo2RdrCPU(slaveTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFil
return
def geo2RdrGPU(slaveTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFile, hgtFile, rangeOffsetFile, azimuthOffsetFile):
def geo2RdrGPU(secondaryTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFile, hgtFile, rangeOffsetFile, azimuthOffsetFile):
'''
currently we cannot set left/right looking.
works for right looking, but left looking probably not supported.
@ -118,14 +118,14 @@ def geo2RdrGPU(slaveTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFil
planet = Planet(pname='Earth')
grdr = PyGeo2rdr()
grdr.setRangePixelSpacing(numberRangeLooks * slaveTrack.rangePixelSize)
grdr.setPRF(1.0 / (numberAzimuthLooks*slaveTrack.azimuthLineInterval))
grdr.setRadarWavelength(slaveTrack.radarWavelength)
grdr.setRangePixelSpacing(numberRangeLooks * secondaryTrack.rangePixelSize)
grdr.setPRF(1.0 / (numberAzimuthLooks*secondaryTrack.azimuthLineInterval))
grdr.setRadarWavelength(secondaryTrack.radarWavelength)
#CHECK IF THIS WORKS!!!
grdr.createOrbit(0, len(slaveTrack.orbit.stateVectors.list))
grdr.createOrbit(0, len(secondaryTrack.orbit.stateVectors.list))
count = 0
for sv in slaveTrack.orbit.stateVectors.list:
for sv in secondaryTrack.orbit.stateVectors.list:
td = DTU.seconds_since_midnight(sv.getTime())
pos = sv.getPosition()
vel = sv.getVelocity()
@ -134,10 +134,10 @@ def geo2RdrGPU(slaveTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFil
count += 1
grdr.setOrbitMethod(0)
grdr.setWidth(slaveTrack.numberOfSamples)
grdr.setLength(slaveTrack.numberOfLines)
grdr.setSensingStart(DTU.seconds_since_midnight(slaveTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*slaveTrack.azimuthLineInterval)))
grdr.setRangeFirstSample(slaveTrack.startingRange + (numberRangeLooks-1.0)/2.0*slaveTrack.rangePixelSize)
grdr.setWidth(secondaryTrack.numberOfSamples)
grdr.setLength(secondaryTrack.numberOfLines)
grdr.setSensingStart(DTU.seconds_since_midnight(secondaryTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*secondaryTrack.azimuthLineInterval)))
grdr.setRangeFirstSample(secondaryTrack.startingRange + (numberRangeLooks-1.0)/2.0*secondaryTrack.rangePixelSize)
grdr.setNumberRangeLooks(1)
grdr.setNumberAzimuthLooks(1)
grdr.setEllipsoidMajorSemiAxis(planet.ellipsoid.a)

View File

@ -19,8 +19,8 @@ def runGeocode(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
#slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
#secondaryTrack = self._insar.loadTrack(reference=False)
demFile = os.path.abspath(self._insar.demGeo)
@ -30,7 +30,7 @@ def runGeocode(self):
#compute bounding box for geocoding
if self.bbox == None:
bbox = getBboxGeo(masterTrack)
bbox = getBboxGeo(referenceTrack)
else:
bbox = self.bbox
catalog.addItem('geocode bounding box', bbox, 'runGeocode')
@ -61,7 +61,7 @@ def runGeocode(self):
else:
interpMethod = self.geocodeInterpMethod.lower()
geocode(masterTrack, demFile, inputFile, bbox, numberRangeLooks, numberAzimuthLooks, interpMethod, 0, 0)
geocode(referenceTrack, demFile, inputFile, bbox, numberRangeLooks, numberAzimuthLooks, interpMethod, 0, 0)
os.chdir('../')

View File

@ -26,8 +26,8 @@ def runGeocodeOffset(self):
#use original track object to determine bbox
if self.bbox == None:
masterTrack = self._insar.loadTrack(master=True)
bbox = getBboxGeo(masterTrack)
referenceTrack = self._insar.loadTrack(reference=True)
bbox = getBboxGeo(referenceTrack)
else:
bbox = self.bbox
catalog.addItem('geocode bounding box', bbox, 'runGeocodeOffset')
@ -38,13 +38,13 @@ def runGeocodeOffset(self):
os.makedirs(denseOffsetDir, exist_ok=True)
os.chdir(denseOffsetDir)
masterTrack = self._insar.loadProduct(self._insar.masterTrackParameter)
#slaveTrack = self._insar.loadProduct(self._insar.slaveTrackParameter)
referenceTrack = self._insar.loadProduct(self._insar.referenceTrackParameter)
#secondaryTrack = self._insar.loadProduct(self._insar.secondaryTrackParameter)
#########################################################################################
#compute bounding box for geocoding
#if self.bbox == None:
# bbox = getBboxGeo(masterTrack)
# bbox = getBboxGeo(referenceTrack)
#else:
# bbox = self.bbox
#catalog.addItem('geocode bounding box', bbox, 'runGeocodeOffset')
@ -55,7 +55,7 @@ def runGeocodeOffset(self):
for inputFile in geocodeList:
interpMethod = 'nearest'
geocode(masterTrack, demFile, inputFile, bbox, self.offsetSkipWidth, self.offsetSkipHeight, interpMethod, self._insar.offsetImageTopoffset, self._insar.offsetImageLeftoffset, addMultilookOffset=False)
geocode(referenceTrack, demFile, inputFile, bbox, self.offsetSkipWidth, self.offsetSkipHeight, interpMethod, self._insar.offsetImageTopoffset, self._insar.offsetImageLeftoffset, addMultilookOffset=False)
#########################################################################################
os.chdir('../')

View File

@ -23,8 +23,8 @@ def runIonFilt(self):
self._insar.procDoc.addAllFromCatalog(catalog)
return
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
from isceobj.Alos2Proc.runIonSubband import defineIonDir
ionDir = defineIonDir()

View File

@ -22,13 +22,13 @@ def runIonSubband(self):
self._insar.procDoc.addAllFromCatalog(catalog)
return
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
#using 1/3, 1/3, 1/3 band split
radarWavelength = masterTrack.radarWavelength
rangeBandwidth = masterTrack.frames[0].swaths[0].rangeBandwidth
rangeSamplingRate = masterTrack.frames[0].swaths[0].rangeSamplingRate
radarWavelength = referenceTrack.radarWavelength
rangeBandwidth = referenceTrack.frames[0].swaths[0].rangeBandwidth
rangeSamplingRate = referenceTrack.frames[0].swaths[0].rangeSamplingRate
radarWavelengthLower = SPEED_OF_LIGHT/(SPEED_OF_LIGHT / radarWavelength - rangeBandwidth / 3.0)
radarWavelengthUpper = SPEED_OF_LIGHT/(SPEED_OF_LIGHT / radarWavelength + rangeBandwidth / 3.0)
subbandRadarWavelength = [radarWavelengthLower, radarWavelengthUpper]
@ -64,7 +64,7 @@ def runIonSubband(self):
#create insar processing directories
for k in range(2):
subbandDir = ionDir['subband'][k]
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
swathDir = 's{}'.format(swathNumber)
@ -84,7 +84,7 @@ def runIonSubband(self):
from isceobj.Alos2Proc.Alos2ProcPublic import readOffset
from contrib.alos2proc.alos2proc import rg_filter
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
swathDir = 's{}'.format(swathNumber)
@ -105,8 +105,8 @@ def runIonSubband(self):
print('interferogram already exists at swath {}, frame {}'.format(swathNumber, frameNumber))
continue
#filter master and slave images
for slcx in [self._insar.masterSlc, self._insar.slaveSlc]:
#filter reference and secondary images
for slcx in [self._insar.referenceSlc, self._insar.secondarySlc]:
slc = os.path.join('../', frameDir, swathDir, slcx)
slcLower = os.path.join(ionDir['subband'][0], frameDir, swathDir, slcx)
slcUpper = os.path.join(ionDir['subband'][1], frameDir, swathDir, slcx)
@ -120,7 +120,7 @@ def runIonSubband(self):
os.chdir(os.path.join(ionDir['subband'][k], frameDir, swathDir))
#recreate xml file to remove the file path
#can also use fixImageXml.py?
for x in [self._insar.masterSlc, self._insar.slaveSlc]:
for x in [self._insar.referenceSlc, self._insar.secondarySlc]:
img = isceobj.createSlcImage()
img.load(x + '.xml')
img.setFilename(x)
@ -131,23 +131,23 @@ def runIonSubband(self):
#############################################
#1. form interferogram
#############################################
masterSwath = masterTrack.frames[i].swaths[j]
slaveSwath = slaveTrack.frames[i].swaths[j]
referenceSwath = referenceTrack.frames[i].swaths[j]
secondarySwath = secondaryTrack.frames[i].swaths[j]
refinedOffsets = readOffset(os.path.join('../../../../', frameDir, swathDir, 'cull.off'))
intWidth = int(masterSwath.numberOfSamples / self._insar.numberRangeLooks1)
intLength = int(masterSwath.numberOfLines / self._insar.numberAzimuthLooks1)
dopplerVsPixel = [i/slaveSwath.prf for i in slaveSwath.dopplerVsPixel]
intWidth = int(referenceSwath.numberOfSamples / self._insar.numberRangeLooks1)
intLength = int(referenceSwath.numberOfLines / self._insar.numberAzimuthLooks1)
dopplerVsPixel = [i/secondarySwath.prf for i in secondarySwath.dopplerVsPixel]
#master slc
#reference slc
mSLC = isceobj.createSlcImage()
mSLC.load(self._insar.masterSlc+'.xml')
mSLC.load(self._insar.referenceSlc+'.xml')
mSLC.setAccessMode('read')
mSLC.createImage()
#slave slc
#secondary slc
sSLC = isceobj.createSlcImage()
sSLC.load(self._insar.slaveSlc+'.xml')
sSLC.load(self._insar.secondarySlc+'.xml')
sSLC.setAccessMode('read')
sSLC.createImage()
@ -180,14 +180,14 @@ def runIonSubband(self):
objResamp.wireInputPort(name='offsets', object=refinedOffsets)
objResamp.stdWriter = stdWriter
objResamp.setNumberFitCoefficients(6)
objResamp.setNumberRangeBin1(masterSwath.numberOfSamples)
objResamp.setNumberRangeBin2(slaveSwath.numberOfSamples)
objResamp.setNumberRangeBin1(referenceSwath.numberOfSamples)
objResamp.setNumberRangeBin2(secondarySwath.numberOfSamples)
objResamp.setStartLine(1)
objResamp.setNumberLines(masterSwath.numberOfLines)
objResamp.setNumberLines(referenceSwath.numberOfLines)
objResamp.setFirstLineOffset(1)
objResamp.setDopplerCentroidCoefficients(dopplerVsPixel)
objResamp.setRadarWavelength(subbandRadarWavelength[k])
objResamp.setSlantRangePixelSpacing(slaveSwath.rangePixelSize)
objResamp.setSlantRangePixelSpacing(secondarySwath.rangePixelSize)
objResamp.setNumberRangeLooks(self._insar.numberRangeLooks1)
objResamp.setNumberAzimuthLooks(self._insar.numberAzimuthLooks1)
objResamp.setFlattenWithOffsetFitFlag(0)
@ -214,12 +214,12 @@ def runIonSubband(self):
#############################################
#3. delete subband slcs
#############################################
os.remove(self._insar.masterSlc)
os.remove(self._insar.masterSlc + '.vrt')
os.remove(self._insar.masterSlc + '.xml')
os.remove(self._insar.slaveSlc)
os.remove(self._insar.slaveSlc + '.vrt')
os.remove(self._insar.slaveSlc + '.xml')
os.remove(self._insar.referenceSlc)
os.remove(self._insar.referenceSlc + '.vrt')
os.remove(self._insar.referenceSlc + '.xml')
os.remove(self._insar.secondarySlc)
os.remove(self._insar.secondarySlc + '.vrt')
os.remove(self._insar.secondarySlc + '.xml')
os.chdir('../../../')
@ -232,7 +232,7 @@ def runIonSubband(self):
for k in range(2):
os.chdir(ionDir['subband'][k])
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
@ -249,7 +249,7 @@ def runIonSubband(self):
(self._insar.endingSwath-self._insar.startingSwath+1 > 1)
):
import shutil
swathDir = 's{}'.format(masterTrack.frames[i].swaths[0].swathNumber)
swathDir = 's{}'.format(referenceTrack.frames[i].swaths[0].swathNumber)
# if not os.path.isfile(self._insar.interferogram):
# os.symlink(os.path.join('../', swathDir, self._insar.interferogram), self._insar.interferogram)
@ -275,20 +275,20 @@ def runIonSubband(self):
continue
#choose offsets
numberOfFrames = len(masterTrack.frames)
numberOfSwaths = len(masterTrack.frames[i].swaths)
numberOfFrames = len(referenceTrack.frames)
numberOfSwaths = len(referenceTrack.frames[i].swaths)
if self.swathOffsetMatching:
#no need to do this as the API support 2-d list
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetMatchingMaster
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingMaster
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetMatchingReference
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingReference
else:
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetGeometricalMaster
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalMaster
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetGeometricalReference
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalReference
rangeOffsets = rangeOffsets[i]
azimuthOffsets = azimuthOffsets[i]
@ -304,16 +304,16 @@ def runIonSubband(self):
#compute phase needed to be compensated using startingRange
if j >= 1:
#phaseDiffSwath1 = -4.0 * np.pi * (masterTrack.frames[i].swaths[j-1].startingRange - slaveTrack.frames[i].swaths[j-1].startingRange)/subbandRadarWavelength[k]
#phaseDiffSwath2 = -4.0 * np.pi * (masterTrack.frames[i].swaths[j].startingRange - slaveTrack.frames[i].swaths[j].startingRange)/subbandRadarWavelength[k]
phaseDiffSwath1 = +4.0 * np.pi * masterTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
-4.0 * np.pi * slaveTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
phaseDiffSwath2 = +4.0 * np.pi * masterTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
-4.0 * np.pi * slaveTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
if masterTrack.frames[i].swaths[j-1].startingRange - slaveTrack.frames[i].swaths[j-1].startingRange == \
masterTrack.frames[i].swaths[j].startingRange - slaveTrack.frames[i].swaths[j].startingRange:
#phaseDiffSwath1 = -4.0 * np.pi * (referenceTrack.frames[i].swaths[j-1].startingRange - secondaryTrack.frames[i].swaths[j-1].startingRange)/subbandRadarWavelength[k]
#phaseDiffSwath2 = -4.0 * np.pi * (referenceTrack.frames[i].swaths[j].startingRange - secondaryTrack.frames[i].swaths[j].startingRange)/subbandRadarWavelength[k]
phaseDiffSwath1 = +4.0 * np.pi * referenceTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
-4.0 * np.pi * secondaryTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
phaseDiffSwath2 = +4.0 * np.pi * referenceTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
-4.0 * np.pi * secondaryTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
if referenceTrack.frames[i].swaths[j-1].startingRange - secondaryTrack.frames[i].swaths[j-1].startingRange == \
referenceTrack.frames[i].swaths[j].startingRange - secondaryTrack.frames[i].swaths[j].startingRange:
#phaseDiff.append(phaseDiffSwath2 - phaseDiffSwath1)
#if master and slave versions are all before or after version 2.025 (starting range error < 0.5 m),
#if reference and secondary versions are all before or after version 2.025 (starting range error < 0.5 m),
#it should be OK to do the above.
#see results in neom where it meets the above requirement, but there is still phase diff
#to be less risky, we do not input values here
@ -323,7 +323,7 @@ def runIonSubband(self):
#note that frame parameters are updated after mosaicking, here no need to update parameters
#mosaic amplitudes
swathMosaic(masterTrack.frames[i], inputAmplitudes, self._insar.amplitude,
swathMosaic(referenceTrack.frames[i], inputAmplitudes, self._insar.amplitude,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, resamplingMethod=0)
#mosaic interferograms
#These are for ALOS-2, may need to change for ALOS-4!
@ -338,7 +338,7 @@ def runIonSubband(self):
phaseDiffFixed = None
snapThreshold = None
(phaseDiffEst, phaseDiffUsed, phaseDiffSource) = swathMosaic(masterTrack.frames[i], inputInterferograms, self._insar.interferogram,
(phaseDiffEst, phaseDiffUsed, phaseDiffSource) = swathMosaic(referenceTrack.frames[i], inputInterferograms, self._insar.interferogram,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, updateFrame=False,
phaseCompensation=True, phaseDiff=phaseDiff, phaseDiffFixed=phaseDiffFixed, snapThreshold=snapThreshold, pcRangeLooks=1, pcAzimuthLooks=4,
filt=False, resamplingMethod=1)
@ -357,10 +357,10 @@ def runIonSubband(self):
phaseDiffUnstableExist = True
catalog.addItem('{} subswath phase difference unstable exists'.format(ionDir['subband'][k]), phaseDiffUnstableExist, 'runIonSubband')
create_xml(self._insar.amplitude, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'amp')
create_xml(self._insar.interferogram, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'int')
create_xml(self._insar.amplitude, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'amp')
create_xml(self._insar.interferogram, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'int')
#update slave frame parameters here, here no need to update parameters
#update secondary frame parameters here, here no need to update parameters
os.chdir('../')
#save parameter file, here no need to save parameter file
os.chdir('../')
@ -380,10 +380,10 @@ def runIonSubband(self):
os.makedirs(mosaicDir, exist_ok=True)
os.chdir(mosaicDir)
numberOfFrames = len(masterTrack.frames)
numberOfFrames = len(referenceTrack.frames)
if numberOfFrames == 1:
import shutil
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.masterFrames[0]))
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.referenceFrames[0]))
# if not os.path.isfile(self._insar.interferogram):
# os.symlink(os.path.join('../', frameDir, self._insar.interferogram), self._insar.interferogram)
# #shutil.copy2() can overwrite
@ -406,34 +406,34 @@ def runIonSubband(self):
else:
#choose offsets
if self.frameOffsetMatching:
rangeOffsets = self._insar.frameRangeOffsetMatchingMaster
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingMaster
rangeOffsets = self._insar.frameRangeOffsetMatchingReference
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingReference
else:
rangeOffsets = self._insar.frameRangeOffsetGeometricalMaster
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalMaster
rangeOffsets = self._insar.frameRangeOffsetGeometricalReference
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalReference
#list of input files
inputInterferograms = []
inputAmplitudes = []
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
inputInterferograms.append(os.path.join('../', frameDir, 'mosaic', self._insar.interferogram))
inputAmplitudes.append(os.path.join('../', frameDir, 'mosaic', self._insar.amplitude))
#note that track parameters are updated after mosaicking
#mosaic amplitudes
frameMosaic(masterTrack, inputAmplitudes, self._insar.amplitude,
frameMosaic(referenceTrack, inputAmplitudes, self._insar.amplitude,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
updateTrack=False, phaseCompensation=False, resamplingMethod=0)
#mosaic interferograms
frameMosaic(masterTrack, inputInterferograms, self._insar.interferogram,
frameMosaic(referenceTrack, inputInterferograms, self._insar.interferogram,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
updateTrack=False, phaseCompensation=True, resamplingMethod=1)
create_xml(self._insar.amplitude, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'amp')
create_xml(self._insar.interferogram, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'int')
create_xml(self._insar.amplitude, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'amp')
create_xml(self._insar.interferogram, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'int')
#update slave parameters here, no need to update slave parameters here
#update secondary parameters here, no need to update secondary parameters here
os.chdir('../')
#save parameter file, no need to save parameter file here
@ -448,7 +448,7 @@ def runIonSubband(self):
for k in range(2):
os.chdir(ionDir['subband'][k])
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
#keep subswath interferograms
#shutil.rmtree(frameDir)
@ -470,7 +470,7 @@ def runIonSubband(self):
os.makedirs(insarDir, exist_ok=True)
os.chdir(insarDir)
rangePixelSize = self._insar.numberRangeLooks1 * masterTrack.rangePixelSize
rangePixelSize = self._insar.numberRangeLooks1 * referenceTrack.rangePixelSize
radarWavelength = subbandRadarWavelength[k]
rectRangeOffset = os.path.join('../../../', insarDir, self._insar.rectRangeOffset)

View File

@ -23,8 +23,8 @@ def runIonUwrap(self):
self._insar.procDoc.addAllFromCatalog(catalog)
return
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
wbdFile = os.path.abspath(self._insar.wbd)
from isceobj.Alos2Proc.runIonSubband import defineIonDir
@ -197,8 +197,8 @@ def runIonUwrap(self):
from isceobj.Alos2Proc.Alos2ProcPublic import snaphuUnwrap
for k in range(2):
tmid = masterTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*masterTrack.azimuthLineInterval+
masterTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*masterTrack.azimuthLineInterval)
tmid = referenceTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*referenceTrack.azimuthLineInterval+
referenceTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*referenceTrack.azimuthLineInterval)
if self.filterSubbandInt:
toBeUnwrapped = 'filt_'+subbandPrefix[k]+ml2+'.int'
@ -207,7 +207,7 @@ def runIonUwrap(self):
toBeUnwrapped = subbandPrefix[k]+ml2+'.int'
coherenceFile = 'diff'+ml2+'.cor'
snaphuUnwrap(masterTrack, tmid,
snaphuUnwrap(referenceTrack, tmid,
toBeUnwrapped,
coherenceFile,
subbandPrefix[k]+ml2+'.unw',

View File

@ -20,8 +20,8 @@ def runLook(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
#masterTrack = self._insar.loadTrack(master=True)
#slaveTrack = self._insar.loadTrack(master=False)
#referenceTrack = self._insar.loadTrack(reference=True)
#secondaryTrack = self._insar.loadTrack(reference=False)
wbdFile = os.path.abspath(self._insar.wbd)
insarDir = 'insar'

View File

@ -23,8 +23,8 @@ def runPrepareSlc(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
####################################################
@ -33,7 +33,7 @@ def runPrepareSlc(self):
#for ScanSAR-stripmap interferometry, we always crop slcs
#for other cases, up to users
if ((self._insar.modeCombination == 31) or (self._insar.modeCombination == 32)) or (self.cropSlc):
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
@ -42,14 +42,14 @@ def runPrepareSlc(self):
print('cropping frame {}, swath {}'.format(frameNumber, swathNumber))
masterSwath = masterTrack.frames[i].swaths[j]
slaveSwath = slaveTrack.frames[i].swaths[j]
referenceSwath = referenceTrack.frames[i].swaths[j]
secondarySwath = secondaryTrack.frames[i].swaths[j]
#crop master
cropSlc(masterTrack.orbit, masterSwath, self._insar.masterSlc, slaveTrack.orbit, slaveSwath, edge=0, useVirtualFile=self.useVirtualFile)
#crop slave, since slave may go through resampling, we set edge=9
#cropSlc(slaveTrack.orbit, slaveSwath, self._insar.slaveSlc, masterTrack.orbit, masterSwath, edge=9, useVirtualFile=self.useVirtualFile)
cropSlc(slaveTrack.orbit, slaveSwath, self._insar.slaveSlc, masterTrack.orbit, masterSwath, edge=0, useVirtualFile=self.useVirtualFile)
#crop reference
cropSlc(referenceTrack.orbit, referenceSwath, self._insar.referenceSlc, secondaryTrack.orbit, secondarySwath, edge=0, useVirtualFile=self.useVirtualFile)
#crop secondary, since secondary may go through resampling, we set edge=9
#cropSlc(secondaryTrack.orbit, secondarySwath, self._insar.secondarySlc, referenceTrack.orbit, referenceSwath, edge=9, useVirtualFile=self.useVirtualFile)
cropSlc(secondaryTrack.orbit, secondarySwath, self._insar.secondarySlc, referenceTrack.orbit, referenceSwath, edge=0, useVirtualFile=self.useVirtualFile)
os.chdir('../')
os.chdir('../')
@ -59,10 +59,10 @@ def runPrepareSlc(self):
#2. range-filter slc
####################################################
#compute filtering parameters, radarwavelength and range bandwidth should be the same across all swaths and frames
centerfreq1 = SPEED_OF_LIGHT / masterTrack.radarWavelength
bandwidth1 = masterTrack.frames[0].swaths[0].rangeBandwidth
centerfreq2 = SPEED_OF_LIGHT / slaveTrack.radarWavelength
bandwidth2 = slaveTrack.frames[0].swaths[0].rangeBandwidth
centerfreq1 = SPEED_OF_LIGHT / referenceTrack.radarWavelength
bandwidth1 = referenceTrack.frames[0].swaths[0].rangeBandwidth
centerfreq2 = SPEED_OF_LIGHT / secondaryTrack.radarWavelength
bandwidth2 = secondaryTrack.frames[0].swaths[0].rangeBandwidth
overlapfreq = overlapFrequency(centerfreq1, bandwidth1, centerfreq2, bandwidth2)
if overlapfreq == None:
@ -73,7 +73,7 @@ def runPrepareSlc(self):
raise Exception('there is not enough overlap bandwidth in range')
centerfreq = (overlapfreq[1] + overlapfreq[0]) / 2.0
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
@ -82,14 +82,14 @@ def runPrepareSlc(self):
print('range filtering frame {}, swath {}'.format(frameNumber, swathNumber))
masterSwath = masterTrack.frames[i].swaths[j]
slaveSwath = slaveTrack.frames[i].swaths[j]
referenceSwath = referenceTrack.frames[i].swaths[j]
secondarySwath = secondaryTrack.frames[i].swaths[j]
# #compute filtering parameters
# centerfreq1 = SPEED_OF_LIGHT / masterTrack.radarWavelength
# bandwidth1 = masterSwath.rangeBandwidth
# centerfreq2 = SPEED_OF_LIGHT / slaveTrack.radarWavelength
# bandwidth2 = slaveSwath.rangeBandwidth
# centerfreq1 = SPEED_OF_LIGHT / referenceTrack.radarWavelength
# bandwidth1 = referenceSwath.rangeBandwidth
# centerfreq2 = SPEED_OF_LIGHT / secondaryTrack.radarWavelength
# bandwidth2 = secondarySwath.rangeBandwidth
# overlapfreq = overlapFrequency(centerfreq1, bandwidth1, centerfreq2, bandwidth2)
# if overlapfreq == None:
@ -100,65 +100,65 @@ def runPrepareSlc(self):
# raise Exception('there is not enough overlap bandwidth in range')
# centerfreq = (overlapfreq[1] + overlapfreq[0]) / 2.0
#filter master
#filter reference
if abs(centerfreq1 - centerfreq) < 1.0 and (bandwidth1 - 1.0) < overlapbandwidth:
print('no need to range filter {}'.format(self._insar.masterSlc))
print('no need to range filter {}'.format(self._insar.referenceSlc))
else:
print('range filter {}'.format(self._insar.masterSlc))
print('range filter {}'.format(self._insar.referenceSlc))
tmpSlc = 'tmp.slc'
rg_filter(self._insar.masterSlc, 1, [tmpSlc], [overlapbandwidth / masterSwath.rangeSamplingRate],
[(centerfreq - centerfreq1) / masterSwath.rangeSamplingRate],
rg_filter(self._insar.referenceSlc, 1, [tmpSlc], [overlapbandwidth / referenceSwath.rangeSamplingRate],
[(centerfreq - centerfreq1) / referenceSwath.rangeSamplingRate],
257, 2048, 0.1, 0, 0.0)
if os.path.isfile(self._insar.masterSlc):
os.remove(self._insar.masterSlc)
os.remove(self._insar.masterSlc+'.vrt')
os.remove(self._insar.masterSlc+'.xml')
if os.path.isfile(self._insar.referenceSlc):
os.remove(self._insar.referenceSlc)
os.remove(self._insar.referenceSlc+'.vrt')
os.remove(self._insar.referenceSlc+'.xml')
img = isceobj.createSlcImage()
img.load(tmpSlc + '.xml')
#remove original
os.remove(tmpSlc + '.vrt')
os.remove(tmpSlc + '.xml')
os.rename(tmpSlc, self._insar.masterSlc)
os.rename(tmpSlc, self._insar.referenceSlc)
#creat new
img.setFilename(self._insar.masterSlc)
img.extraFilename = self._insar.masterSlc + '.vrt'
img.setFilename(self._insar.referenceSlc)
img.extraFilename = self._insar.referenceSlc + '.vrt'
img.setAccessMode('READ')
img.renderHdr()
masterTrack.radarWavelength = SPEED_OF_LIGHT/centerfreq
masterSwath.rangeBandwidth = overlapbandwidth
referenceTrack.radarWavelength = SPEED_OF_LIGHT/centerfreq
referenceSwath.rangeBandwidth = overlapbandwidth
#filter slave
#filter secondary
if abs(centerfreq2 - centerfreq) < 1.0 and (bandwidth2 - 1.0) < overlapbandwidth:
print('no need to range filter {}'.format(self._insar.slaveSlc))
print('no need to range filter {}'.format(self._insar.secondarySlc))
else:
print('range filter {}'.format(self._insar.slaveSlc))
print('range filter {}'.format(self._insar.secondarySlc))
tmpSlc = 'tmp.slc'
rg_filter(self._insar.slaveSlc, 1, [tmpSlc], [overlapbandwidth / slaveSwath.rangeSamplingRate],
[(centerfreq - centerfreq2) / slaveSwath.rangeSamplingRate],
rg_filter(self._insar.secondarySlc, 1, [tmpSlc], [overlapbandwidth / secondarySwath.rangeSamplingRate],
[(centerfreq - centerfreq2) / secondarySwath.rangeSamplingRate],
257, 2048, 0.1, 0, 0.0)
if os.path.isfile(self._insar.slaveSlc):
os.remove(self._insar.slaveSlc)
os.remove(self._insar.slaveSlc+'.vrt')
os.remove(self._insar.slaveSlc+'.xml')
if os.path.isfile(self._insar.secondarySlc):
os.remove(self._insar.secondarySlc)
os.remove(self._insar.secondarySlc+'.vrt')
os.remove(self._insar.secondarySlc+'.xml')
img = isceobj.createSlcImage()
img.load(tmpSlc + '.xml')
#remove original
os.remove(tmpSlc + '.vrt')
os.remove(tmpSlc + '.xml')
os.rename(tmpSlc, self._insar.slaveSlc)
os.rename(tmpSlc, self._insar.secondarySlc)
#creat new
img.setFilename(self._insar.slaveSlc)
img.extraFilename = self._insar.slaveSlc + '.vrt'
img.setFilename(self._insar.secondarySlc)
img.extraFilename = self._insar.secondarySlc + '.vrt'
img.setAccessMode('READ')
img.renderHdr()
slaveTrack.radarWavelength = SPEED_OF_LIGHT/centerfreq
slaveSwath.rangeBandwidth = overlapbandwidth
secondaryTrack.radarWavelength = SPEED_OF_LIGHT/centerfreq
secondarySwath.rangeBandwidth = overlapbandwidth
os.chdir('../')
os.chdir('../')
@ -167,7 +167,7 @@ def runPrepareSlc(self):
####################################################
#3. equalize sample size
####################################################
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
@ -176,59 +176,59 @@ def runPrepareSlc(self):
print('equalize sample size frame {}, swath {}'.format(frameNumber, swathNumber))
masterSwath = masterTrack.frames[i].swaths[j]
slaveSwath = slaveTrack.frames[i].swaths[j]
referenceSwath = referenceTrack.frames[i].swaths[j]
secondarySwath = secondaryTrack.frames[i].swaths[j]
if abs(masterSwath.rangeSamplingRate - slaveSwath.rangeSamplingRate) < 1.0 and abs(masterSwath.prf - slaveSwath.prf) < 1.0:
print('no need to resample {}.'.format(self._insar.slaveSlc))
if abs(referenceSwath.rangeSamplingRate - secondarySwath.rangeSamplingRate) < 1.0 and abs(referenceSwath.prf - secondarySwath.prf) < 1.0:
print('no need to resample {}.'.format(self._insar.secondarySlc))
else:
outWidth = round(slaveSwath.numberOfSamples / slaveSwath.rangeSamplingRate * masterSwath.rangeSamplingRate)
outLength = round(slaveSwath.numberOfLines / slaveSwath.prf * masterSwath.prf)
outWidth = round(secondarySwath.numberOfSamples / secondarySwath.rangeSamplingRate * referenceSwath.rangeSamplingRate)
outLength = round(secondarySwath.numberOfLines / secondarySwath.prf * referenceSwath.prf)
tmpSlc = 'tmp.slc'
resamp(self._insar.slaveSlc, tmpSlc, 'fake', 'fake', outWidth, outLength, slaveSwath.prf, slaveSwath.dopplerVsPixel,
rgcoef=[0.0, (1.0/masterSwath.rangeSamplingRate) / (1.0/slaveSwath.rangeSamplingRate) - 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
azcoef=[0.0, 0.0, (1.0/masterSwath.prf) / (1.0/slaveSwath.prf) - 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
resamp(self._insar.secondarySlc, tmpSlc, 'fake', 'fake', outWidth, outLength, secondarySwath.prf, secondarySwath.dopplerVsPixel,
rgcoef=[0.0, (1.0/referenceSwath.rangeSamplingRate) / (1.0/secondarySwath.rangeSamplingRate) - 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
azcoef=[0.0, 0.0, (1.0/referenceSwath.prf) / (1.0/secondarySwath.prf) - 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
azpos_off=0.0)
if os.path.isfile(self._insar.slaveSlc):
os.remove(self._insar.slaveSlc)
os.remove(self._insar.slaveSlc+'.vrt')
os.remove(self._insar.slaveSlc+'.xml')
if os.path.isfile(self._insar.secondarySlc):
os.remove(self._insar.secondarySlc)
os.remove(self._insar.secondarySlc+'.vrt')
os.remove(self._insar.secondarySlc+'.xml')
img = isceobj.createSlcImage()
img.load(tmpSlc + '.xml')
#remove original
os.remove(tmpSlc + '.vrt')
os.remove(tmpSlc + '.xml')
os.rename(tmpSlc, self._insar.slaveSlc)
os.rename(tmpSlc, self._insar.secondarySlc)
#creat new
img.setFilename(self._insar.slaveSlc)
img.extraFilename = self._insar.slaveSlc + '.vrt'
img.setFilename(self._insar.secondarySlc)
img.extraFilename = self._insar.secondarySlc + '.vrt'
img.setAccessMode('READ')
img.renderHdr()
#update parameters
#update doppler and azfmrate first
index2 = np.arange(outWidth)
index = np.arange(outWidth) * (1.0/masterSwath.rangeSamplingRate) / (1.0/slaveSwath.rangeSamplingRate)
dop = np.polyval(slaveSwath.dopplerVsPixel[::-1], index)
index = np.arange(outWidth) * (1.0/referenceSwath.rangeSamplingRate) / (1.0/secondarySwath.rangeSamplingRate)
dop = np.polyval(secondarySwath.dopplerVsPixel[::-1], index)
p = np.polyfit(index2, dop, 3)
slaveSwath.dopplerVsPixel = [p[3], p[2], p[1], p[0]]
secondarySwath.dopplerVsPixel = [p[3], p[2], p[1], p[0]]
azfmrate = np.polyval(slaveSwath.azimuthFmrateVsPixel[::-1], index)
azfmrate = np.polyval(secondarySwath.azimuthFmrateVsPixel[::-1], index)
p = np.polyfit(index2, azfmrate, 3)
slaveSwath.azimuthFmrateVsPixel = [p[3], p[2], p[1], p[0]]
secondarySwath.azimuthFmrateVsPixel = [p[3], p[2], p[1], p[0]]
slaveSwath.numberOfSamples = outWidth
slaveSwath.numberOfLines = outLength
secondarySwath.numberOfSamples = outWidth
secondarySwath.numberOfLines = outLength
slaveSwath.prf = masterSwath.prf
slaveSwath.rangeSamplingRate = masterSwath.rangeSamplingRate
slaveSwath.rangePixelSize = masterSwath.rangePixelSize
slaveSwath.azimuthPixelSize = masterSwath.azimuthPixelSize
slaveSwath.azimuthLineInterval = masterSwath.azimuthLineInterval
slaveSwath.prfFraction = masterSwath.prfFraction
secondarySwath.prf = referenceSwath.prf
secondarySwath.rangeSamplingRate = referenceSwath.rangeSamplingRate
secondarySwath.rangePixelSize = referenceSwath.rangePixelSize
secondarySwath.azimuthPixelSize = referenceSwath.azimuthPixelSize
secondarySwath.azimuthLineInterval = referenceSwath.azimuthLineInterval
secondarySwath.prfFraction = referenceSwath.prfFraction
os.chdir('../')
os.chdir('../')
@ -237,7 +237,7 @@ def runPrepareSlc(self):
####################################################
#4. mbf
####################################################
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
@ -246,85 +246,85 @@ def runPrepareSlc(self):
print('azimuth filter frame {}, swath {}'.format(frameNumber, swathNumber))
masterSwath = masterTrack.frames[i].swaths[j]
slaveSwath = slaveTrack.frames[i].swaths[j]
referenceSwath = referenceTrack.frames[i].swaths[j]
secondarySwath = secondaryTrack.frames[i].swaths[j]
#using Piyush's code for computing range and azimuth offsets
midRange = masterSwath.startingRange + masterSwath.rangePixelSize * masterSwath.numberOfSamples * 0.5
midSensingStart = masterSwath.sensingStart + datetime.timedelta(seconds = masterSwath.numberOfLines * 0.5 / masterSwath.prf)
llh = masterTrack.orbit.rdr2geo(midSensingStart, midRange)
slvaz, slvrng = slaveTrack.orbit.geo2rdr(llh)
midRange = referenceSwath.startingRange + referenceSwath.rangePixelSize * referenceSwath.numberOfSamples * 0.5
midSensingStart = referenceSwath.sensingStart + datetime.timedelta(seconds = referenceSwath.numberOfLines * 0.5 / referenceSwath.prf)
llh = referenceTrack.orbit.rdr2geo(midSensingStart, midRange)
slvaz, slvrng = secondaryTrack.orbit.geo2rdr(llh)
###Translate to offsets
#at this point, slave range pixel size and prf should be the same as those of master
rgoff = ((slvrng - slaveSwath.startingRange) / masterSwath.rangePixelSize) - masterSwath.numberOfSamples * 0.5
azoff = ((slvaz - slaveSwath.sensingStart).total_seconds() * masterSwath.prf) - masterSwath.numberOfLines * 0.5
#at this point, secondary range pixel size and prf should be the same as those of reference
rgoff = ((slvrng - secondarySwath.startingRange) / referenceSwath.rangePixelSize) - referenceSwath.numberOfSamples * 0.5
azoff = ((slvaz - secondarySwath.sensingStart).total_seconds() * referenceSwath.prf) - referenceSwath.numberOfLines * 0.5
#filter master
#filter reference
if not ((self._insar.modeCombination == 21) and (self._insar.burstSynchronization <= self.burstSynchronizationThreshold)):
print('no need to azimuth filter {}.'.format(self._insar.masterSlc))
print('no need to azimuth filter {}.'.format(self._insar.referenceSlc))
else:
index = np.arange(masterSwath.numberOfSamples) + rgoff
dop = np.polyval(slaveSwath.dopplerVsPixel[::-1], index)
index = np.arange(referenceSwath.numberOfSamples) + rgoff
dop = np.polyval(secondarySwath.dopplerVsPixel[::-1], index)
p = np.polyfit(index-rgoff, dop, 3)
dopplerVsPixelSlave = [p[3], p[2], p[1], p[0]]
dopplerVsPixelSecondary = [p[3], p[2], p[1], p[0]]
tmpSlc = 'tmp.slc'
mbf(self._insar.masterSlc, tmpSlc, masterSwath.prf, 1.0,
masterSwath.burstLength, masterSwath.burstCycleLength-masterSwath.burstLength,
self._insar.burstUnsynchronizedTime * masterSwath.prf,
(masterSwath.burstStartTime - masterSwath.sensingStart).total_seconds() * masterSwath.prf,
masterSwath.azimuthFmrateVsPixel, masterSwath.dopplerVsPixel, dopplerVsPixelSlave)
mbf(self._insar.referenceSlc, tmpSlc, referenceSwath.prf, 1.0,
referenceSwath.burstLength, referenceSwath.burstCycleLength-referenceSwath.burstLength,
self._insar.burstUnsynchronizedTime * referenceSwath.prf,
(referenceSwath.burstStartTime - referenceSwath.sensingStart).total_seconds() * referenceSwath.prf,
referenceSwath.azimuthFmrateVsPixel, referenceSwath.dopplerVsPixel, dopplerVsPixelSecondary)
if os.path.isfile(self._insar.masterSlc):
os.remove(self._insar.masterSlc)
os.remove(self._insar.masterSlc+'.vrt')
os.remove(self._insar.masterSlc+'.xml')
if os.path.isfile(self._insar.referenceSlc):
os.remove(self._insar.referenceSlc)
os.remove(self._insar.referenceSlc+'.vrt')
os.remove(self._insar.referenceSlc+'.xml')
img = isceobj.createSlcImage()
img.load(tmpSlc + '.xml')
#remove original
os.remove(tmpSlc + '.vrt')
os.remove(tmpSlc + '.xml')
os.rename(tmpSlc, self._insar.masterSlc)
os.rename(tmpSlc, self._insar.referenceSlc)
#creat new
img.setFilename(self._insar.masterSlc)
img.extraFilename = self._insar.masterSlc + '.vrt'
img.setFilename(self._insar.referenceSlc)
img.extraFilename = self._insar.referenceSlc + '.vrt'
img.setAccessMode('READ')
img.renderHdr()
#filter slave
#filter secondary
if not(
((self._insar.modeCombination == 21) and (self._insar.burstSynchronization <= self.burstSynchronizationThreshold)) or \
(self._insar.modeCombination == 31)
):
print('no need to azimuth filter {}.'.format(self._insar.slaveSlc))
print('no need to azimuth filter {}.'.format(self._insar.secondarySlc))
else:
index = np.arange(slaveSwath.numberOfSamples) - rgoff
dop = np.polyval(masterSwath.dopplerVsPixel[::-1], index)
index = np.arange(secondarySwath.numberOfSamples) - rgoff
dop = np.polyval(referenceSwath.dopplerVsPixel[::-1], index)
p = np.polyfit(index+rgoff, dop, 3)
dopplerVsPixelMaster = [p[3], p[2], p[1], p[0]]
dopplerVsPixelReference = [p[3], p[2], p[1], p[0]]
tmpSlc = 'tmp.slc'
mbf(self._insar.slaveSlc, tmpSlc, slaveSwath.prf, 1.0,
slaveSwath.burstLength, slaveSwath.burstCycleLength-slaveSwath.burstLength,
-self._insar.burstUnsynchronizedTime * slaveSwath.prf,
(slaveSwath.burstStartTime - slaveSwath.sensingStart).total_seconds() * slaveSwath.prf,
slaveSwath.azimuthFmrateVsPixel, slaveSwath.dopplerVsPixel, dopplerVsPixelMaster)
mbf(self._insar.secondarySlc, tmpSlc, secondarySwath.prf, 1.0,
secondarySwath.burstLength, secondarySwath.burstCycleLength-secondarySwath.burstLength,
-self._insar.burstUnsynchronizedTime * secondarySwath.prf,
(secondarySwath.burstStartTime - secondarySwath.sensingStart).total_seconds() * secondarySwath.prf,
secondarySwath.azimuthFmrateVsPixel, secondarySwath.dopplerVsPixel, dopplerVsPixelReference)
if os.path.isfile(self._insar.slaveSlc):
os.remove(self._insar.slaveSlc)
os.remove(self._insar.slaveSlc+'.vrt')
os.remove(self._insar.slaveSlc+'.xml')
if os.path.isfile(self._insar.secondarySlc):
os.remove(self._insar.secondarySlc)
os.remove(self._insar.secondarySlc+'.vrt')
os.remove(self._insar.secondarySlc+'.xml')
img = isceobj.createSlcImage()
img.load(tmpSlc + '.xml')
#remove original
os.remove(tmpSlc + '.vrt')
os.remove(tmpSlc + '.xml')
os.rename(tmpSlc, self._insar.slaveSlc)
os.rename(tmpSlc, self._insar.secondarySlc)
#creat new
img.setFilename(self._insar.slaveSlc)
img.extraFilename = self._insar.slaveSlc + '.vrt'
img.setFilename(self._insar.secondarySlc)
img.extraFilename = self._insar.secondarySlc + '.vrt'
img.setAccessMode('READ')
img.renderHdr()
@ -332,8 +332,8 @@ def runPrepareSlc(self):
os.chdir('../')
#in case parameters changed
self._insar.saveTrack(masterTrack, master=True)
self._insar.saveTrack(slaveTrack, master=False)
self._insar.saveTrack(referenceTrack, reference=True)
self._insar.saveTrack(secondaryTrack, reference=False)
catalog.printToLog(logger, "runPrepareSlc")
self._insar.procDoc.addAllFromCatalog(catalog)

View File

@ -27,24 +27,24 @@ def runPreprocessor(self):
#find files
#actually no need to use absolute path any longer, since we are able to find file from vrt now. 27-JAN-2020, CRL.
#denseoffset may still need absolute path when making links
self.masterDir = os.path.abspath(self.masterDir)
self.slaveDir = os.path.abspath(self.slaveDir)
self.referenceDir = os.path.abspath(self.referenceDir)
self.secondaryDir = os.path.abspath(self.secondaryDir)
ledFilesMaster = sorted(glob.glob(os.path.join(self.masterDir, 'LED-ALOS2*-*-*')))
imgFilesMaster = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*-*-*'.format(self.masterPolarization.upper()))))
ledFilesReference = sorted(glob.glob(os.path.join(self.referenceDir, 'LED-ALOS2*-*-*')))
imgFilesReference = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*-*-*'.format(self.referencePolarization.upper()))))
ledFilesSlave = sorted(glob.glob(os.path.join(self.slaveDir, 'LED-ALOS2*-*-*')))
imgFilesSlave = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*-*-*'.format(self.slavePolarization.upper()))))
ledFilesSecondary = sorted(glob.glob(os.path.join(self.secondaryDir, 'LED-ALOS2*-*-*')))
imgFilesSecondary = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*-*-*'.format(self.secondaryPolarization.upper()))))
firstFrameMaster = ledFilesMaster[0].split('-')[-3][-4:]
firstFrameSlave = ledFilesSlave[0].split('-')[-3][-4:]
firstFrameImagesMaster = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.masterPolarization.upper(), firstFrameMaster))))
firstFrameImagesSlave = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.slavePolarization.upper(), firstFrameSlave))))
firstFrameReference = ledFilesReference[0].split('-')[-3][-4:]
firstFrameSecondary = ledFilesSecondary[0].split('-')[-3][-4:]
firstFrameImagesReference = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.referencePolarization.upper(), firstFrameReference))))
firstFrameImagesSecondary = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.secondaryPolarization.upper(), firstFrameSecondary))))
#determin operation mode
masterMode = os.path.basename(ledFilesMaster[0]).split('-')[-1][0:3]
slaveMode = os.path.basename(ledFilesSlave[0]).split('-')[-1][0:3]
referenceMode = os.path.basename(ledFilesReference[0]).split('-')[-1][0:3]
secondaryMode = os.path.basename(ledFilesSecondary[0]).split('-')[-1][0:3]
spotlightModes = ['SBS']
stripmapModes = ['UBS', 'UBD', 'HBS', 'HBD', 'HBQ', 'FBS', 'FBD', 'FBQ']
scansarNominalModes = ['WBS', 'WBD', 'WWS', 'WWD']
@ -52,21 +52,21 @@ def runPreprocessor(self):
scansarModes = ['WBS', 'WBD', 'WWS', 'WWD', 'VBS', 'VBD']
#usable combinations
if (masterMode in spotlightModes) and (slaveMode in spotlightModes):
if (referenceMode in spotlightModes) and (secondaryMode in spotlightModes):
self._insar.modeCombination = 0
elif (masterMode in stripmapModes) and (slaveMode in stripmapModes):
elif (referenceMode in stripmapModes) and (secondaryMode in stripmapModes):
self._insar.modeCombination = 1
elif (masterMode in scansarNominalModes) and (slaveMode in scansarNominalModes):
elif (referenceMode in scansarNominalModes) and (secondaryMode in scansarNominalModes):
self._insar.modeCombination = 21
elif (masterMode in scansarWideModes) and (slaveMode in scansarWideModes):
elif (referenceMode in scansarWideModes) and (secondaryMode in scansarWideModes):
self._insar.modeCombination = 22
elif (masterMode in scansarNominalModes) and (slaveMode in stripmapModes):
elif (referenceMode in scansarNominalModes) and (secondaryMode in stripmapModes):
self._insar.modeCombination = 31
elif (masterMode in scansarWideModes) and (slaveMode in stripmapModes):
elif (referenceMode in scansarWideModes) and (secondaryMode in stripmapModes):
self._insar.modeCombination = 32
else:
print('\n\nthis mode combination is not possible')
print('note that for ScanSAR-stripmap, ScanSAR must be master\n\n')
print('note that for ScanSAR-stripmap, ScanSAR must be reference\n\n')
raise Exception('mode combination not supported')
# pixel size from real data processing. azimuth pixel size may change a bit as
@ -111,112 +111,112 @@ def runPreprocessor(self):
self._insar.numberAzimuthLooksIon = self.numberAzimuthLooksIon
if self._insar.numberRangeLooks1 == None:
if masterMode in ['SBS']:
if referenceMode in ['SBS']:
self._insar.numberRangeLooks1 = 2
elif masterMode in ['UBS', 'UBD']:
elif referenceMode in ['UBS', 'UBD']:
self._insar.numberRangeLooks1 = 2
elif masterMode in ['HBS', 'HBD', 'HBQ']:
elif referenceMode in ['HBS', 'HBD', 'HBQ']:
self._insar.numberRangeLooks1 = 2
elif masterMode in ['FBS', 'FBD', 'FBQ']:
elif referenceMode in ['FBS', 'FBD', 'FBQ']:
self._insar.numberRangeLooks1 = 2
elif masterMode in ['WBS', 'WBD']:
elif referenceMode in ['WBS', 'WBD']:
self._insar.numberRangeLooks1 = 1
elif masterMode in ['WWS', 'WWD']:
elif referenceMode in ['WWS', 'WWD']:
self._insar.numberRangeLooks1 = 2
elif masterMode in ['VBS', 'VBD']:
elif referenceMode in ['VBS', 'VBD']:
self._insar.numberRangeLooks1 = 1
else:
raise Exception('unknow acquisition mode')
if self._insar.numberAzimuthLooks1 == None:
if masterMode in ['SBS']:
if referenceMode in ['SBS']:
self._insar.numberAzimuthLooks1 = 4
elif masterMode in ['UBS', 'UBD']:
elif referenceMode in ['UBS', 'UBD']:
self._insar.numberAzimuthLooks1 = 2
elif masterMode in ['HBS', 'HBD', 'HBQ']:
elif referenceMode in ['HBS', 'HBD', 'HBQ']:
self._insar.numberAzimuthLooks1 = 2
elif masterMode in ['FBS', 'FBD', 'FBQ']:
elif referenceMode in ['FBS', 'FBD', 'FBQ']:
self._insar.numberAzimuthLooks1 = 4
elif masterMode in ['WBS', 'WBD']:
elif referenceMode in ['WBS', 'WBD']:
self._insar.numberAzimuthLooks1 = 14
elif masterMode in ['WWS', 'WWD']:
elif referenceMode in ['WWS', 'WWD']:
self._insar.numberAzimuthLooks1 = 14
elif masterMode in ['VBS', 'VBD']:
elif referenceMode in ['VBS', 'VBD']:
self._insar.numberAzimuthLooks1 = 14
else:
raise Exception('unknow acquisition mode')
if self._insar.numberRangeLooks2 == None:
if masterMode in spotlightModes:
if referenceMode in spotlightModes:
self._insar.numberRangeLooks2 = 4
elif masterMode in stripmapModes:
elif referenceMode in stripmapModes:
self._insar.numberRangeLooks2 = 4
elif masterMode in scansarModes:
elif referenceMode in scansarModes:
self._insar.numberRangeLooks2 = 5
else:
raise Exception('unknow acquisition mode')
if self._insar.numberAzimuthLooks2 == None:
if masterMode in spotlightModes:
if referenceMode in spotlightModes:
self._insar.numberAzimuthLooks2 = 4
elif masterMode in stripmapModes:
elif referenceMode in stripmapModes:
self._insar.numberAzimuthLooks2 = 4
elif masterMode in scansarModes:
elif referenceMode in scansarModes:
self._insar.numberAzimuthLooks2 = 2
else:
raise Exception('unknow acquisition mode')
if self._insar.numberRangeLooksIon == None:
if masterMode in spotlightModes:
if referenceMode in spotlightModes:
self._insar.numberRangeLooksIon = 16
elif masterMode in stripmapModes:
elif referenceMode in stripmapModes:
self._insar.numberRangeLooksIon = 16
elif masterMode in scansarModes:
elif referenceMode in scansarModes:
self._insar.numberRangeLooksIon = 40
else:
raise Exception('unknow acquisition mode')
if self._insar.numberAzimuthLooksIon == None:
if masterMode in spotlightModes:
if referenceMode in spotlightModes:
self._insar.numberAzimuthLooksIon = 16
elif masterMode in stripmapModes:
elif referenceMode in stripmapModes:
self._insar.numberAzimuthLooksIon = 16
elif masterMode in scansarModes:
elif referenceMode in scansarModes:
self._insar.numberAzimuthLooksIon = 16
else:
raise Exception('unknow acquisition mode')
#define processing file names
self._insar.masterDate = os.path.basename(ledFilesMaster[0]).split('-')[2]
self._insar.slaveDate = os.path.basename(ledFilesSlave[0]).split('-')[2]
self._insar.setFilename(masterDate=self._insar.masterDate, slaveDate=self._insar.slaveDate, nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1, nrlks2=self._insar.numberRangeLooks2, nalks2=self._insar.numberAzimuthLooks2)
self._insar.referenceDate = os.path.basename(ledFilesReference[0]).split('-')[2]
self._insar.secondaryDate = os.path.basename(ledFilesSecondary[0]).split('-')[2]
self._insar.setFilename(referenceDate=self._insar.referenceDate, secondaryDate=self._insar.secondaryDate, nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1, nrlks2=self._insar.numberRangeLooks2, nalks2=self._insar.numberAzimuthLooks2)
#find frame numbers
if (self._insar.modeCombination == 31) or (self._insar.modeCombination == 32):
if (self.masterFrames == None) or (self.slaveFrames == None):
raise Exception('for ScanSAR-stripmap inteferometry, you must set master and slave frame numbers')
if (self.referenceFrames == None) or (self.secondaryFrames == None):
raise Exception('for ScanSAR-stripmap inteferometry, you must set reference and secondary frame numbers')
#if not set, find frames automatically
if self.masterFrames == None:
self.masterFrames = []
for led in ledFilesMaster:
if self.referenceFrames == None:
self.referenceFrames = []
for led in ledFilesReference:
frameNumber = os.path.basename(led).split('-')[1][-4:]
if frameNumber not in self.masterFrames:
self.masterFrames.append(frameNumber)
if self.slaveFrames == None:
self.slaveFrames = []
for led in ledFilesSlave:
if frameNumber not in self.referenceFrames:
self.referenceFrames.append(frameNumber)
if self.secondaryFrames == None:
self.secondaryFrames = []
for led in ledFilesSecondary:
frameNumber = os.path.basename(led).split('-')[1][-4:]
if frameNumber not in self.slaveFrames:
self.slaveFrames.append(frameNumber)
if frameNumber not in self.secondaryFrames:
self.secondaryFrames.append(frameNumber)
#sort frames
self.masterFrames = sorted(self.masterFrames)
self.slaveFrames = sorted(self.slaveFrames)
self.referenceFrames = sorted(self.referenceFrames)
self.secondaryFrames = sorted(self.secondaryFrames)
#check number of frames
if len(self.masterFrames) != len(self.slaveFrames):
raise Exception('number of frames in master dir is not equal to number of frames \
in slave dir. please set frame number manually')
if len(self.referenceFrames) != len(self.secondaryFrames):
raise Exception('number of frames in reference dir is not equal to number of frames \
in secondary dir. please set frame number manually')
#find swath numbers (if not ScanSAR-ScanSAR, compute valid swaths)
@ -245,7 +245,7 @@ def runPreprocessor(self):
numberOfSwaths = 7
overlapSubswaths = []
for i in range(numberOfSwaths):
overlapRatio = check_overlap(ledFilesMaster[0], firstFrameImagesMaster[i], ledFilesSlave[0], firstFrameImagesSlave[0])
overlapRatio = check_overlap(ledFilesReference[0], firstFrameImagesReference[i], ledFilesSecondary[0], firstFrameImagesSecondary[0])
if overlapRatio > 1.0 / 4.0:
overlapSubswaths.append(i+1)
if overlapSubswaths == []:
@ -254,8 +254,8 @@ def runPreprocessor(self):
self.endingSwath = int(overlapSubswaths[-1])
#save the valid frames and swaths for future processing
self._insar.masterFrames = self.masterFrames
self._insar.slaveFrames = self.slaveFrames
self._insar.referenceFrames = self.referenceFrames
self._insar.secondaryFrames = self.secondaryFrames
self._insar.startingSwath = self.startingSwath
self._insar.endingSwath = self.endingSwath
@ -263,76 +263,76 @@ def runPreprocessor(self):
##################################################
#1. create directories and read data
##################################################
self.master.configure()
self.slave.configure()
self.master.track.configure()
self.slave.track.configure()
for i, (masterFrame, slaveFrame) in enumerate(zip(self._insar.masterFrames, self._insar.slaveFrames)):
self.reference.configure()
self.secondary.configure()
self.reference.track.configure()
self.secondary.track.configure()
for i, (referenceFrame, secondaryFrame) in enumerate(zip(self._insar.referenceFrames, self._insar.secondaryFrames)):
#frame number starts with 1
frameDir = 'f{}_{}'.format(i+1, masterFrame)
frameDir = 'f{}_{}'.format(i+1, referenceFrame)
os.makedirs(frameDir, exist_ok=True)
os.chdir(frameDir)
#attach a frame to master and slave
frameObjMaster = MultiMode.createFrame()
frameObjSlave = MultiMode.createFrame()
frameObjMaster.configure()
frameObjSlave.configure()
self.master.track.frames.append(frameObjMaster)
self.slave.track.frames.append(frameObjSlave)
#attach a frame to reference and secondary
frameObjReference = MultiMode.createFrame()
frameObjSecondary = MultiMode.createFrame()
frameObjReference.configure()
frameObjSecondary.configure()
self.reference.track.frames.append(frameObjReference)
self.secondary.track.frames.append(frameObjSecondary)
#swath number starts with 1
for j in range(self._insar.startingSwath, self._insar.endingSwath+1):
print('processing frame {} swath {}'.format(masterFrame, j))
print('processing frame {} swath {}'.format(referenceFrame, j))
swathDir = 's{}'.format(j)
os.makedirs(swathDir, exist_ok=True)
os.chdir(swathDir)
#attach a swath to master and slave
swathObjMaster = MultiMode.createSwath()
swathObjSlave = MultiMode.createSwath()
swathObjMaster.configure()
swathObjSlave.configure()
self.master.track.frames[-1].swaths.append(swathObjMaster)
self.slave.track.frames[-1].swaths.append(swathObjSlave)
#attach a swath to reference and secondary
swathObjReference = MultiMode.createSwath()
swathObjSecondary = MultiMode.createSwath()
swathObjReference.configure()
swathObjSecondary.configure()
self.reference.track.frames[-1].swaths.append(swathObjReference)
self.secondary.track.frames[-1].swaths.append(swathObjSecondary)
#setup master
self.master.leaderFile = sorted(glob.glob(os.path.join(self.masterDir, 'LED-ALOS2*{}-*-*'.format(masterFrame))))[0]
if masterMode in scansarModes:
self.master.imageFile = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.masterPolarization.upper(), masterFrame, j))))[0]
#setup reference
self.reference.leaderFile = sorted(glob.glob(os.path.join(self.referenceDir, 'LED-ALOS2*{}-*-*'.format(referenceFrame))))[0]
if referenceMode in scansarModes:
self.reference.imageFile = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.referencePolarization.upper(), referenceFrame, j))))[0]
else:
self.master.imageFile = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.masterPolarization.upper(), masterFrame))))[0]
self.master.outputFile = self._insar.masterSlc
self.master.useVirtualFile = self.useVirtualFile
#read master
(imageFDR, imageData)=self.master.readImage()
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.master.readLeader()
self.master.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.master.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.master.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.reference.imageFile = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.referencePolarization.upper(), referenceFrame))))[0]
self.reference.outputFile = self._insar.referenceSlc
self.reference.useVirtualFile = self.useVirtualFile
#read reference
(imageFDR, imageData)=self.reference.readImage()
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.reference.readLeader()
self.reference.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.reference.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.reference.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
#setup slave
self.slave.leaderFile = sorted(glob.glob(os.path.join(self.slaveDir, 'LED-ALOS2*{}-*-*'.format(slaveFrame))))[0]
if slaveMode in scansarModes:
self.slave.imageFile = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.slavePolarization.upper(), slaveFrame, j))))[0]
#setup secondary
self.secondary.leaderFile = sorted(glob.glob(os.path.join(self.secondaryDir, 'LED-ALOS2*{}-*-*'.format(secondaryFrame))))[0]
if secondaryMode in scansarModes:
self.secondary.imageFile = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.secondaryPolarization.upper(), secondaryFrame, j))))[0]
else:
self.slave.imageFile = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.slavePolarization.upper(), slaveFrame))))[0]
self.slave.outputFile = self._insar.slaveSlc
self.slave.useVirtualFile = self.useVirtualFile
#read slave
(imageFDR, imageData)=self.slave.readImage()
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.slave.readLeader()
self.slave.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.slave.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.slave.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.secondary.imageFile = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.secondaryPolarization.upper(), secondaryFrame))))[0]
self.secondary.outputFile = self._insar.secondarySlc
self.secondary.useVirtualFile = self.useVirtualFile
#read secondary
(imageFDR, imageData)=self.secondary.readImage()
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.secondary.readLeader()
self.secondary.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.secondary.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.secondary.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
os.chdir('../')
self._insar.saveProduct(self.master.track.frames[-1], self._insar.masterFrameParameter)
self._insar.saveProduct(self.slave.track.frames[-1], self._insar.slaveFrameParameter)
self._insar.saveProduct(self.reference.track.frames[-1], self._insar.referenceFrameParameter)
self._insar.saveProduct(self.secondary.track.frames[-1], self._insar.secondaryFrameParameter)
os.chdir('../')
self._insar.saveProduct(self.master.track, self._insar.masterTrackParameter)
self._insar.saveProduct(self.slave.track, self._insar.slaveTrackParameter)
self._insar.saveProduct(self.reference.track, self._insar.referenceTrackParameter)
self._insar.saveProduct(self.secondary.track, self._insar.secondaryTrackParameter)
##################################################
@ -345,53 +345,53 @@ def runPreprocessor(self):
#synTime = 0
synPercentage = 0
numberOfFrames = len(self._insar.masterFrames)
numberOfFrames = len(self._insar.referenceFrames)
numberOfSwaths = self._insar.endingSwath - self._insar.startingSwath + 1
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
masterSwath = self.master.track.frames[i].swaths[j]
slaveSwath = self.slave.track.frames[i].swaths[j]
referenceSwath = self.reference.track.frames[i].swaths[j]
secondarySwath = self.secondary.track.frames[i].swaths[j]
#using Piyush's code for computing range and azimuth offsets
midRange = masterSwath.startingRange + masterSwath.rangePixelSize * masterSwath.numberOfSamples * 0.5
midSensingStart = masterSwath.sensingStart + datetime.timedelta(seconds = masterSwath.numberOfLines * 0.5 / masterSwath.prf)
llh = self.master.track.orbit.rdr2geo(midSensingStart, midRange)
slvaz, slvrng = self.slave.track.orbit.geo2rdr(llh)
midRange = referenceSwath.startingRange + referenceSwath.rangePixelSize * referenceSwath.numberOfSamples * 0.5
midSensingStart = referenceSwath.sensingStart + datetime.timedelta(seconds = referenceSwath.numberOfLines * 0.5 / referenceSwath.prf)
llh = self.reference.track.orbit.rdr2geo(midSensingStart, midRange)
slvaz, slvrng = self.secondary.track.orbit.geo2rdr(llh)
###Translate to offsets
#note that slave range pixel size and prf might be different from master, here we assume there is a virtual slave with same
#note that secondary range pixel size and prf might be different from reference, here we assume there is a virtual secondary with same
#range pixel size and prf
rgoff = ((slvrng - slaveSwath.startingRange) / masterSwath.rangePixelSize) - masterSwath.numberOfSamples * 0.5
azoff = ((slvaz - slaveSwath.sensingStart).total_seconds() * masterSwath.prf) - masterSwath.numberOfLines * 0.5
rgoff = ((slvrng - secondarySwath.startingRange) / referenceSwath.rangePixelSize) - referenceSwath.numberOfSamples * 0.5
azoff = ((slvaz - secondarySwath.sensingStart).total_seconds() * referenceSwath.prf) - referenceSwath.numberOfLines * 0.5
#compute burst synchronization
#burst parameters for ScanSAR wide mode not estimed yet
if self._insar.modeCombination == 21:
scburstStartLine = (masterSwath.burstStartTime - masterSwath.sensingStart).total_seconds() * masterSwath.prf + azoff
#slave burst start times corresponding to master burst start times (100% synchronization)
scburstStartLines = np.arange(scburstStartLine - 100000*masterSwath.burstCycleLength, \
scburstStartLine + 100000*masterSwath.burstCycleLength, \
masterSwath.burstCycleLength)
dscburstStartLines = -((slaveSwath.burstStartTime - slaveSwath.sensingStart).total_seconds() * slaveSwath.prf - scburstStartLines)
scburstStartLine = (referenceSwath.burstStartTime - referenceSwath.sensingStart).total_seconds() * referenceSwath.prf + azoff
#secondary burst start times corresponding to reference burst start times (100% synchronization)
scburstStartLines = np.arange(scburstStartLine - 100000*referenceSwath.burstCycleLength, \
scburstStartLine + 100000*referenceSwath.burstCycleLength, \
referenceSwath.burstCycleLength)
dscburstStartLines = -((secondarySwath.burstStartTime - secondarySwath.sensingStart).total_seconds() * secondarySwath.prf - scburstStartLines)
#find the difference with minimum absolute value
unsynLines = dscburstStartLines[np.argmin(np.absolute(dscburstStartLines))]
if np.absolute(unsynLines) >= slaveSwath.burstLength:
if np.absolute(unsynLines) >= secondarySwath.burstLength:
synLines = 0
if unsynLines > 0:
unsynLines = slaveSwath.burstLength
unsynLines = secondarySwath.burstLength
else:
unsynLines = -slaveSwath.burstLength
unsynLines = -secondarySwath.burstLength
else:
synLines = slaveSwath.burstLength - np.absolute(unsynLines)
synLines = secondarySwath.burstLength - np.absolute(unsynLines)
unsynTime += unsynLines / masterSwath.prf
synPercentage += synLines / masterSwath.burstLength * 100.0
unsynTime += unsynLines / referenceSwath.prf
synPercentage += synLines / referenceSwath.burstLength * 100.0
catalog.addItem('burst synchronization of frame {} swath {}'.format(frameNumber, swathNumber), '%.1f%%'%(synLines / masterSwath.burstLength * 100.0), 'runPreprocessor')
catalog.addItem('burst synchronization of frame {} swath {}'.format(frameNumber, swathNumber), '%.1f%%'%(synLines / referenceSwath.burstLength * 100.0), 'runPreprocessor')
############################################################################################
#illustration of the sign of the number of unsynchronized lines (unsynLines)
#The convention is the same as ampcor offset, that is,
# slaveLineNumber = masterLineNumber + unsynLines
# secondaryLineNumber = referenceLineNumber + unsynLines
#
# |-----------------------| ------------
# | | ^
@ -403,35 +403,35 @@ def runPreprocessor(self):
# | | | |
# | | | |
# |-----------------------| | |
# Master Burst | |
# Reference Burst | |
# | |
# | |
# | |
# | |
# |-----------------------|
# Slave Burst
# Secondary Burst
#
#
############################################################################################
##burst parameters for ScanSAR wide mode not estimed yet
elif self._insar.modeCombination == 31:
#scansar is master
scburstStartLine = (masterSwath.burstStartTime - masterSwath.sensingStart).total_seconds() * masterSwath.prf + azoff
#slave burst start times corresponding to master burst start times (100% synchronization)
#scansar is reference
scburstStartLine = (referenceSwath.burstStartTime - referenceSwath.sensingStart).total_seconds() * referenceSwath.prf + azoff
#secondary burst start times corresponding to reference burst start times (100% synchronization)
for k in range(-100000, 100000):
saz_burstx = scburstStartLine + masterSwath.burstCycleLength * k
st_burstx = slaveSwath.sensingStart + datetime.timedelta(seconds=saz_burstx / masterSwath.prf)
if saz_burstx >= 0.0 and saz_burstx <= slaveSwath.numberOfLines -1:
slaveSwath.burstStartTime = st_burstx
slaveSwath.burstLength = masterSwath.burstLength
slaveSwath.burstCycleLength = masterSwath.burstCycleLength
slaveSwath.swathNumber = masterSwath.swathNumber
saz_burstx = scburstStartLine + referenceSwath.burstCycleLength * k
st_burstx = secondarySwath.sensingStart + datetime.timedelta(seconds=saz_burstx / referenceSwath.prf)
if saz_burstx >= 0.0 and saz_burstx <= secondarySwath.numberOfLines -1:
secondarySwath.burstStartTime = st_burstx
secondarySwath.burstLength = referenceSwath.burstLength
secondarySwath.burstCycleLength = referenceSwath.burstCycleLength
secondarySwath.swathNumber = referenceSwath.swathNumber
break
#unsynLines = 0
#synLines = masterSwath.burstLength
#unsynTime += unsynLines / masterSwath.prf
#synPercentage += synLines / masterSwath.burstLength * 100.0
#synLines = referenceSwath.burstLength
#unsynTime += unsynLines / referenceSwath.prf
#synPercentage += synLines / referenceSwath.burstLength * 100.0
catalog.addItem('burst synchronization of frame {} swath {}'.format(frameNumber, swathNumber), '%.1f%%'%(100.0), 'runPreprocessor')
else:
pass
@ -439,7 +439,7 @@ def runPreprocessor(self):
#overwrite original frame parameter file
if self._insar.modeCombination == 31:
frameDir = 'f{}_{}'.format(i+1, frameNumber)
self._insar.saveProduct(self.slave.track.frames[i], os.path.join(frameDir, self._insar.slaveFrameParameter))
self._insar.saveProduct(self.secondary.track.frames[i], os.path.join(frameDir, self._insar.secondaryFrameParameter))
#getting average
if self._insar.modeCombination == 21:
@ -461,8 +461,8 @@ def runPreprocessor(self):
##################################################
#3. compute baseline
##################################################
#only compute baseline at four corners and center of the master track
bboxRdr = getBboxRdr(self.master.track)
#only compute baseline at four corners and center of the reference track
bboxRdr = getBboxRdr(self.reference.track)
rangeMin = bboxRdr[0]
rangeMax = bboxRdr[1]
@ -483,16 +483,16 @@ def runPreprocessor(self):
#modify Piyush's code for computing baslines
refElp = Planet(pname='Earth').ellipsoid
for x in points:
masterSV = self.master.track.orbit.interpolate(x[0], method='hermite')
target = self.master.track.orbit.rdr2geo(x[0], x[1])
referenceSV = self.reference.track.orbit.interpolate(x[0], method='hermite')
target = self.reference.track.orbit.rdr2geo(x[0], x[1])
slvTime, slvrng = self.slave.track.orbit.geo2rdr(target)
slaveSV = self.slave.track.orbit.interpolateOrbit(slvTime, method='hermite')
slvTime, slvrng = self.secondary.track.orbit.geo2rdr(target)
secondarySV = self.secondary.track.orbit.interpolateOrbit(slvTime, method='hermite')
targxyz = np.array(refElp.LLH(target[0], target[1], target[2]).ecef().tolist())
mxyz = np.array(masterSV.getPosition())
mvel = np.array(masterSV.getVelocity())
sxyz = np.array(slaveSV.getPosition())
mxyz = np.array(referenceSV.getPosition())
mvel = np.array(referenceSV.getVelocity())
sxyz = np.array(secondarySV.getPosition())
#to fix abrupt change near zero in baseline grid. JUN-05-2020
mvelunit = mvel / np.linalg.norm(mvel)
@ -507,27 +507,27 @@ def runPreprocessor(self):
direction = np.sign(np.dot( np.cross(targxyz-mxyz, sxyz-mxyz), mvel))
Bperp.append(direction*perp)
catalog.addItem('parallel baseline at upperleft of master track', Bpar[0], 'runPreprocessor')
catalog.addItem('parallel baseline at upperright of master track', Bpar[1], 'runPreprocessor')
catalog.addItem('parallel baseline at lowerleft of master track', Bpar[2], 'runPreprocessor')
catalog.addItem('parallel baseline at lowerright of master track', Bpar[3], 'runPreprocessor')
catalog.addItem('parallel baseline at center of master track', Bpar[4], 'runPreprocessor')
catalog.addItem('parallel baseline at upperleft of reference track', Bpar[0], 'runPreprocessor')
catalog.addItem('parallel baseline at upperright of reference track', Bpar[1], 'runPreprocessor')
catalog.addItem('parallel baseline at lowerleft of reference track', Bpar[2], 'runPreprocessor')
catalog.addItem('parallel baseline at lowerright of reference track', Bpar[3], 'runPreprocessor')
catalog.addItem('parallel baseline at center of reference track', Bpar[4], 'runPreprocessor')
catalog.addItem('perpendicular baseline at upperleft of master track', Bperp[0], 'runPreprocessor')
catalog.addItem('perpendicular baseline at upperright of master track', Bperp[1], 'runPreprocessor')
catalog.addItem('perpendicular baseline at lowerleft of master track', Bperp[2], 'runPreprocessor')
catalog.addItem('perpendicular baseline at lowerright of master track', Bperp[3], 'runPreprocessor')
catalog.addItem('perpendicular baseline at center of master track', Bperp[4], 'runPreprocessor')
catalog.addItem('perpendicular baseline at upperleft of reference track', Bperp[0], 'runPreprocessor')
catalog.addItem('perpendicular baseline at upperright of reference track', Bperp[1], 'runPreprocessor')
catalog.addItem('perpendicular baseline at lowerleft of reference track', Bperp[2], 'runPreprocessor')
catalog.addItem('perpendicular baseline at lowerright of reference track', Bperp[3], 'runPreprocessor')
catalog.addItem('perpendicular baseline at center of reference track', Bperp[4], 'runPreprocessor')
##################################################
#4. compute bounding box
##################################################
masterBbox = getBboxGeo(self.master.track)
slaveBbox = getBboxGeo(self.slave.track)
referenceBbox = getBboxGeo(self.reference.track)
secondaryBbox = getBboxGeo(self.secondary.track)
catalog.addItem('master bounding box', masterBbox, 'runPreprocessor')
catalog.addItem('slave bounding box', slaveBbox, 'runPreprocessor')
catalog.addItem('reference bounding box', referenceBbox, 'runPreprocessor')
catalog.addItem('secondary bounding box', secondaryBbox, 'runPreprocessor')
catalog.printToLog(logger, "runPreprocessor")
@ -538,22 +538,22 @@ def runPreprocessor(self):
def check_overlap(ldr_m, img_m, ldr_s, img_s):
from isceobj.Constants import SPEED_OF_LIGHT
rangeSamplingRateMaster, widthMaster, nearRangeMaster = read_param_for_checking_overlap(ldr_m, img_m)
rangeSamplingRateSlave, widthSlave, nearRangeSlave = read_param_for_checking_overlap(ldr_s, img_s)
rangeSamplingRateReference, widthReference, nearRangeReference = read_param_for_checking_overlap(ldr_m, img_m)
rangeSamplingRateSecondary, widthSecondary, nearRangeSecondary = read_param_for_checking_overlap(ldr_s, img_s)
farRangeMaster = nearRangeMaster + (widthMaster-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateMaster
farRangeSlave = nearRangeSlave + (widthSlave-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateSlave
farRangeReference = nearRangeReference + (widthReference-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateReference
farRangeSecondary = nearRangeSecondary + (widthSecondary-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateSecondary
#This should be good enough, although precise image offsets are not used.
if farRangeMaster <= nearRangeSlave:
if farRangeReference <= nearRangeSecondary:
overlapRatio = 0.0
elif farRangeSlave <= nearRangeMaster:
elif farRangeSecondary <= nearRangeReference:
overlapRatio = 0.0
else:
# 0 1 2 3
ranges = np.array([nearRangeMaster, farRangeMaster, nearRangeSlave, farRangeSlave])
ranges = np.array([nearRangeReference, farRangeReference, nearRangeSecondary, farRangeSecondary])
rangesIndex = np.argsort(ranges)
overlapRatio = ranges[rangesIndex[2]]-ranges[rangesIndex[1]] / (farRangeMaster-nearRangeMaster)
overlapRatio = ranges[rangesIndex[2]]-ranges[rangesIndex[1]] / (farRangeReference-nearRangeReference)
return overlapRatio

View File

@ -17,7 +17,7 @@ def runRdr2Geo(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
referenceTrack = self._insar.loadTrack(reference=True)
demFile = os.path.abspath(self._insar.dem)
wbdFile = os.path.abspath(self._insar.wbd)
@ -27,10 +27,10 @@ def runRdr2Geo(self):
if self.useGPU and self._insar.hasGPU():
topoGPU(masterTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, demFile,
topoGPU(referenceTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, demFile,
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.los)
else:
snwe = topoCPU(masterTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, demFile,
snwe = topoCPU(referenceTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, demFile,
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.los)
waterBodyRadar(self._insar.latitude, self._insar.longitude, wbdFile, self._insar.wbdOut)
@ -40,7 +40,7 @@ def runRdr2Geo(self):
self._insar.procDoc.addAllFromCatalog(catalog)
def topoCPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile, lonFile, hgtFile, losFile):
def topoCPU(referenceTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile, lonFile, hgtFile, losFile):
import datetime
import isceobj
from zerodop.topozero import createTopozero
@ -55,19 +55,19 @@ def topoCPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile,
planet = Planet(pname='Earth')
topo = createTopozero()
topo.slantRangePixelSpacing = numberRangeLooks * masterTrack.rangePixelSize
topo.prf = 1.0 / (numberAzimuthLooks*masterTrack.azimuthLineInterval)
topo.radarWavelength = masterTrack.radarWavelength
topo.orbit = masterTrack.orbit
topo.width = masterTrack.numberOfSamples
topo.length = masterTrack.numberOfLines
topo.slantRangePixelSpacing = numberRangeLooks * referenceTrack.rangePixelSize
topo.prf = 1.0 / (numberAzimuthLooks*referenceTrack.azimuthLineInterval)
topo.radarWavelength = referenceTrack.radarWavelength
topo.orbit = referenceTrack.orbit
topo.width = referenceTrack.numberOfSamples
topo.length = referenceTrack.numberOfLines
topo.wireInputPort(name='dem', object=demImage)
topo.wireInputPort(name='planet', object=planet)
topo.numberRangeLooks = 1 #must be set as 1
topo.numberAzimuthLooks = 1 #must be set as 1 Cunren
topo.lookSide = pointingDirection[masterTrack.pointingDirection]
topo.sensingStart = masterTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*masterTrack.azimuthLineInterval)
topo.rangeFirstSample = masterTrack.startingRange + (numberRangeLooks-1.0)/2.0*masterTrack.rangePixelSize
topo.lookSide = pointingDirection[referenceTrack.pointingDirection]
topo.sensingStart = referenceTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*referenceTrack.azimuthLineInterval)
topo.rangeFirstSample = referenceTrack.startingRange + (numberRangeLooks-1.0)/2.0*referenceTrack.rangePixelSize
topo.demInterpolationMethod='BIQUINTIC'
topo.latFilename = latFile
@ -82,7 +82,7 @@ def topoCPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile,
return list(topo.snwe)
def topoGPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile, lonFile, hgtFile, losFile):
def topoGPU(referenceTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile, lonFile, hgtFile, losFile):
'''
Try with GPU module.
'''
@ -97,8 +97,8 @@ def topoGPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile,
#creat poynomials
polyDoppler = Poly2D(name='topsApp_dopplerPoly')
polyDoppler.setWidth(masterTrack.numberOfSamples)
polyDoppler.setLength(masterTrack.numberOfLines)
polyDoppler.setWidth(referenceTrack.numberOfSamples)
polyDoppler.setLength(referenceTrack.numberOfLines)
polyDoppler.setNormRange(1.0)
polyDoppler.setNormAzimuth(1.0)
polyDoppler.setMeanRange(0.0)
@ -107,32 +107,32 @@ def topoGPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile,
polyDoppler.createPoly2D()
slantRangeImage = Poly2D()
slantRangeImage.setWidth(masterTrack.numberOfSamples)
slantRangeImage.setLength(masterTrack.numberOfLines)
slantRangeImage.setWidth(referenceTrack.numberOfSamples)
slantRangeImage.setLength(referenceTrack.numberOfLines)
slantRangeImage.setNormRange(1.0)
slantRangeImage.setNormAzimuth(1.0)
slantRangeImage.setMeanRange(0.)
slantRangeImage.setMeanAzimuth(0.)
slantRangeImage.initPoly(rangeOrder=1,azimuthOrder=0,
coeffs=[[masterTrack.startingRange + (numberRangeLooks-1.0)/2.0*masterTrack.rangePixelSize,numberRangeLooks * masterTrack.rangePixelSize]])
coeffs=[[referenceTrack.startingRange + (numberRangeLooks-1.0)/2.0*referenceTrack.rangePixelSize,numberRangeLooks * referenceTrack.rangePixelSize]])
slantRangeImage.createPoly2D()
#creat images
latImage = isceobj.createImage()
latImage.initImage(latFile, 'write', masterTrack.numberOfSamples, 'DOUBLE')
latImage.initImage(latFile, 'write', referenceTrack.numberOfSamples, 'DOUBLE')
latImage.createImage()
lonImage = isceobj.createImage()
lonImage.initImage(lonFile, 'write', masterTrack.numberOfSamples, 'DOUBLE')
lonImage.initImage(lonFile, 'write', referenceTrack.numberOfSamples, 'DOUBLE')
lonImage.createImage()
losImage = isceobj.createImage()
losImage.initImage(losFile, 'write', masterTrack.numberOfSamples, 'FLOAT', bands=2, scheme='BIL')
losImage.initImage(losFile, 'write', referenceTrack.numberOfSamples, 'FLOAT', bands=2, scheme='BIL')
losImage.setCaster('write', 'DOUBLE')
losImage.createImage()
heightImage = isceobj.createImage()
heightImage.initImage(hgtFile, 'write', masterTrack.numberOfSamples, 'DOUBLE')
heightImage.initImage(hgtFile, 'write', referenceTrack.numberOfSamples, 'DOUBLE')
heightImage.createImage()
demImage = isceobj.createDemImage()
@ -141,8 +141,8 @@ def topoGPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile,
demImage.createImage()
#compute a few things
t0 = masterTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*masterTrack.azimuthLineInterval)
orb = masterTrack.orbit
t0 = referenceTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*referenceTrack.azimuthLineInterval)
orb = referenceTrack.orbit
pegHdg = np.radians( orb.getENUHeading(t0))
elp = Planet(pname='Earth').ellipsoid
@ -154,12 +154,12 @@ def topoGPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile,
topo.set_deltalon(demImage.getDeltaLongitude())
topo.set_major(elp.a)
topo.set_eccentricitySquared(elp.e2)
topo.set_rSpace(numberRangeLooks * masterTrack.rangePixelSize)
topo.set_r0(masterTrack.startingRange + (numberRangeLooks-1.0)/2.0*masterTrack.rangePixelSize)
topo.set_rSpace(numberRangeLooks * referenceTrack.rangePixelSize)
topo.set_r0(referenceTrack.startingRange + (numberRangeLooks-1.0)/2.0*referenceTrack.rangePixelSize)
topo.set_pegHdg(pegHdg)
topo.set_prf(1.0 / (numberAzimuthLooks*masterTrack.azimuthLineInterval))
topo.set_prf(1.0 / (numberAzimuthLooks*referenceTrack.azimuthLineInterval))
topo.set_t0(DTU.seconds_since_midnight(t0))
topo.set_wvl(masterTrack.radarWavelength)
topo.set_wvl(referenceTrack.radarWavelength)
topo.set_thresh(.05)
topo.set_demAccessor(demImage.getImagePointer())
topo.set_dopAccessor(polyDoppler.getPointer())
@ -173,10 +173,10 @@ def topoGPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile,
topo.set_numIter(25)
topo.set_idemWidth(demImage.getWidth())
topo.set_idemLength(demImage.getLength())
topo.set_ilrl(pointingDirection[masterTrack.pointingDirection])
topo.set_ilrl(pointingDirection[referenceTrack.pointingDirection])
topo.set_extraIter(10)
topo.set_length(masterTrack.numberOfLines)
topo.set_width(masterTrack.numberOfSamples)
topo.set_length(referenceTrack.numberOfLines)
topo.set_width(referenceTrack.numberOfSamples)
topo.set_nRngLooks(1)
topo.set_nAzLooks(1)
topo.set_demMethod(5) # BIQUINTIC METHOD

View File

@ -23,7 +23,7 @@ def runRdrDemOffset(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
referenceTrack = self._insar.loadTrack(reference=True)
demFile = os.path.abspath(self._insar.dem)
insarDir = 'insar'
@ -44,16 +44,16 @@ def runRdrDemOffset(self):
#number of looks to take in range
if self._insar.numberRangeLooksSim == None:
if self._insar.numberRangeLooks1 * masterTrack.rangePixelSize > demDeltaLon:
if self._insar.numberRangeLooks1 * referenceTrack.rangePixelSize > demDeltaLon:
self._insar.numberRangeLooksSim = 1
else:
self._insar.numberRangeLooksSim = int(demDeltaLon / (self._insar.numberRangeLooks1 * masterTrack.rangePixelSize) + 0.5)
self._insar.numberRangeLooksSim = int(demDeltaLon / (self._insar.numberRangeLooks1 * referenceTrack.rangePixelSize) + 0.5)
#number of looks to take in azimuth
if self._insar.numberAzimuthLooksSim == None:
if self._insar.numberAzimuthLooks1 * masterTrack.azimuthPixelSize > demDeltaLat:
if self._insar.numberAzimuthLooks1 * referenceTrack.azimuthPixelSize > demDeltaLat:
self._insar.numberAzimuthLooksSim = 1
else:
self._insar.numberAzimuthLooksSim = int(demDeltaLat / (self._insar.numberAzimuthLooks1 * masterTrack.azimuthPixelSize) + 0.5)
self._insar.numberAzimuthLooksSim = int(demDeltaLat / (self._insar.numberAzimuthLooks1 * referenceTrack.azimuthPixelSize) + 0.5)
#simulate a radar image using dem
simulateRadar(os.path.join('../', self._insar.height), self._insar.sim, scale=3.0, offset=100.0)
@ -150,8 +150,8 @@ def runRdrDemOffset(self):
ampcor.setImageDataType1('real')
ampcor.setImageDataType2('real')
ampcor.setMasterSlcImage(mMag)
ampcor.setSlaveSlcImage(sMag)
ampcor.setReferenceSlcImage(mMag)
ampcor.setSecondarySlcImage(sMag)
#MATCH REGION
rgoff = 0

View File

@ -18,8 +18,8 @@ def runRectRangeOffset(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
insarDir = 'insar'
os.makedirs(insarDir, exist_ok=True)

View File

@ -40,8 +40,8 @@ def runSlcMatch(self):
os.makedirs(denseOffsetDir, exist_ok=True)
os.chdir(denseOffsetDir)
masterTrack = self._insar.loadProduct(self._insar.masterTrackParameter)
slaveTrack = self._insar.loadProduct(self._insar.slaveTrackParameter)
referenceTrack = self._insar.loadProduct(self._insar.referenceTrackParameter)
secondaryTrack = self._insar.loadProduct(self._insar.secondaryTrackParameter)
#########################################################################################
@ -50,34 +50,34 @@ def runSlcMatch(self):
# compute geometric offsets
##################################################
if self.useGPU and self._insar.hasGPU():
topoGPU(masterTrack, 1, 1, demFile,
topoGPU(referenceTrack, 1, 1, demFile,
'lat.rdr', 'lon.rdr', 'hgt.rdr', 'los.rdr')
geo2RdrGPU(slaveTrack, 1, 1,
geo2RdrGPU(secondaryTrack, 1, 1,
'lat.rdr', 'lon.rdr', 'hgt.rdr', 'rg.off', 'az.off')
else:
topoCPU(masterTrack, 1, 1, demFile,
topoCPU(referenceTrack, 1, 1, demFile,
'lat.rdr', 'lon.rdr', 'hgt.rdr', 'los.rdr')
geo2RdrCPU(slaveTrack, 1, 1,
geo2RdrCPU(secondaryTrack, 1, 1,
'lat.rdr', 'lon.rdr', 'hgt.rdr', 'rg.off', 'az.off')
##################################################
# resample SLC
##################################################
#SlaveSlcResampled = os.path.splitext(self._insar.slaveSlc)[0]+'_resamp'+os.path.splitext(self._insar.slaveSlc)[1]
SlaveSlcResampled = self._insar.slaveSlcCoregistered
#SecondarySlcResampled = os.path.splitext(self._insar.secondarySlc)[0]+'_resamp'+os.path.splitext(self._insar.secondarySlc)[1]
SecondarySlcResampled = self._insar.secondarySlcCoregistered
rangeOffsets2Frac = 0.0
azimuthOffsets2Frac = 0.0
resamp(self._insar.slaveSlc,
SlaveSlcResampled,
resamp(self._insar.secondarySlc,
SecondarySlcResampled,
'rg.off',
'az.off',
masterTrack.numberOfSamples, masterTrack.numberOfLines,
slaveTrack.prf,
slaveTrack.dopplerVsPixel,
referenceTrack.numberOfSamples, referenceTrack.numberOfLines,
secondaryTrack.prf,
secondaryTrack.dopplerVsPixel,
[rangeOffsets2Frac, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[azimuthOffsets2Frac, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
create_xml(SlaveSlcResampled, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'slc')
create_xml(SecondarySlcResampled, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'slc')
if self.estimateResidualOffset:
@ -85,8 +85,8 @@ def runSlcMatch(self):
numberOfOffsets = 800
rangeStep = 50
length = masterTrack.numberOfLines
width = masterTrack.numberOfSamples
length = referenceTrack.numberOfLines
width = referenceTrack.numberOfSamples
waterBodyRadar('lat.rdr', 'lon.rdr', wbdFile, 'wbd.rdr')
wbd=np.memmap('wbd.rdr', dtype=np.int8, mode='r', shape=(length, width))
azimuthStep = int(length/width*rangeStep+0.5)
@ -119,20 +119,20 @@ def runSlcMatch(self):
ampcor.configure()
mSLC = isceobj.createSlcImage()
mSLC.load(self._insar.masterSlc+'.xml')
mSLC.load(self._insar.referenceSlc+'.xml')
mSLC.setAccessMode('read')
mSLC.createImage()
sSLC = isceobj.createSlcImage()
sSLC.load(SlaveSlcResampled+'.xml')
sSLC.load(SecondarySlcResampled+'.xml')
sSLC.setAccessMode('read')
sSLC.createImage()
ampcor.setImageDataType1('complex')
ampcor.setImageDataType2('complex')
ampcor.setMasterSlcImage(mSLC)
ampcor.setSlaveSlcImage(sSLC)
ampcor.setReferenceSlcImage(mSLC)
ampcor.setSecondarySlcImage(sSLC)
#MATCH REGION
#compute an offset at image center to use
@ -220,22 +220,22 @@ def runSlcMatch(self):
catalog.addItem('warning message', 'too few offsets left for slc residual offset estimation', 'runSlcMatch')
else:
rangeOffset, azimuthOffset = meanOffset(refinedOffsets)
os.remove(SlaveSlcResampled)
os.remove(SlaveSlcResampled+'.vrt')
os.remove(SlaveSlcResampled+'.xml')
os.remove(SecondarySlcResampled)
os.remove(SecondarySlcResampled+'.vrt')
os.remove(SecondarySlcResampled+'.xml')
rangeOffsets2Frac = rangeOffset
azimuthOffsets2Frac = azimuthOffset
resamp(self._insar.slaveSlc,
SlaveSlcResampled,
resamp(self._insar.secondarySlc,
SecondarySlcResampled,
'rg.off',
'az.off',
masterTrack.numberOfSamples, masterTrack.numberOfLines,
slaveTrack.prf,
slaveTrack.dopplerVsPixel,
referenceTrack.numberOfSamples, referenceTrack.numberOfLines,
secondaryTrack.prf,
secondaryTrack.dopplerVsPixel,
[rangeOffsets2Frac, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[azimuthOffsets2Frac, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
create_xml(SlaveSlcResampled, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'slc')
create_xml(SecondarySlcResampled, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'slc')
catalog.addItem('number of offsets range', numberOfOffsetsRange, 'runSlcMatch')
catalog.addItem('number of offsets azimuth', numberOfOffsetsAzimuth, 'runSlcMatch')

View File

@ -26,8 +26,8 @@ def runSlcMosaic(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
denseOffsetDir = 'dense_offset'
os.makedirs(denseOffsetDir, exist_ok=True)
@ -35,127 +35,127 @@ def runSlcMosaic(self):
##################################################
# estimate master and slave frame offsets
# estimate reference and secondary frame offsets
##################################################
if len(masterTrack.frames) > 1:
if len(referenceTrack.frames) > 1:
matchingMode=1
#if master offsets from matching are not already computed
#if reference offsets from matching are not already computed
if self.frameOffsetMatching == False:
offsetMaster = frameOffset(masterTrack, self._insar.masterSlc, self._insar.masterFrameOffset,
offsetReference = frameOffset(referenceTrack, self._insar.referenceSlc, self._insar.referenceFrameOffset,
crossCorrelation=True, matchingMode=matchingMode)
offsetSlave = frameOffset(slaveTrack, self._insar.slaveSlc, self._insar.slaveFrameOffset,
offsetSecondary = frameOffset(secondaryTrack, self._insar.secondarySlc, self._insar.secondaryFrameOffset,
crossCorrelation=True, matchingMode=matchingMode)
if self.frameOffsetMatching == False:
self._insar.frameRangeOffsetMatchingMaster = offsetMaster[2]
self._insar.frameAzimuthOffsetMatchingMaster = offsetMaster[3]
self._insar.frameRangeOffsetMatchingSlave = offsetSlave[2]
self._insar.frameAzimuthOffsetMatchingSlave = offsetSlave[3]
self._insar.frameRangeOffsetMatchingReference = offsetReference[2]
self._insar.frameAzimuthOffsetMatchingReference = offsetReference[3]
self._insar.frameRangeOffsetMatchingSecondary = offsetSecondary[2]
self._insar.frameAzimuthOffsetMatchingSecondary = offsetSecondary[3]
##################################################
# mosaic slc
##################################################
numberOfFrames = len(masterTrack.frames)
numberOfFrames = len(referenceTrack.frames)
if numberOfFrames == 1:
import shutil
#frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.masterFrames[0]))
frameDir = os.path.join('f1_{}/s{}'.format(self._insar.masterFrames[0], self._insar.startingSwath))
if not os.path.isfile(self._insar.masterSlc):
if os.path.isfile(os.path.join('../', frameDir, self._insar.masterSlc)):
os.symlink(os.path.join('../', frameDir, self._insar.masterSlc), self._insar.masterSlc)
#frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.referenceFrames[0]))
frameDir = os.path.join('f1_{}/s{}'.format(self._insar.referenceFrames[0], self._insar.startingSwath))
if not os.path.isfile(self._insar.referenceSlc):
if os.path.isfile(os.path.join('../', frameDir, self._insar.referenceSlc)):
os.symlink(os.path.join('../', frameDir, self._insar.referenceSlc), self._insar.referenceSlc)
#shutil.copy2() can overwrite
shutil.copy2(os.path.join('../', frameDir, self._insar.masterSlc+'.vrt'), self._insar.masterSlc+'.vrt')
shutil.copy2(os.path.join('../', frameDir, self._insar.masterSlc+'.xml'), self._insar.masterSlc+'.xml')
if not os.path.isfile(self._insar.slaveSlc):
if os.path.isfile(os.path.join('../', frameDir, self._insar.slaveSlc)):
os.symlink(os.path.join('../', frameDir, self._insar.slaveSlc), self._insar.slaveSlc)
shutil.copy2(os.path.join('../', frameDir, self._insar.slaveSlc+'.vrt'), self._insar.slaveSlc+'.vrt')
shutil.copy2(os.path.join('../', frameDir, self._insar.slaveSlc+'.xml'), self._insar.slaveSlc+'.xml')
shutil.copy2(os.path.join('../', frameDir, self._insar.referenceSlc+'.vrt'), self._insar.referenceSlc+'.vrt')
shutil.copy2(os.path.join('../', frameDir, self._insar.referenceSlc+'.xml'), self._insar.referenceSlc+'.xml')
if not os.path.isfile(self._insar.secondarySlc):
if os.path.isfile(os.path.join('../', frameDir, self._insar.secondarySlc)):
os.symlink(os.path.join('../', frameDir, self._insar.secondarySlc), self._insar.secondarySlc)
shutil.copy2(os.path.join('../', frameDir, self._insar.secondarySlc+'.vrt'), self._insar.secondarySlc+'.vrt')
shutil.copy2(os.path.join('../', frameDir, self._insar.secondarySlc+'.xml'), self._insar.secondarySlc+'.xml')
#update track parameters
#########################################################
#mosaic size
masterTrack.numberOfSamples = masterTrack.frames[0].swaths[0].numberOfSamples
masterTrack.numberOfLines = masterTrack.frames[0].swaths[0].numberOfLines
referenceTrack.numberOfSamples = referenceTrack.frames[0].swaths[0].numberOfSamples
referenceTrack.numberOfLines = referenceTrack.frames[0].swaths[0].numberOfLines
#NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE
#range parameters
masterTrack.startingRange = masterTrack.frames[0].swaths[0].startingRange
masterTrack.rangeSamplingRate = masterTrack.frames[0].swaths[0].rangeSamplingRate
masterTrack.rangePixelSize = masterTrack.frames[0].swaths[0].rangePixelSize
referenceTrack.startingRange = referenceTrack.frames[0].swaths[0].startingRange
referenceTrack.rangeSamplingRate = referenceTrack.frames[0].swaths[0].rangeSamplingRate
referenceTrack.rangePixelSize = referenceTrack.frames[0].swaths[0].rangePixelSize
#azimuth parameters
masterTrack.sensingStart = masterTrack.frames[0].swaths[0].sensingStart
masterTrack.prf = masterTrack.frames[0].swaths[0].prf
masterTrack.azimuthPixelSize = masterTrack.frames[0].swaths[0].azimuthPixelSize
masterTrack.azimuthLineInterval = masterTrack.frames[0].swaths[0].azimuthLineInterval
referenceTrack.sensingStart = referenceTrack.frames[0].swaths[0].sensingStart
referenceTrack.prf = referenceTrack.frames[0].swaths[0].prf
referenceTrack.azimuthPixelSize = referenceTrack.frames[0].swaths[0].azimuthPixelSize
referenceTrack.azimuthLineInterval = referenceTrack.frames[0].swaths[0].azimuthLineInterval
masterTrack.dopplerVsPixel = masterTrack.frames[0].swaths[0].dopplerVsPixel
referenceTrack.dopplerVsPixel = referenceTrack.frames[0].swaths[0].dopplerVsPixel
#update track parameters, slave
#update track parameters, secondary
#########################################################
#mosaic size
slaveTrack.numberOfSamples = slaveTrack.frames[0].swaths[0].numberOfSamples
slaveTrack.numberOfLines = slaveTrack.frames[0].swaths[0].numberOfLines
secondaryTrack.numberOfSamples = secondaryTrack.frames[0].swaths[0].numberOfSamples
secondaryTrack.numberOfLines = secondaryTrack.frames[0].swaths[0].numberOfLines
#NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE
#range parameters
slaveTrack.startingRange = slaveTrack.frames[0].swaths[0].startingRange
slaveTrack.rangeSamplingRate = slaveTrack.frames[0].swaths[0].rangeSamplingRate
slaveTrack.rangePixelSize = slaveTrack.frames[0].swaths[0].rangePixelSize
secondaryTrack.startingRange = secondaryTrack.frames[0].swaths[0].startingRange
secondaryTrack.rangeSamplingRate = secondaryTrack.frames[0].swaths[0].rangeSamplingRate
secondaryTrack.rangePixelSize = secondaryTrack.frames[0].swaths[0].rangePixelSize
#azimuth parameters
slaveTrack.sensingStart = slaveTrack.frames[0].swaths[0].sensingStart
slaveTrack.prf = slaveTrack.frames[0].swaths[0].prf
slaveTrack.azimuthPixelSize = slaveTrack.frames[0].swaths[0].azimuthPixelSize
slaveTrack.azimuthLineInterval = slaveTrack.frames[0].swaths[0].azimuthLineInterval
secondaryTrack.sensingStart = secondaryTrack.frames[0].swaths[0].sensingStart
secondaryTrack.prf = secondaryTrack.frames[0].swaths[0].prf
secondaryTrack.azimuthPixelSize = secondaryTrack.frames[0].swaths[0].azimuthPixelSize
secondaryTrack.azimuthLineInterval = secondaryTrack.frames[0].swaths[0].azimuthLineInterval
slaveTrack.dopplerVsPixel = slaveTrack.frames[0].swaths[0].dopplerVsPixel
secondaryTrack.dopplerVsPixel = secondaryTrack.frames[0].swaths[0].dopplerVsPixel
else:
#mosaic master slc
#mosaic reference slc
#########################################################
#choose offsets
rangeOffsets = self._insar.frameRangeOffsetMatchingMaster
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingMaster
rangeOffsets = self._insar.frameRangeOffsetMatchingReference
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingReference
#list of input files
slcs = []
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
swathDir = 's{}'.format(self._insar.startingSwath)
slcs.append(os.path.join('../', frameDir, swathDir, self._insar.masterSlc))
slcs.append(os.path.join('../', frameDir, swathDir, self._insar.referenceSlc))
#note that track parameters are updated after mosaicking
#parameters update is checked, it is OK.
frameMosaic(masterTrack, slcs, self._insar.masterSlc,
frameMosaic(referenceTrack, slcs, self._insar.referenceSlc,
rangeOffsets, azimuthOffsets, 1, 1,
updateTrack=True, phaseCompensation=True, resamplingMethod=2)
create_xml(self._insar.masterSlc, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'slc')
masterTrack.dopplerVsPixel = computeTrackDoppler(masterTrack)
create_xml(self._insar.referenceSlc, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'slc')
referenceTrack.dopplerVsPixel = computeTrackDoppler(referenceTrack)
#mosaic slave slc
#mosaic secondary slc
#########################################################
#choose offsets
rangeOffsets = self._insar.frameRangeOffsetMatchingSlave
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingSlave
rangeOffsets = self._insar.frameRangeOffsetMatchingSecondary
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingSecondary
#list of input files
slcs = []
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
swathDir = 's{}'.format(self._insar.startingSwath)
slcs.append(os.path.join('../', frameDir, swathDir, self._insar.slaveSlc))
slcs.append(os.path.join('../', frameDir, swathDir, self._insar.secondarySlc))
#note that track parameters are updated after mosaicking
#parameters update is checked, it is OK.
frameMosaic(slaveTrack, slcs, self._insar.slaveSlc,
frameMosaic(secondaryTrack, slcs, self._insar.secondarySlc,
rangeOffsets, azimuthOffsets, 1, 1,
updateTrack=True, phaseCompensation=True, resamplingMethod=2)
create_xml(self._insar.slaveSlc, slaveTrack.numberOfSamples, slaveTrack.numberOfLines, 'slc')
slaveTrack.dopplerVsPixel = computeTrackDoppler(slaveTrack)
create_xml(self._insar.secondarySlc, secondaryTrack.numberOfSamples, secondaryTrack.numberOfLines, 'slc')
secondaryTrack.dopplerVsPixel = computeTrackDoppler(secondaryTrack)
#save parameter file inside denseoffset directory
self._insar.saveProduct(masterTrack, self._insar.masterTrackParameter)
self._insar.saveProduct(slaveTrack, self._insar.slaveTrackParameter)
self._insar.saveProduct(referenceTrack, self._insar.referenceTrackParameter)
self._insar.saveProduct(secondaryTrack, self._insar.secondaryTrackParameter)
os.chdir('../')

View File

@ -28,13 +28,13 @@ def runSlcOffset(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
demFile = os.path.abspath(self._insar.dem)
wbdFile = os.path.abspath(self._insar.wbd)
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
@ -43,8 +43,8 @@ def runSlcOffset(self):
print('estimating offset frame {}, swath {}'.format(frameNumber, swathNumber))
masterSwath = masterTrack.frames[i].swaths[j]
slaveSwath = slaveTrack.frames[i].swaths[j]
referenceSwath = referenceTrack.frames[i].swaths[j]
secondarySwath = secondaryTrack.frames[i].swaths[j]
##########################################
#1. set number of matching points
@ -62,7 +62,7 @@ def runSlcOffset(self):
numberRangeLooks=100
numberAzimuthLooks=100
#compute land ratio using topo module
topo(masterSwath, masterTrack, demFile, 'lat.rdr', 'lon.rdr', 'hgt.rdr', losFile='los.rdr',
topo(referenceSwath, referenceTrack, demFile, 'lat.rdr', 'lon.rdr', 'hgt.rdr', losFile='los.rdr',
incFile=None, mskFile=None,
numberRangeLooks=numberRangeLooks, numberAzimuthLooks=numberAzimuthLooks, multilookTimeOffset=False)
waterBodyRadar('lat.rdr', 'lon.rdr', wbdFile, 'wbd.rdr')
@ -82,7 +82,7 @@ def runSlcOffset(self):
catalog.addItem('warning message', 'land too small for estimating slc offsets at frame {}, swath {}, use geometric offsets'.format(frameNumber, swathNumber), 'runSlcOffset')
#compute geomtricla offsets
geo2rdr(slaveSwath, slaveTrack, 'lat.rdr', 'lon.rdr', 'hgt.rdr', 'rg.rdr', 'az.rdr', numberRangeLooks=numberRangeLooks, numberAzimuthLooks=numberAzimuthLooks, multilookTimeOffset=False)
geo2rdr(secondarySwath, secondaryTrack, 'lat.rdr', 'lon.rdr', 'hgt.rdr', 'rg.rdr', 'az.rdr', numberRangeLooks=numberRangeLooks, numberAzimuthLooks=numberAzimuthLooks, multilookTimeOffset=False)
reformatGeometricalOffset('rg.rdr', 'az.rdr', 'cull.off', rangeStep=numberRangeLooks, azimuthStep=numberAzimuthLooks, maximumNumberOfOffsets=2000)
os.remove('lat.rdr')
@ -155,26 +155,26 @@ def runSlcOffset(self):
ampcor.configure()
mSLC = isceobj.createSlcImage()
mSLC.load(self._insar.masterSlc+'.xml')
mSLC.load(self._insar.referenceSlc+'.xml')
mSLC.setAccessMode('read')
mSLC.createImage()
sSLC = isceobj.createSlcImage()
sSLC.load(self._insar.slaveSlc+'.xml')
sSLC.load(self._insar.secondarySlc+'.xml')
sSLC.setAccessMode('read')
sSLC.createImage()
ampcor.setImageDataType1('complex')
ampcor.setImageDataType2('complex')
ampcor.setMasterSlcImage(mSLC)
ampcor.setSlaveSlcImage(sSLC)
ampcor.setReferenceSlcImage(mSLC)
ampcor.setSecondarySlcImage(sSLC)
#MATCH REGION
#compute an offset at image center to use
rgoff, azoff = computeOffsetFromOrbit(masterSwath, masterTrack, slaveSwath, slaveTrack,
masterSwath.numberOfSamples * 0.5,
masterSwath.numberOfLines * 0.5)
rgoff, azoff = computeOffsetFromOrbit(referenceSwath, referenceTrack, secondarySwath, secondaryTrack,
referenceSwath.numberOfSamples * 0.5,
referenceSwath.numberOfLines * 0.5)
#it seems that we cannot use 0, haven't look into the problem
if rgoff == 0:
rgoff = 1

View File

@ -20,10 +20,10 @@ def runSwathMosaic(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
@ -40,7 +40,7 @@ def runSwathMosaic(self):
(self._insar.endingSwath-self._insar.startingSwath+1 > 1)
):
import shutil
swathDir = 's{}'.format(masterTrack.frames[i].swaths[0].swathNumber)
swathDir = 's{}'.format(referenceTrack.frames[i].swaths[0].swathNumber)
if not os.path.isfile(self._insar.interferogram):
os.symlink(os.path.join('../', swathDir, self._insar.interferogram), self._insar.interferogram)
@ -60,7 +60,7 @@ def runSwathMosaic(self):
#update frame parameters
#########################################################
frame = masterTrack.frames[i]
frame = referenceTrack.frames[i]
infImg = isceobj.createImage()
infImg.load(self._insar.interferogram+'.xml')
#mosaic size
@ -77,9 +77,9 @@ def runSwathMosaic(self):
frame.azimuthPixelSize = frame.swaths[0].azimuthPixelSize
frame.azimuthLineInterval = frame.swaths[0].azimuthLineInterval
#update frame parameters, slave
#update frame parameters, secondary
#########################################################
frame = slaveTrack.frames[i]
frame = secondaryTrack.frames[i]
#mosaic size
frame.numberOfSamples = int(frame.swaths[0].numberOfSamples/self._insar.numberRangeLooks1)
frame.numberOfLines = int(frame.swaths[0].numberOfLines/self._insar.numberAzimuthLooks1)
@ -97,28 +97,28 @@ def runSwathMosaic(self):
os.chdir('../')
#save parameter file
self._insar.saveProduct(masterTrack.frames[i], self._insar.masterFrameParameter)
self._insar.saveProduct(slaveTrack.frames[i], self._insar.slaveFrameParameter)
self._insar.saveProduct(referenceTrack.frames[i], self._insar.referenceFrameParameter)
self._insar.saveProduct(secondaryTrack.frames[i], self._insar.secondaryFrameParameter)
os.chdir('../')
continue
#choose offsets
numberOfFrames = len(masterTrack.frames)
numberOfSwaths = len(masterTrack.frames[i].swaths)
numberOfFrames = len(referenceTrack.frames)
numberOfSwaths = len(referenceTrack.frames[i].swaths)
if self.swathOffsetMatching:
#no need to do this as the API support 2-d list
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetMatchingMaster
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingMaster
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetMatchingReference
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingReference
else:
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetGeometricalMaster
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalMaster
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetGeometricalReference
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalReference
rangeOffsets = rangeOffsets[i]
azimuthOffsets = azimuthOffsets[i]
@ -133,28 +133,28 @@ def runSwathMosaic(self):
#note that frame parameters are updated after mosaicking
#mosaic amplitudes
swathMosaic(masterTrack.frames[i], inputAmplitudes, self._insar.amplitude,
swathMosaic(referenceTrack.frames[i], inputAmplitudes, self._insar.amplitude,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, resamplingMethod=0)
#mosaic interferograms
swathMosaic(masterTrack.frames[i], inputInterferograms, self._insar.interferogram,
swathMosaic(referenceTrack.frames[i], inputInterferograms, self._insar.interferogram,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, updateFrame=True, resamplingMethod=1)
create_xml(self._insar.amplitude, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'amp')
create_xml(self._insar.interferogram, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'int')
create_xml(self._insar.amplitude, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'amp')
create_xml(self._insar.interferogram, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'int')
#update slave frame parameters here
#no matching for slave, always use geometry
rangeOffsets = self._insar.swathRangeOffsetGeometricalSlave
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalSlave
#update secondary frame parameters here
#no matching for secondary, always use geometry
rangeOffsets = self._insar.swathRangeOffsetGeometricalSecondary
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalSecondary
rangeOffsets = rangeOffsets[i]
azimuthOffsets = azimuthOffsets[i]
swathMosaicParameters(slaveTrack.frames[i], rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
swathMosaicParameters(secondaryTrack.frames[i], rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
os.chdir('../')
#save parameter file
self._insar.saveProduct(masterTrack.frames[i], self._insar.masterFrameParameter)
self._insar.saveProduct(slaveTrack.frames[i], self._insar.slaveFrameParameter)
self._insar.saveProduct(referenceTrack.frames[i], self._insar.referenceFrameParameter)
self._insar.saveProduct(secondaryTrack.frames[i], self._insar.secondaryFrameParameter)
os.chdir('../')

View File

@ -21,10 +21,10 @@ def runSwathOffset(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
@ -46,34 +46,34 @@ def runSwathOffset(self):
continue
#compute swath offset
offsetMaster = swathOffset(masterTrack.frames[i], self._insar.masterSlc, self._insar.masterSwathOffset,
offsetReference = swathOffset(referenceTrack.frames[i], self._insar.referenceSlc, self._insar.referenceSwathOffset,
crossCorrelation=self.swathOffsetMatching, numberOfAzimuthLooks=10)
#only use geometrical offset for slave
offsetSlave = swathOffset(slaveTrack.frames[i], self._insar.slaveSlc, self._insar.slaveSwathOffset,
#only use geometrical offset for secondary
offsetSecondary = swathOffset(secondaryTrack.frames[i], self._insar.secondarySlc, self._insar.secondarySwathOffset,
crossCorrelation=False, numberOfAzimuthLooks=10)
#initialization
if i == 0:
self._insar.swathRangeOffsetGeometricalMaster = []
self._insar.swathAzimuthOffsetGeometricalMaster = []
self._insar.swathRangeOffsetGeometricalSlave = []
self._insar.swathAzimuthOffsetGeometricalSlave = []
self._insar.swathRangeOffsetGeometricalReference = []
self._insar.swathAzimuthOffsetGeometricalReference = []
self._insar.swathRangeOffsetGeometricalSecondary = []
self._insar.swathAzimuthOffsetGeometricalSecondary = []
if self.swathOffsetMatching:
self._insar.swathRangeOffsetMatchingMaster = []
self._insar.swathAzimuthOffsetMatchingMaster = []
#self._insar.swathRangeOffsetMatchingSlave = []
#self._insar.swathAzimuthOffsetMatchingSlave = []
self._insar.swathRangeOffsetMatchingReference = []
self._insar.swathAzimuthOffsetMatchingReference = []
#self._insar.swathRangeOffsetMatchingSecondary = []
#self._insar.swathAzimuthOffsetMatchingSecondary = []
#append list directly, as the API support 2-d list
self._insar.swathRangeOffsetGeometricalMaster.append(offsetMaster[0])
self._insar.swathAzimuthOffsetGeometricalMaster.append(offsetMaster[1])
self._insar.swathRangeOffsetGeometricalSlave.append(offsetSlave[0])
self._insar.swathAzimuthOffsetGeometricalSlave.append(offsetSlave[1])
self._insar.swathRangeOffsetGeometricalReference.append(offsetReference[0])
self._insar.swathAzimuthOffsetGeometricalReference.append(offsetReference[1])
self._insar.swathRangeOffsetGeometricalSecondary.append(offsetSecondary[0])
self._insar.swathAzimuthOffsetGeometricalSecondary.append(offsetSecondary[1])
if self.swathOffsetMatching:
self._insar.swathRangeOffsetMatchingMaster.append(offsetMaster[2])
self._insar.swathAzimuthOffsetMatchingMaster.append(offsetMaster[3])
#self._insar.swathRangeOffsetMatchingSlave.append(offsetSlave[2])
#self._insar.swathAzimuthOffsetMatchingSlave.append(offsetSlave[3])
self._insar.swathRangeOffsetMatchingReference.append(offsetReference[2])
self._insar.swathAzimuthOffsetMatchingReference.append(offsetReference[3])
#self._insar.swathRangeOffsetMatchingSecondary.append(offsetSecondary[2])
#self._insar.swathAzimuthOffsetMatchingSecondary.append(offsetSecondary[3])
os.chdir('../../')
@ -300,8 +300,8 @@ def estimateSwathOffset(swath1, swath2, image1, image2, rangeScale1=1, azimuthSc
ampcor.setImageDataType1('real')
ampcor.setImageDataType2('real')
ampcor.setMasterSlcImage(mMag)
ampcor.setSlaveSlcImage(sMag)
ampcor.setReferenceSlcImage(mMag)
ampcor.setSecondarySlcImage(sMag)
#MATCH REGION
rgoff = 0

View File

@ -22,8 +22,8 @@ def runUnwrapSnaphu(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
#slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
#secondaryTrack = self._insar.loadTrack(reference=False)
insarDir = 'insar'
os.makedirs(insarDir, exist_ok=True)
@ -43,9 +43,9 @@ def runUnwrapSnaphu(self):
costMode = 's',
initMethod = 'mcf')
else:
tmid = masterTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*masterTrack.azimuthLineInterval+
masterTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*masterTrack.azimuthLineInterval)
snaphuUnwrap(masterTrack, tmid,
tmid = referenceTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*referenceTrack.azimuthLineInterval+
referenceTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*referenceTrack.azimuthLineInterval)
snaphuUnwrap(referenceTrack, tmid,
self._insar.filteredInterferogram,
self._insar.multilookPhsig,
self._insar.unwrappedInterferogram,

View File

@ -11,19 +11,19 @@ from iscesys.DateTimeUtil.DateTimeUtil import DateTimeUtil as DTU
from iscesys.Compatibility import Compatibility
MASTER_DATE = Component.Parameter('masterDate',
public_name='master date',
REFERENCE_DATE = Component.Parameter('referenceDate',
public_name='reference date',
default=None,
type=str,
mandatory=True,
doc='master acquistion date')
doc='reference acquistion date')
SLAVE_DATE = Component.Parameter('slaveDate',
public_name='slave date',
SECONDARY_DATE = Component.Parameter('secondaryDate',
public_name='secondary date',
default=None,
type=str,
mandatory=True,
doc='slave acquistion date')
doc='secondary acquistion date')
MODE_COMBINATION = Component.Parameter('modeCombination',
public_name='mode combination',
@ -32,21 +32,21 @@ MODE_COMBINATION = Component.Parameter('modeCombination',
mandatory=True,
doc='mode combination')
MASTER_FRAMES = Component.Parameter('masterFrames',
public_name = 'master frames',
REFERENCE_FRAMES = Component.Parameter('referenceFrames',
public_name = 'reference frames',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'master frames to process')
doc = 'reference frames to process')
SLAVE_FRAMES = Component.Parameter('slaveFrames',
public_name = 'slave frames',
SECONDARY_FRAMES = Component.Parameter('secondaryFrames',
public_name = 'secondary frames',
default = None,
type=str,
container=list,
mandatory=False,
doc = 'slave frames to process')
doc = 'secondary frames to process')
STARTING_SWATH = Component.Parameter('startingSwath',
public_name='starting swath',
@ -108,135 +108,135 @@ AZIMUTH_RESIDUAL_OFFSET_SD = Component.Parameter('azimuthResidualOffsetSd',
container = list,
doc = 'azimuth residual offset estimated by spectral diversity')
SWATH_RANGE_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('swathRangeOffsetGeometricalMaster',
public_name = 'swath range offset from geometry master',
SWATH_RANGE_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('swathRangeOffsetGeometricalReference',
public_name = 'swath range offset from geometry reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath range offset from geometry master')
doc = 'swath range offset from geometry reference')
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('swathAzimuthOffsetGeometricalMaster',
public_name = 'swath azimuth offset from geometry master',
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('swathAzimuthOffsetGeometricalReference',
public_name = 'swath azimuth offset from geometry reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath azimuth offset from geometry master')
doc = 'swath azimuth offset from geometry reference')
SWATH_RANGE_OFFSET_MATCHING_MASTER = Component.Parameter('swathRangeOffsetMatchingMaster',
public_name = 'swath range offset from matching master',
SWATH_RANGE_OFFSET_MATCHING_REFERENCE = Component.Parameter('swathRangeOffsetMatchingReference',
public_name = 'swath range offset from matching reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath range offset from matching master')
doc = 'swath range offset from matching reference')
SWATH_AZIMUTH_OFFSET_MATCHING_MASTER = Component.Parameter('swathAzimuthOffsetMatchingMaster',
public_name = 'swath azimuth offset from matching master',
SWATH_AZIMUTH_OFFSET_MATCHING_REFERENCE = Component.Parameter('swathAzimuthOffsetMatchingReference',
public_name = 'swath azimuth offset from matching reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath azimuth offset from matching master')
doc = 'swath azimuth offset from matching reference')
SWATH_RANGE_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('swathRangeOffsetGeometricalSlave',
public_name = 'swath range offset from geometry slave',
SWATH_RANGE_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('swathRangeOffsetGeometricalSecondary',
public_name = 'swath range offset from geometry secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath range offset from geometry slave')
doc = 'swath range offset from geometry secondary')
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('swathAzimuthOffsetGeometricalSlave',
public_name = 'swath azimuth offset from geometry slave',
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('swathAzimuthOffsetGeometricalSecondary',
public_name = 'swath azimuth offset from geometry secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath azimuth offset from geometry slave')
doc = 'swath azimuth offset from geometry secondary')
SWATH_RANGE_OFFSET_MATCHING_SLAVE = Component.Parameter('swathRangeOffsetMatchingSlave',
public_name = 'swath range offset from matching slave',
SWATH_RANGE_OFFSET_MATCHING_SECONDARY = Component.Parameter('swathRangeOffsetMatchingSecondary',
public_name = 'swath range offset from matching secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath range offset from matching slave')
doc = 'swath range offset from matching secondary')
SWATH_AZIMUTH_OFFSET_MATCHING_SLAVE = Component.Parameter('swathAzimuthOffsetMatchingSlave',
public_name = 'swath azimuth offset from matching slave',
SWATH_AZIMUTH_OFFSET_MATCHING_SECONDARY = Component.Parameter('swathAzimuthOffsetMatchingSecondary',
public_name = 'swath azimuth offset from matching secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'swath azimuth offset from matching slave')
doc = 'swath azimuth offset from matching secondary')
FRAME_RANGE_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('frameRangeOffsetGeometricalMaster',
public_name = 'frame range offset from geometry master',
FRAME_RANGE_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('frameRangeOffsetGeometricalReference',
public_name = 'frame range offset from geometry reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame range offset from geometry master')
doc = 'frame range offset from geometry reference')
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('frameAzimuthOffsetGeometricalMaster',
public_name = 'frame azimuth offset from geometry master',
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('frameAzimuthOffsetGeometricalReference',
public_name = 'frame azimuth offset from geometry reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame azimuth offset from geometry master')
doc = 'frame azimuth offset from geometry reference')
FRAME_RANGE_OFFSET_MATCHING_MASTER = Component.Parameter('frameRangeOffsetMatchingMaster',
public_name = 'frame range offset from matching master',
FRAME_RANGE_OFFSET_MATCHING_REFERENCE = Component.Parameter('frameRangeOffsetMatchingReference',
public_name = 'frame range offset from matching reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame range offset from matching master')
doc = 'frame range offset from matching reference')
FRAME_AZIMUTH_OFFSET_MATCHING_MASTER = Component.Parameter('frameAzimuthOffsetMatchingMaster',
public_name = 'frame azimuth offset from matching master',
FRAME_AZIMUTH_OFFSET_MATCHING_REFERENCE = Component.Parameter('frameAzimuthOffsetMatchingReference',
public_name = 'frame azimuth offset from matching reference',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame azimuth offset from matching master')
doc = 'frame azimuth offset from matching reference')
FRAME_RANGE_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('frameRangeOffsetGeometricalSlave',
public_name = 'frame range offset from geometry slave',
FRAME_RANGE_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('frameRangeOffsetGeometricalSecondary',
public_name = 'frame range offset from geometry secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame range offset from geometry slave')
doc = 'frame range offset from geometry secondary')
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('frameAzimuthOffsetGeometricalSlave',
public_name = 'frame azimuth offset from geometry slave',
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('frameAzimuthOffsetGeometricalSecondary',
public_name = 'frame azimuth offset from geometry secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame azimuth offset from geometry slave')
doc = 'frame azimuth offset from geometry secondary')
FRAME_RANGE_OFFSET_MATCHING_SLAVE = Component.Parameter('frameRangeOffsetMatchingSlave',
public_name = 'frame range offset from matching slave',
FRAME_RANGE_OFFSET_MATCHING_SECONDARY = Component.Parameter('frameRangeOffsetMatchingSecondary',
public_name = 'frame range offset from matching secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame range offset from matching slave')
doc = 'frame range offset from matching secondary')
FRAME_AZIMUTH_OFFSET_MATCHING_SLAVE = Component.Parameter('frameAzimuthOffsetMatchingSlave',
public_name = 'frame azimuth offset from matching slave',
FRAME_AZIMUTH_OFFSET_MATCHING_SECONDARY = Component.Parameter('frameAzimuthOffsetMatchingSecondary',
public_name = 'frame azimuth offset from matching secondary',
default = None,
type = float,
mandatory = True,
container = list,
doc = 'frame azimuth offset from matching slave')
doc = 'frame azimuth offset from matching secondary')
NUMBER_RANGE_LOOKS1 = Component.Parameter('numberRangeLooks1',
public_name='number of range looks 1',
@ -324,103 +324,103 @@ RADAR_DEM_AFFINE_TRANSFORM = Component.Parameter('radarDemAffineTransform',
container = list,
doc = 'radar dem affine transform parameters')
MASTER_SLC = Component.Parameter('masterSlc',
public_name='master slc',
REFERENCE_SLC = Component.Parameter('referenceSlc',
public_name='reference slc',
default=None,
type=str,
mandatory=False,
doc='master slc file')
doc='reference slc file')
SLAVE_SLC = Component.Parameter('slaveSlc',
public_name='slave slc',
SECONDARY_SLC = Component.Parameter('secondarySlc',
public_name='secondary slc',
default=None,
type=str,
mandatory=False,
doc='slave slc file')
doc='secondary slc file')
MASTER_BURST_PREFIX = Component.Parameter('masterBurstPrefix',
public_name='master burst prefix',
REFERENCE_BURST_PREFIX = Component.Parameter('referenceBurstPrefix',
public_name='reference burst prefix',
default=None,
type=str,
mandatory=False,
doc='master burst prefix')
doc='reference burst prefix')
SLAVE_BURST_PREFIX = Component.Parameter('slaveBurstPrefix',
public_name='slave burst prefix',
SECONDARY_BURST_PREFIX = Component.Parameter('secondaryBurstPrefix',
public_name='secondary burst prefix',
default=None,
type=str,
mandatory=False,
doc='slave burst prefix')
doc='secondary burst prefix')
MASTER_MAGNITUDE = Component.Parameter('masterMagnitude',
public_name='master magnitude',
REFERENCE_MAGNITUDE = Component.Parameter('referenceMagnitude',
public_name='reference magnitude',
default=None,
type=str,
mandatory=False,
doc='master magnitude file')
doc='reference magnitude file')
SLAVE_MAGNITUDE = Component.Parameter('slaveMagnitude',
public_name='slave magnitude',
SECONDARY_MAGNITUDE = Component.Parameter('secondaryMagnitude',
public_name='secondary magnitude',
default=None,
type=str,
mandatory=False,
doc='slave magnitude file')
doc='secondary magnitude file')
MASTER_SWATH_OFFSET = Component.Parameter('masterSwathOffset',
public_name='master swath offset',
REFERENCE_SWATH_OFFSET = Component.Parameter('referenceSwathOffset',
public_name='reference swath offset',
default=None,
type=str,
mandatory=False,
doc='master swath offset file')
doc='reference swath offset file')
SLAVE_SWATH_OFFSET = Component.Parameter('slaveSwathOffset',
public_name='slave swath offset',
SECONDARY_SWATH_OFFSET = Component.Parameter('secondarySwathOffset',
public_name='secondary swath offset',
default=None,
type=str,
mandatory=False,
doc='slave swath offset file')
doc='secondary swath offset file')
MASTER_FRAME_OFFSET = Component.Parameter('masterFrameOffset',
public_name='master frame offset',
REFERENCE_FRAME_OFFSET = Component.Parameter('referenceFrameOffset',
public_name='reference frame offset',
default=None,
type=str,
mandatory=False,
doc='master frame offset file')
doc='reference frame offset file')
SLAVE_FRAME_OFFSET = Component.Parameter('slaveFrameOffset',
public_name='slave frame offset',
SECONDARY_FRAME_OFFSET = Component.Parameter('secondaryFrameOffset',
public_name='secondary frame offset',
default=None,
type=str,
mandatory=False,
doc='slave frame offset file')
doc='secondary frame offset file')
MASTER_FRAME_PARAMETER = Component.Parameter('masterFrameParameter',
public_name='master frame parameter',
REFERENCE_FRAME_PARAMETER = Component.Parameter('referenceFrameParameter',
public_name='reference frame parameter',
default=None,
type=str,
mandatory=False,
doc='master frame parameter file')
doc='reference frame parameter file')
SLAVE_FRAME_PARAMETER = Component.Parameter('slaveFrameParameter',
public_name='slave frame parameter',
SECONDARY_FRAME_PARAMETER = Component.Parameter('secondaryFrameParameter',
public_name='secondary frame parameter',
default=None,
type=str,
mandatory=False,
doc='slave frame parameter file')
doc='secondary frame parameter file')
MASTER_TRACK_PARAMETER = Component.Parameter('masterTrackParameter',
public_name='master track parameter',
REFERENCE_TRACK_PARAMETER = Component.Parameter('referenceTrackParameter',
public_name='reference track parameter',
default=None,
type=str,
mandatory=False,
doc='master track parameter file')
doc='reference track parameter file')
SLAVE_TRACK_PARAMETER = Component.Parameter('slaveTrackParameter',
public_name='slave track parameter',
SECONDARY_TRACK_PARAMETER = Component.Parameter('secondaryTrackParameter',
public_name='secondary track parameter',
default=None,
type=str,
mandatory=False,
doc='slave track parameter file')
doc='secondary track parameter file')
DEM = Component.Parameter('dem',
public_name='dem for coregistration',
@ -793,11 +793,11 @@ class Alos2burstProc(Component):
to modify and return their values.
"""
parameter_list = (MASTER_DATE,
SLAVE_DATE,
parameter_list = (REFERENCE_DATE,
SECONDARY_DATE,
MODE_COMBINATION,
MASTER_FRAMES,
SLAVE_FRAMES,
REFERENCE_FRAMES,
SECONDARY_FRAMES,
STARTING_SWATH,
ENDING_SWATH,
BURST_UNSYNCHRONIZED_TIME,
@ -806,22 +806,22 @@ class Alos2burstProc(Component):
AZIMUTH_RESIDUAL_OFFSET_CC,
RANGE_RESIDUAL_OFFSET_SD,
AZIMUTH_RESIDUAL_OFFSET_SD,
SWATH_RANGE_OFFSET_GEOMETRICAL_MASTER,
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_MASTER,
SWATH_RANGE_OFFSET_MATCHING_MASTER,
SWATH_AZIMUTH_OFFSET_MATCHING_MASTER,
SWATH_RANGE_OFFSET_GEOMETRICAL_SLAVE,
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE,
SWATH_RANGE_OFFSET_MATCHING_SLAVE,
SWATH_AZIMUTH_OFFSET_MATCHING_SLAVE,
FRAME_RANGE_OFFSET_GEOMETRICAL_MASTER,
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_MASTER,
FRAME_RANGE_OFFSET_MATCHING_MASTER,
FRAME_AZIMUTH_OFFSET_MATCHING_MASTER,
FRAME_RANGE_OFFSET_GEOMETRICAL_SLAVE,
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE,
FRAME_RANGE_OFFSET_MATCHING_SLAVE,
FRAME_AZIMUTH_OFFSET_MATCHING_SLAVE,
SWATH_RANGE_OFFSET_GEOMETRICAL_REFERENCE,
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE,
SWATH_RANGE_OFFSET_MATCHING_REFERENCE,
SWATH_AZIMUTH_OFFSET_MATCHING_REFERENCE,
SWATH_RANGE_OFFSET_GEOMETRICAL_SECONDARY,
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY,
SWATH_RANGE_OFFSET_MATCHING_SECONDARY,
SWATH_AZIMUTH_OFFSET_MATCHING_SECONDARY,
FRAME_RANGE_OFFSET_GEOMETRICAL_REFERENCE,
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE,
FRAME_RANGE_OFFSET_MATCHING_REFERENCE,
FRAME_AZIMUTH_OFFSET_MATCHING_REFERENCE,
FRAME_RANGE_OFFSET_GEOMETRICAL_SECONDARY,
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY,
FRAME_RANGE_OFFSET_MATCHING_SECONDARY,
FRAME_AZIMUTH_OFFSET_MATCHING_SECONDARY,
NUMBER_RANGE_LOOKS1,
NUMBER_AZIMUTH_LOOKS1,
NUMBER_RANGE_LOOKS2,
@ -834,20 +834,20 @@ class Alos2burstProc(Component):
NUMBER_AZIMUTH_LOOKS_SD,
SUBBAND_RADAR_WAVLENGTH,
RADAR_DEM_AFFINE_TRANSFORM,
MASTER_SLC,
SLAVE_SLC,
MASTER_BURST_PREFIX,
SLAVE_BURST_PREFIX,
MASTER_MAGNITUDE,
SLAVE_MAGNITUDE,
MASTER_SWATH_OFFSET,
SLAVE_SWATH_OFFSET,
MASTER_FRAME_OFFSET,
SLAVE_FRAME_OFFSET,
MASTER_FRAME_PARAMETER,
SLAVE_FRAME_PARAMETER,
MASTER_TRACK_PARAMETER,
SLAVE_TRACK_PARAMETER,
REFERENCE_SLC,
SECONDARY_SLC,
REFERENCE_BURST_PREFIX,
SECONDARY_BURST_PREFIX,
REFERENCE_MAGNITUDE,
SECONDARY_MAGNITUDE,
REFERENCE_SWATH_OFFSET,
SECONDARY_SWATH_OFFSET,
REFERENCE_FRAME_OFFSET,
SECONDARY_FRAME_OFFSET,
REFERENCE_FRAME_PARAMETER,
SECONDARY_FRAME_PARAMETER,
REFERENCE_TRACK_PARAMETER,
SECONDARY_TRACK_PARAMETER,
DEM,
DEM_GEO,
WBD,
@ -912,12 +912,12 @@ class Alos2burstProc(Component):
self.procDoc = procDoc
return None
def setFilename(self, masterDate, slaveDate, nrlks1, nalks1, nrlks2, nalks2):
def setFilename(self, referenceDate, secondaryDate, nrlks1, nalks1, nrlks2, nalks2):
# if masterDate == None:
# masterDate = self.masterDate
# if slaveDate == None:
# slaveDate = self.slaveDate
# if referenceDate == None:
# referenceDate = self.referenceDate
# if secondaryDate == None:
# secondaryDate = self.secondaryDate
# if nrlks1 == None:
# nrlks1 = self.numberRangeLooks1
# if nalks1 == None:
@ -927,24 +927,24 @@ class Alos2burstProc(Component):
# if nalks2 == None:
# nalks2 = self.numberAzimuthLooks2
ms = masterDate + '-' + slaveDate
ms = referenceDate + '-' + secondaryDate
ml1 = '_{}rlks_{}alks'.format(nrlks1, nalks1)
ml2 = '_{}rlks_{}alks'.format(nrlks1*nrlks2, nalks1*nalks2)
self.masterSlc = masterDate + '.slc'
self.slaveSlc = slaveDate + '.slc'
self.masterBurstPrefix = masterDate
self.slaveBurstPrefix = slaveDate
self.masterMagnitude = masterDate + '.mag'
self.slaveMagnitude = slaveDate + '.mag'
self.masterSwathOffset = 'swath_offset_' + masterDate + '.txt'
self.slaveSwathOffset = 'swath_offset_' + slaveDate + '.txt'
self.masterFrameOffset = 'frame_offset_' + masterDate + '.txt'
self.slaveFrameOffset = 'frame_offset_' + slaveDate + '.txt'
self.masterFrameParameter = masterDate + '.frame.xml'
self.slaveFrameParameter = slaveDate + '.frame.xml'
self.masterTrackParameter = masterDate + '.track.xml'
self.slaveTrackParameter = slaveDate + '.track.xml'
self.referenceSlc = referenceDate + '.slc'
self.secondarySlc = secondaryDate + '.slc'
self.referenceBurstPrefix = referenceDate
self.secondaryBurstPrefix = secondaryDate
self.referenceMagnitude = referenceDate + '.mag'
self.secondaryMagnitude = secondaryDate + '.mag'
self.referenceSwathOffset = 'swath_offset_' + referenceDate + '.txt'
self.secondarySwathOffset = 'swath_offset_' + secondaryDate + '.txt'
self.referenceFrameOffset = 'frame_offset_' + referenceDate + '.txt'
self.secondaryFrameOffset = 'frame_offset_' + secondaryDate + '.txt'
self.referenceFrameParameter = referenceDate + '.frame.xml'
self.secondaryFrameParameter = secondaryDate + '.frame.xml'
self.referenceTrackParameter = referenceDate + '.track.xml'
self.secondaryTrackParameter = secondaryDate + '.track.xml'
#self.dem =
#self.demGeo =
#self.wbd =
@ -983,12 +983,12 @@ class Alos2burstProc(Component):
self.geoIon = ms + ml2 + '.ion.geo'
def setFilenameSd(self, masterDate, slaveDate, nrlks1, nalks1, nrlks_sd, nalks_sd, nsd=3):
def setFilenameSd(self, referenceDate, secondaryDate, nrlks1, nalks1, nrlks_sd, nalks_sd, nsd=3):
#spectral diversity
# if masterDate == None:
# masterDate = self.masterDate
# if slaveDate == None:
# slaveDate = self.slaveDate
# if referenceDate == None:
# referenceDate = self.referenceDate
# if secondaryDate == None:
# secondaryDate = self.secondaryDate
# if nrlks1 == None:
# nrlks1 = self.numberRangeLooks1
# if nalks1 == None:
@ -998,7 +998,7 @@ class Alos2burstProc(Component):
# if nalks_sd == None:
# nalks_sd = self.numberAzimuthLooksSd
ms = masterDate + '-' + slaveDate
ms = referenceDate + '-' + secondaryDate
ml1 = '_{}rlks_{}alks'.format(nrlks1, nalks1)
ml2sd = '_{}rlks_{}alks'.format(nrlks1*nrlks_sd, nalks1*nalks_sd)
self.interferogramSd = ['sd_{}_'.format(i+1) + ms + ml1 + '.int' for i in range(nsd)]
@ -1051,42 +1051,42 @@ class Alos2burstProc(Component):
return None
def loadTrack(self, master=True):
def loadTrack(self, reference=True):
'''
Load the track using Product Manager.
'''
if master:
track = self.loadProduct(self.masterTrackParameter)
if reference:
track = self.loadProduct(self.referenceTrackParameter)
else:
track = self.loadProduct(self.slaveTrackParameter)
track = self.loadProduct(self.secondaryTrackParameter)
track.frames = []
for i, frameNumber in enumerate(self.masterFrames):
for i, frameNumber in enumerate(self.referenceFrames):
os.chdir('f{}_{}'.format(i+1, frameNumber))
if master:
track.frames.append(self.loadProduct(self.masterFrameParameter))
if reference:
track.frames.append(self.loadProduct(self.referenceFrameParameter))
else:
track.frames.append(self.loadProduct(self.slaveFrameParameter))
track.frames.append(self.loadProduct(self.secondaryFrameParameter))
os.chdir('../')
return track
def saveTrack(self, track, master=True):
def saveTrack(self, track, reference=True):
'''
Save the track to XML files using Product Manager.
'''
if master:
self.saveProduct(track, self.masterTrackParameter)
if reference:
self.saveProduct(track, self.referenceTrackParameter)
else:
self.saveProduct(track, self.slaveTrackParameter)
self.saveProduct(track, self.secondaryTrackParameter)
for i, frameNumber in enumerate(self.masterFrames):
for i, frameNumber in enumerate(self.referenceFrames):
os.chdir('f{}_{}'.format(i+1, frameNumber))
if master:
self.saveProduct(track.frames[i], self.masterFrameParameter)
if reference:
self.saveProduct(track.frames[i], self.referenceFrameParameter)
else:
self.saveProduct(track.frames[i], self.slaveFrameParameter)
self.saveProduct(track.frames[i], self.secondaryFrameParameter)
os.chdir('../')
return None

View File

@ -26,15 +26,15 @@ def runCoregCc(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
#demFile = os.path.abspath(self._insar.dem)
#wbdFile = os.path.abspath(self._insar.wbd)
###############################################################################
self._insar.rangeResidualOffsetCc = [[] for i in range(len(masterTrack.frames))]
self._insar.azimuthResidualOffsetCc = [[] for i in range(len(masterTrack.frames))]
for i, frameNumber in enumerate(self._insar.masterFrames):
self._insar.rangeResidualOffsetCc = [[] for i in range(len(referenceTrack.frames))]
self._insar.azimuthResidualOffsetCc = [[] for i in range(len(referenceTrack.frames))]
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
@ -43,8 +43,8 @@ def runCoregCc(self):
print('processing frame {}, swath {}'.format(frameNumber, swathNumber))
masterSwath = masterTrack.frames[i].swaths[j]
slaveSwath = slaveTrack.frames[i].swaths[j]
referenceSwath = referenceTrack.frames[i].swaths[j]
secondarySwath = secondaryTrack.frames[i].swaths[j]
##################################################
# estimate cross-correlation offsets
@ -64,11 +64,11 @@ def runCoregCc(self):
landRatio = np.sum(wbd==0) / length / width
del wbd
if (landRatio <= 0.00125):
print('\n\nWARNING: land area too small for estimating offsets between master and slave magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber))
print('\n\nWARNING: land area too small for estimating offsets between reference and secondary magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber))
print('set offsets to zero\n\n')
self._insar.rangeResidualOffsetCc[i].append(0.0)
self._insar.azimuthResidualOffsetCc[i].append(0.0)
catalog.addItem('warning message', 'land area too small for estimating offsets between master and slave magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber), 'runCoregCc')
catalog.addItem('warning message', 'land area too small for estimating offsets between reference and secondary magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber), 'runCoregCc')
continue
#total number of offsets to use
numberOfOffsets /= landRatio
@ -102,37 +102,37 @@ def runCoregCc(self):
catalog.addItem('number of azimuth offsets at frame {}, swath {}'.format(frameNumber, swathNumber), '{}'.format(numberOfOffsetsAzimuth), 'runCoregCc')
#need to cp to current directory to make it (gdal) work
if not os.path.isfile(self._insar.masterMagnitude):
os.symlink(os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude), self._insar.masterMagnitude)
if not os.path.isfile(self._insar.referenceMagnitude):
os.symlink(os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude), self._insar.referenceMagnitude)
#shutil.copy2() can overwrite
shutil.copy2(os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude+'.vrt'), self._insar.masterMagnitude+'.vrt')
shutil.copy2(os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude+'.xml'), self._insar.masterMagnitude+'.xml')
shutil.copy2(os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude+'.vrt'), self._insar.referenceMagnitude+'.vrt')
shutil.copy2(os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude+'.xml'), self._insar.referenceMagnitude+'.xml')
if not os.path.isfile(self._insar.slaveMagnitude):
os.symlink(os.path.join(self._insar.slaveBurstPrefix + '_1_coreg_geom', self._insar.slaveMagnitude), self._insar.slaveMagnitude)
if not os.path.isfile(self._insar.secondaryMagnitude):
os.symlink(os.path.join(self._insar.secondaryBurstPrefix + '_1_coreg_geom', self._insar.secondaryMagnitude), self._insar.secondaryMagnitude)
#shutil.copy2() can overwrite
shutil.copy2(os.path.join(self._insar.slaveBurstPrefix + '_1_coreg_geom', self._insar.slaveMagnitude+'.vrt'), self._insar.slaveMagnitude+'.vrt')
shutil.copy2(os.path.join(self._insar.slaveBurstPrefix + '_1_coreg_geom', self._insar.slaveMagnitude+'.xml'), self._insar.slaveMagnitude+'.xml')
shutil.copy2(os.path.join(self._insar.secondaryBurstPrefix + '_1_coreg_geom', self._insar.secondaryMagnitude+'.vrt'), self._insar.secondaryMagnitude+'.vrt')
shutil.copy2(os.path.join(self._insar.secondaryBurstPrefix + '_1_coreg_geom', self._insar.secondaryMagnitude+'.xml'), self._insar.secondaryMagnitude+'.xml')
#matching
ampcor = Ampcor(name='insarapp_slcs_ampcor')
ampcor.configure()
mMag = isceobj.createImage()
mMag.load(self._insar.masterMagnitude+'.xml')
mMag.load(self._insar.referenceMagnitude+'.xml')
mMag.setAccessMode('read')
mMag.createImage()
sMag = isceobj.createImage()
sMag.load(self._insar.slaveMagnitude+'.xml')
sMag.load(self._insar.secondaryMagnitude+'.xml')
sMag.setAccessMode('read')
sMag.createImage()
ampcor.setImageDataType1('real')
ampcor.setImageDataType2('real')
ampcor.setMasterSlcImage(mMag)
ampcor.setSlaveSlcImage(sMag)
ampcor.setReferenceSlcImage(mMag)
ampcor.setSecondarySlcImage(sMag)
#MATCH REGION
rgoff = 0
@ -201,12 +201,12 @@ def runCoregCc(self):
sMag.finalizeImage()
#clear up
os.remove(self._insar.masterMagnitude)
os.remove(self._insar.masterMagnitude+'.vrt')
os.remove(self._insar.masterMagnitude+'.xml')
os.remove(self._insar.slaveMagnitude)
os.remove(self._insar.slaveMagnitude+'.vrt')
os.remove(self._insar.slaveMagnitude+'.xml')
os.remove(self._insar.referenceMagnitude)
os.remove(self._insar.referenceMagnitude+'.vrt')
os.remove(self._insar.referenceMagnitude+'.xml')
os.remove(self._insar.secondaryMagnitude)
os.remove(self._insar.secondaryMagnitude+'.vrt')
os.remove(self._insar.secondaryMagnitude+'.xml')
#compute average offsets to use in resampling
if refinedOffsets == None:
@ -214,9 +214,9 @@ def runCoregCc(self):
azimuthOffset = 0
self._insar.rangeResidualOffsetCc[i].append(rangeOffset)
self._insar.azimuthResidualOffsetCc[i].append(azimuthOffset)
print('\n\nWARNING: too few offsets left in matching master and slave magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber))
print('\n\nWARNING: too few offsets left in matching reference and secondary magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber))
print('set offsets to zero\n\n')
catalog.addItem('warning message', 'too few offsets left in matching master and slave magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber), 'runCoregCc')
catalog.addItem('warning message', 'too few offsets left in matching reference and secondary magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber), 'runCoregCc')
else:
rangeOffset, azimuthOffset = meanOffset(refinedOffsets)
#for range offset, need to compute from a polynomial
@ -258,38 +258,38 @@ def runCoregCc(self):
##################################################
# resample bursts
##################################################
slaveBurstResampledDir = self._insar.slaveBurstPrefix + '_2_coreg_cc'
#interferogramDir = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix + '_coreg_geom'
secondaryBurstResampledDir = self._insar.secondaryBurstPrefix + '_2_coreg_cc'
#interferogramDir = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix + '_coreg_geom'
interferogramDir = 'burst_interf_2_coreg_cc'
interferogramPrefix = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix
resampleBursts(masterSwath, slaveSwath,
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, slaveBurstResampledDir, interferogramDir,
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, self._insar.slaveBurstPrefix, interferogramPrefix,
interferogramPrefix = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix
resampleBursts(referenceSwath, secondarySwath,
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, secondaryBurstResampledDir, interferogramDir,
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, self._insar.secondaryBurstPrefix, interferogramPrefix,
self._insar.rangeOffset, self._insar.azimuthOffset, rangeOffsetResidual=rangeOffset, azimuthOffsetResidual=azimuthOffset)
##################################################
# mosaic burst amplitudes and interferograms
##################################################
os.chdir(slaveBurstResampledDir)
mosaicBurstAmplitude(masterSwath, self._insar.slaveBurstPrefix, self._insar.slaveMagnitude, numberOfLooksThreshold=4)
os.chdir(secondaryBurstResampledDir)
mosaicBurstAmplitude(referenceSwath, self._insar.secondaryBurstPrefix, self._insar.secondaryMagnitude, numberOfLooksThreshold=4)
os.chdir('../')
os.chdir(interferogramDir)
mosaicBurstInterferogram(masterSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
mosaicBurstInterferogram(referenceSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
os.chdir('../')
##################################################
# final amplitude and interferogram
##################################################
amp = np.zeros((masterSwath.numberOfLines, 2*masterSwath.numberOfSamples), dtype=np.float32)
amp[0:, 1:masterSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(slaveBurstResampledDir, self._insar.slaveMagnitude), \
dtype=np.float32).reshape(masterSwath.numberOfLines, masterSwath.numberOfSamples)
amp[0:, 0:masterSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude), \
dtype=np.float32).reshape(masterSwath.numberOfLines, masterSwath.numberOfSamples)
amp = np.zeros((referenceSwath.numberOfLines, 2*referenceSwath.numberOfSamples), dtype=np.float32)
amp[0:, 1:referenceSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(secondaryBurstResampledDir, self._insar.secondaryMagnitude), \
dtype=np.float32).reshape(referenceSwath.numberOfLines, referenceSwath.numberOfSamples)
amp[0:, 0:referenceSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude), \
dtype=np.float32).reshape(referenceSwath.numberOfLines, referenceSwath.numberOfSamples)
amp.astype(np.float32).tofile(self._insar.amplitude)
create_xml(self._insar.amplitude, masterSwath.numberOfSamples, masterSwath.numberOfLines, 'amp')
create_xml(self._insar.amplitude, referenceSwath.numberOfSamples, referenceSwath.numberOfLines, 'amp')
os.rename(os.path.join(interferogramDir, self._insar.interferogram), self._insar.interferogram)
os.rename(os.path.join(interferogramDir, self._insar.interferogram+'.vrt'), self._insar.interferogram+'.vrt')

View File

@ -24,14 +24,14 @@ def runCoregGeom(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
demFile = os.path.abspath(self._insar.dem)
wbdFile = os.path.abspath(self._insar.wbd)
###############################################################################
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
@ -40,8 +40,8 @@ def runCoregGeom(self):
print('processing frame {}, swath {}'.format(frameNumber, swathNumber))
masterSwath = masterTrack.frames[i].swaths[j]
slaveSwath = slaveTrack.frames[i].swaths[j]
referenceSwath = referenceTrack.frames[i].swaths[j]
secondarySwath = secondaryTrack.frames[i].swaths[j]
##################################################
@ -49,41 +49,41 @@ def runCoregGeom(self):
##################################################
#set up track parameters just for computing offsets
#ALL track parameters are listed here
#master
#masterTrack.passDirection =
#masterTrack.pointingDirection =
#masterTrack.operationMode =
#masterTrack.radarWavelength =
masterTrack.numberOfSamples = masterSwath.numberOfSamples
masterTrack.numberOfLines = masterSwath.numberOfLines
masterTrack.startingRange = masterSwath.startingRange
#masterTrack.rangeSamplingRate =
masterTrack.rangePixelSize = masterSwath.rangePixelSize
masterTrack.sensingStart = masterSwath.sensingStart
#masterTrack.prf =
#masterTrack.azimuthPixelSize =
masterTrack.azimuthLineInterval = masterSwath.azimuthLineInterval
#masterTrack.dopplerVsPixel =
#masterTrack.frames =
#masterTrack.orbit =
#reference
#referenceTrack.passDirection =
#referenceTrack.pointingDirection =
#referenceTrack.operationMode =
#referenceTrack.radarWavelength =
referenceTrack.numberOfSamples = referenceSwath.numberOfSamples
referenceTrack.numberOfLines = referenceSwath.numberOfLines
referenceTrack.startingRange = referenceSwath.startingRange
#referenceTrack.rangeSamplingRate =
referenceTrack.rangePixelSize = referenceSwath.rangePixelSize
referenceTrack.sensingStart = referenceSwath.sensingStart
#referenceTrack.prf =
#referenceTrack.azimuthPixelSize =
referenceTrack.azimuthLineInterval = referenceSwath.azimuthLineInterval
#referenceTrack.dopplerVsPixel =
#referenceTrack.frames =
#referenceTrack.orbit =
#slave
slaveTrack.numberOfSamples = slaveSwath.numberOfSamples
slaveTrack.numberOfLines = slaveSwath.numberOfLines
slaveTrack.startingRange = slaveSwath.startingRange
slaveTrack.rangePixelSize = slaveSwath.rangePixelSize
slaveTrack.sensingStart = slaveSwath.sensingStart
slaveTrack.azimuthLineInterval = slaveSwath.azimuthLineInterval
#secondary
secondaryTrack.numberOfSamples = secondarySwath.numberOfSamples
secondaryTrack.numberOfLines = secondarySwath.numberOfLines
secondaryTrack.startingRange = secondarySwath.startingRange
secondaryTrack.rangePixelSize = secondarySwath.rangePixelSize
secondaryTrack.sensingStart = secondarySwath.sensingStart
secondaryTrack.azimuthLineInterval = secondarySwath.azimuthLineInterval
if self.useGPU and self._insar.hasGPU():
topoGPU(masterTrack, 1, 1, demFile,
topoGPU(referenceTrack, 1, 1, demFile,
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.los)
geo2RdrGPU(slaveTrack, 1, 1,
geo2RdrGPU(secondaryTrack, 1, 1,
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.rangeOffset, self._insar.azimuthOffset)
else:
topoCPU(masterTrack, 1, 1, demFile,
topoCPU(referenceTrack, 1, 1, demFile,
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.los)
geo2RdrCPU(slaveTrack, 1, 1,
geo2RdrCPU(secondaryTrack, 1, 1,
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.rangeOffset, self._insar.azimuthOffset)
waterBodyRadar(self._insar.latitude, self._insar.longitude, wbdFile, self._insar.wbdOut)
@ -106,28 +106,28 @@ def runCoregGeom(self):
##################################################
# resample bursts
##################################################
slaveBurstResampledDir = self._insar.slaveBurstPrefix + '_1_coreg_geom'
#interferogramDir = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix + '_coreg_geom'
secondaryBurstResampledDir = self._insar.secondaryBurstPrefix + '_1_coreg_geom'
#interferogramDir = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix + '_coreg_geom'
interferogramDir = 'burst_interf_1_coreg_geom'
interferogramPrefix = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix
resampleBursts(masterSwath, slaveSwath,
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, slaveBurstResampledDir, interferogramDir,
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, self._insar.slaveBurstPrefix, interferogramPrefix,
interferogramPrefix = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix
resampleBursts(referenceSwath, secondarySwath,
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, secondaryBurstResampledDir, interferogramDir,
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, self._insar.secondaryBurstPrefix, interferogramPrefix,
self._insar.rangeOffset, self._insar.azimuthOffset, rangeOffsetResidual=0, azimuthOffsetResidual=0)
##################################################
# mosaic burst amplitudes and interferograms
##################################################
os.chdir(slaveBurstResampledDir)
mosaicBurstAmplitude(masterSwath, self._insar.slaveBurstPrefix, self._insar.slaveMagnitude, numberOfLooksThreshold=4)
os.chdir(secondaryBurstResampledDir)
mosaicBurstAmplitude(referenceSwath, self._insar.secondaryBurstPrefix, self._insar.secondaryMagnitude, numberOfLooksThreshold=4)
os.chdir('../')
#the interferogram is not good enough, do not mosaic
mosaic=False
if mosaic:
os.chdir(interferogramDir)
mosaicBurstInterferogram(masterSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
mosaicBurstInterferogram(referenceSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
os.chdir('../')

View File

@ -20,15 +20,15 @@ def runCoregSd(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
#demFile = os.path.abspath(self._insar.dem)
#wbdFile = os.path.abspath(self._insar.wbd)
###############################################################################
#self._insar.rangeResidualOffsetSd = [[] for i in range(len(masterTrack.frames))]
self._insar.azimuthResidualOffsetSd = [[] for i in range(len(masterTrack.frames))]
for i, frameNumber in enumerate(self._insar.masterFrames):
#self._insar.rangeResidualOffsetSd = [[] for i in range(len(referenceTrack.frames))]
self._insar.azimuthResidualOffsetSd = [[] for i in range(len(referenceTrack.frames))]
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
@ -37,8 +37,8 @@ def runCoregSd(self):
print('processing frame {}, swath {}'.format(frameNumber, swathNumber))
masterSwath = masterTrack.frames[i].swaths[j]
slaveSwath = slaveTrack.frames[i].swaths[j]
referenceSwath = referenceTrack.frames[i].swaths[j]
secondarySwath = secondaryTrack.frames[i].swaths[j]
##################################################
# spectral diversity or mai
@ -48,8 +48,8 @@ def runCoregSd(self):
os.chdir(sdDir)
interferogramDir = 'burst_interf_2_coreg_cc'
interferogramPrefix = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix
offsetSd = spectralDiversity(masterSwath, os.path.join('../', interferogramDir), interferogramPrefix, self._insar.interferogramSd,
interferogramPrefix = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix
offsetSd = spectralDiversity(referenceSwath, os.path.join('../', interferogramDir), interferogramPrefix, self._insar.interferogramSd,
numberLooksScanSAR=4, numberRangeLooks=28, numberAzimuthLooks=8, coherenceThreshold=0.85,
keep=True, filt=True, filtWinSizeRange=5, filtWinSizeAzimuth=5)
#here use the number of looks for sd as filtWinSizeRange and filtWinSizeAzimuth to get the best filtering result?
@ -60,31 +60,31 @@ def runCoregSd(self):
catalog.addItem('azimuth residual offset at frame {}, swath {}'.format(frameNumber, swathNumber), '{}'.format(offsetSd), 'runCoregSd')
#this small residual azimuth offset has small impact, it's not worth the time to resample slave bursts again.
#this small residual azimuth offset has small impact, it's not worth the time to resample secondary bursts again.
formInterferogram=False
if formInterferogram:
##################################################
# resample bursts
##################################################
slaveBurstResampledDir = self._insar.slaveBurstPrefix + '_3_coreg_sd'
#interferogramDir = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix + '_coreg_geom'
secondaryBurstResampledDir = self._insar.secondaryBurstPrefix + '_3_coreg_sd'
#interferogramDir = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix + '_coreg_geom'
interferogramDir = 'burst_interf_3_coreg_sd'
interferogramPrefix = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix
resampleBursts(masterSwath, slaveSwath,
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, slaveBurstResampledDir, interferogramDir,
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, self._insar.slaveBurstPrefix, interferogramPrefix,
interferogramPrefix = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix
resampleBursts(referenceSwath, secondarySwath,
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, secondaryBurstResampledDir, interferogramDir,
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, self._insar.secondaryBurstPrefix, interferogramPrefix,
self._insar.rangeOffset, self._insar.azimuthOffset, rangeOffsetResidual=self._insar.rangeResidualOffsetCc[i][j], azimuthOffsetResidual=self._insar.azimuthResidualOffsetCc[i][j]+offsetSd)
##################################################
# mosaic burst amplitudes and interferograms
##################################################
os.chdir(slaveBurstResampledDir)
mosaicBurstAmplitude(masterSwath, self._insar.slaveBurstPrefix, self._insar.slaveMagnitude, numberOfLooksThreshold=4)
os.chdir(secondaryBurstResampledDir)
mosaicBurstAmplitude(referenceSwath, self._insar.secondaryBurstPrefix, self._insar.secondaryMagnitude, numberOfLooksThreshold=4)
os.chdir('../')
os.chdir(interferogramDir)
mosaicBurstInterferogram(masterSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
mosaicBurstInterferogram(referenceSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
os.chdir('../')
@ -96,7 +96,7 @@ def runCoregSd(self):
self._insar.procDoc.addAllFromCatalog(catalog)
def spectralDiversity(masterSwath, interferogramDir, interferogramPrefix, outputList, numberLooksScanSAR=None, numberRangeLooks=20, numberAzimuthLooks=10, coherenceThreshold=0.85, keep=False, filt=False, filtWinSizeRange=5, filtWinSizeAzimuth=5):
def spectralDiversity(referenceSwath, interferogramDir, interferogramPrefix, outputList, numberLooksScanSAR=None, numberRangeLooks=20, numberAzimuthLooks=10, coherenceThreshold=0.85, keep=False, filt=False, filtWinSizeRange=5, filtWinSizeAzimuth=5):
'''
numberLooksScanSAR: number of looks of the ScanSAR system
numberRangeLooks: number of range looks to take
@ -110,21 +110,21 @@ def spectralDiversity(masterSwath, interferogramDir, interferogramPrefix, output
from isceobj.Alos2Proc.Alos2ProcPublic import multilook
from isceobj.Alos2Proc.Alos2ProcPublic import cal_coherence_1
width = masterSwath.numberOfSamples
length = masterSwath.numberOfLines
lengthBurst = masterSwath.burstSlcNumberOfLines
nBurst = masterSwath.numberOfBursts
azsi = masterSwath.azimuthLineInterval
tc = masterSwath.burstCycleLength / masterSwath.prf
width = referenceSwath.numberOfSamples
length = referenceSwath.numberOfLines
lengthBurst = referenceSwath.burstSlcNumberOfLines
nBurst = referenceSwath.numberOfBursts
azsi = referenceSwath.azimuthLineInterval
tc = referenceSwath.burstCycleLength / referenceSwath.prf
bursts = [os.path.join(interferogramDir, interferogramPrefix+'_%02d.int'%(i+1)) for i in range(masterSwath.numberOfBursts)]
bursts = [os.path.join(interferogramDir, interferogramPrefix+'_%02d.int'%(i+1)) for i in range(referenceSwath.numberOfBursts)]
####################################################
#input parameters
rgl = numberRangeLooks
azl = numberAzimuthLooks
cor_th = coherenceThreshold
nls0 = lengthBurst / (masterSwath.burstSlcFirstLineOffsets[nBurst-1] / (nBurst-1.0))
nls0 = lengthBurst / (referenceSwath.burstSlcFirstLineOffsets[nBurst-1] / (nBurst-1.0))
print('number of looks of the ScanSAR system: {}'.format(nls0))
if numberLooksScanSAR != None:
nls = numberLooksScanSAR
@ -143,8 +143,8 @@ def spectralDiversity(masterSwath, interferogramDir, interferogramPrefix, output
burst = np.fromfile(bursts[i], dtype=np.complex64).reshape(lengthBurst, width)
#subset for the burst
cntBurst = cnt[0+masterSwath.burstSlcFirstLineOffsets[i]:lengthBurst+masterSwath.burstSlcFirstLineOffsets[i], :]
infBurst = inf[0+masterSwath.burstSlcFirstLineOffsets[i]:lengthBurst+masterSwath.burstSlcFirstLineOffsets[i], :, :]
cntBurst = cnt[0+referenceSwath.burstSlcFirstLineOffsets[i]:lengthBurst+referenceSwath.burstSlcFirstLineOffsets[i], :]
infBurst = inf[0+referenceSwath.burstSlcFirstLineOffsets[i]:lengthBurst+referenceSwath.burstSlcFirstLineOffsets[i], :, :]
#set number of non-zero pixels
cntBurst[np.nonzero(burst)] += 1
@ -178,7 +178,7 @@ def spectralDiversity(masterSwath, interferogramDir, interferogramPrefix, output
widthm = int(width/rgl)
lengthm = int(length/azl)
#use the convention that ka > 0
ka = -np.polyval(masterSwath.azimuthFmrateVsPixel[::-1], create_multi_index(width, rgl))
ka = -np.polyval(referenceSwath.azimuthFmrateVsPixel[::-1], create_multi_index(width, rgl))
#get spectral diversity inteferogram
offset_sd=[]

View File

@ -23,13 +23,13 @@ def runExtractBurst(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
#demFile = os.path.abspath(self._insar.dem)
#wbdFile = os.path.abspath(self._insar.wbd)
###############################################################################
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
@ -41,21 +41,21 @@ def runExtractBurst(self):
az_ratio1 = 20.0
for k in range(2):
if k==0:
#master
swath = masterTrack.frames[i].swaths[j]
#reference
swath = referenceTrack.frames[i].swaths[j]
unsynLines = self._insar.burstUnsynchronizedTime * swath.prf
extractDir = self._insar.masterBurstPrefix
burstPrefix = self._insar.masterBurstPrefix
fullApertureSlc = self._insar.masterSlc
magnitude = self._insar.masterMagnitude
extractDir = self._insar.referenceBurstPrefix
burstPrefix = self._insar.referenceBurstPrefix
fullApertureSlc = self._insar.referenceSlc
magnitude = self._insar.referenceMagnitude
else:
#slave
swath = slaveTrack.frames[i].swaths[j]
#secondary
swath = secondaryTrack.frames[i].swaths[j]
unsynLines = -self._insar.burstUnsynchronizedTime * swath.prf
extractDir = self._insar.slaveBurstPrefix
burstPrefix = self._insar.slaveBurstPrefix
fullApertureSlc = self._insar.slaveSlc
magnitude = self._insar.slaveMagnitude
extractDir = self._insar.secondaryBurstPrefix
burstPrefix = self._insar.secondaryBurstPrefix
fullApertureSlc = self._insar.secondarySlc
magnitude = self._insar.secondaryMagnitude
#UPDATE SWATH PARAMETERS 1
#########################################################################################
@ -125,8 +125,8 @@ def runExtractBurst(self):
os.chdir('../')
os.chdir('../')
self._insar.saveProduct(masterTrack.frames[i], self._insar.masterFrameParameter)
self._insar.saveProduct(slaveTrack.frames[i], self._insar.slaveFrameParameter)
self._insar.saveProduct(referenceTrack.frames[i], self._insar.referenceFrameParameter)
self._insar.saveProduct(secondaryTrack.frames[i], self._insar.secondaryFrameParameter)
os.chdir('../')
###############################################################################

View File

@ -25,8 +25,8 @@ def runFiltSd(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
#masterTrack = self._insar.loadTrack(master=True)
#slaveTrack = self._insar.loadTrack(master=False)
#referenceTrack = self._insar.loadTrack(reference=True)
#secondaryTrack = self._insar.loadTrack(reference=False)
sdDir = 'sd'
os.makedirs(sdDir, exist_ok=True)

View File

@ -19,17 +19,17 @@ def runFrameMosaic(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
mosaicDir = 'insar'
os.makedirs(mosaicDir, exist_ok=True)
os.chdir(mosaicDir)
numberOfFrames = len(masterTrack.frames)
numberOfFrames = len(referenceTrack.frames)
if numberOfFrames == 1:
import shutil
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.masterFrames[0]))
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.referenceFrames[0]))
if not os.path.isfile(self._insar.interferogram):
os.symlink(os.path.join('../', frameDir, self._insar.interferogram), self._insar.interferogram)
#shutil.copy2() can overwrite
@ -50,75 +50,75 @@ def runFrameMosaic(self):
#update track parameters
#########################################################
#mosaic size
masterTrack.numberOfSamples = masterTrack.frames[0].numberOfSamples
masterTrack.numberOfLines = masterTrack.frames[0].numberOfLines
referenceTrack.numberOfSamples = referenceTrack.frames[0].numberOfSamples
referenceTrack.numberOfLines = referenceTrack.frames[0].numberOfLines
#NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE
#range parameters
masterTrack.startingRange = masterTrack.frames[0].startingRange
masterTrack.rangeSamplingRate = masterTrack.frames[0].rangeSamplingRate
masterTrack.rangePixelSize = masterTrack.frames[0].rangePixelSize
referenceTrack.startingRange = referenceTrack.frames[0].startingRange
referenceTrack.rangeSamplingRate = referenceTrack.frames[0].rangeSamplingRate
referenceTrack.rangePixelSize = referenceTrack.frames[0].rangePixelSize
#azimuth parameters
masterTrack.sensingStart = masterTrack.frames[0].sensingStart
masterTrack.prf = masterTrack.frames[0].prf
masterTrack.azimuthPixelSize = masterTrack.frames[0].azimuthPixelSize
masterTrack.azimuthLineInterval = masterTrack.frames[0].azimuthLineInterval
referenceTrack.sensingStart = referenceTrack.frames[0].sensingStart
referenceTrack.prf = referenceTrack.frames[0].prf
referenceTrack.azimuthPixelSize = referenceTrack.frames[0].azimuthPixelSize
referenceTrack.azimuthLineInterval = referenceTrack.frames[0].azimuthLineInterval
#update track parameters, slave
#update track parameters, secondary
#########################################################
#mosaic size
slaveTrack.numberOfSamples = slaveTrack.frames[0].numberOfSamples
slaveTrack.numberOfLines = slaveTrack.frames[0].numberOfLines
secondaryTrack.numberOfSamples = secondaryTrack.frames[0].numberOfSamples
secondaryTrack.numberOfLines = secondaryTrack.frames[0].numberOfLines
#NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE
#range parameters
slaveTrack.startingRange = slaveTrack.frames[0].startingRange
slaveTrack.rangeSamplingRate = slaveTrack.frames[0].rangeSamplingRate
slaveTrack.rangePixelSize = slaveTrack.frames[0].rangePixelSize
secondaryTrack.startingRange = secondaryTrack.frames[0].startingRange
secondaryTrack.rangeSamplingRate = secondaryTrack.frames[0].rangeSamplingRate
secondaryTrack.rangePixelSize = secondaryTrack.frames[0].rangePixelSize
#azimuth parameters
slaveTrack.sensingStart = slaveTrack.frames[0].sensingStart
slaveTrack.prf = slaveTrack.frames[0].prf
slaveTrack.azimuthPixelSize = slaveTrack.frames[0].azimuthPixelSize
slaveTrack.azimuthLineInterval = slaveTrack.frames[0].azimuthLineInterval
secondaryTrack.sensingStart = secondaryTrack.frames[0].sensingStart
secondaryTrack.prf = secondaryTrack.frames[0].prf
secondaryTrack.azimuthPixelSize = secondaryTrack.frames[0].azimuthPixelSize
secondaryTrack.azimuthLineInterval = secondaryTrack.frames[0].azimuthLineInterval
else:
#choose offsets
if self.frameOffsetMatching:
rangeOffsets = self._insar.frameRangeOffsetMatchingMaster
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingMaster
rangeOffsets = self._insar.frameRangeOffsetMatchingReference
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingReference
else:
rangeOffsets = self._insar.frameRangeOffsetGeometricalMaster
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalMaster
rangeOffsets = self._insar.frameRangeOffsetGeometricalReference
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalReference
#list of input files
inputInterferograms = []
inputAmplitudes = []
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
inputInterferograms.append(os.path.join('../', frameDir, 'mosaic', self._insar.interferogram))
inputAmplitudes.append(os.path.join('../', frameDir, 'mosaic', self._insar.amplitude))
#note that track parameters are updated after mosaicking
#mosaic amplitudes
frameMosaic(masterTrack, inputAmplitudes, self._insar.amplitude,
frameMosaic(referenceTrack, inputAmplitudes, self._insar.amplitude,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
updateTrack=False, phaseCompensation=False, resamplingMethod=0)
#mosaic interferograms
frameMosaic(masterTrack, inputInterferograms, self._insar.interferogram,
frameMosaic(referenceTrack, inputInterferograms, self._insar.interferogram,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
updateTrack=True, phaseCompensation=True, resamplingMethod=1)
create_xml(self._insar.amplitude, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'amp')
create_xml(self._insar.interferogram, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'int')
create_xml(self._insar.amplitude, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'amp')
create_xml(self._insar.interferogram, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'int')
#update slave parameters here
#do not match for slave, always use geometrical
rangeOffsets = self._insar.frameRangeOffsetGeometricalSlave
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalSlave
frameMosaicParameters(slaveTrack, rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
#update secondary parameters here
#do not match for secondary, always use geometrical
rangeOffsets = self._insar.frameRangeOffsetGeometricalSecondary
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalSecondary
frameMosaicParameters(secondaryTrack, rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
os.chdir('../')
#save parameter file
self._insar.saveProduct(masterTrack, self._insar.masterTrackParameter)
self._insar.saveProduct(slaveTrack, self._insar.slaveTrackParameter)
self._insar.saveProduct(referenceTrack, self._insar.referenceTrackParameter)
self._insar.saveProduct(secondaryTrack, self._insar.secondaryTrackParameter)
@ -127,10 +127,10 @@ def runFrameMosaic(self):
os.makedirs(mosaicDir, exist_ok=True)
os.chdir(mosaicDir)
numberOfFrames = len(masterTrack.frames)
numberOfFrames = len(referenceTrack.frames)
if numberOfFrames == 1:
import shutil
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.masterFrames[0]))
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.referenceFrames[0]))
for sdFile in self._insar.interferogramSd:
if not os.path.isfile(sdFile):
os.symlink(os.path.join('../', frameDir, sdFile), sdFile)
@ -139,27 +139,27 @@ def runFrameMosaic(self):
else:
#choose offsets
if self.frameOffsetMatching:
rangeOffsets = self._insar.frameRangeOffsetMatchingMaster
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingMaster
rangeOffsets = self._insar.frameRangeOffsetMatchingReference
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingReference
else:
rangeOffsets = self._insar.frameRangeOffsetGeometricalMaster
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalMaster
rangeOffsets = self._insar.frameRangeOffsetGeometricalReference
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalReference
#list of input files
inputSd = [[], [], []]
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
for k, sdFile in enumerate(self._insar.interferogramSd):
inputSd[k].append(os.path.join('../', frameDir, 'mosaic', sdFile))
#mosaic spectral diversity interferograms
for inputSdList, outputSdFile in zip(inputSd, self._insar.interferogramSd):
frameMosaic(masterTrack, inputSdList, outputSdFile,
frameMosaic(referenceTrack, inputSdList, outputSdFile,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
updateTrack=False, phaseCompensation=True, resamplingMethod=1)
for sdFile in self._insar.interferogramSd:
create_xml(sdFile, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'int')
create_xml(sdFile, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'int')
os.chdir('../')

View File

@ -17,33 +17,33 @@ def runFrameOffset(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
mosaicDir = 'insar'
os.makedirs(mosaicDir, exist_ok=True)
os.chdir(mosaicDir)
if len(masterTrack.frames) > 1:
#here we use master amplitude image mosaicked from extracted bursts.
if len(referenceTrack.frames) > 1:
#here we use reference amplitude image mosaicked from extracted bursts.
matchingMode=1
#compute swath offset
offsetMaster = frameOffset(masterTrack, os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude), self._insar.masterFrameOffset,
offsetReference = frameOffset(referenceTrack, os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude), self._insar.referenceFrameOffset,
crossCorrelation=self.frameOffsetMatching, matchingMode=matchingMode)
#only use geometrical offset for slave
offsetSlave = frameOffset(slaveTrack, os.path.join(self._insar.slaveBurstPrefix, self._insar.slaveMagnitude), self._insar.slaveFrameOffset,
#only use geometrical offset for secondary
offsetSecondary = frameOffset(secondaryTrack, os.path.join(self._insar.secondaryBurstPrefix, self._insar.secondaryMagnitude), self._insar.secondaryFrameOffset,
crossCorrelation=False, matchingMode=matchingMode)
self._insar.frameRangeOffsetGeometricalMaster = offsetMaster[0]
self._insar.frameAzimuthOffsetGeometricalMaster = offsetMaster[1]
self._insar.frameRangeOffsetGeometricalSlave = offsetSlave[0]
self._insar.frameAzimuthOffsetGeometricalSlave = offsetSlave[1]
self._insar.frameRangeOffsetGeometricalReference = offsetReference[0]
self._insar.frameAzimuthOffsetGeometricalReference = offsetReference[1]
self._insar.frameRangeOffsetGeometricalSecondary = offsetSecondary[0]
self._insar.frameAzimuthOffsetGeometricalSecondary = offsetSecondary[1]
if self.frameOffsetMatching:
self._insar.frameRangeOffsetMatchingMaster = offsetMaster[2]
self._insar.frameAzimuthOffsetMatchingMaster = offsetMaster[3]
#self._insar.frameRangeOffsetMatchingSlave = offsetSlave[2]
#self._insar.frameAzimuthOffsetMatchingSlave = offsetSlave[3]
self._insar.frameRangeOffsetMatchingReference = offsetReference[2]
self._insar.frameAzimuthOffsetMatchingReference = offsetReference[3]
#self._insar.frameRangeOffsetMatchingSecondary = offsetSecondary[2]
#self._insar.frameAzimuthOffsetMatchingSecondary = offsetSecondary[3]
os.chdir('../')

View File

@ -20,8 +20,8 @@ def runGeocodeSd(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
#slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
#secondaryTrack = self._insar.loadTrack(reference=False)
demFile = os.path.abspath(self._insar.demGeo)
@ -37,7 +37,7 @@ def runGeocodeSd(self):
geocodeList += glob.glob(xxx)
if self.bbox == None:
bbox = getBboxGeo(masterTrack)
bbox = getBboxGeo(referenceTrack)
else:
bbox = self.bbox
catalog.addItem('geocode bounding box', bbox, 'runGeocodeSd')
@ -56,7 +56,7 @@ def runGeocodeSd(self):
else:
interpMethod = self.geocodeInterpMethodSd.lower()
geocode(masterTrack, demFile, inputFile, bbox, numberRangeLooks, numberAzimuthLooks, interpMethod, 0, 0)
geocode(referenceTrack, demFile, inputFile, bbox, numberRangeLooks, numberAzimuthLooks, interpMethod, 0, 0)
os.chdir('../')

View File

@ -23,13 +23,13 @@ def runIonSubband(self):
self._insar.procDoc.addAllFromCatalog(catalog)
return
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
#using 1/3, 1/3, 1/3 band split
radarWavelength = masterTrack.radarWavelength
rangeBandwidth = masterTrack.frames[0].swaths[0].rangeBandwidth
rangeSamplingRate = masterTrack.frames[0].swaths[0].rangeSamplingRate
radarWavelength = referenceTrack.radarWavelength
rangeBandwidth = referenceTrack.frames[0].swaths[0].rangeBandwidth
rangeSamplingRate = referenceTrack.frames[0].swaths[0].rangeSamplingRate
radarWavelengthLower = SPEED_OF_LIGHT/(SPEED_OF_LIGHT / radarWavelength - rangeBandwidth / 3.0)
radarWavelengthUpper = SPEED_OF_LIGHT/(SPEED_OF_LIGHT / radarWavelength + rangeBandwidth / 3.0)
subbandRadarWavelength = [radarWavelengthLower, radarWavelengthUpper]
@ -65,7 +65,7 @@ def runIonSubband(self):
#create insar processing directories
for k in range(2):
subbandDir = ionDir['subband'][k]
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
swathDir = 's{}'.format(swathNumber)
@ -87,13 +87,13 @@ def runIonSubband(self):
from isceobj.Alos2Proc.Alos2ProcPublic import mosaicBurstInterferogram
from isceobj.Alos2Proc.Alos2ProcPublic import create_xml
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
swathDir = 's{}'.format(swathNumber)
#filter master and slave images
for burstPrefix, swath in zip([self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix],
[masterTrack.frames[i].swaths[j], slaveTrack.frames[i].swaths[j]]):
#filter reference and secondary images
for burstPrefix, swath in zip([self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix],
[referenceTrack.frames[i].swaths[j], secondaryTrack.frames[i].swaths[j]]):
slcDir = os.path.join('../', frameDir, swathDir, burstPrefix)
slcLowerDir = os.path.join(ionDir['subband'][0], frameDir, swathDir, burstPrefix)
slcUpperDir = os.path.join(ionDir['subband'][1], frameDir, swathDir, burstPrefix)
@ -114,8 +114,8 @@ def runIonSubband(self):
os.chdir(os.path.join(ionDir['subband'][l], frameDir, swathDir))
#recreate xml file to remove the file path
#can also use fixImageXml.py?
for burstPrefix, swath in zip([self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix],
[masterTrack.frames[i].swaths[j], slaveTrack.frames[i].swaths[j]]):
for burstPrefix, swath in zip([self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix],
[referenceTrack.frames[i].swaths[j], secondaryTrack.frames[i].swaths[j]]):
os.chdir(burstPrefix)
for k in range(swath.numberOfBursts):
slc = burstPrefix+'_%02d.slc'%(k+1)
@ -130,12 +130,12 @@ def runIonSubband(self):
#############################################
#1. form interferogram
#############################################
masterSwath = masterTrack.frames[i].swaths[j]
slaveSwath = slaveTrack.frames[i].swaths[j]
referenceSwath = referenceTrack.frames[i].swaths[j]
secondarySwath = secondaryTrack.frames[i].swaths[j]
#set up resampling parameters
width = masterSwath.numberOfSamples
length = masterSwath.numberOfLines
width = referenceSwath.numberOfSamples
length = referenceSwath.numberOfLines
polyCoeff = self._insar.rangeResidualOffsetCc[i][j]
rgIndex = (np.arange(width)-polyCoeff[-1][0])/polyCoeff[-1][1]
azIndex = (np.arange(length)-polyCoeff[-1][2])/polyCoeff[-1][3]
@ -144,36 +144,36 @@ def runIonSubband(self):
polyCoeff[2][0] * azIndex[:, None]**2
azimuthOffset = self._insar.azimuthResidualOffsetCc[i][j]
slaveBurstResampledDir = self._insar.slaveBurstPrefix + '_2_coreg_cc'
secondaryBurstResampledDir = self._insar.secondaryBurstPrefix + '_2_coreg_cc'
interferogramDir = 'burst_interf_2_coreg_cc'
interferogramPrefix = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix
resampleBursts(masterSwath, slaveSwath,
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, slaveBurstResampledDir, interferogramDir,
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, self._insar.slaveBurstPrefix, interferogramPrefix,
interferogramPrefix = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix
resampleBursts(referenceSwath, secondarySwath,
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, secondaryBurstResampledDir, interferogramDir,
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, self._insar.secondaryBurstPrefix, interferogramPrefix,
os.path.join('../../../../{}/{}'.format(frameDir, swathDir), self._insar.rangeOffset),
os.path.join('../../../../{}/{}'.format(frameDir, swathDir), self._insar.azimuthOffset),
rangeOffsetResidual=rangeOffset, azimuthOffsetResidual=azimuthOffset)
os.chdir(self._insar.masterBurstPrefix)
mosaicBurstAmplitude(masterSwath, self._insar.masterBurstPrefix, self._insar.masterMagnitude, numberOfLooksThreshold=4)
os.chdir(self._insar.referenceBurstPrefix)
mosaicBurstAmplitude(referenceSwath, self._insar.referenceBurstPrefix, self._insar.referenceMagnitude, numberOfLooksThreshold=4)
os.chdir('../')
os.chdir(slaveBurstResampledDir)
mosaicBurstAmplitude(masterSwath, self._insar.slaveBurstPrefix, self._insar.slaveMagnitude, numberOfLooksThreshold=4)
os.chdir(secondaryBurstResampledDir)
mosaicBurstAmplitude(referenceSwath, self._insar.secondaryBurstPrefix, self._insar.secondaryMagnitude, numberOfLooksThreshold=4)
os.chdir('../')
os.chdir(interferogramDir)
mosaicBurstInterferogram(masterSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
mosaicBurstInterferogram(referenceSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
os.chdir('../')
amp = np.zeros((masterSwath.numberOfLines, 2*masterSwath.numberOfSamples), dtype=np.float32)
amp[0:, 1:masterSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(slaveBurstResampledDir, self._insar.slaveMagnitude), \
dtype=np.float32).reshape(masterSwath.numberOfLines, masterSwath.numberOfSamples)
amp[0:, 0:masterSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude), \
dtype=np.float32).reshape(masterSwath.numberOfLines, masterSwath.numberOfSamples)
amp = np.zeros((referenceSwath.numberOfLines, 2*referenceSwath.numberOfSamples), dtype=np.float32)
amp[0:, 1:referenceSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(secondaryBurstResampledDir, self._insar.secondaryMagnitude), \
dtype=np.float32).reshape(referenceSwath.numberOfLines, referenceSwath.numberOfSamples)
amp[0:, 0:referenceSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude), \
dtype=np.float32).reshape(referenceSwath.numberOfLines, referenceSwath.numberOfSamples)
amp.astype(np.float32).tofile(self._insar.amplitude)
create_xml(self._insar.amplitude, masterSwath.numberOfSamples, masterSwath.numberOfLines, 'amp')
create_xml(self._insar.amplitude, referenceSwath.numberOfSamples, referenceSwath.numberOfLines, 'amp')
os.rename(os.path.join(interferogramDir, self._insar.interferogram), self._insar.interferogram)
os.rename(os.path.join(interferogramDir, self._insar.interferogram+'.vrt'), self._insar.interferogram+'.vrt')
@ -182,9 +182,9 @@ def runIonSubband(self):
#############################################
#2. delete subband slcs
#############################################
shutil.rmtree(self._insar.masterBurstPrefix)
shutil.rmtree(self._insar.slaveBurstPrefix)
shutil.rmtree(slaveBurstResampledDir)
shutil.rmtree(self._insar.referenceBurstPrefix)
shutil.rmtree(self._insar.secondaryBurstPrefix)
shutil.rmtree(secondaryBurstResampledDir)
shutil.rmtree(interferogramDir)
os.chdir('../../../')
@ -198,7 +198,7 @@ def runIonSubband(self):
for k in range(2):
os.chdir(ionDir['subband'][k])
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
@ -208,7 +208,7 @@ def runIonSubband(self):
if self._insar.endingSwath-self._insar.startingSwath+1 == 1:
import shutil
swathDir = 's{}'.format(masterTrack.frames[i].swaths[0].swathNumber)
swathDir = 's{}'.format(referenceTrack.frames[i].swaths[0].swathNumber)
# if not os.path.isfile(self._insar.interferogram):
# os.symlink(os.path.join('../', swathDir, self._insar.interferogram), self._insar.interferogram)
@ -231,20 +231,20 @@ def runIonSubband(self):
continue
#choose offsets
numberOfFrames = len(masterTrack.frames)
numberOfSwaths = len(masterTrack.frames[i].swaths)
numberOfFrames = len(referenceTrack.frames)
numberOfSwaths = len(referenceTrack.frames[i].swaths)
if self.swathOffsetMatching:
#no need to do this as the API support 2-d list
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetMatchingMaster
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingMaster
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetMatchingReference
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingReference
else:
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetGeometricalMaster
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalMaster
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetGeometricalReference
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalReference
rangeOffsets = rangeOffsets[i]
azimuthOffsets = azimuthOffsets[i]
@ -260,16 +260,16 @@ def runIonSubband(self):
#compute phase needed to be compensated using startingRange
if j >= 1:
#phaseDiffSwath1 = -4.0 * np.pi * (masterTrack.frames[i].swaths[j-1].startingRange - slaveTrack.frames[i].swaths[j-1].startingRange)/subbandRadarWavelength[k]
#phaseDiffSwath2 = -4.0 * np.pi * (masterTrack.frames[i].swaths[j].startingRange - slaveTrack.frames[i].swaths[j].startingRange)/subbandRadarWavelength[k]
phaseDiffSwath1 = +4.0 * np.pi * masterTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
-4.0 * np.pi * slaveTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
phaseDiffSwath2 = +4.0 * np.pi * masterTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
-4.0 * np.pi * slaveTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
if masterTrack.frames[i].swaths[j-1].startingRange - slaveTrack.frames[i].swaths[j-1].startingRange == \
masterTrack.frames[i].swaths[j].startingRange - slaveTrack.frames[i].swaths[j].startingRange:
#phaseDiffSwath1 = -4.0 * np.pi * (referenceTrack.frames[i].swaths[j-1].startingRange - secondaryTrack.frames[i].swaths[j-1].startingRange)/subbandRadarWavelength[k]
#phaseDiffSwath2 = -4.0 * np.pi * (referenceTrack.frames[i].swaths[j].startingRange - secondaryTrack.frames[i].swaths[j].startingRange)/subbandRadarWavelength[k]
phaseDiffSwath1 = +4.0 * np.pi * referenceTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
-4.0 * np.pi * secondaryTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
phaseDiffSwath2 = +4.0 * np.pi * referenceTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
-4.0 * np.pi * secondaryTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
if referenceTrack.frames[i].swaths[j-1].startingRange - secondaryTrack.frames[i].swaths[j-1].startingRange == \
referenceTrack.frames[i].swaths[j].startingRange - secondaryTrack.frames[i].swaths[j].startingRange:
#phaseDiff.append(phaseDiffSwath2 - phaseDiffSwath1)
#if master and slave versions are all before or after version 2.025 (starting range error < 0.5 m),
#if reference and secondary versions are all before or after version 2.025 (starting range error < 0.5 m),
#it should be OK to do the above.
#see results in neom where it meets the above requirement, but there is still phase diff
#to be less risky, we do not input values here
@ -279,7 +279,7 @@ def runIonSubband(self):
#note that frame parameters are updated after mosaicking
#mosaic amplitudes
swathMosaic(masterTrack.frames[i], inputAmplitudes, self._insar.amplitude,
swathMosaic(referenceTrack.frames[i], inputAmplitudes, self._insar.amplitude,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, resamplingMethod=0)
#mosaic interferograms
#These are for ALOS-2, may need to change for ALOS-4!
@ -294,7 +294,7 @@ def runIonSubband(self):
phaseDiffFixed = None
snapThreshold = None
(phaseDiffEst, phaseDiffUsed, phaseDiffSource) = swathMosaic(masterTrack.frames[i], inputInterferograms, self._insar.interferogram,
(phaseDiffEst, phaseDiffUsed, phaseDiffSource) = swathMosaic(referenceTrack.frames[i], inputInterferograms, self._insar.interferogram,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, updateFrame=False,
phaseCompensation=True, phaseDiff=phaseDiff, phaseDiffFixed=phaseDiffFixed, snapThreshold=snapThreshold, pcRangeLooks=1, pcAzimuthLooks=3,
filt=False, resamplingMethod=1)
@ -313,8 +313,8 @@ def runIonSubband(self):
phaseDiffUnstableExist = True
catalog.addItem('{} subswath phase difference unstable exists'.format(ionDir['subband'][k]), phaseDiffUnstableExist, 'runIonSubband')
create_xml(self._insar.amplitude, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'amp')
create_xml(self._insar.interferogram, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'int')
create_xml(self._insar.amplitude, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'amp')
create_xml(self._insar.interferogram, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'int')
os.chdir('../')
os.chdir('../')
@ -334,10 +334,10 @@ def runIonSubband(self):
os.makedirs(mosaicDir, exist_ok=True)
os.chdir(mosaicDir)
numberOfFrames = len(masterTrack.frames)
numberOfFrames = len(referenceTrack.frames)
if numberOfFrames == 1:
import shutil
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.masterFrames[0]))
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.referenceFrames[0]))
# if not os.path.isfile(self._insar.interferogram):
# os.symlink(os.path.join('../', frameDir, self._insar.interferogram), self._insar.interferogram)
# #shutil.copy2() can overwrite
@ -358,32 +358,32 @@ def runIonSubband(self):
else:
#choose offsets
if self.frameOffsetMatching:
rangeOffsets = self._insar.frameRangeOffsetMatchingMaster
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingMaster
rangeOffsets = self._insar.frameRangeOffsetMatchingReference
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingReference
else:
rangeOffsets = self._insar.frameRangeOffsetGeometricalMaster
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalMaster
rangeOffsets = self._insar.frameRangeOffsetGeometricalReference
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalReference
#list of input files
inputInterferograms = []
inputAmplitudes = []
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
inputInterferograms.append(os.path.join('../', frameDir, 'mosaic', self._insar.interferogram))
inputAmplitudes.append(os.path.join('../', frameDir, 'mosaic', self._insar.amplitude))
#note that track parameters are updated after mosaicking
#mosaic amplitudes
frameMosaic(masterTrack, inputAmplitudes, self._insar.amplitude,
frameMosaic(referenceTrack, inputAmplitudes, self._insar.amplitude,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
updateTrack=False, phaseCompensation=False, resamplingMethod=0)
#mosaic interferograms
frameMosaic(masterTrack, inputInterferograms, self._insar.interferogram,
frameMosaic(referenceTrack, inputInterferograms, self._insar.interferogram,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
updateTrack=False, phaseCompensation=True, resamplingMethod=1)
create_xml(self._insar.amplitude, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'amp')
create_xml(self._insar.interferogram, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'int')
create_xml(self._insar.amplitude, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'amp')
create_xml(self._insar.interferogram, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'int')
os.chdir('../')
os.chdir('../')
@ -397,7 +397,7 @@ def runIonSubband(self):
for k in range(2):
os.chdir(ionDir['subband'][k])
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
shutil.rmtree(frameDir)
#cmd = 'rm -rf {}'.format(frameDir)
@ -418,7 +418,7 @@ def runIonSubband(self):
os.makedirs(insarDir, exist_ok=True)
os.chdir(insarDir)
rangePixelSize = self._insar.numberRangeLooks1 * masterTrack.rangePixelSize
rangePixelSize = self._insar.numberRangeLooks1 * referenceTrack.rangePixelSize
radarWavelength = subbandRadarWavelength[k]
rectRangeOffset = os.path.join('../../../', insarDir, self._insar.rectRangeOffset)

View File

@ -19,8 +19,8 @@ def runLookSd(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
#masterTrack = self._insar.loadTrack(master=True)
#slaveTrack = self._insar.loadTrack(master=False)
#referenceTrack = self._insar.loadTrack(reference=True)
#secondaryTrack = self._insar.loadTrack(reference=False)
wbdFile = os.path.abspath(self._insar.wbd)
sdDir = 'sd'

View File

@ -27,24 +27,24 @@ def runPreprocessor(self):
#find files
#actually no need to use absolute path any longer, since we are able to find file from vrt now. 27-JAN-2020, CRL.
#denseoffset may still need absolute path when making links
self.masterDir = os.path.abspath(self.masterDir)
self.slaveDir = os.path.abspath(self.slaveDir)
self.referenceDir = os.path.abspath(self.referenceDir)
self.secondaryDir = os.path.abspath(self.secondaryDir)
ledFilesMaster = sorted(glob.glob(os.path.join(self.masterDir, 'LED-ALOS2*-*-*')))
imgFilesMaster = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*-*-*'.format(self.masterPolarization.upper()))))
ledFilesReference = sorted(glob.glob(os.path.join(self.referenceDir, 'LED-ALOS2*-*-*')))
imgFilesReference = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*-*-*'.format(self.referencePolarization.upper()))))
ledFilesSlave = sorted(glob.glob(os.path.join(self.slaveDir, 'LED-ALOS2*-*-*')))
imgFilesSlave = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*-*-*'.format(self.slavePolarization.upper()))))
ledFilesSecondary = sorted(glob.glob(os.path.join(self.secondaryDir, 'LED-ALOS2*-*-*')))
imgFilesSecondary = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*-*-*'.format(self.secondaryPolarization.upper()))))
firstFrameMaster = ledFilesMaster[0].split('-')[-3][-4:]
firstFrameSlave = ledFilesSlave[0].split('-')[-3][-4:]
firstFrameImagesMaster = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.masterPolarization.upper(), firstFrameMaster))))
firstFrameImagesSlave = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.slavePolarization.upper(), firstFrameSlave))))
firstFrameReference = ledFilesReference[0].split('-')[-3][-4:]
firstFrameSecondary = ledFilesSecondary[0].split('-')[-3][-4:]
firstFrameImagesReference = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.referencePolarization.upper(), firstFrameReference))))
firstFrameImagesSecondary = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.secondaryPolarization.upper(), firstFrameSecondary))))
#determin operation mode
masterMode = os.path.basename(ledFilesMaster[0]).split('-')[-1][0:3]
slaveMode = os.path.basename(ledFilesSlave[0]).split('-')[-1][0:3]
referenceMode = os.path.basename(ledFilesReference[0]).split('-')[-1][0:3]
secondaryMode = os.path.basename(ledFilesSecondary[0]).split('-')[-1][0:3]
spotlightModes = ['SBS']
stripmapModes = ['UBS', 'UBD', 'HBS', 'HBD', 'HBQ', 'FBS', 'FBD', 'FBQ']
scansarNominalModes = ['WBS', 'WBD', 'WWS', 'WWD']
@ -52,21 +52,21 @@ def runPreprocessor(self):
scansarModes = ['WBS', 'WBD', 'WWS', 'WWD', 'VBS', 'VBD']
#usable combinations
if (masterMode in spotlightModes) and (slaveMode in spotlightModes):
if (referenceMode in spotlightModes) and (secondaryMode in spotlightModes):
self._insar.modeCombination = 0
elif (masterMode in stripmapModes) and (slaveMode in stripmapModes):
elif (referenceMode in stripmapModes) and (secondaryMode in stripmapModes):
self._insar.modeCombination = 1
elif (masterMode in scansarNominalModes) and (slaveMode in scansarNominalModes):
elif (referenceMode in scansarNominalModes) and (secondaryMode in scansarNominalModes):
self._insar.modeCombination = 21
elif (masterMode in scansarWideModes) and (slaveMode in scansarWideModes):
elif (referenceMode in scansarWideModes) and (secondaryMode in scansarWideModes):
self._insar.modeCombination = 22
elif (masterMode in scansarNominalModes) and (slaveMode in stripmapModes):
elif (referenceMode in scansarNominalModes) and (secondaryMode in stripmapModes):
self._insar.modeCombination = 31
elif (masterMode in scansarWideModes) and (slaveMode in stripmapModes):
elif (referenceMode in scansarWideModes) and (secondaryMode in stripmapModes):
self._insar.modeCombination = 32
else:
print('\n\nthis mode combination is not possible')
print('note that for ScanSAR-stripmap, ScanSAR must be master\n\n')
print('note that for ScanSAR-stripmap, ScanSAR must be reference\n\n')
raise Exception('mode combination not supported')
@ -107,39 +107,39 @@ def runPreprocessor(self):
self._insar.numberAzimuthLooksSd = 4
#define processing file names
self._insar.masterDate = os.path.basename(ledFilesMaster[0]).split('-')[2]
self._insar.slaveDate = os.path.basename(ledFilesSlave[0]).split('-')[2]
self._insar.setFilename(masterDate=self._insar.masterDate, slaveDate=self._insar.slaveDate,
self._insar.referenceDate = os.path.basename(ledFilesReference[0]).split('-')[2]
self._insar.secondaryDate = os.path.basename(ledFilesSecondary[0]).split('-')[2]
self._insar.setFilename(referenceDate=self._insar.referenceDate, secondaryDate=self._insar.secondaryDate,
nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1,
nrlks2=self._insar.numberRangeLooks2, nalks2=self._insar.numberAzimuthLooks2)
self._insar.setFilenameSd(masterDate=self._insar.masterDate, slaveDate=self._insar.slaveDate,
self._insar.setFilenameSd(referenceDate=self._insar.referenceDate, secondaryDate=self._insar.secondaryDate,
nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1,
nrlks_sd=self._insar.numberRangeLooksSd, nalks_sd=self._insar.numberAzimuthLooksSd, nsd=3)
#find frame numbers
if (self._insar.modeCombination == 31) or (self._insar.modeCombination == 32):
if (self.masterFrames == None) or (self.slaveFrames == None):
raise Exception('for ScanSAR-stripmap inteferometry, you must set master and slave frame numbers')
if (self.referenceFrames == None) or (self.secondaryFrames == None):
raise Exception('for ScanSAR-stripmap inteferometry, you must set reference and secondary frame numbers')
#if not set, find frames automatically
if self.masterFrames == None:
self.masterFrames = []
for led in ledFilesMaster:
if self.referenceFrames == None:
self.referenceFrames = []
for led in ledFilesReference:
frameNumber = os.path.basename(led).split('-')[1][-4:]
if frameNumber not in self.masterFrames:
self.masterFrames.append(frameNumber)
if self.slaveFrames == None:
self.slaveFrames = []
for led in ledFilesSlave:
if frameNumber not in self.referenceFrames:
self.referenceFrames.append(frameNumber)
if self.secondaryFrames == None:
self.secondaryFrames = []
for led in ledFilesSecondary:
frameNumber = os.path.basename(led).split('-')[1][-4:]
if frameNumber not in self.slaveFrames:
self.slaveFrames.append(frameNumber)
if frameNumber not in self.secondaryFrames:
self.secondaryFrames.append(frameNumber)
#sort frames
self.masterFrames = sorted(self.masterFrames)
self.slaveFrames = sorted(self.slaveFrames)
self.referenceFrames = sorted(self.referenceFrames)
self.secondaryFrames = sorted(self.secondaryFrames)
#check number of frames
if len(self.masterFrames) != len(self.slaveFrames):
raise Exception('number of frames in master dir is not equal to number of frames \
in slave dir. please set frame number manually')
if len(self.referenceFrames) != len(self.secondaryFrames):
raise Exception('number of frames in reference dir is not equal to number of frames \
in secondary dir. please set frame number manually')
#find swath numbers (if not ScanSAR-ScanSAR, compute valid swaths)
@ -168,7 +168,7 @@ def runPreprocessor(self):
numberOfSwaths = 7
overlapSubswaths = []
for i in range(numberOfSwaths):
overlapRatio = check_overlap(ledFilesMaster[0], firstFrameImagesMaster[i], ledFilesSlave[0], firstFrameImagesSlave[0])
overlapRatio = check_overlap(ledFilesReference[0], firstFrameImagesReference[i], ledFilesSecondary[0], firstFrameImagesSecondary[0])
if overlapRatio > 1.0 / 4.0:
overlapSubswaths.append(i+1)
if overlapSubswaths == []:
@ -177,8 +177,8 @@ def runPreprocessor(self):
self.endingSwath = int(overlapSubswaths[-1])
#save the valid frames and swaths for future processing
self._insar.masterFrames = self.masterFrames
self._insar.slaveFrames = self.slaveFrames
self._insar.referenceFrames = self.referenceFrames
self._insar.secondaryFrames = self.secondaryFrames
self._insar.startingSwath = self.startingSwath
self._insar.endingSwath = self.endingSwath
@ -186,76 +186,76 @@ def runPreprocessor(self):
##################################################
#1. create directories and read data
##################################################
self.master.configure()
self.slave.configure()
self.master.track.configure()
self.slave.track.configure()
for i, (masterFrame, slaveFrame) in enumerate(zip(self._insar.masterFrames, self._insar.slaveFrames)):
self.reference.configure()
self.secondary.configure()
self.reference.track.configure()
self.secondary.track.configure()
for i, (referenceFrame, secondaryFrame) in enumerate(zip(self._insar.referenceFrames, self._insar.secondaryFrames)):
#frame number starts with 1
frameDir = 'f{}_{}'.format(i+1, masterFrame)
frameDir = 'f{}_{}'.format(i+1, referenceFrame)
os.makedirs(frameDir, exist_ok=True)
os.chdir(frameDir)
#attach a frame to master and slave
frameObjMaster = MultiMode.createFrame()
frameObjSlave = MultiMode.createFrame()
frameObjMaster.configure()
frameObjSlave.configure()
self.master.track.frames.append(frameObjMaster)
self.slave.track.frames.append(frameObjSlave)
#attach a frame to reference and secondary
frameObjReference = MultiMode.createFrame()
frameObjSecondary = MultiMode.createFrame()
frameObjReference.configure()
frameObjSecondary.configure()
self.reference.track.frames.append(frameObjReference)
self.secondary.track.frames.append(frameObjSecondary)
#swath number starts with 1
for j in range(self._insar.startingSwath, self._insar.endingSwath+1):
print('processing frame {} swath {}'.format(masterFrame, j))
print('processing frame {} swath {}'.format(referenceFrame, j))
swathDir = 's{}'.format(j)
os.makedirs(swathDir, exist_ok=True)
os.chdir(swathDir)
#attach a swath to master and slave
swathObjMaster = MultiMode.createSwath()
swathObjSlave = MultiMode.createSwath()
swathObjMaster.configure()
swathObjSlave.configure()
self.master.track.frames[-1].swaths.append(swathObjMaster)
self.slave.track.frames[-1].swaths.append(swathObjSlave)
#attach a swath to reference and secondary
swathObjReference = MultiMode.createSwath()
swathObjSecondary = MultiMode.createSwath()
swathObjReference.configure()
swathObjSecondary.configure()
self.reference.track.frames[-1].swaths.append(swathObjReference)
self.secondary.track.frames[-1].swaths.append(swathObjSecondary)
#setup master
self.master.leaderFile = sorted(glob.glob(os.path.join(self.masterDir, 'LED-ALOS2*{}-*-*'.format(masterFrame))))[0]
if masterMode in scansarModes:
self.master.imageFile = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.masterPolarization.upper(), masterFrame, j))))[0]
#setup reference
self.reference.leaderFile = sorted(glob.glob(os.path.join(self.referenceDir, 'LED-ALOS2*{}-*-*'.format(referenceFrame))))[0]
if referenceMode in scansarModes:
self.reference.imageFile = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.referencePolarization.upper(), referenceFrame, j))))[0]
else:
self.master.imageFile = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.masterPolarization.upper(), masterFrame))))[0]
self.master.outputFile = self._insar.masterSlc
self.master.useVirtualFile = self.useVirtualFile
#read master
(imageFDR, imageData)=self.master.readImage()
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.master.readLeader()
self.master.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.master.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.master.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.reference.imageFile = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.referencePolarization.upper(), referenceFrame))))[0]
self.reference.outputFile = self._insar.referenceSlc
self.reference.useVirtualFile = self.useVirtualFile
#read reference
(imageFDR, imageData)=self.reference.readImage()
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.reference.readLeader()
self.reference.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.reference.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.reference.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
#setup slave
self.slave.leaderFile = sorted(glob.glob(os.path.join(self.slaveDir, 'LED-ALOS2*{}-*-*'.format(slaveFrame))))[0]
if slaveMode in scansarModes:
self.slave.imageFile = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.slavePolarization.upper(), slaveFrame, j))))[0]
#setup secondary
self.secondary.leaderFile = sorted(glob.glob(os.path.join(self.secondaryDir, 'LED-ALOS2*{}-*-*'.format(secondaryFrame))))[0]
if secondaryMode in scansarModes:
self.secondary.imageFile = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.secondaryPolarization.upper(), secondaryFrame, j))))[0]
else:
self.slave.imageFile = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.slavePolarization.upper(), slaveFrame))))[0]
self.slave.outputFile = self._insar.slaveSlc
self.slave.useVirtualFile = self.useVirtualFile
#read slave
(imageFDR, imageData)=self.slave.readImage()
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.slave.readLeader()
self.slave.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.slave.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.slave.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.secondary.imageFile = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.secondaryPolarization.upper(), secondaryFrame))))[0]
self.secondary.outputFile = self._insar.secondarySlc
self.secondary.useVirtualFile = self.useVirtualFile
#read secondary
(imageFDR, imageData)=self.secondary.readImage()
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.secondary.readLeader()
self.secondary.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.secondary.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
self.secondary.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
os.chdir('../')
self._insar.saveProduct(self.master.track.frames[-1], self._insar.masterFrameParameter)
self._insar.saveProduct(self.slave.track.frames[-1], self._insar.slaveFrameParameter)
self._insar.saveProduct(self.reference.track.frames[-1], self._insar.referenceFrameParameter)
self._insar.saveProduct(self.secondary.track.frames[-1], self._insar.secondaryFrameParameter)
os.chdir('../')
self._insar.saveProduct(self.master.track, self._insar.masterTrackParameter)
self._insar.saveProduct(self.slave.track, self._insar.slaveTrackParameter)
self._insar.saveProduct(self.reference.track, self._insar.referenceTrackParameter)
self._insar.saveProduct(self.secondary.track, self._insar.secondaryTrackParameter)
##################################################
@ -268,53 +268,53 @@ def runPreprocessor(self):
#synTime = 0
synPercentage = 0
numberOfFrames = len(self._insar.masterFrames)
numberOfFrames = len(self._insar.referenceFrames)
numberOfSwaths = self._insar.endingSwath - self._insar.startingSwath + 1
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
masterSwath = self.master.track.frames[i].swaths[j]
slaveSwath = self.slave.track.frames[i].swaths[j]
referenceSwath = self.reference.track.frames[i].swaths[j]
secondarySwath = self.secondary.track.frames[i].swaths[j]
#using Piyush's code for computing range and azimuth offsets
midRange = masterSwath.startingRange + masterSwath.rangePixelSize * masterSwath.numberOfSamples * 0.5
midSensingStart = masterSwath.sensingStart + datetime.timedelta(seconds = masterSwath.numberOfLines * 0.5 / masterSwath.prf)
llh = self.master.track.orbit.rdr2geo(midSensingStart, midRange)
slvaz, slvrng = self.slave.track.orbit.geo2rdr(llh)
midRange = referenceSwath.startingRange + referenceSwath.rangePixelSize * referenceSwath.numberOfSamples * 0.5
midSensingStart = referenceSwath.sensingStart + datetime.timedelta(seconds = referenceSwath.numberOfLines * 0.5 / referenceSwath.prf)
llh = self.reference.track.orbit.rdr2geo(midSensingStart, midRange)
slvaz, slvrng = self.secondary.track.orbit.geo2rdr(llh)
###Translate to offsets
#note that slave range pixel size and prf might be different from master, here we assume there is a virtual slave with same
#note that secondary range pixel size and prf might be different from reference, here we assume there is a virtual secondary with same
#range pixel size and prf
rgoff = ((slvrng - slaveSwath.startingRange) / masterSwath.rangePixelSize) - masterSwath.numberOfSamples * 0.5
azoff = ((slvaz - slaveSwath.sensingStart).total_seconds() * masterSwath.prf) - masterSwath.numberOfLines * 0.5
rgoff = ((slvrng - secondarySwath.startingRange) / referenceSwath.rangePixelSize) - referenceSwath.numberOfSamples * 0.5
azoff = ((slvaz - secondarySwath.sensingStart).total_seconds() * referenceSwath.prf) - referenceSwath.numberOfLines * 0.5
#compute burst synchronization
#burst parameters for ScanSAR wide mode not estimed yet
if self._insar.modeCombination == 21:
scburstStartLine = (masterSwath.burstStartTime - masterSwath.sensingStart).total_seconds() * masterSwath.prf + azoff
#slave burst start times corresponding to master burst start times (100% synchronization)
scburstStartLines = np.arange(scburstStartLine - 100000*masterSwath.burstCycleLength, \
scburstStartLine + 100000*masterSwath.burstCycleLength, \
masterSwath.burstCycleLength)
dscburstStartLines = -((slaveSwath.burstStartTime - slaveSwath.sensingStart).total_seconds() * slaveSwath.prf - scburstStartLines)
scburstStartLine = (referenceSwath.burstStartTime - referenceSwath.sensingStart).total_seconds() * referenceSwath.prf + azoff
#secondary burst start times corresponding to reference burst start times (100% synchronization)
scburstStartLines = np.arange(scburstStartLine - 100000*referenceSwath.burstCycleLength, \
scburstStartLine + 100000*referenceSwath.burstCycleLength, \
referenceSwath.burstCycleLength)
dscburstStartLines = -((secondarySwath.burstStartTime - secondarySwath.sensingStart).total_seconds() * secondarySwath.prf - scburstStartLines)
#find the difference with minimum absolute value
unsynLines = dscburstStartLines[np.argmin(np.absolute(dscburstStartLines))]
if np.absolute(unsynLines) >= slaveSwath.burstLength:
if np.absolute(unsynLines) >= secondarySwath.burstLength:
synLines = 0
if unsynLines > 0:
unsynLines = slaveSwath.burstLength
unsynLines = secondarySwath.burstLength
else:
unsynLines = -slaveSwath.burstLength
unsynLines = -secondarySwath.burstLength
else:
synLines = slaveSwath.burstLength - np.absolute(unsynLines)
synLines = secondarySwath.burstLength - np.absolute(unsynLines)
unsynTime += unsynLines / masterSwath.prf
synPercentage += synLines / masterSwath.burstLength * 100.0
unsynTime += unsynLines / referenceSwath.prf
synPercentage += synLines / referenceSwath.burstLength * 100.0
catalog.addItem('burst synchronization of frame {} swath {}'.format(frameNumber, swathNumber), '%.1f%%'%(synLines / masterSwath.burstLength * 100.0), 'runPreprocessor')
catalog.addItem('burst synchronization of frame {} swath {}'.format(frameNumber, swathNumber), '%.1f%%'%(synLines / referenceSwath.burstLength * 100.0), 'runPreprocessor')
############################################################################################
#illustration of the sign of the number of unsynchronized lines (unsynLines)
#The convention is the same as ampcor offset, that is,
# slaveLineNumber = masterLineNumber + unsynLines
# secondaryLineNumber = referenceLineNumber + unsynLines
#
# |-----------------------| ------------
# | | ^
@ -326,35 +326,35 @@ def runPreprocessor(self):
# | | | |
# | | | |
# |-----------------------| | |
# Master Burst | |
# Reference Burst | |
# | |
# | |
# | |
# | |
# |-----------------------|
# Slave Burst
# Secondary Burst
#
#
############################################################################################
##burst parameters for ScanSAR wide mode not estimed yet
elif self._insar.modeCombination == 31:
#scansar is master
scburstStartLine = (masterSwath.burstStartTime - masterSwath.sensingStart).total_seconds() * masterSwath.prf + azoff
#slave burst start times corresponding to master burst start times (100% synchronization)
#scansar is reference
scburstStartLine = (referenceSwath.burstStartTime - referenceSwath.sensingStart).total_seconds() * referenceSwath.prf + azoff
#secondary burst start times corresponding to reference burst start times (100% synchronization)
for k in range(-100000, 100000):
saz_burstx = scburstStartLine + masterSwath.burstCycleLength * k
st_burstx = slaveSwath.sensingStart + datetime.timedelta(seconds=saz_burstx / masterSwath.prf)
if saz_burstx >= 0.0 and saz_burstx <= slaveSwath.numberOfLines -1:
slaveSwath.burstStartTime = st_burstx
slaveSwath.burstLength = masterSwath.burstLength
slaveSwath.burstCycleLength = masterSwath.burstCycleLength
slaveSwath.swathNumber = masterSwath.swathNumber
saz_burstx = scburstStartLine + referenceSwath.burstCycleLength * k
st_burstx = secondarySwath.sensingStart + datetime.timedelta(seconds=saz_burstx / referenceSwath.prf)
if saz_burstx >= 0.0 and saz_burstx <= secondarySwath.numberOfLines -1:
secondarySwath.burstStartTime = st_burstx
secondarySwath.burstLength = referenceSwath.burstLength
secondarySwath.burstCycleLength = referenceSwath.burstCycleLength
secondarySwath.swathNumber = referenceSwath.swathNumber
break
#unsynLines = 0
#synLines = masterSwath.burstLength
#unsynTime += unsynLines / masterSwath.prf
#synPercentage += synLines / masterSwath.burstLength * 100.0
#synLines = referenceSwath.burstLength
#unsynTime += unsynLines / referenceSwath.prf
#synPercentage += synLines / referenceSwath.burstLength * 100.0
catalog.addItem('burst synchronization of frame {} swath {}'.format(frameNumber, swathNumber), '%.1f%%'%(100.0), 'runPreprocessor')
else:
pass
@ -362,7 +362,7 @@ def runPreprocessor(self):
#overwrite original frame parameter file
if self._insar.modeCombination == 31:
frameDir = 'f{}_{}'.format(i+1, frameNumber)
self._insar.saveProduct(self.slave.track.frames[i], os.path.join(frameDir, self._insar.slaveFrameParameter))
self._insar.saveProduct(self.secondary.track.frames[i], os.path.join(frameDir, self._insar.secondaryFrameParameter))
#getting average
if self._insar.modeCombination == 21:
@ -384,8 +384,8 @@ def runPreprocessor(self):
##################################################
#3. compute baseline
##################################################
#only compute baseline at four corners and center of the master track
bboxRdr = getBboxRdr(self.master.track)
#only compute baseline at four corners and center of the reference track
bboxRdr = getBboxRdr(self.reference.track)
rangeMin = bboxRdr[0]
rangeMax = bboxRdr[1]
@ -406,16 +406,16 @@ def runPreprocessor(self):
#modify Piyush's code for computing baslines
refElp = Planet(pname='Earth').ellipsoid
for x in points:
masterSV = self.master.track.orbit.interpolate(x[0], method='hermite')
target = self.master.track.orbit.rdr2geo(x[0], x[1])
referenceSV = self.reference.track.orbit.interpolate(x[0], method='hermite')
target = self.reference.track.orbit.rdr2geo(x[0], x[1])
slvTime, slvrng = self.slave.track.orbit.geo2rdr(target)
slaveSV = self.slave.track.orbit.interpolateOrbit(slvTime, method='hermite')
slvTime, slvrng = self.secondary.track.orbit.geo2rdr(target)
secondarySV = self.secondary.track.orbit.interpolateOrbit(slvTime, method='hermite')
targxyz = np.array(refElp.LLH(target[0], target[1], target[2]).ecef().tolist())
mxyz = np.array(masterSV.getPosition())
mvel = np.array(masterSV.getVelocity())
sxyz = np.array(slaveSV.getPosition())
mxyz = np.array(referenceSV.getPosition())
mvel = np.array(referenceSV.getVelocity())
sxyz = np.array(secondarySV.getPosition())
#to fix abrupt change near zero in baseline grid. JUN-05-2020
mvelunit = mvel / np.linalg.norm(mvel)
@ -430,27 +430,27 @@ def runPreprocessor(self):
direction = np.sign(np.dot( np.cross(targxyz-mxyz, sxyz-mxyz), mvel))
Bperp.append(direction*perp)
catalog.addItem('parallel baseline at upperleft of master track', Bpar[0], 'runPreprocessor')
catalog.addItem('parallel baseline at upperright of master track', Bpar[1], 'runPreprocessor')
catalog.addItem('parallel baseline at lowerleft of master track', Bpar[2], 'runPreprocessor')
catalog.addItem('parallel baseline at lowerright of master track', Bpar[3], 'runPreprocessor')
catalog.addItem('parallel baseline at center of master track', Bpar[4], 'runPreprocessor')
catalog.addItem('parallel baseline at upperleft of reference track', Bpar[0], 'runPreprocessor')
catalog.addItem('parallel baseline at upperright of reference track', Bpar[1], 'runPreprocessor')
catalog.addItem('parallel baseline at lowerleft of reference track', Bpar[2], 'runPreprocessor')
catalog.addItem('parallel baseline at lowerright of reference track', Bpar[3], 'runPreprocessor')
catalog.addItem('parallel baseline at center of reference track', Bpar[4], 'runPreprocessor')
catalog.addItem('perpendicular baseline at upperleft of master track', Bperp[0], 'runPreprocessor')
catalog.addItem('perpendicular baseline at upperright of master track', Bperp[1], 'runPreprocessor')
catalog.addItem('perpendicular baseline at lowerleft of master track', Bperp[2], 'runPreprocessor')
catalog.addItem('perpendicular baseline at lowerright of master track', Bperp[3], 'runPreprocessor')
catalog.addItem('perpendicular baseline at center of master track', Bperp[4], 'runPreprocessor')
catalog.addItem('perpendicular baseline at upperleft of reference track', Bperp[0], 'runPreprocessor')
catalog.addItem('perpendicular baseline at upperright of reference track', Bperp[1], 'runPreprocessor')
catalog.addItem('perpendicular baseline at lowerleft of reference track', Bperp[2], 'runPreprocessor')
catalog.addItem('perpendicular baseline at lowerright of reference track', Bperp[3], 'runPreprocessor')
catalog.addItem('perpendicular baseline at center of reference track', Bperp[4], 'runPreprocessor')
##################################################
#4. compute bounding box
##################################################
masterBbox = getBboxGeo(self.master.track)
slaveBbox = getBboxGeo(self.slave.track)
referenceBbox = getBboxGeo(self.reference.track)
secondaryBbox = getBboxGeo(self.secondary.track)
catalog.addItem('master bounding box', masterBbox, 'runPreprocessor')
catalog.addItem('slave bounding box', slaveBbox, 'runPreprocessor')
catalog.addItem('reference bounding box', referenceBbox, 'runPreprocessor')
catalog.addItem('secondary bounding box', secondaryBbox, 'runPreprocessor')
catalog.printToLog(logger, "runPreprocessor")
@ -461,22 +461,22 @@ def runPreprocessor(self):
def check_overlap(ldr_m, img_m, ldr_s, img_s):
from isceobj.Constants import SPEED_OF_LIGHT
rangeSamplingRateMaster, widthMaster, nearRangeMaster = read_param_for_checking_overlap(ldr_m, img_m)
rangeSamplingRateSlave, widthSlave, nearRangeSlave = read_param_for_checking_overlap(ldr_s, img_s)
rangeSamplingRateReference, widthReference, nearRangeReference = read_param_for_checking_overlap(ldr_m, img_m)
rangeSamplingRateSecondary, widthSecondary, nearRangeSecondary = read_param_for_checking_overlap(ldr_s, img_s)
farRangeMaster = nearRangeMaster + (widthMaster-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateMaster
farRangeSlave = nearRangeSlave + (widthSlave-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateSlave
farRangeReference = nearRangeReference + (widthReference-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateReference
farRangeSecondary = nearRangeSecondary + (widthSecondary-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateSecondary
#This should be good enough, although precise image offsets are not used.
if farRangeMaster <= nearRangeSlave:
if farRangeReference <= nearRangeSecondary:
overlapRatio = 0.0
elif farRangeSlave <= nearRangeMaster:
elif farRangeSecondary <= nearRangeReference:
overlapRatio = 0.0
else:
# 0 1 2 3
ranges = np.array([nearRangeMaster, farRangeMaster, nearRangeSlave, farRangeSlave])
ranges = np.array([nearRangeReference, farRangeReference, nearRangeSecondary, farRangeSecondary])
rangesIndex = np.argsort(ranges)
overlapRatio = ranges[rangesIndex[2]]-ranges[rangesIndex[1]] / (farRangeMaster-nearRangeMaster)
overlapRatio = ranges[rangesIndex[2]]-ranges[rangesIndex[1]] / (farRangeReference-nearRangeReference)
return overlapRatio

View File

@ -19,11 +19,11 @@ def runSwathMosaic(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
@ -33,7 +33,7 @@ def runSwathMosaic(self):
if self._insar.endingSwath-self._insar.startingSwath+1 == 1:
import shutil
swathDir = 's{}'.format(masterTrack.frames[i].swaths[0].swathNumber)
swathDir = 's{}'.format(referenceTrack.frames[i].swaths[0].swathNumber)
if not os.path.isfile(self._insar.interferogram):
os.symlink(os.path.join('../', swathDir, self._insar.interferogram), self._insar.interferogram)
@ -53,7 +53,7 @@ def runSwathMosaic(self):
#update frame parameters
#########################################################
frame = masterTrack.frames[i]
frame = referenceTrack.frames[i]
infImg = isceobj.createImage()
infImg.load(self._insar.interferogram+'.xml')
#mosaic size
@ -70,9 +70,9 @@ def runSwathMosaic(self):
frame.azimuthPixelSize = frame.swaths[0].azimuthPixelSize
frame.azimuthLineInterval = frame.swaths[0].azimuthLineInterval
#update frame parameters, slave
#update frame parameters, secondary
#########################################################
frame = slaveTrack.frames[i]
frame = secondaryTrack.frames[i]
#mosaic size
frame.numberOfSamples = int(frame.swaths[0].numberOfSamples/self._insar.numberRangeLooks1)
frame.numberOfLines = int(frame.swaths[0].numberOfLines/self._insar.numberAzimuthLooks1)
@ -90,28 +90,28 @@ def runSwathMosaic(self):
os.chdir('../')
#save parameter file
self._insar.saveProduct(masterTrack.frames[i], self._insar.masterFrameParameter)
self._insar.saveProduct(slaveTrack.frames[i], self._insar.slaveFrameParameter)
self._insar.saveProduct(referenceTrack.frames[i], self._insar.referenceFrameParameter)
self._insar.saveProduct(secondaryTrack.frames[i], self._insar.secondaryFrameParameter)
os.chdir('../')
continue
#choose offsets
numberOfFrames = len(masterTrack.frames)
numberOfSwaths = len(masterTrack.frames[i].swaths)
numberOfFrames = len(referenceTrack.frames)
numberOfSwaths = len(referenceTrack.frames[i].swaths)
if self.swathOffsetMatching:
#no need to do this as the API support 2-d list
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetMatchingMaster
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingMaster
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetMatchingReference
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingReference
else:
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetGeometricalMaster
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalMaster
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetGeometricalReference
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalReference
rangeOffsets = rangeOffsets[i]
azimuthOffsets = azimuthOffsets[i]
@ -126,34 +126,34 @@ def runSwathMosaic(self):
#note that frame parameters are updated after mosaicking
#mosaic amplitudes
swathMosaic(masterTrack.frames[i], inputAmplitudes, self._insar.amplitude,
swathMosaic(referenceTrack.frames[i], inputAmplitudes, self._insar.amplitude,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, resamplingMethod=0)
#mosaic interferograms
swathMosaic(masterTrack.frames[i], inputInterferograms, self._insar.interferogram,
swathMosaic(referenceTrack.frames[i], inputInterferograms, self._insar.interferogram,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, updateFrame=True, resamplingMethod=1)
create_xml(self._insar.amplitude, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'amp')
create_xml(self._insar.interferogram, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'int')
create_xml(self._insar.amplitude, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'amp')
create_xml(self._insar.interferogram, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'int')
#update slave frame parameters here
#no matching for slave, always use geometry
rangeOffsets = self._insar.swathRangeOffsetGeometricalSlave
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalSlave
#update secondary frame parameters here
#no matching for secondary, always use geometry
rangeOffsets = self._insar.swathRangeOffsetGeometricalSecondary
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalSecondary
rangeOffsets = rangeOffsets[i]
azimuthOffsets = azimuthOffsets[i]
swathMosaicParameters(slaveTrack.frames[i], rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
swathMosaicParameters(secondaryTrack.frames[i], rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
os.chdir('../')
#save parameter file
self._insar.saveProduct(masterTrack.frames[i], self._insar.masterFrameParameter)
self._insar.saveProduct(slaveTrack.frames[i], self._insar.slaveFrameParameter)
self._insar.saveProduct(referenceTrack.frames[i], self._insar.referenceFrameParameter)
self._insar.saveProduct(secondaryTrack.frames[i], self._insar.secondaryFrameParameter)
os.chdir('../')
#mosaic spectral diversity interferograms
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
@ -163,7 +163,7 @@ def runSwathMosaic(self):
if self._insar.endingSwath-self._insar.startingSwath+1 == 1:
import shutil
swathDir = 's{}'.format(masterTrack.frames[i].swaths[0].swathNumber)
swathDir = 's{}'.format(referenceTrack.frames[i].swaths[0].swathNumber)
for sdFile in self._insar.interferogramSd:
if not os.path.isfile(sdFile):
@ -176,20 +176,20 @@ def runSwathMosaic(self):
continue
#choose offsets
numberOfFrames = len(masterTrack.frames)
numberOfSwaths = len(masterTrack.frames[i].swaths)
numberOfFrames = len(referenceTrack.frames)
numberOfSwaths = len(referenceTrack.frames[i].swaths)
if self.swathOffsetMatching:
#no need to do this as the API support 2-d list
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetMatchingMaster
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingMaster
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetMatchingReference
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingReference
else:
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetGeometricalMaster
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalMaster
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
rangeOffsets = self._insar.swathRangeOffsetGeometricalReference
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalReference
rangeOffsets = rangeOffsets[i]
azimuthOffsets = azimuthOffsets[i]
@ -203,11 +203,11 @@ def runSwathMosaic(self):
#mosaic spectral diversity interferograms
for inputSdList, outputSdFile in zip(inputSd, self._insar.interferogramSd):
swathMosaic(masterTrack.frames[i], inputSdList, outputSdFile,
swathMosaic(referenceTrack.frames[i], inputSdList, outputSdFile,
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, updateFrame=False, phaseCompensation=True, pcRangeLooks=5, pcAzimuthLooks=5, filt=True, resamplingMethod=1)
for sdFile in self._insar.interferogramSd:
create_xml(sdFile, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'int')
create_xml(sdFile, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'int')
os.chdir('../')
os.chdir('../')

View File

@ -17,12 +17,12 @@ def runSwathOffset(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
secondaryTrack = self._insar.loadTrack(reference=False)
for i, frameNumber in enumerate(self._insar.masterFrames):
for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir)
@ -35,34 +35,34 @@ def runSwathOffset(self):
continue
#compute swath offset
offsetMaster = swathOffset(masterTrack.frames[i], os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude), self._insar.masterSwathOffset,
offsetReference = swathOffset(referenceTrack.frames[i], os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude), self._insar.referenceSwathOffset,
crossCorrelation=self.swathOffsetMatching, numberOfAzimuthLooks=1)
#only use geometrical offset for slave
offsetSlave = swathOffset(slaveTrack.frames[i], os.path.join(self._insar.slaveBurstPrefix, self._insar.slaveMagnitude), self._insar.slaveSwathOffset,
#only use geometrical offset for secondary
offsetSecondary = swathOffset(secondaryTrack.frames[i], os.path.join(self._insar.secondaryBurstPrefix, self._insar.secondaryMagnitude), self._insar.secondarySwathOffset,
crossCorrelation=False, numberOfAzimuthLooks=1)
#initialization
if i == 0:
self._insar.swathRangeOffsetGeometricalMaster = []
self._insar.swathAzimuthOffsetGeometricalMaster = []
self._insar.swathRangeOffsetGeometricalSlave = []
self._insar.swathAzimuthOffsetGeometricalSlave = []
self._insar.swathRangeOffsetGeometricalReference = []
self._insar.swathAzimuthOffsetGeometricalReference = []
self._insar.swathRangeOffsetGeometricalSecondary = []
self._insar.swathAzimuthOffsetGeometricalSecondary = []
if self.swathOffsetMatching:
self._insar.swathRangeOffsetMatchingMaster = []
self._insar.swathAzimuthOffsetMatchingMaster = []
#self._insar.swathRangeOffsetMatchingSlave = []
#self._insar.swathAzimuthOffsetMatchingSlave = []
self._insar.swathRangeOffsetMatchingReference = []
self._insar.swathAzimuthOffsetMatchingReference = []
#self._insar.swathRangeOffsetMatchingSecondary = []
#self._insar.swathAzimuthOffsetMatchingSecondary = []
#append list directly, as the API support 2-d list
self._insar.swathRangeOffsetGeometricalMaster.append(offsetMaster[0])
self._insar.swathAzimuthOffsetGeometricalMaster.append(offsetMaster[1])
self._insar.swathRangeOffsetGeometricalSlave.append(offsetSlave[0])
self._insar.swathAzimuthOffsetGeometricalSlave.append(offsetSlave[1])
self._insar.swathRangeOffsetGeometricalReference.append(offsetReference[0])
self._insar.swathAzimuthOffsetGeometricalReference.append(offsetReference[1])
self._insar.swathRangeOffsetGeometricalSecondary.append(offsetSecondary[0])
self._insar.swathAzimuthOffsetGeometricalSecondary.append(offsetSecondary[1])
if self.swathOffsetMatching:
self._insar.swathRangeOffsetMatchingMaster.append(offsetMaster[2])
self._insar.swathAzimuthOffsetMatchingMaster.append(offsetMaster[3])
#self._insar.swathRangeOffsetMatchingSlave.append(offsetSlave[2])
#self._insar.swathAzimuthOffsetMatchingSlave.append(offsetSlave[3])
self._insar.swathRangeOffsetMatchingReference.append(offsetReference[2])
self._insar.swathAzimuthOffsetMatchingReference.append(offsetReference[3])
#self._insar.swathRangeOffsetMatchingSecondary.append(offsetSecondary[2])
#self._insar.swathAzimuthOffsetMatchingSecondary.append(offsetSecondary[3])
os.chdir('../../')

View File

@ -24,8 +24,8 @@ def runUnwrapSnaphuSd(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True)
#slaveTrack = self._insar.loadTrack(master=False)
referenceTrack = self._insar.loadTrack(reference=True)
#secondaryTrack = self._insar.loadTrack(reference=False)
sdDir = 'sd'
os.makedirs(sdDir, exist_ok=True)
@ -68,9 +68,9 @@ def runUnwrapSnaphuSd(self):
os.remove(amplitudeMultilook+'.vrt')
os.remove(amplitudeMultilook+'.xml')
else:
tmid = masterTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*masterTrack.azimuthLineInterval+
masterTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*masterTrack.azimuthLineInterval)
snaphuUnwrap(masterTrack, tmid,
tmid = referenceTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*referenceTrack.azimuthLineInterval+
referenceTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*referenceTrack.azimuthLineInterval)
snaphuUnwrap(referenceTrack, tmid,
sdInterferogramFilt,
sdCoherence,
sdInterferogramUnwrap,
@ -109,17 +109,17 @@ def runUnwrapSnaphuSd(self):
# STEP 4. convert to azimuth deformation
############################################################
#burst cycle in s
burstCycleLength = masterTrack.frames[0].swaths[0].burstCycleLength / masterTrack.frames[0].swaths[0].prf
burstCycleLength = referenceTrack.frames[0].swaths[0].burstCycleLength / referenceTrack.frames[0].swaths[0].prf
#compute azimuth fmrate
#stack all azimuth fmrates
index = np.array([], dtype=np.float64)
ka = np.array([], dtype=np.float64)
for frame in masterTrack.frames:
for frame in referenceTrack.frames:
for swath in frame.swaths:
startingRangeMultilook = masterTrack.frames[0].swaths[0].startingRange + \
(self._insar.numberRangeLooks1*self._insar.numberRangeLooksSd-1.0)/2.0*masterTrack.frames[0].swaths[0].rangePixelSize
rangePixelSizeMultilook = self._insar.numberRangeLooks1 * self._insar.numberRangeLooksSd * masterTrack.frames[0].swaths[0].rangePixelSize
startingRangeMultilook = referenceTrack.frames[0].swaths[0].startingRange + \
(self._insar.numberRangeLooks1*self._insar.numberRangeLooksSd-1.0)/2.0*referenceTrack.frames[0].swaths[0].rangePixelSize
rangePixelSizeMultilook = self._insar.numberRangeLooks1 * self._insar.numberRangeLooksSd * referenceTrack.frames[0].swaths[0].rangePixelSize
index0 = (swath.startingRange + np.arange(swath.numberOfSamples) * swath.rangePixelSize - startingRangeMultilook) / rangePixelSizeMultilook
ka0 = np.polyval(swath.azimuthFmrateVsPixel[::-1], np.arange(swath.numberOfSamples))
index = np.concatenate((index, index0))
@ -129,9 +129,9 @@ def runUnwrapSnaphuSd(self):
ka = np.polyval(p, np.arange(width))
#compute radar beam footprint velocity at middle track
tmid = masterTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*masterTrack.azimuthLineInterval+
masterTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*masterTrack.azimuthLineInterval)
svmid = masterTrack.orbit.interpolateOrbit(tmid, method='hermite')
tmid = referenceTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*referenceTrack.azimuthLineInterval+
referenceTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*referenceTrack.azimuthLineInterval)
svmid = referenceTrack.orbit.interpolateOrbit(tmid, method='hermite')
#earth radius in meters
r = 6371 * 1000.0
#radar footprint velocity

View File

@ -8,4 +8,4 @@ def getFactoriesInfo():
'factory':'createAttitude'
}
}
}

View File

@ -108,4 +108,4 @@ class IntImage(Image):
return
#end class
#end class

View File

@ -36,8 +36,8 @@ from iscesys.DateTimeUtil.DateTimeUtil import DateTimeUtil as DTU
from iscesys.Compatibility import Compatibility
from isceobj.Scene.Frame import FrameMixin
## Master Slave Hash Table
MASTER_SLAVE = {0:'master', 1:'slave', 'master':'master', 'slave':'slave'}
## Reference Secondary Hash Table
REFERENCE_SECONDARY = {0:'reference', 1:'secondary', 'reference':'reference', 'secondary':'secondary'}
PROCEED_IF_ZERO_DEM = Component.Parameter(
'_proceedIfZeroDem',
@ -419,16 +419,16 @@ SHADE_FACTOR = Component.Parameter('_shadeFactor',
doc='')
#ask
MASTER_SQUINT = Component.Parameter('_masterSquint',
public_name='masterSquint',
REFERENCE_SQUINT = Component.Parameter('_referenceSquint',
public_name='referenceSquint',
default=0.,
type=float,
mandatory=False,
doc='')
#ask
SLAVE_SQUINT = Component.Parameter('_slaveSquint',
public_name='slaveSquint',
SECONDARY_SQUINT = Component.Parameter('_secondarySquint',
public_name='secondarySquint',
default=0.,
type=float,
mandatory=False,
@ -510,8 +510,8 @@ class InsarProc(Component, FrameMixin):
NUMBER_AZIMUTH_LOOKS,
NUMBER_RANGE_LOOKS,
SHADE_FACTOR,
MASTER_SQUINT,
SLAVE_SQUINT,
REFERENCE_SQUINT,
SECONDARY_SQUINT,
GEOCODE_LIST,
UNMASKED_PREFIX,
UNWRAPPED_2STAGE_FILENAME,
@ -562,11 +562,11 @@ class InsarProc(Component, FrameMixin):
def getLookSide(self):
return self._lookSide
def getMasterSquint(self):
return self._masterSquint
def getReferenceSquint(self):
return self._referenceSquint
def getSlaveSquint(self):
return self._slaveSquint
def getSecondarySquint(self):
return self._secondarySquint
def getFormSLC1(self):
return self._formSLC1
@ -619,38 +619,38 @@ class InsarProc(Component, FrameMixin):
def getSecondProcVelocity(self):
return self._pegV2
def getMasterFrame(self):
return self._masterFrame
def getReferenceFrame(self):
return self._referenceFrame
def getSlaveFrame(self):
return self._slaveFrame
def getSecondaryFrame(self):
return self._secondaryFrame
def getMasterOrbit(self):
return self._masterOrbit
def getReferenceOrbit(self):
return self._referenceOrbit
def getSlaveOrbit(self):
return self._slaveOrbit
def getSecondaryOrbit(self):
return self._secondaryOrbit
def getMasterDoppler(self):
return self._masterDoppler
def getReferenceDoppler(self):
return self._referenceDoppler
def getSlaveDoppler(self):
return self._slaveDoppler
def getSecondaryDoppler(self):
return self._secondaryDoppler
def getPeg(self):
return self._peg
def getMasterRawImage(self):
return self._masterRawImage
def getReferenceRawImage(self):
return self._referenceRawImage
def getSlaveRawImage(self):
return self._slaveRawImage
def getSecondaryRawImage(self):
return self._secondaryRawImage
def getMasterSlcImage(self):
return self._masterSlcImage
def getReferenceSlcImage(self):
return self._referenceSlcImage
def getSlaveSlcImage(self):
return self._slaveSlcImage
def getSecondarySlcImage(self):
return self._secondarySlcImage
def getSimAmpImage(self):
return self._simAmpImage
@ -852,11 +852,11 @@ class InsarProc(Component, FrameMixin):
def getGeocodeList(self):
return self._geocode_list
def getRawMasterIQImage(self):
return self._rawMasterIQImage
def getRawReferenceIQImage(self):
return self._rawReferenceIQImage
def getRawSlaveIQImage(self):
return self._rawSlaveIQImage
def getRawSecondaryIQImage(self):
return self._rawSecondaryIQImage
@property
def azResFactor(self):
return self._azResFactor
@ -877,11 +877,11 @@ class InsarProc(Component, FrameMixin):
def setLookSide(self, lookSide):
self._lookSide = lookSide
def setMasterSquint(self, squint):
self._masterSquint = squint
def setReferenceSquint(self, squint):
self._referenceSquint = squint
def setSlaveSquint(self, squint):
self._slaveSquint = squint
def setSecondarySquint(self, squint):
self._secondarySquint = squint
def setFormSLC1(self, fslc):
self._formSLC1 = fslc
@ -917,38 +917,38 @@ class InsarProc(Component, FrameMixin):
self._pegV2 = v2
def setMasterFrame(self, frame):
self._masterFrame = frame
def setReferenceFrame(self, frame):
self._referenceFrame = frame
def setSlaveFrame(self, frame):
self._slaveFrame = frame
def setSecondaryFrame(self, frame):
self._secondaryFrame = frame
def setMasterOrbit(self, orbit):
self._masterOrbit = orbit
def setReferenceOrbit(self, orbit):
self._referenceOrbit = orbit
def setSlaveOrbit(self, orbit):
self._slaveOrbit = orbit
def setSecondaryOrbit(self, orbit):
self._secondaryOrbit = orbit
def setMasterDoppler(self, doppler):
self._masterDoppler = doppler
def setReferenceDoppler(self, doppler):
self._referenceDoppler = doppler
def setSlaveDoppler(self, doppler):
self._slaveDoppler = doppler
def setSecondaryDoppler(self, doppler):
self._secondaryDoppler = doppler
def setPeg(self, peg):
self._peg = peg
def setMasterRawImage(self, image):
self._masterRawImage = image
def setReferenceRawImage(self, image):
self._referenceRawImage = image
def setSlaveRawImage(self, image):
self._slaveRawImage = image
def setSecondaryRawImage(self, image):
self._secondaryRawImage = image
def setMasterSlcImage(self, image):
self._masterSlcImage = image
def setReferenceSlcImage(self, image):
self._referenceSlcImage = image
def setSlaveSlcImage(self, image):
self._slaveSlcImage = image
def setSecondarySlcImage(self, image):
self._secondarySlcImage = image
def setSimAmpImage(self, image):
self._simAmpImage = image
@ -1162,11 +1162,11 @@ class InsarProc(Component, FrameMixin):
def setGeocodeList(self,prd):
self._geocode_list = prd
def setRawMasterIQImage(self,im):
self._rawMasterIQImage = im
def setRawReferenceIQImage(self,im):
self._rawReferenceIQImage = im
def setRawSlaveIQImage(self,im):
self._rawSlaveIQImage = im
def setRawSecondaryIQImage(self,im):
self._rawSecondaryIQImage = im
@azResFactor.setter
def azResFactor(self,val):
@ -1182,7 +1182,7 @@ class InsarProc(Component, FrameMixin):
self._unmaskedPrefix = val
## folowing are tbd to split formSLC.
def _hasher(self, index, Attr):
return getattr(self, MASTER_SLAVE[index] + Attr)
return getattr(self, REFERENCE_SECONDARY[index] + Attr)
def select_frame(self, index): return self._hasher(index, 'Frame')
def select_orbit(self, index): return self._hasher(index, 'Orbit')
@ -1205,19 +1205,19 @@ class InsarProc(Component, FrameMixin):
## This overides the _FrameMixin.frame
@property
def frame(self):
return self.masterFrame
return self.referenceFrame
# Some line violate PEP008 in order to facilitate using "grep"
# for development
refinedOffsetField = property(getRefinedOffsetField, setRefinedOffsetField)
offsetField = property(getOffsetField, setOffsetField)
demCropFilename = property(getDemCropFilename, setDemCropFilename)
masterFrame = property(getMasterFrame, setMasterFrame)
slaveFrame = property(getSlaveFrame, setSlaveFrame)
masterOrbit = property(getMasterOrbit, setMasterOrbit)
slaveOrbit = property(getSlaveOrbit, setSlaveOrbit)
masterDoppler = property(getMasterDoppler, setMasterDoppler)
slaveDoppler = property(getSlaveDoppler, setSlaveDoppler)
referenceFrame = property(getReferenceFrame, setReferenceFrame)
secondaryFrame = property(getSecondaryFrame, setSecondaryFrame)
referenceOrbit = property(getReferenceOrbit, setReferenceOrbit)
secondaryOrbit = property(getSecondaryOrbit, setSecondaryOrbit)
referenceDoppler = property(getReferenceDoppler, setReferenceDoppler)
secondaryDoppler = property(getSecondaryDoppler, setSecondaryDoppler)
peg = property(getPeg, setPeg)
pegH1 = property(getFirstAverageHeight, setFirstAverageHeight)
pegH2 = property(getSecondAverageHeight, setSecondAverageHeight)
@ -1225,10 +1225,10 @@ class InsarProc(Component, FrameMixin):
fdH2 = property(getSecondFdHeight, setSecondFdHeight)
pegV1 = property(getFirstProcVelocity, setFirstProcVelocity)
pegV2 = property(getSecondProcVelocity, setSecondProcVelocity)
masterRawImage = property(getMasterRawImage, setMasterRawImage)
slaveRawImage = property(getSlaveRawImage, setSlaveRawImage)
masterSlcImage = property(getMasterSlcImage, setMasterSlcImage)
slaveSlcImage = property(getSlaveSlcImage, setSlaveSlcImage)
referenceRawImage = property(getReferenceRawImage, setReferenceRawImage)
secondaryRawImage = property(getSecondaryRawImage, setSecondaryRawImage)
referenceSlcImage = property(getReferenceSlcImage, setReferenceSlcImage)
secondarySlcImage = property(getSecondarySlcImage, setSecondarySlcImage)
simAmpImage = property(getSimAmpImage, setSimAmpImage)
demImage = property(getDemImage, setDemImage)
demInitFile = property(getDemInitFile, setDemInitFile)
@ -1294,16 +1294,16 @@ class InsarProc(Component, FrameMixin):
mocompBaseline = property(getMocompBaseline, setMocompBaseline)
topocorrect = property(getTopocorrect, setTopocorrect)
topo = property(getTopo, setTopo)
masterSquint = property(getMasterSquint, setMasterSquint)
slaveSquint = property(getSlaveSquint, setSlaveSquint)
referenceSquint = property(getReferenceSquint, setReferenceSquint)
secondarySquint = property(getSecondarySquint, setSecondarySquint)
geocode_list = property(getGeocodeList, setGeocodeList)
rawMasterIQImage = property(getRawMasterIQImage, setRawMasterIQImage)
rawSlaveIQImage = property(getRawSlaveIQImage, setRawSlaveIQImage)
rawReferenceIQImage = property(getRawReferenceIQImage, setRawReferenceIQImage)
rawSecondaryIQImage = property(getRawSecondaryIQImage, setRawSecondaryIQImage)
pass
## Why this: the code bloat with master this and slave that indicates the
## Why this: the code bloat with reference this and secondary that indicates the
## design princple does not use composition, this is an attempt to
## fix that
class RadarSwath(object):

View File

@ -62,4 +62,4 @@ envInsarProc.Install(install,listFiles)
envInsarProc.Alias('install',install)
helpList,installHelp = envInsarProc['HELP_BUILDER'](envInsarProc,'__init__.py',install)
envInsarProc.Install(installHelp,helpList)
envInsarProc.Alias('install',installHelp)
envInsarProc.Alias('install',installHelp)

View File

@ -117,36 +117,36 @@ LOOK_SIDE = Component.Parameter('_lookSide',
private=True,
doc='')
MASTER_FRAME = Component.Facility('_masterFrame',
public_name='masterFrame',
REFERENCE_FRAME = Component.Facility('_referenceFrame',
public_name='referenceFrame',
factory='default',
mandatory=True,
private=True,
doc='Master frame')
doc='Reference frame')
SLAVE_FRAME = Component.Facility('_slaveFrame',
public_name='slaveFrame',
SECONDARY_FRAME = Component.Facility('_secondaryFrame',
public_name='secondaryFrame',
factory='default',
mandatory=True,
private=True,
doc='Slave frame')
doc='Secondary frame')
MASTER_ORBIT = Component.Facility('_masterOrbit',
public_name='masterOrbit',
REFERENCE_ORBIT = Component.Facility('_referenceOrbit',
public_name='referenceOrbit',
factory='default',
mandatory=True,
private=True,
doc='Master orbit')
doc='Reference orbit')
SLAVE_ORBIT = Component.Facility('_slaveOrbit',
public_name='slaveOrbit',
SECONDARY_ORBIT = Component.Facility('_secondaryOrbit',
public_name='secondaryOrbit',
factory='default',
mandatory=True,
private=True,
doc='Slave orbit')
doc='Secondary orbit')
#ask
DOPPLER_CENTROID = Component.Facility('_dopplerCentroid',
@ -156,47 +156,47 @@ DOPPLER_CENTROID = Component.Facility('_dopplerCentroid',
private=True,
doc='')
MASTER_DOPPLER = Component.Facility('_masterDoppler',
public_name='masterDoppler',
REFERENCE_DOPPLER = Component.Facility('_referenceDoppler',
public_name='referenceDoppler',
factory='default',
mandatory=True,
private=True,
doc='')
SLAVE_DOPPLER = Component.Facility('_slaveDoppler',
public_name='slaveDoppler',
SECONDARY_DOPPLER = Component.Facility('_secondaryDoppler',
public_name='secondaryDoppler',
factory='default',
mandatory=True,
private=True,
doc='')
MASTER_RAW_IMAGE = Component.Facility('_masterRawImage',
public_name='masterRawImage',
REFERENCE_RAW_IMAGE = Component.Facility('_referenceRawImage',
public_name='referenceRawImage',
factory='default',
mandatory=True,
private=True,
doc='')
SLAVE_RAW_IMAGE = Component.Facility('_slaveRawImage',
public_name='slaveRawImage',
SECONDARY_RAW_IMAGE = Component.Facility('_secondaryRawImage',
public_name='secondaryRawImage',
factory='default',
mandatory=True,
private=True,
doc='')
MASTER_SLC_IMAGE = Component.Facility('_masterSlcImage',
public_name='masterSlcImage',
REFERENCE_SLC_IMAGE = Component.Facility('_referenceSlcImage',
public_name='referenceSlcImage',
factory='default',
mandatory=True,
private=True,
doc='')
SLAVE_SLC_IMAGE = Component.Facility('_slaveSlcImage',
public_name='slaveSlcImage',
SECONDARY_SLC_IMAGE = Component.Facility('_secondarySlcImage',
public_name='secondarySlcImage',
factory='default',
mandatory=True,
private=True,
@ -334,16 +334,16 @@ TOPO = Component.Facility('_topo',
private=True,
doc='')
RAW_MASTER_IQ_IMAGE = Component.Facility('_rawMasterIQImage',
public_name='rawMasterIQImage',
RAW_REFERENCE_IQ_IMAGE = Component.Facility('_rawReferenceIQImage',
public_name='rawReferenceIQImage',
factory='default',
mandatory=True,
private=True,
doc='')
RAW_SLAVE_IQ_IMAGE = Component.Facility('_rawSlaveIQImage',
public_name='rawSlaveIQImage',
RAW_SECONDARY_IQ_IMAGE = Component.Facility('_rawSecondaryIQImage',
public_name='rawSecondaryIQImage',
factory='default',
mandatory=True,
private=True,
@ -403,17 +403,17 @@ parameter_list = (
NUMBER_RESAMP_LINES
)
facility_list = (
MASTER_FRAME,
SLAVE_FRAME,
MASTER_ORBIT,
SLAVE_ORBIT,
MASTER_DOPPLER,
SLAVE_DOPPLER,
REFERENCE_FRAME,
SECONDARY_FRAME,
REFERENCE_ORBIT,
SECONDARY_ORBIT,
REFERENCE_DOPPLER,
SECONDARY_DOPPLER,
DOPPLER_CENTROID,
MASTER_RAW_IMAGE,
SLAVE_RAW_IMAGE,
MASTER_SLC_IMAGE,
SLAVE_SLC_IMAGE,
REFERENCE_RAW_IMAGE,
SECONDARY_RAW_IMAGE,
REFERENCE_SLC_IMAGE,
SECONDARY_SLC_IMAGE,
OFFSET_AZIMUTH_IMAGE,
OFFSET_RANGE_IMAGE,
RESAMP_AMP_IMAGE,
@ -430,8 +430,8 @@ facility_list = (
MOCOMP_BASELINE,
TOPOCORRECT,
TOPO,
RAW_MASTER_IQ_IMAGE,
RAW_SLAVE_IQ_IMAGE,
RAW_REFERENCE_IQ_IMAGE,
RAW_SECONDARY_IQ_IMAGE,
TOPOCORRECT_FLAT_IMAGE,
OFFSET_FIELD,
REFINED_OFFSET_FIELD,

View File

@ -43,4 +43,4 @@ def getFactoriesInfo():
def createInsarProc(name=None, procDoc= None):
from .InsarProc import InsarProc
return InsarProc(name = name,procDoc = procDoc)
return InsarProc(name = name,procDoc = procDoc)

View File

@ -31,16 +31,16 @@ import isceobj.Catalog
import logging
logger = logging.getLogger('isce.insar.extractInfo')
def extractInfo(self, master, slave):
def extractInfo(self, reference, secondary):
from contrib.frameUtils.FrameInfoExtractor import FrameInfoExtractor
FIE = FrameInfoExtractor()
masterInfo = FIE.extractInfoFromFrame(master)
slaveInfo = FIE.extractInfoFromFrame(slave)
masterInfo.sensingStart = [masterInfo.sensingStart, slaveInfo.sensingStart]
masterInfo.sensingStop = [masterInfo.sensingStop, slaveInfo.sensingStop]
referenceInfo = FIE.extractInfoFromFrame(reference)
secondaryInfo = FIE.extractInfoFromFrame(secondary)
referenceInfo.sensingStart = [referenceInfo.sensingStart, secondaryInfo.sensingStart]
referenceInfo.sensingStop = [referenceInfo.sensingStop, secondaryInfo.sensingStop]
# for stitched frames do not make sense anymore
mbb = masterInfo.getBBox()
sbb = slaveInfo.getBBox()
mbb = referenceInfo.getBBox()
sbb = secondaryInfo.getBBox()
latEarlyNear = mbb[0][0]
latLateNear = mbb[2][0]
@ -62,7 +62,7 @@ def extractInfo(self, master, slave):
ret.append([min(mbb[2][0], sbb[2][0]), max(mbb[2][1], sbb[2][1])])
ret.append([min(mbb[3][0], sbb[3][0]), min(mbb[3][1], sbb[3][1])])
masterInfo.bbox = ret
return masterInfo
referenceInfo.bbox = ret
return referenceInfo
# the track should be the same for both

View File

@ -52,14 +52,14 @@ def runCorrect(self):
posIndx = 1
mocompPosition1 = objFormSlc1.mocompPosition
planet = self.insar.masterFrame.instrument.platform.planet
prf1 = self.insar.masterFrame.instrument.PRF
planet = self.insar.referenceFrame.instrument.platform.planet
prf1 = self.insar.referenceFrame.instrument.PRF
objCorrect = stdproc.createCorrect()
objCorrect.wireInputPort(name='peg', object=self.insar.peg)
objCorrect.wireInputPort(name='frame', object=self.insar.masterFrame)
objCorrect.wireInputPort(name='frame', object=self.insar.referenceFrame)
objCorrect.wireInputPort(name='planet', object=planet)
objCorrect.wireInputPort(name='interferogram', object=intImage)
objCorrect.wireInputPort(name='masterslc', object=self.insar.formSLC1) #Piyush
objCorrect.wireInputPort(name='referenceslc', object=self.insar.formSLC1) #Piyush
# Average velocity and height measurements
v = self.insar.procVelocity
h = self.insar.averageHeight

View File

@ -36,11 +36,11 @@ logger = logging.getLogger('isce.insar.runEstimateHeights')
def runEstimateHeights(self):
from isceobj.Catalog import recordInputsAndOutputs
chv = []
for frame, orbit, tag in zip((self._insar.getMasterFrame(),
self._insar.getSlaveFrame()),
(self.insar.masterOrbit,
self.insar.slaveOrbit),
('master', 'slave')):
for frame, orbit, tag in zip((self._insar.getReferenceFrame(),
self._insar.getSecondaryFrame()),
(self.insar.referenceOrbit,
self.insar.secondaryOrbit),
('reference', 'secondary')):
chv.append(stdproc.createCalculateFdHeights())
chv[-1](frame=frame, orbit=orbit, planet=self.planet)

View File

@ -37,11 +37,11 @@ logger = logging.getLogger('isce.isceProc.runEstimateHeights')
def runEstimateHeights(self):
from isceobj.Catalog import recordInputsAndOutputs
chv = []
for frame, orbit, tag in zip((self._insar.getMasterFrame(),
self._insar.getSlaveFrame()),
(self.insar.masterOrbit,
self.insar.slaveOrbit),
('master', 'slave')):
for frame, orbit, tag in zip((self._insar.getReferenceFrame(),
self._insar.getSecondaryFrame()),
(self.insar.referenceOrbit,
self.insar.secondaryOrbit),
('reference', 'secondary')):
(time, position, velocity, offset) = orbit._unpackOrbit()

View File

@ -32,10 +32,10 @@ import stdproc
import sys
logger = logging.getLogger('isce.insar.runFdMocomp')
## Mapping from use_dop kewword to f(masterDop, slaveDrop)
## Mapping from use_dop kewword to f(referenceDop, secondaryDrop)
USE_DOP = {'AVERAGE' : lambda x, y: (x+y)/2.,
'MASTER': lambda x, y: x,
'SLAVE': lambda x, y: y}
'REFERENCE': lambda x, y: x,
'SECONDARY': lambda x, y: y}
def runFdMocomp(self, use_dop="average"):
"""
@ -45,27 +45,27 @@ def runFdMocomp(self, use_dop="average"):
H2 = self.insar.fdH2
peg = self.insar.peg
lookSide = self.insar._lookSide
masterOrbit = self.insar.masterOrbit
slaveOrbit = self.insar.slaveOrbit
referenceOrbit = self.insar.referenceOrbit
secondaryOrbit = self.insar.secondaryOrbit
rangeSamplingRate = (
self.insar.getMasterFrame().instrument.rangeSamplingRate)
self.insar.getReferenceFrame().instrument.rangeSamplingRate)
rangePulseDuration = (
self.insar.getSlaveFrame().instrument.pulseLength)
self.insar.getSecondaryFrame().instrument.pulseLength)
chirpExtension = self.insar.chirpExtension
chirpSize = int(rangeSamplingRate * rangePulseDuration)
number_range_bins = self.insar.numberRangeBins
masterCentroid = self.insar.masterDoppler.fractionalCentroid
slaveCentroid = self.insar.slaveDoppler.fractionalCentroid
referenceCentroid = self.insar.referenceDoppler.fractionalCentroid
secondaryCentroid = self.insar.secondaryDoppler.fractionalCentroid
logger.info("Correcting Doppler centroid for motion compensation")
result = []
for centroid, frame, orbit, H in zip((masterCentroid, slaveCentroid),
(self.insar.masterFrame,
self.insar.slaveFrame),
(masterOrbit, slaveOrbit),
for centroid, frame, orbit, H in zip((referenceCentroid, secondaryCentroid),
(self.insar.referenceFrame,
self.insar.secondaryFrame),
(referenceOrbit, secondaryOrbit),
(H1, H2)
):
fdmocomp = stdproc.createFdMocomp()
@ -80,13 +80,13 @@ def runFdMocomp(self, use_dop="average"):
result.append( fdmocomp.dopplerCentroid )
pass
masterDopplerCorrection, slaveDopplerCorrection = result
referenceDopplerCorrection, secondaryDopplerCorrection = result
# print masterDopplerCorrection, slaveDopplerCorrection
# print referenceDopplerCorrection, secondaryDopplerCorrection
# use_dop = "F"
try:
fd = USE_DOP[use_dop.upper()](masterDopplerCorrection,
slaveDopplerCorrection)
fd = USE_DOP[use_dop.upper()](referenceDopplerCorrection,
secondaryDopplerCorrection)
except KeyError:
print("Unrecognized use_dop option. use_dop = ",use_dop)
print("Not found in dictionary:",USE_DOP.keys())

View File

@ -35,8 +35,8 @@ from isceobj.Util.decorators import use_api
logger = logging.getLogger('isce.insar.runFormSLC')
#Run FormSLC for master
def master(self, deltaf=None):
#Run FormSLC for reference
def reference(self, deltaf=None):
from isceobj.Catalog import recordInputsAndOutputs
from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
@ -45,9 +45,9 @@ def master(self, deltaf=None):
v,h = self.insar.vh()
objRaw = self.insar.rawMasterIQImage.clone()
objRaw = self.insar.rawReferenceIQImage.clone()
objRaw.accessMode = 'read'
objFormSlc = stdproc.createFormSLC(name='insarapp_formslc_master')
objFormSlc = stdproc.createFormSLC(name='insarapp_formslc_reference')
objFormSlc.setBodyFixedVelocity(v)
objFormSlc.setSpacecraftHeight(h)
objFormSlc.setAzimuthPatchSize(self.patchSize)
@ -55,18 +55,18 @@ def master(self, deltaf=None):
objFormSlc.setNumberPatches(self.numPatches)
objFormSlc.setLookSide(self.insar._lookSide)
objFormSlc.setNumberAzimuthLooks(self.insar.numberAzimuthLooks)
logger.info("Focusing Master image")
logger.info("Focusing Reference image")
objFormSlc.stdWriter = self.stdWriter
if (deltaf is not None) and (objFormSlc.azimuthResolution is None):
ins = self.insar.masterFrame.getInstrument()
ins = self.insar.referenceFrame.getInstrument()
prf = ins.getPulseRepetitionFrequency()
res = ins.getPlatform().getAntennaLength() / 2.0
azbw = min(v/res, prf)
res = v/azbw
factor = 1.0 - (abs(deltaf)/azbw)
logger.info('MASTER AZIMUTH BANDWIDTH FACTOR = %f'%(factor))
logger.info('REFERENCE AZIMUTH BANDWIDTH FACTOR = %f'%(factor))
azres = res / factor
#jng This is a temporary solution seems it looks that same banding problem
#can be resolved by doubling the azres. The default azResFactor is still one.
@ -74,9 +74,9 @@ def master(self, deltaf=None):
####newInputs
objSlc = objFormSlc(rawImage=objRaw,
orbit=self.insar.masterOrbit,
frame=self.insar.masterFrame,
planet=self.insar.masterFrame.instrument.platform.planet,
orbit=self.insar.referenceOrbit,
frame=self.insar.referenceFrame,
planet=self.insar.referenceFrame.instrument.platform.planet,
doppler=self.insar.dopplerCentroid,
peg=self.insar.peg)
@ -86,23 +86,23 @@ def master(self, deltaf=None):
objSlc.finalizeImage()
objRaw.finalizeImage()
recordInputsAndOutputs(self.insar.procDoc, objFormSlc,
"runFormSLC.master", logger, "runFormSLC.master")
"runFormSLC.reference", logger, "runFormSLC.reference")
logger.info('New Width = %d'%(imageSlc.getWidth()))
self.insar.masterSlcImage = imageSlc
self.insar.referenceSlcImage = imageSlc
self.insar.formSLC1 = objFormSlc
return objFormSlc.numberPatches
#Run FormSLC on slave
def slave(self, deltaf=None):
#Run FormSLC on secondary
def secondary(self, deltaf=None):
from isceobj.Catalog import recordInputsAndOutputs
from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
v,h = self.insar.vh()
objRaw = self.insar.rawSlaveIQImage.clone()
objRaw = self.insar.rawSecondaryIQImage.clone()
objRaw.accessMode = 'read'
objFormSlc = stdproc.createFormSLC(name='insarapp_formslc_slave')
objFormSlc = stdproc.createFormSLC(name='insarapp_formslc_secondary')
objFormSlc.setBodyFixedVelocity(v)
objFormSlc.setSpacecraftHeight(h)
objFormSlc.setAzimuthPatchSize(self.patchSize)
@ -110,24 +110,24 @@ def slave(self, deltaf=None):
objFormSlc.setNumberPatches(self.numPatches)
objFormSlc.setNumberAzimuthLooks(self.insar.numberAzimuthLooks)
objFormSlc.setLookSide(self.insar._lookSide)
logger.info("Focusing Master image")
logger.info("Focusing Reference image")
objFormSlc.stdWriter = self.stdWriter
if (deltaf is not None) and (objFormSlc.azimuthResolution is None):
ins = self.insar.slaveFrame.getInstrument()
ins = self.insar.secondaryFrame.getInstrument()
prf = ins.getPulseRepetitionFrequency()
res = ins.getPlatform().getAntennaLength()/2.0
azbw = min(v / res, prf)
res = v / azbw
factor = 1.0 - (abs(deltaf) / azbw)
logger.info('SLAVE AZIMUTH BANDWIDTH FACTOR = %f'%(factor))
logger.info('SECONDARY AZIMUTH BANDWIDTH FACTOR = %f'%(factor))
azres = res/factor
objFormSlc.setAzimuthResolution(azres)
objSlc = objFormSlc(rawImage=objRaw,
orbit=self.insar.slaveOrbit,
frame=self.insar.slaveFrame,
planet=self.insar.slaveFrame.instrument.platform.planet,
orbit=self.insar.secondaryOrbit,
frame=self.insar.secondaryFrame,
planet=self.insar.secondaryFrame.instrument.platform.planet,
doppler=self.insar.dopplerCentroid,
peg=self.insar.peg)
@ -137,22 +137,22 @@ def slave(self, deltaf=None):
objSlc.finalizeImage()
objRaw.finalizeImage()
recordInputsAndOutputs(self.insar.procDoc, objFormSlc,
"runFormSLC.slave", logger, "runFormSLC.slave")
"runFormSLC.secondary", logger, "runFormSLC.secondary")
logger.info('New Width = %d'%(imageSlc.getWidth()))
self.insar.slaveSlcImage = imageSlc
self.insar.secondarySlcImage = imageSlc
self.insar.formSLC2 = objFormSlc
return objFormSlc.numberPatches
@use_api
def runFormSLC(self):
mDoppler = self.insar.masterDoppler.getDopplerCoefficients(inHz=True)
sDoppler = self.insar.slaveDoppler.getDopplerCoefficients(inHz=True)
mDoppler = self.insar.referenceDoppler.getDopplerCoefficients(inHz=True)
sDoppler = self.insar.secondaryDoppler.getDopplerCoefficients(inHz=True)
deltaf = abs(mDoppler[0] - sDoppler[0])
n_master = master(self, deltaf=deltaf)
n_slave = slave(self, deltaf=deltaf)
self.insar.setNumberPatches(min(n_master, n_slave))
n_reference = reference(self, deltaf=deltaf)
n_secondary = secondary(self, deltaf=deltaf)
self.insar.setNumberPatches(min(n_reference, n_secondary))
self.is_mocomp = int(
(self.insar.formSLC1.azimuthPatchSize -
self.insar.formSLC1.numberValidPulses)/2

View File

@ -49,7 +49,7 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
v = self.insar.procVelocity
h = self.insar.averageHeight
imageSlc1 = self.insar.masterRawImage
imageSlc1 = self.insar.referenceRawImage
imSlc1 = isceobj.createSlcImage()
IU.copyAttributes(imageSlc1, imSlc1)
imSlc1.setAccessMode('read')
@ -61,11 +61,11 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
formSlc1.wireInputPort(name='doppler',
object = self.insar.dopplerCentroid)
formSlc1.wireInputPort(name='peg', object=self.insar.peg)
formSlc1.wireInputPort(name='frame', object=self.insar.masterFrame)
formSlc1.wireInputPort(name='orbit', object=self.insar.masterOrbit)
formSlc1.wireInputPort(name='frame', object=self.insar.referenceFrame)
formSlc1.wireInputPort(name='orbit', object=self.insar.referenceOrbit)
formSlc1.wireInputPort(name='slcInImage', object=imSlc1)
formSlc1.wireInputPort(name='planet',
object=self.insar.masterFrame.instrument.platform.planet)
object=self.insar.referenceFrame.instrument.platform.planet)
self._stdWriter.setFileTag("formslcTSX", "log")
self._stdWriter.setFileTag("formslcTSX", "err")
self._stdWriter.setFileTag("formslcTSX", "out")
@ -73,10 +73,10 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
formSlc1.setLookSide(self.insar._lookSide)
# self.insar.setMasterSlcImage(formSlc1.formslc())
self.insar.masterSlcImage = formSlc1()
# self.insar.setReferenceSlcImage(formSlc1.formslc())
self.insar.referenceSlcImage = formSlc1()
imageSlc2 = self.insar.slaveRawImage
imageSlc2 = self.insar.secondaryRawImage
imSlc2 = isceobj.createSlcImage()
IU.copyAttributes(imageSlc2, imSlc2)
imSlc2.setAccessMode('read')
@ -88,19 +88,19 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
formSlc2.wireInputPort(name='doppler',
object=self.insar.dopplerCentroid)
formSlc2.wireInputPort(name='peg', object=self.insar.peg)
formSlc2.wireInputPort(name='frame', object=self.insar.slaveFrame)
formSlc2.wireInputPort(name='orbit', object=self.insar.slaveOrbit)
formSlc2.wireInputPort(name='frame', object=self.insar.secondaryFrame)
formSlc2.wireInputPort(name='orbit', object=self.insar.secondaryOrbit)
formSlc2.wireInputPort(name='slcInImage', object=imSlc2)
formSlc2.wireInputPort(name='planet',
object=self.insar.slaveFrame.instrument.platform.planet)
object=self.insar.secondaryFrame.instrument.platform.planet)
self._stdWriter.setFileTag("formslcTSX", "log")
self._stdWriter.setFileTag("formslcTSX", "err")
self._stdWriter.setFileTag("formslcTSX", "out")
formSlc2.setStdWriter(self._stdWriter)
formSlc2.setLookSide(self.insar._lookSide)
# self.insar.setSlaveSlcImage(formSlc2.formslc())
self.insar.slaveSlcImage = formSlc2()
# self.insar.setSecondarySlcImage(formSlc2.formslc())
self.insar.secondarySlcImage = formSlc2()
self.insar.setNumberPatches(
imSlc1.getLength()/float(self.insar.numberValidPulses)
)

View File

@ -50,7 +50,7 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
v = self.insar.getFirstProcVelocity()
h = self.insar.averageHeight
imageSlc1 = self.insar.masterRawImage
imageSlc1 = self.insar.referenceRawImage
imSlc1 = isceobj.createSlcImage()
IU.copyAttributes(imageSlc1, imSlc1)
imSlc1.setAccessMode('read')
@ -62,18 +62,18 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
formSlc1.wireInputPort(name='doppler',
object = self.insar.dopplerCentroid)
formSlc1.wireInputPort(name='peg', object=self.insar.peg)
formSlc1.wireInputPort(name='frame', object=self.insar.masterFrame)
formSlc1.wireInputPort(name='orbit', object=self.insar.masterOrbit)
formSlc1.wireInputPort(name='frame', object=self.insar.referenceFrame)
formSlc1.wireInputPort(name='orbit', object=self.insar.referenceOrbit)
formSlc1.wireInputPort(name='rawImage', object=None)
formSlc1.wireInputPort(name='planet',
object=self.insar.masterFrame.instrument.platform.planet)
object=self.insar.referenceFrame.instrument.platform.planet)
for item in formSlc1.inputPorts:
item()
formSlc1.slcWidth = imSlc1.getWidth()
formSlc1.startingRange = formSlc1.rangeFirstSample
formSlc1.rangeChirpExtensionPoints = 0
formSlc1.slcSensingStart = self.insar.masterFrame.getSensingStart()
formSlc1.outOrbit = self.insar.masterOrbit
formSlc1.slcSensingStart = self.insar.referenceFrame.getSensingStart()
formSlc1.outOrbit = self.insar.referenceOrbit
self._stdWriter.setFileTag("formslcISCE", "log")
self._stdWriter.setFileTag("formslcISCE", "err")
@ -81,11 +81,11 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
formSlc1.setStdWriter(self._stdWriter)
formSlc1.setLookSide(self.insar._lookSide)
# self.insar.setMasterSlcImage(formSlc1.formslc())
# self.insar.masterSlcImage = formSlc1()
# self.insar.setReferenceSlcImage(formSlc1.formslc())
# self.insar.referenceSlcImage = formSlc1()
self.insar.formSLC1 = formSlc1
self.insar.masterSlcImage = imSlc1
time, position, velocity, relTo = self.insar.masterOrbit._unpackOrbit()
self.insar.referenceSlcImage = imSlc1
time, position, velocity, relTo = self.insar.referenceOrbit._unpackOrbit()
mocomp_array = [[],[]]
for (t, p) in zip(time, position):
mocomp_array[0].append(t-time[0])
@ -97,7 +97,7 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
formSlc1.dim2_mocompPosition = len(time)
formSlc1.dim1_mocompIndx = len(time)
imageSlc2 = self.insar.slaveRawImage
imageSlc2 = self.insar.secondaryRawImage
imSlc2 = isceobj.createSlcImage()
IU.copyAttributes(imageSlc2, imSlc2)
imSlc2.setAccessMode('read')
@ -109,28 +109,28 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
formSlc2.wireInputPort(name='doppler',
object=self.insar.dopplerCentroid)
formSlc2.wireInputPort(name='peg', object=self.insar.peg)
formSlc2.wireInputPort(name='frame', object=self.insar.slaveFrame)
formSlc2.wireInputPort(name='orbit', object=self.insar.slaveOrbit)
formSlc2.wireInputPort(name='frame', object=self.insar.secondaryFrame)
formSlc2.wireInputPort(name='orbit', object=self.insar.secondaryOrbit)
formSlc2.wireInputPort(name='rawImage', object=None)
formSlc2.wireInputPort(name='planet',
object=self.insar.slaveFrame.instrument.platform.planet)
object=self.insar.secondaryFrame.instrument.platform.planet)
for item in formSlc2.inputPorts:
item()
formSlc2.slcWidth = imSlc2.getWidth()
formSlc2.startingRange = formSlc2.rangeFirstSample
formSlc2.rangeChirpExtensionPoints = 0
formSlc2.slcSensingStart = self.insar.slaveFrame.getSensingStart()
formSlc2.outOrbit = self.insar.slaveOrbit
formSlc2.slcSensingStart = self.insar.secondaryFrame.getSensingStart()
formSlc2.outOrbit = self.insar.secondaryOrbit
self._stdWriter.setFileTag("formslcISCE", "log")
self._stdWriter.setFileTag("formslcISCE", "err")
self._stdWriter.setFileTag("formslcISCE", "out")
formSlc2.setStdWriter(self._stdWriter)
formSlc2.setLookSide(self.insar._lookSide)
# self.insar.setSlaveSlcImage(formSlc2.formslc())
# self.insar.setSecondarySlcImage(formSlc2.formslc())
self.insar.formSLC2 = formSlc2
self.insar.slaveSlcImage = imSlc2
time, position, velocity, relTo = self.insar.slaveOrbit._unpackOrbit()
self.insar.secondarySlcImage = imSlc2
time, position, velocity, relTo = self.insar.secondaryOrbit._unpackOrbit()
mocomp_array = [[],[]]
for (t, p) in zip(time, position):
mocomp_array[0].append(t-time[0])
@ -148,9 +148,9 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
imSlc1.finalizeImage()
imSlc2.finalizeImage()
recordInputsAndOutputs(self.insar.procDoc, formSlc1,
"runFormSLC.master", logger, "runFormSLC.master")
"runFormSLC.reference", logger, "runFormSLC.reference")
recordInputsAndOutputs(self.insar.procDoc, formSlc2,
"runFormSLC.slave", logger, "runFormSLC.slave")
"runFormSLC.secondary", logger, "runFormSLC.secondary")
self.insar.setFormSLC1(formSlc1)
self.insar.setFormSLC2(formSlc2)

View File

@ -60,7 +60,7 @@ def runGeocode(self, prodlist, unwrapflag, bbox):
stdWriter = create_writer("log", "", True, filename="geo.log")
v,h = insar.vh()
planet = insar.masterFrame._instrument._platform._planet
planet = insar.referenceFrame._instrument._platform._planet
if bbox is None:
@ -125,9 +125,9 @@ def runGeocode(self, prodlist, unwrapflag, bbox):
#demImage = isceobj.createDemImage()
#IU.copyAttributes(insar.demImage, demImage)
demImage = insar.demImage.clone()
objGeo(peg=insar.peg, frame=insar.masterFrame,
objGeo(peg=insar.peg, frame=insar.referenceFrame,
planet=planet, dem=demImage, tobegeocoded=inImage,
geoPosting=None, masterslc=insar.formSLC1)
geoPosting=None, referenceslc=insar.formSLC1)
recordInputsAndOutputs(self._insar.procDoc, objGeo, "runGeocode",

View File

@ -81,4 +81,4 @@ def runMaskImages(self):
wrapImage.filename = newWrapName
wrapImage.dump(newWrapName+'.xml')
ampImage.filename = newAmpName
ampImage.dump(newAmpName+'.xml')
ampImage.dump(newAmpName+'.xml')

View File

@ -39,7 +39,7 @@ posIndx = 1
def runMocompbaseline(self):
logger.info("Calculating Baseline")
ellipsoid = self._insar.getMasterFrame().getInstrument().getPlatform().getPlanet().get_elp()
ellipsoid = self._insar.getReferenceFrame().getInstrument().getPlatform().getPlanet().get_elp()
# schPositions computed in orbit2sch
# objFormSlc's created during formSlc
@ -58,10 +58,10 @@ def runMocompbaseline(self):
objMocompbaseline.setMocompPosition2(mocompPosition2[posIndx])
objMocompbaseline.setMocompPositionIndex2(mocompIndex2)
objMocompbaseline.wireInputPort(name='masterOrbit',
object=self.insar.masterOrbit)
objMocompbaseline.wireInputPort(name='slaveOrbit',
object=self.insar.slaveOrbit)
objMocompbaseline.wireInputPort(name='referenceOrbit',
object=self.insar.referenceOrbit)
objMocompbaseline.wireInputPort(name='secondaryOrbit',
object=self.insar.secondaryOrbit)
objMocompbaseline.wireInputPort(name='ellipsoid', object=ellipsoid)
objMocompbaseline.wireInputPort(name='peg', object=self.insar.peg)
objMocompbaseline.setHeight(h)

View File

@ -41,15 +41,15 @@ def runOffsetprf(self):
logger.info("Calculate offset between slcs")
masterFrame = self._insar.getMasterFrame()
slaveFrame = self._insar.getSlaveFrame()
masterOrbit = self._insar.getMasterOrbit()
slaveOrbit = self._insar.getSlaveOrbit()
prf1 = masterFrame.getInstrument().getPulseRepetitionFrequency()
prf2 = slaveFrame.getInstrument().getPulseRepetitionFrequency()
referenceFrame = self._insar.getReferenceFrame()
secondaryFrame = self._insar.getSecondaryFrame()
referenceOrbit = self._insar.getReferenceOrbit()
secondaryOrbit = self._insar.getSecondaryOrbit()
prf1 = referenceFrame.getInstrument().getPulseRepetitionFrequency()
prf2 = secondaryFrame.getInstrument().getPulseRepetitionFrequency()
nearRange1 = self.insar.formSLC1.startingRange
nearRange2 = self.insar.formSLC2.startingRange
fs1 = masterFrame.getInstrument().getRangeSamplingRate()
fs1 = referenceFrame.getInstrument().getRangeSamplingRate()
###There seems to be no other way of determining image length - Piyush
patchSize = self._insar.getPatchSize()
@ -59,10 +59,10 @@ def runOffsetprf(self):
firstDown = self._insar.getFirstSampleDownPrf()
numLocationAcross = self._insar.getNumberLocationAcrossPrf()
numLocationDown = self._insar.getNumberLocationDownPrf()
objSlc = self._insar.getMasterSlcImage()
# widthSlc = max(self._insar.getMasterSlcImage().getWidth(),
# self._insar.getSlaveSlcImage().getWidth())
widthSlc = self._insar.getMasterSlcImage().getWidth()
objSlc = self._insar.getReferenceSlcImage()
# widthSlc = max(self._insar.getReferenceSlcImage().getWidth(),
# self._insar.getSecondarySlcImage().getWidth())
widthSlc = self._insar.getReferenceSlcImage().getWidth()
coarseRange = (nearRange1 - nearRange2) / (CN.SPEED_OF_LIGHT / (2 * fs1))
coarseAcross = int(coarseRange + 0.5)
@ -76,8 +76,8 @@ def runOffsetprf(self):
coarseAcross = self.grossRg
pass
time1, schPosition1, schVelocity1, offset1 = masterOrbit._unpackOrbit()
time2, schPosition2, schVelocity2, offset2 = slaveOrbit._unpackOrbit()
time1, schPosition1, schVelocity1, offset1 = referenceOrbit._unpackOrbit()
time2, schPosition2, schVelocity2, offset2 = secondaryOrbit._unpackOrbit()
s1 = schPosition1[0][0]
s1_2 = schPosition1[1][0]
s2 = schPosition2[0][0]
@ -101,7 +101,7 @@ def runOffsetprf(self):
coarseAcross = 0 + coarseAcross
coarseDown = 0 + coarseDown
mSlcImage = self._insar.getMasterSlcImage()
mSlcImage = self._insar.getReferenceSlcImage()
mSlc = isceobj.createSlcImage()
IU.copyAttributes(mSlcImage, mSlc)
# scheme = 'BIL'
@ -110,7 +110,7 @@ def runOffsetprf(self):
mSlc.setAccessMode(accessMode)
mSlc.createImage()
sSlcImage = self._insar.getSlaveSlcImage()
sSlcImage = self._insar.getSecondarySlcImage()
sSlc = isceobj.createSlcImage()
IU.copyAttributes(sSlcImage, sSlc)
# scheme = 'BIL'

View File

@ -41,16 +41,16 @@ def runOffsetprf(self):
from isceobj.Catalog import recordInputs
logger.info("Calculate offset between slcs using ampcor")
masterFrame = self._insar.getMasterFrame()
slaveFrame = self._insar.getSlaveFrame()
masterOrbit = self._insar.getMasterOrbit()
slaveOrbit = self._insar.getSlaveOrbit()
prf1 = masterFrame.getInstrument().getPulseRepetitionFrequency()
prf2 = slaveFrame.getInstrument().getPulseRepetitionFrequency()
referenceFrame = self._insar.getReferenceFrame()
secondaryFrame = self._insar.getSecondaryFrame()
referenceOrbit = self._insar.getReferenceOrbit()
secondaryOrbit = self._insar.getSecondaryOrbit()
prf1 = referenceFrame.getInstrument().getPulseRepetitionFrequency()
prf2 = secondaryFrame.getInstrument().getPulseRepetitionFrequency()
nearRange1 = self.insar.formSLC1.startingRange
nearRange2 = self.insar.formSLC2.startingRange
fs1 = masterFrame.getInstrument().getRangeSamplingRate()
fs2 = slaveFrame.getInstrument().getRangeSamplingRate()
fs1 = referenceFrame.getInstrument().getRangeSamplingRate()
fs2 = secondaryFrame.getInstrument().getRangeSamplingRate()
###There seems to be no other way of determining image length - Piyush
patchSize = self._insar.getPatchSize()
@ -95,23 +95,23 @@ def runOffsetprf(self):
coarseAcross = 0 + coarseAcross
coarseDown = 0 + coarseDown
mSlcImage = self._insar.getMasterSlcImage()
mSlcImage = self._insar.getReferenceSlcImage()
mSlc = isceobj.createSlcImage()
IU.copyAttributes(mSlcImage, mSlc)
accessMode = 'read'
mSlc.setAccessMode(accessMode)
mSlc.createImage()
masterWidth = mSlc.getWidth()
masterLength = mSlc.getLength()
referenceWidth = mSlc.getWidth()
referenceLength = mSlc.getLength()
sSlcImage = self._insar.getSlaveSlcImage()
sSlcImage = self._insar.getSecondarySlcImage()
sSlc = isceobj.createSlcImage()
IU.copyAttributes(sSlcImage, sSlc)
accessMode = 'read'
sSlc.setAccessMode(accessMode)
sSlc.createImage()
slaveWidth = sSlc.getWidth()
slaveLength = sSlc.getLength()
secondaryWidth = sSlc.getWidth()
secondaryLength = sSlc.getLength()
objAmpcor = Ampcor(name='insarapp_slcs_ampcor')
objAmpcor.configure()
@ -134,13 +134,13 @@ def runOffsetprf(self):
offAc = max(firstAc,-coarseAcross)+xMargin
offDn = max(firstDown,-coarseDown)+yMargin
offAcmax = int(coarseAcross + ((fs2/fs1)-1)*masterWidth)
offAcmax = int(coarseAcross + ((fs2/fs1)-1)*referenceWidth)
logger.debug("Gross Max Across: %s" % (offAcmax))
lastAc = int(min(masterWidth, slaveWidth- offAcmax) - xMargin)
lastAc = int(min(referenceWidth, secondaryWidth- offAcmax) - xMargin)
offDnmax = int(coarseDown + ((prf2/prf1)-1)*masterLength)
offDnmax = int(coarseDown + ((prf2/prf1)-1)*referenceLength)
logger.debug("Gross Max Down: %s" % (offDnmax))
lastDown = int( min(masterLength, slaveLength-offDnmax) - yMargin)
lastDown = int( min(referenceLength, secondaryLength-offDnmax) - yMargin)
if not objAmpcor.firstSampleAcross:

View File

@ -40,16 +40,16 @@ logger = logging.getLogger('isce.insar.runOffsetprf')
def runOffsetprf(self):
from isceobj.Catalog import recordInputs, recordOutputs
masterFrame = self._insar.getMasterFrame()
slaveFrame = self._insar.getSlaveFrame()
masterOrbit = self._insar.getMasterOrbit()
slaveOrbit = self._insar.getSlaveOrbit()
prf1 = masterFrame.getInstrument().getPulseRepetitionFrequency()
prf2 = slaveFrame.getInstrument().getPulseRepetitionFrequency()
referenceFrame = self._insar.getReferenceFrame()
secondaryFrame = self._insar.getSecondaryFrame()
referenceOrbit = self._insar.getReferenceOrbit()
secondaryOrbit = self._insar.getSecondaryOrbit()
prf1 = referenceFrame.getInstrument().getPulseRepetitionFrequency()
prf2 = secondaryFrame.getInstrument().getPulseRepetitionFrequency()
nearRange1 = self.insar.formSLC1.startingRange
nearRange2 = self.insar.formSLC2.startingRange
fs1 = masterFrame.getInstrument().getRangeSamplingRate()
fs2 = slaveFrame.getInstrument().getRangeSamplingRate()
fs1 = referenceFrame.getInstrument().getRangeSamplingRate()
fs2 = secondaryFrame.getInstrument().getRangeSamplingRate()
###There seems to be no other way of determining image length - Piyush
patchSize = self._insar.getPatchSize()
@ -98,23 +98,23 @@ def runOffsetprf(self):
coarseAcross = 0 + coarseAcross
coarseDown = 0 + coarseDown
mSlcImage = self._insar.getMasterSlcImage()
mSlcImage = self._insar.getReferenceSlcImage()
mSlc = isceobj.createSlcImage()
IU.copyAttributes(mSlcImage, mSlc)
accessMode = 'read'
mSlc.setAccessMode(accessMode)
mSlc.createImage()
masterWidth = mSlc.getWidth()
masterLength = mSlc.getLength()
referenceWidth = mSlc.getWidth()
referenceLength = mSlc.getLength()
sSlcImage = self._insar.getSlaveSlcImage()
sSlcImage = self._insar.getSecondarySlcImage()
sSlc = isceobj.createSlcImage()
IU.copyAttributes(sSlcImage, sSlc)
accessMode = 'read'
sSlc.setAccessMode(accessMode)
sSlc.createImage()
slaveWidth = sSlc.getWidth()
slaveLength = sSlc.getLength()
secondaryWidth = sSlc.getWidth()
secondaryLength = sSlc.getLength()
nStageObj = NStage(name='insarapp_slcs_nstage')

View File

@ -47,17 +47,17 @@ def runOrbit2sch(self):
pegHavg = self.insar.averageHeight
planet = self.insar.planet
# if self.pegSelect.upper() == 'MASTER':
# if self.pegSelect.upper() == 'REFERENCE':
# pegHavg = self.insar.getFirstAverageHeight()
# elif self.pegSelect.upper() == 'SLAVE':
# elif self.pegSelect.upper() == 'SECONDARY':
# pegHavg = self.insar.getSecondAverageHeight()
# elif self.pegSelect.upper() == 'AVERAGE':
# pegHavg = self.insar.averageHeight
# else:
# raise Exception('Unknown peg selection method: ', self.pegSelect)
masterOrbit = self.insar.masterOrbit
slaveOrbit = self.insar.slaveOrbit
referenceOrbit = self.insar.referenceOrbit
secondaryOrbit = self.insar.secondaryOrbit
objOrbit2sch1 = stdproc.createOrbit2sch(averageHeight=pegHavg)
objOrbit2sch1.stdWriter = self.stdWriter.set_file_tags("orbit2sch",
@ -67,10 +67,10 @@ def runOrbit2sch(self):
objOrbit2sch2 = stdproc.createOrbit2sch(averageHeight=pegHavg)
objOrbit2sch2.stdWriter = self.stdWriter
## loop over master/slave orbits
## loop over reference/secondary orbits
for obj, orb, tag, order in zip((objOrbit2sch1, objOrbit2sch2),
(self.insar.masterOrbit, self.insar.slaveOrbit),
('master', 'slave'),
(self.insar.referenceOrbit, self.insar.secondaryOrbit),
('reference', 'secondary'),
('First', 'Second')):
obj(planet=planet, orbit=orb, peg=peg)
recordInputsAndOutputs(self.insar.procDoc, obj,
@ -78,7 +78,7 @@ def runOrbit2sch(self):
logger,
"runOrbit2sch." + tag)
#equivalent to self.insar.masterOrbit =
#equivalent to self.insar.referenceOrbit =
setattr(self.insar,'%sOrbit'%(tag), obj.orbit)
#Piyush

View File

@ -36,11 +36,11 @@ logger = logging.getLogger('isce.insar.runPrepareResamps')
def runPrepareResamps(self, rangeLooks=None, azLooks=None):
import math
slaveOrbit = self.insar.slaveOrbit
masterFrame = self.insar.masterFrame
secondaryOrbit = self.insar.secondaryOrbit
referenceFrame = self.insar.referenceFrame
peg = self.insar.peg
masterSlcImage = self.insar.masterSlcImage
time2, schPosition2, schVelocity2, offset2 = slaveOrbit._unpackOrbit()
referenceSlcImage = self.insar.referenceSlcImage
time2, schPosition2, schVelocity2, offset2 = secondaryOrbit._unpackOrbit()
s2 = schPosition2[0][0]
s2_2 = schPosition2[1][0]
@ -49,19 +49,19 @@ def runPrepareResamps(self, rangeLooks=None, azLooks=None):
numPatches = self.insar.numberPatches
lines = numPatches * valid_az_samples
fs = masterFrame.getInstrument().getRangeSamplingRate()
fs = referenceFrame.getInstrument().getRangeSamplingRate()
dr = (SPEED_OF_LIGHT / (2 * fs))
self._insar.setSlantRangePixelSpacing(dr)
# widthSlc = max(self._insar.getMasterSlcImage().getWidth(), self._insar.getSlaveSlcImage().getWidth())
widthSlc = self._insar.getMasterSlcImage().getWidth()
# widthSlc = max(self._insar.getReferenceSlcImage().getWidth(), self._insar.getSecondarySlcImage().getWidth())
widthSlc = self._insar.getReferenceSlcImage().getWidth()
radarWavelength = masterFrame.getInstrument().getRadarWavelength()
radarWavelength = referenceFrame.getInstrument().getRadarWavelength()
rc = peg.getRadiusOfCurvature()
ht = self._insar.getAverageHeight()
r0 = masterFrame.getStartingRange()
r0 = referenceFrame.getStartingRange()
range = r0 + (widthSlc / 2 * dr)

View File

@ -35,35 +35,35 @@ from isceobj.Util.decorators import use_api
logger = logging.getLogger('isce.insar.runPreprocessor')
@use_api
def runPreprocessor(self):
master = make_raw(self.master, self.masterdop)
self.insar.rawMasterIQImage = master.iqImage
slave = make_raw(self.slave, self.slavedop)
self.insar.rawSlaveIQImage = slave.iqImage
self._insar.numberRangeBins = master.frame.numberRangeBins
reference = make_raw(self.reference, self.referencedop)
self.insar.rawReferenceIQImage = reference.iqImage
secondary = make_raw(self.secondary, self.secondarydop)
self.insar.rawSecondaryIQImage = secondary.iqImage
self._insar.numberRangeBins = reference.frame.numberRangeBins
#add raw images to main object
masterRaw = initRawImage(master)
self._insar.setMasterRawImage(masterRaw)
slaveRaw = initRawImage(slave)
self._insar.setSlaveRawImage(slaveRaw)
referenceRaw = initRawImage(reference)
self._insar.setReferenceRawImage(referenceRaw)
secondaryRaw = initRawImage(secondary)
self._insar.setSecondaryRawImage(secondaryRaw)
#add frames to main object
self._insar.setMasterFrame(master.frame)
self._insar.setSlaveFrame(slave.frame)
self._insar.setReferenceFrame(reference.frame)
self._insar.setSecondaryFrame(secondary.frame)
#add doppler to main object
self._insar.setMasterDoppler(master.getDopplerValues())
self._insar.setSlaveDoppler(slave.getDopplerValues())
self._insar.setReferenceDoppler(reference.getDopplerValues())
self._insar.setSecondaryDoppler(secondary.getDopplerValues())
#add squints to main object
self._insar.setMasterSquint(master.getSquint())
self._insar.setSlaveSquint(slave.getSquint())
self._insar.setReferenceSquint(reference.getSquint())
self._insar.setSecondarySquint(secondary.getSquint())
#add look direction
self._insar.setLookSide(master.frame.getInstrument().getPlatform().pointingDirection)
self._insar.setLookSide(reference.frame.getInstrument().getPlatform().pointingDirection)
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
frame = self._insar.getMasterFrame()
frame = self._insar.getReferenceFrame()
instrument = frame.getInstrument()
platform = instrument.getPlatform()
@ -71,43 +71,43 @@ def runPreprocessor(self):
catalog.addInputsFrom(planet, 'planet')
catalog.addInputsFrom(planet.get_elp(), 'planet.ellipsoid')
catalog.addInputsFrom(master.sensor, 'master.sensor')
catalog.addItem('width', masterRaw.getWidth(), 'master')
catalog.addItem('xmin', masterRaw.getXmin(), 'master')
catalog.addItem('iBias', instrument.getInPhaseValue(), 'master')
catalog.addItem('qBias', instrument.getQuadratureValue(), 'master')
catalog.addItem('range_sampling_rate', instrument.getRangeSamplingRate(), 'master')
catalog.addItem('prf', instrument.getPulseRepetitionFrequency(), 'master')
catalog.addItem('pri', 1.0/instrument.getPulseRepetitionFrequency(), 'master')
catalog.addItem('pulse_length', instrument.getPulseLength(), 'master')
catalog.addItem('chirp_slope', instrument.getChirpSlope(), 'master')
catalog.addItem('wavelength', instrument.getRadarWavelength(), 'master')
catalog.addItem('lookSide', platform.pointingDirection, 'master')
catalog.addInputsFrom(frame, 'master.frame')
catalog.addInputsFrom(instrument, 'master.instrument')
catalog.addInputsFrom(platform, 'master.platform')
catalog.addInputsFrom(frame.orbit, 'master.orbit')
catalog.addInputsFrom(reference.sensor, 'reference.sensor')
catalog.addItem('width', referenceRaw.getWidth(), 'reference')
catalog.addItem('xmin', referenceRaw.getXmin(), 'reference')
catalog.addItem('iBias', instrument.getInPhaseValue(), 'reference')
catalog.addItem('qBias', instrument.getQuadratureValue(), 'reference')
catalog.addItem('range_sampling_rate', instrument.getRangeSamplingRate(), 'reference')
catalog.addItem('prf', instrument.getPulseRepetitionFrequency(), 'reference')
catalog.addItem('pri', 1.0/instrument.getPulseRepetitionFrequency(), 'reference')
catalog.addItem('pulse_length', instrument.getPulseLength(), 'reference')
catalog.addItem('chirp_slope', instrument.getChirpSlope(), 'reference')
catalog.addItem('wavelength', instrument.getRadarWavelength(), 'reference')
catalog.addItem('lookSide', platform.pointingDirection, 'reference')
catalog.addInputsFrom(frame, 'reference.frame')
catalog.addInputsFrom(instrument, 'reference.instrument')
catalog.addInputsFrom(platform, 'reference.platform')
catalog.addInputsFrom(frame.orbit, 'reference.orbit')
frame = self._insar.getSlaveFrame()
frame = self._insar.getSecondaryFrame()
instrument = frame.getInstrument()
platform = instrument.getPlatform()
catalog.addInputsFrom(slave.sensor, 'slave.sensor')
catalog.addItem('width', slaveRaw.getWidth(), 'slave')
catalog.addItem('xmin', slaveRaw.getXmin(), 'slave')
catalog.addItem('iBias', instrument.getInPhaseValue(), 'slave')
catalog.addItem('qBias', instrument.getQuadratureValue(), 'slave')
catalog.addItem('range_sampling_rate', instrument.getRangeSamplingRate(), 'slave')
catalog.addItem('prf', instrument.getPulseRepetitionFrequency(), 'slave')
catalog.addItem('pri', 1.0/instrument.getPulseRepetitionFrequency(), 'slave')
catalog.addItem('pulse_length', instrument.getPulseLength(), 'slave')
catalog.addItem('chirp_slope', instrument.getChirpSlope(), 'slave')
catalog.addItem('wavelength', instrument.getRadarWavelength(), 'slave')
catalog.addItem('lookSide', platform.pointingDirection, 'slave')
catalog.addInputsFrom(frame, 'slave.frame')
catalog.addInputsFrom(instrument, 'slave.instrument')
catalog.addInputsFrom(platform, 'slave.platform')
catalog.addInputsFrom(frame.orbit, 'slave.orbit')
catalog.addInputsFrom(secondary.sensor, 'secondary.sensor')
catalog.addItem('width', secondaryRaw.getWidth(), 'secondary')
catalog.addItem('xmin', secondaryRaw.getXmin(), 'secondary')
catalog.addItem('iBias', instrument.getInPhaseValue(), 'secondary')
catalog.addItem('qBias', instrument.getQuadratureValue(), 'secondary')
catalog.addItem('range_sampling_rate', instrument.getRangeSamplingRate(), 'secondary')
catalog.addItem('prf', instrument.getPulseRepetitionFrequency(), 'secondary')
catalog.addItem('pri', 1.0/instrument.getPulseRepetitionFrequency(), 'secondary')
catalog.addItem('pulse_length', instrument.getPulseLength(), 'secondary')
catalog.addItem('chirp_slope', instrument.getChirpSlope(), 'secondary')
catalog.addItem('wavelength', instrument.getRadarWavelength(), 'secondary')
catalog.addItem('lookSide', platform.pointingDirection, 'secondary')
catalog.addInputsFrom(frame, 'secondary.frame')
catalog.addInputsFrom(instrument, 'secondary.instrument')
catalog.addInputsFrom(platform, 'secondary.platform')
catalog.addInputsFrom(frame.orbit, 'secondary.orbit')
optlist = ['all', 'top', 'middle', 'bottom']
@ -118,8 +118,8 @@ def runPreprocessor(self):
baseObj = Baseline()
baseObj.configure()
baseObj.baselineLocation = option
baseObj.wireInputPort(name='masterFrame',object=self._insar.getMasterFrame())
baseObj.wireInputPort(name='slaveFrame',object=self._insar.getSlaveFrame())
baseObj.wireInputPort(name='referenceFrame',object=self._insar.getReferenceFrame())
baseObj.wireInputPort(name='secondaryFrame',object=self._insar.getSecondaryFrame())
try:
baseObj.baseline()
success=True

View File

@ -35,11 +35,11 @@ from isceobj.Orbit.Orbit import Orbit
logger = logging.getLogger('isce.insar.runPulseTiming')
def runPulseTiming(self):
master = self.insar.masterFrame
slave = self.insar.slaveFrame
reference = self.insar.referenceFrame
secondary = self.insar.secondaryFrame
# add orbits to main object -law of demeter pls.
self.insar.masterOrbit = pulseTiming(master, self.insar.procDoc, 'master')
self.insar.slaveOrbit = pulseTiming(slave, self.insar.procDoc, 'slave')
self.insar.referenceOrbit = pulseTiming(reference, self.insar.procDoc, 'reference')
self.insar.secondaryOrbit = pulseTiming(secondary, self.insar.procDoc, 'secondary')
return None
def pulseTiming(frame, catalog, which):

View File

@ -38,8 +38,8 @@ logger = logging.getLogger('isce.insar.runResamp')
def runResamp(self):
logger.info("Resampling interferogram")
imageSlc1 = self.insar.masterSlcImage
imageSlc2 = self.insar.slaveSlcImage
imageSlc1 = self.insar.referenceSlcImage
imageSlc2 = self.insar.secondarySlcImage
resampName = self.insar.resampImageName
@ -86,21 +86,21 @@ def runResamp(self):
self.insar.resampAmpImage = imageAmp
instrument = self.insar.masterFrame.getInstrument()
instrument = self.insar.referenceFrame.getInstrument()
offsetField = self.insar.refinedOffsetField
lines = self.insar.numberResampLines
####Modified to deal with slave PRF correctly
####Modified to deal with secondary PRF correctly
dopplerCoeff = self.insar.dopplerCentroid.getDopplerCoefficients(inHz=True)
for num in range(len(dopplerCoeff)):
dopplerCoeff[num] /= self.insar.slaveFrame.getInstrument().getPulseRepetitionFrequency()
dopplerCoeff[num] /= self.insar.secondaryFrame.getInstrument().getPulseRepetitionFrequency()
numFitCoeff = self.insar.numberFitCoefficients
# pixelSpacing = self.insar.slantRangePixelSpacing
fS = self._insar.getSlaveFrame().getInstrument().getRangeSamplingRate()
fS = self._insar.getSecondaryFrame().getInstrument().getRangeSamplingRate()
pixelSpacing = CN.SPEED_OF_LIGHT/(2.*fS)
objResamp = stdproc.createResamp()

View File

@ -37,11 +37,11 @@ from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
logger = logging.getLogger('isce.insar.runResamp_image')
def runResamp_image(self):
imageSlc = self._insar.getMasterSlcImage()
widthSlc = max(self._insar.getMasterSlcImage().getWidth(), self._insar.getSlaveSlcImage().getWidth())
imageSlc = self._insar.getReferenceSlcImage()
widthSlc = max(self._insar.getReferenceSlcImage().getWidth(), self._insar.getSecondarySlcImage().getWidth())
offsetField = self._insar.getRefinedOffsetField()
instrument = self._insar.getMasterFrame().getInstrument()
instrument = self._insar.getReferenceFrame().getInstrument()
dopplerCoeff = self._insar.getDopplerCentroid().getDopplerCoefficients(inHz=False)

View File

@ -69,7 +69,7 @@ def runResamp_only(self):
numRangeBin = objInt.getWidth()
lines = objInt.getLength()
instrument = self._insar.getMasterFrame().getInstrument()
instrument = self._insar.getReferenceFrame().getInstrument()
offsetField = self._insar.getRefinedOffsetField()

View File

@ -106,7 +106,7 @@ def runRgoffset(self):
self._stdWriter.setFileTag("rgoffset", "err")
self._stdWriter.setFileTag("rgoffset", "out")
objOffset.setStdWriter(self._stdWriter)
prf = self._insar.getMasterFrame().getInstrument().getPulseRepetitionFrequency()
prf = self._insar.getReferenceFrame().getInstrument().getPulseRepetitionFrequency()
objOffset.setFirstPRF(prf)
objOffset.setSecondPRF(prf)

View File

@ -66,7 +66,7 @@ def runRgoffset(self):
simWidth = imageSim.getWidth()
simLength = imageSim.getLength()
fs1 = self._insar.getMasterFrame().getInstrument().getRangeSamplingRate() ##check
fs1 = self._insar.getReferenceFrame().getInstrument().getRangeSamplingRate() ##check
delRg1 = CN.SPEED_OF_LIGHT / (2*fs1) ## if it's correct
objAmpcor = Ampcor(name='insarapp_intsim_ampcor')
@ -117,7 +117,7 @@ def runRgoffset(self):
self._stdWriter.setFileTag("rgoffset", "err")
self._stdWriter.setFileTag("rgoffset", "out")
objAmpcor.setStdWriter(self._stdWriter)
prf = self._insar.getMasterFrame().getInstrument().getPulseRepetitionFrequency()
prf = self._insar.getReferenceFrame().getInstrument().getPulseRepetitionFrequency()
objAmpcor.setFirstPRF(prf)

View File

@ -47,25 +47,25 @@ def runRgoffset(self):
firstDn = self._insar.getFirstSampleDown()
ampImage = self._insar.getResampAmpImage()
slaveWidth = ampImage.getWidth()
slaveLength = ampImage.getLength()
secondaryWidth = ampImage.getWidth()
secondaryLength = ampImage.getLength()
objAmp = isceobj.createSlcImage()
objAmp.dataType = 'CFLOAT'
objAmp.bands = 1
objAmp.setFilename(ampImage.getFilename())
objAmp.setAccessMode('read')
objAmp.setWidth(slaveWidth)
objAmp.setWidth(secondaryWidth)
objAmp.createImage()
simImage = self._insar.getSimAmpImage()
masterWidth = simImage.getWidth()
referenceWidth = simImage.getWidth()
objSim = isceobj.createImage()
objSim.setFilename(simImage.getFilename())
objSim.dataType = 'FLOAT'
objSim.setWidth(masterWidth)
objSim.setWidth(referenceWidth)
objSim.setAccessMode('read')
objSim.createImage()
masterLength = simImage.getLength()
referenceLength = simImage.getLength()
nStageObj = NStage(name='insarapp_intsim_nstage')

View File

@ -60,28 +60,28 @@ def runSetmocomppath(self, peg=None):
logger.info("Selecting individual peg points")
planet = self._insar.getMasterFrame().getInstrument().getPlatform().getPlanet()
masterOrbit = self._insar.getMasterOrbit()
slaveOrbit = self._insar.getSlaveOrbit()
planet = self._insar.getReferenceFrame().getInstrument().getPlatform().getPlanet()
referenceOrbit = self._insar.getReferenceOrbit()
secondaryOrbit = self._insar.getSecondaryOrbit()
if peg:
self._insar.setPeg(peg)
logger.info("Using the given peg = %r", peg)
self._insar.setFirstAverageHeight(
averageHeightAboveElp(planet, peg, masterOrbit))
averageHeightAboveElp(planet, peg, referenceOrbit))
self._insar.setSecondAverageHeight(
averageHeightAboveElp(planet, peg, slaveOrbit))
averageHeightAboveElp(planet, peg, secondaryOrbit))
self._insar.setFirstProcVelocity(
sVelocityAtMidOrbit(planet, peg, masterOrbit))
sVelocityAtMidOrbit(planet, peg, referenceOrbit))
self._insar.setSecondProcVelocity(
sVelocityAtMidOrbit(planet, peg, slaveOrbit))
sVelocityAtMidOrbit(planet, peg, secondaryOrbit))
return
pegpts = []
for orbitObj, order in zip((masterOrbit, slaveOrbit)
for orbitObj, order in zip((referenceOrbit, secondaryOrbit)
,('First', 'Second')):
objGetpeg = stdproc.createGetpeg()
if peg:
@ -109,11 +109,11 @@ def runSetmocomppath(self, peg=None):
logger.info('Combining individual peg points.')
peg = averagePeg(pegpts, planet)
if self.pegSelect.upper() == 'MASTER':
logger.info('Using master info for peg point')
if self.pegSelect.upper() == 'REFERENCE':
logger.info('Using reference info for peg point')
self._insar.setPeg(pegpts[0])
elif self.pegSelect.upper() == 'SLAVE':
logger.info('Using slave infor for peg point')
elif self.pegSelect.upper() == 'SECONDARY':
logger.info('Using secondary infor for peg point')
self._insar.setPeg(pegpts[1])
elif self.pegSelect.upper() == 'AVERAGE':
logger.info('Using average peg point')

View File

@ -63,22 +63,22 @@ def runSetmocomppath(self, peg=None):
"""
planet = (
self._insar.getMasterFrame().getInstrument().getPlatform().getPlanet())
masterOrbit = self._insar.getMasterOrbit()
slaveOrbit = self._insar.getSlaveOrbit()
self._insar.getReferenceFrame().getInstrument().getPlatform().getPlanet())
referenceOrbit = self._insar.getReferenceOrbit()
secondaryOrbit = self._insar.getSecondaryOrbit()
if peg:
#If the input peg is set, then use it
self._insar.setPeg(peg)
logger.info("Using the given peg = %r", peg)
self._insar.setFirstAverageHeight(
averageHeightAboveElp(planet, peg, masterOrbit))
averageHeightAboveElp(planet, peg, referenceOrbit))
self._insar.setSecondAverageHeight(
averageHeightAboveElp(planet, peg, slaveOrbit))
averageHeightAboveElp(planet, peg, secondaryOrbit))
self._insar.setFirstProcVelocity(
sVelocityAtMidOrbit(planet, peg, masterOrbit))
sVelocityAtMidOrbit(planet, peg, referenceOrbit))
self._insar.setSecondProcVelocity(
sVelocityAtMidOrbit(planet, peg, slaveOrbit))
sVelocityAtMidOrbit(planet, peg, secondaryOrbit))
# recordInputsAndOutputs(self._insar.procDoc, peg, "peg",
# logger, "runSetmocomppath")
return
@ -86,17 +86,17 @@ def runSetmocomppath(self, peg=None):
logger.info("Selecting peg points from frames")
pegpts = []
pegpts.append(self._insar.getMasterFrame().peg)
pegpts.append(self._insar.getMasterFrame().peg)
pegpts.append(self._insar.getReferenceFrame().peg)
pegpts.append(self._insar.getReferenceFrame().peg)
peg = averagePeg(pegpts, planet)
self._insar.setPeg(peg)
self._insar.setFirstAverageHeight(
self._insar.getMasterFrame().platformHeight)
self._insar.getReferenceFrame().platformHeight)
self._insar.setSecondAverageHeight(
self._insar.getSlaveFrame().platformHeight)
self._insar.getSecondaryFrame().platformHeight)
self._insar.setFirstProcVelocity(
self._insar.getMasterFrame().procVelocity)
self._insar.getReferenceFrame().procVelocity)
self._insar.setSecondProcVelocity(
self._insar.getSlaveFrame().procVelocity)
self._insar.getSecondaryFrame().procVelocity)

View File

@ -61,16 +61,16 @@ def runTopo(self):
planet = self.insar.masterFrame.getInstrument().getPlatform().getPlanet()
prf1 = self.insar.masterFrame.getInstrument().getPulseRepetitionFrequency()
planet = self.insar.referenceFrame.getInstrument().getPlatform().getPlanet()
prf1 = self.insar.referenceFrame.getInstrument().getPulseRepetitionFrequency()
objTopo = stdproc.createTopo()
objTopo.wireInputPort(name='peg', object=self.insar.peg)
objTopo.wireInputPort(name='frame', object=self.insar.masterFrame)
objTopo.wireInputPort(name='frame', object=self.insar.referenceFrame)
objTopo.wireInputPort(name='planet', object=planet)
objTopo.wireInputPort(name='dem', object=objDem)
objTopo.wireInputPort(name='interferogram', object=intImage)
objTopo.wireInputPort(name='masterslc', object = self.insar.formSLC1) #Piyush
objTopo.wireInputPort(name='referenceslc', object = self.insar.formSLC1) #Piyush
centroid = self.insar.dopplerCentroid.getDopplerCoefficients(inHz=False)[0]
objTopo.setDopplerCentroidConstantTerm(centroid)

View File

@ -50,7 +50,7 @@ def runUnwrap(self,costMode = None,initMethod = None, defomax = None, initOnly =
wrapName = self.insar.topophaseFlatFilename
unwrapName = self.insar.unwrappedIntFilename
wavelength = self.insar.masterFrame.getInstrument().getRadarWavelength()
wavelength = self.insar.referenceFrame.getInstrument().getRadarWavelength()
width = self.insar.resampIntImage.width
earthRadius = self.insar.peg.radiusOfCurvature
altitude = self.insar.averageHeight
@ -58,10 +58,10 @@ def runUnwrap(self,costMode = None,initMethod = None, defomax = None, initOnly =
rangeLooks = self.insar.topo.numberRangeLooks
azimuthLooks = self.insar.topo.numberAzimuthLooks
azres = self.insar.masterFrame.platform.antennaLength/2.0
azres = self.insar.referenceFrame.platform.antennaLength/2.0
azfact = self.insar.topo.numberAzimuthLooks *azres / self.insar.topo.azimuthSpacing
rBW = self.insar.masterFrame.instrument.pulseLength * self.insar.masterFrame.instrument.chirpSlope
rBW = self.insar.referenceFrame.instrument.pulseLength * self.insar.referenceFrame.instrument.chirpSlope
rgres = abs(SPEED_OF_LIGHT / (2.0 * rBW))
rngfact = rgres/self.insar.topo.slantRangePixelSpacing

View File

@ -33,17 +33,17 @@ def runUpdatePreprocInfo(self, use_dop="average"):
peg = self.insar.peg
pegRc = peg.radiusOfCurvature
masterFrame = self.insar.masterFrame
slaveFrame = self.insar.slaveFrame
prf1 = masterFrame.getInstrument().getPulseRepetitionFrequency()
prf2 = slaveFrame.getInstrument().getPulseRepetitionFrequency()
masterDoppler = self.insar.masterDoppler
slaveDoppler = self.insar.slaveDoppler
referenceFrame = self.insar.referenceFrame
secondaryFrame = self.insar.secondaryFrame
prf1 = referenceFrame.getInstrument().getPulseRepetitionFrequency()
prf2 = secondaryFrame.getInstrument().getPulseRepetitionFrequency()
referenceDoppler = self.insar.referenceDoppler
secondaryDoppler = self.insar.secondaryDoppler
## red flag.
fd = runFdMocomp(self, use_dop=use_dop)
averageDoppler = masterDoppler.average(slaveDoppler)
averageDoppler = referenceDoppler.average(secondaryDoppler)
averageDoppler.fractionalCentroid = fd
self.insar.dopplerCentroid =averageDoppler
return None

View File

@ -417,7 +417,7 @@ class IsceProc(Component, FrameMixin):
## Why this: the code bloat with master this and slave that indicates the
## Why this: the code bloat with reference this and secondary that indicates the
## design princple does not use composition, this is an attempt to
## fix that
class RadarSwath(object):

View File

@ -93,7 +93,7 @@ def run(frame1, objFormSLC1, objMocompbaseline, intImage, velocity, height, info
objCorrect.wireInputPort(name='frame', object=frame1)
objCorrect.wireInputPort(name='planet', object=planet)
objCorrect.wireInputPort(name='interferogram', object=intImage)
objCorrect.wireInputPort(name='masterslc', object=objFormSLC1) #Piyush
objCorrect.wireInputPort(name='referenceslc', object=objFormSLC1) #Piyush
#objCorrect.setDopplerCentroidConstantTerm(centroid) #ML 2014-08-05
# Average velocity and height measurements
objCorrect.setBodyFixedVelocity(velocity)

View File

@ -152,7 +152,7 @@ def run(tobeGeocoded, frame1, formSLC1, velocity, height, snwe, infos, catalog=N
IU.copyAttributes(infos['demImage'], demImage)
objGeo(peg=infos['peg'], frame=frame1,
planet=planet, dem=demImage, tobegeocoded=inImage,
geoPosting=None, masterslc=formSLC1)
geoPosting=None, referenceslc=formSLC1)
if catalog is not None:
isceobj.Catalog.recordInputsAndOutputs(catalog, objGeo,

Some files were not shown because too many files have changed in this diff Show More