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 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 git checkout -b my_new_feature_branch
# do work. For example: # do work. For example:

View File

@ -451,7 +451,7 @@ for example:
>>> f = open("PICKLE/formslc") >>> f = open("PICKLE/formslc")
>>> import pickle >>> import pickle
>>> a = pickle.load(f) >>> a = pickle.load(f)
>>> o = f.getMasterOrbit() >>> o = f.getReferenceOrbit()
>>> t, x, p, off = o._unpackOrbit() >>> t, x, p, off = o._unpackOrbit()
>>> print(t) >>> print(t)
>>> print(x) >>> print(x)
@ -529,7 +529,7 @@ The basic (ALOS) input file looks like this (indentation is optional):
<stripmapApp> <stripmapApp>
<component name="stripmapApp"> <component name="stripmapApp">
<property name="sensor name">ALOS</property> <property name="sensor name">ALOS</property>
<component name="Master"> <component name="Reference">
<property name="IMAGEFILE"> <property name="IMAGEFILE">
/a/b/c/20070215/IMG-HH-ALPSRP056480670-H1.0__A /a/b/c/20070215/IMG-HH-ALPSRP056480670-H1.0__A
</property> </property>
@ -538,7 +538,7 @@ The basic (ALOS) input file looks like this (indentation is optional):
</property> </property>
<property name="OUTPUT">20070215</property> <property name="OUTPUT">20070215</property>
</component> </component>
<component name="Slave"> <component name="Secondary">
<property name="IMAGEFILE"> <property name="IMAGEFILE">
/a/b/c/20061231/IMG-HH-ALPSRP049770670-H1.0__A /a/b/c/20061231/IMG-HH-ALPSRP049770670-H1.0__A
</property> </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 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 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 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' These components have properties named 'IMAGEFILE', 'LEADERFILE', and 'OUTPUT'
with the values given in the above example. with the values given in the above example.
@ -587,10 +587,10 @@ between three files as follows:
<stripmapApp> <stripmapApp>
<component name="insar"> <component name="insar">
<property name="Sensor name">ALOS</property> <property name="Sensor name">ALOS</property>
<component name="master"> <component name="reference">
<catalog>20070215.xml</catalog> <catalog>20070215.xml</catalog>
</component> </component>
<component name="slave"> <component name="secondary">
<catalog>20061231.xml</catalog> <catalog>20061231.xml</catalog>
</component> </component>
</component> </component>
@ -600,7 +600,7 @@ between three files as follows:
#### 20070215.xml #### 20070215.xml
```xml ```xml
<component name="Master"> <component name="Reference">
<property name="IMAGEFILE"> <property name="IMAGEFILE">
/a/b/c/20070215/IMG-HH-ALPSRP056480670-H1.0__A /a/b/c/20070215/IMG-HH-ALPSRP056480670-H1.0__A
</property> </property>
@ -614,7 +614,7 @@ between three files as follows:
#### 20061231.xml #### 20061231.xml
```xml ```xml
<component name="Slave"> <component name="Secondary">
<property name="IMAGEFILE"> <property name="IMAGEFILE">
/a/b/c/20061231/IMG-HH-ALPSRP049770670-H1.0__A /a/b/c/20061231/IMG-HH-ALPSRP049770670-H1.0__A
</property> </property>
@ -636,7 +636,7 @@ The inputs are Sentinel GRD zipfiles
<property name="epsg id">32618</property> <property name="epsg id">32618</property>
<property name="geocode spacing">100</property> <property name="geocode spacing">100</property>
<property name="geocode interpolation method">bilinear</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="safe">$dir$/rtcApp/data/S1A_IW_GRDH_1SDV_20181221T225104_20181221T225129_025130_02C664_B46C.zip</property>
<property name="orbit directory">$dir$/orbits</property> <property name="orbit directory">$dir$/orbits</property>
<property name="output directory">$dir$/rtcApp/output</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 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 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 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. "alos" are created.
### Component Configuration Files: Locations, Names, Priorities ### 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: entered directly on the command line as in the following example:
```bash ```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 This example indicates that the variable named 'output' of the Component
named 'master' belonging to the Component (or Application) named 'insar' named 'reference' belonging to the Component (or Application) named 'insar'
will be given the name "master\_c.raw". will be given the name "reference\_c.raw".
The priority sequence on the command line goes from lowest priority on the left 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, to highest priority on the right. So, if we use the command line,
```bash ```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 where the myInputFile.xml file also gives a value for the insar reference output
file as master\_d.raw, then the one defined on the right will win, i.e., file as reference\_d.raw, then the one defined on the right will win, i.e.,
master\_c.raw. reference\_c.raw.
(2) The next priority location is the local directory in which stripmapApp.py is (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 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=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 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. 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 Nstage is created in components/isceobj/StripmapProc/runRefineSecondaryTiming.py where
it is given the name 'master_offset1' on line 35. If you are setting a parameter that 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 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 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'. Use the family name 'ampcor' for the component tag 'name'.
Example for SLC matching use of Ampcor: Example for SLC matching use of Ampcor:
Filename: master\_offset1.xml: Filename: reference\_offset1.xml:
```xml ```xml
<dummy> <dummy>

View File

@ -26,8 +26,8 @@ class insarProcXML(object):
def raw_rsc(self, key=None, write=False): def raw_rsc(self, key=None, write=False):
'''Write out the RSC files for Raw data.''' '''Write out the RSC files for Raw data.'''
if key not in ['master', 'slave']: if key not in ['reference', 'secondary']:
raise ValueError('Raw Files can only be written for master or slave.') raise ValueError('Raw Files can only be written for reference or secondary.')
rsc = OrderedDict() rsc = OrderedDict()
@ -137,8 +137,8 @@ class insarProcXML(object):
Create rsc files for all the interferograms generated by ISCE. Create rsc files for all the interferograms generated by ISCE.
''' '''
if key not in ['master', 'slave']: if key not in ['reference', 'secondary']:
raise ValueError('SLC files can only be written for master or slave.') raise ValueError('SLC files can only be written for reference or secondary.')
if raw is None: if raw is None:
rsc = self.raw_rsc(key=key, write=False) rsc = self.raw_rsc(key=key, write=False)
@ -221,8 +221,8 @@ if __name__ == '__main__':
'''Run the test on input xml file.''' '''Run the test on input xml file.'''
converter = insarProcXML() converter = insarProcXML()
master_raw_rsc = converter.raw_rsc(key='master', write=True) reference_raw_rsc = converter.raw_rsc(key='reference', write=True)
slave_raw_rsc = converter.raw_rsc(key='slave', 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) reference_slc_rsc = converter.slc_rsc(raw=reference_raw_rsc, key='reference', write=True)
slave_slc_rsc = converter.slc_rsc(raw=slave_raw_rsc, key='slave', 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) self.slook = np.sqrt(1-self.clook**2)
# print('Estimated Look Angle: %3.2f degrees'%(np.arccos(self.clook)*180.0/np.pi)) # 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.''' '''Compute baseline between current object and another orbit object.'''
ind = np.int(self.nvec/2) ind = np.int(self.nvec/2)
@ -93,17 +93,17 @@ class orbit_info:
vvec = np.cross(crp, rvec) vvec = np.cross(crp, rvec)
mvel = np.linalg.norm(mvel) mvel = np.linalg.norm(mvel)
ind = np.int(slave.nvec/2) #First guess ind = np.int(secondary.nvec/2) #First guess
spos = np.array(slave.pos[ind]) spos = np.array(secondary.pos[ind])
svel = np.array(slave.vel[ind]) svel = np.array(secondary.vel[ind])
svel = np.linalg.norm(svel) svel = np.linalg.norm(svel)
dx = spos - mpos; 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 ind = np.int(ind - z_offset) #Refined estimate
spos = slave.pos[ind] spos = secondary.pos[ind]
svel = slave.vel[ind] svel = secondary.vel[ind]
svel = np.linalg.norm(svel) svel = np.linalg.norm(svel)
dx = spos-mpos dx = spos-mpos
@ -169,16 +169,16 @@ if __name__ == '__main__':
Days = np.zeros(nSar) Days = np.zeros(nSar)
#######Setting the first scene as temporary reference. #######Setting the first scene as temporary reference.
master = Orbits[0] reference = Orbits[0]
Dopplers[0] = master.fd Dopplers[0] = reference.fd
Days[0] = master.dt.toordinal() Days[0] = reference.dt.toordinal()
for k in xrange(1,nSar): for k in xrange(1,nSar):
slave = Orbits[k] secondary = Orbits[k]
Bperp[k] = master.getBaseline(slave) Bperp[k] = reference.getBaseline(secondary)
Dopplers[k] = slave.fd Dopplers[k] = secondary.fd
Days[k] = slave.dt.toordinal() Days[k] = secondary.dt.toordinal()
print("************************************") print("************************************")
@ -193,7 +193,7 @@ if __name__ == '__main__':
geomRho = (1-np.clip(np.abs(Bperp[:,None]-Bperp[None,:])/inps.Bcrit, 0., 1.)) 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) 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 Rho = geomRho * tempRho * dopRho
for kk in xrange(nSar): for kk in xrange(nSar):
@ -205,17 +205,17 @@ if __name__ == '__main__':
####Currently sorting on average coherence. ####Currently sorting on average coherence.
masterChoice = np.argsort(avgRho) referenceChoice = np.argsort(avgRho)
masterOrbit = Orbits[masterChoice[0]] referenceOrbit = Orbits[referenceChoice[0]]
masterBperp = Bperp[masterChoice[0]] referenceBperp = Bperp[referenceChoice[0]]
print('*************************************') print('*************************************')
print('Ranking for Master Scene Selection: ') print('Ranking for Reference Scene Selection: ')
print('**************************************') print('**************************************')
print('Rank Index Date nViable Avg. Coh.' ) print('Rank Index Date nViable Avg. Coh.' )
for kk in xrange(nSar): 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('{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('***************************************') print('***************************************')
@ -234,31 +234,31 @@ if __name__ == '__main__':
[ii,jj] = np.where(Rho > inps.cThresh) [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): for mind, sind in itertools.izip(ii,jj):
master = Orbits[mind] reference = Orbits[mind]
slave = Orbits[sind] secondary = Orbits[sind]
if master.dt > slave.dt: if reference.dt > secondary.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])) 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, master.dt.strftime('%Y%m%d'), slave.dt.strftime('%Y%m%d')) 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('***************************************') print('***************************************')
#######Currently picks master peg point. #######Currently picks reference peg point.
print('***************************************') print('***************************************')
commonPeg = masterOrbit.peg commonPeg = referenceOrbit.peg
print('Common peg point: ') print('Common peg point: ')
print(commonPeg) 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 ######Choose median doppler
commonDop = np.median(Dopplers) commonDop = np.median(Dopplers)
maxDop = np.max(Dopplers) maxDop = np.max(Dopplers)
minDop = np.min(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('Common Doppler: ', commonDop)
print('Doppler Range: [%f, %f]'%(minDop, maxDop)) print('Doppler Range: [%f, %f]'%(minDop, maxDop))

View File

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

View File

@ -28,49 +28,49 @@ logging.config.fileConfig(
logger = logging.getLogger('isce.insar') logger = logging.getLogger('isce.insar')
MASTER_DIR = Application.Parameter('masterDir', REFERENCE_DIR = Application.Parameter('referenceDir',
public_name='master directory', public_name='reference directory',
default=None, default=None,
type=str, type=str,
mandatory=False, mandatory=False,
doc="master data directory") doc="reference data directory")
SLAVE_DIR = Application.Parameter('slaveDir', SECONDARY_DIR = Application.Parameter('secondaryDir',
public_name='slave directory', public_name='secondary directory',
default=None, default=None,
type=str, type=str,
mandatory=False, mandatory=False,
doc="slave data directory") doc="secondary data directory")
MASTER_FRAMES = Application.Parameter('masterFrames', REFERENCE_FRAMES = Application.Parameter('referenceFrames',
public_name = 'master frames', public_name = 'reference frames',
default = None, default = None,
type=str, type=str,
container=list, container=list,
mandatory=False, mandatory=False,
doc = 'master frames to process') doc = 'reference frames to process')
SLAVE_FRAMES = Application.Parameter('slaveFrames', SECONDARY_FRAMES = Application.Parameter('secondaryFrames',
public_name = 'slave frames', public_name = 'secondary frames',
default = None, default = None,
type=str, type=str,
container=list, container=list,
mandatory=False, mandatory=False,
doc = 'slave frames to process') doc = 'secondary frames to process')
MASTER_POLARIZATION = Application.Parameter('masterPolarization', REFERENCE_POLARIZATION = Application.Parameter('referencePolarization',
public_name='master polarization', public_name='reference polarization',
default='HH', default='HH',
type=str, type=str,
mandatory=False, mandatory=False,
doc="master polarization to process") doc="reference polarization to process")
SLAVE_POLARIZATION = Application.Parameter('slavePolarization', SECONDARY_POLARIZATION = Application.Parameter('secondaryPolarization',
public_name='slave polarization', public_name='secondary polarization',
default='HH', default='HH',
type=str, type=str,
mandatory=False, mandatory=False,
doc="slave polarization to process") doc="secondary polarization to process")
STARTING_SWATH = Application.Parameter('startingSwath', STARTING_SWATH = Application.Parameter('startingSwath',
public_name='starting swath', public_name='starting swath',
@ -460,21 +460,21 @@ RENDERER = Application.Parameter('renderer',
##################################################################### #####################################################################
#Facility declarations #Facility declarations
MASTER = Application.Facility('master', REFERENCE = Application.Facility('reference',
public_name='master', public_name='reference',
module='isceobj.Sensor.MultiMode', module='isceobj.Sensor.MultiMode',
factory='createSensor', factory='createSensor',
args=('ALOS2', 'master'), args=('ALOS2', 'reference'),
mandatory=True, mandatory=True,
doc="master component") doc="reference component")
SLAVE = Application.Facility('slave', SECONDARY = Application.Facility('secondary',
public_name='slave', public_name='secondary',
module='isceobj.Sensor.MultiMode', module='isceobj.Sensor.MultiMode',
factory='createSensor', factory='createSensor',
args=('ALOS2','slave'), args=('ALOS2','secondary'),
mandatory=True, mandatory=True,
doc="slave component") doc="secondary component")
# RUN_UNWRAPPER = Application.Facility('runUnwrapper', # RUN_UNWRAPPER = Application.Facility('runUnwrapper',
# public_name='Run unwrapper', # public_name='Run unwrapper',
@ -504,12 +504,12 @@ _INSAR = Application.Facility('_insar',
## Common interface for all insar applications. ## Common interface for all insar applications.
class Alos2burstInSAR(Application): class Alos2burstInSAR(Application):
family = 'alos2burstinsar' family = 'alos2burstinsar'
parameter_list = (MASTER_DIR, parameter_list = (REFERENCE_DIR,
SLAVE_DIR, SECONDARY_DIR,
MASTER_FRAMES, REFERENCE_FRAMES,
SLAVE_FRAMES, SECONDARY_FRAMES,
MASTER_POLARIZATION, REFERENCE_POLARIZATION,
SLAVE_POLARIZATION, SECONDARY_POLARIZATION,
STARTING_SWATH, STARTING_SWATH,
ENDING_SWATH, ENDING_SWATH,
DEM, DEM,
@ -566,8 +566,8 @@ class Alos2burstInSAR(Application):
PICKLE_LOAD_DIR, PICKLE_LOAD_DIR,
RENDERER) RENDERER)
facility_list = (MASTER, facility_list = (REFERENCE,
SLAVE, SECONDARY,
#RUN_UNWRAPPER, #RUN_UNWRAPPER,
#RUN_UNWRAP_2STAGE, #RUN_UNWRAP_2STAGE,
_INSAR) _INSAR)
@ -720,7 +720,7 @@ class Alos2burstInSAR(Application):
# Run a preprocessor for the two acquisitions # Run a preprocessor for the two acquisitions
self.step('preprocess', func=self.runPreprocessor, self.step('preprocess', func=self.runPreprocessor,
doc=( 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: if self.wbd != None:
self._insar.wbd = self.wbd 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.numberRangeLooks1 != None and self._insar.numberAzimuthLooks1 != None and \
self._insar.numberRangeLooks2 != None and self._insar.numberAzimuthLooks2 != None: 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, nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1,
nrlks2=self._insar.numberRangeLooks2, nalks2=self._insar.numberAzimuthLooks2) 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.numberRangeLooks1 != None and self._insar.numberAzimuthLooks1 != None and \
self._insar.numberRangeLooksSd != None and self._insar.numberAzimuthLooksSd != None: 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, nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1,
nrlks_sd=self._insar.numberRangeLooksSd, nalks_sd=self._insar.numberAzimuthLooksSd, nsd=3) 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): class calculateBaselineApp(FactoryInit):
def main(self): def main(self):
masterFrame = self.populateFrame(self.masterObj) referenceFrame = self.populateFrame(self.referenceObj)
slaveFrame = self.populateFrame(self.slaveObj) secondaryFrame = self.populateFrame(self.secondaryObj)
# Calculate the baseline information # Calculate the baseline information
baseline = Baseline() baseline = Baseline()
baseline.wireInputPort(name='masterFrame',object=masterFrame) baseline.wireInputPort(name='referenceFrame',object=referenceFrame)
baseline.wireInputPort(name='slaveFrame',object=slaveFrame) baseline.wireInputPort(name='secondaryFrame',object=secondaryFrame)
baseline.wireInputPort(name='masterOrbit',object=masterFrame.getOrbit()) baseline.wireInputPort(name='referenceOrbit',object=referenceFrame.getOrbit())
baseline.wireInputPort(name='slaveOrbit',object=slaveFrame.getOrbit()) baseline.wireInputPort(name='secondaryOrbit',object=secondaryFrame.getOrbit())
baseline.wireInputPort(name='ellipsoid',object=masterFrame.getInstrument().getPlatform().getPlanet().get_elp()) baseline.wireInputPort(name='ellipsoid',object=referenceFrame.getInstrument().getPlatform().getPlanet().get_elp())
baseline.baseline() baseline.baseline()
print(baseline) print(baseline)
@ -68,8 +68,8 @@ class calculateBaselineApp(FactoryInit):
def __init__(self,arglist): def __init__(self,arglist):
FactoryInit.__init__(self) FactoryInit.__init__(self)
self.initFactory(arglist) self.initFactory(arglist)
self.masterObj = self.getComponent('Master') self.referenceObj = self.getComponent('Reference')
self.slaveObj = self.getComponent('Slave') self.secondaryObj = self.getComponent('Secondary')
self.logger = logging.getLogger('isce.calculateBaseline') self.logger = logging.getLogger('isce.calculateBaseline')
if __name__ == "__main__": if __name__ == "__main__":

View File

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

View File

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

View File

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

View File

@ -82,7 +82,7 @@ PEG_SELECT = Application.Parameter(
public_name='peg select', public_name='peg select',
default='average', default='average',
mandatory=False, 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( PEG_LAT = Application.Parameter(
@ -156,7 +156,7 @@ USE_DOP = Application.Parameter(
default="average", default="average",
type=float, type=float,
mandatory=False, 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( UNWRAPPER_NAME = Application.Parameter(
@ -414,44 +414,44 @@ RENDERER = Application.Parameter(
) )
#Facility declarations #Facility declarations
MASTER = Application.Facility( REFERENCE = Application.Facility(
'master', 'reference',
public_name='Master', public_name='Reference',
module='isceobj.Sensor', module='isceobj.Sensor',
factory='createSensor', factory='createSensor',
args=(SENSOR_NAME, 'master'), args=(SENSOR_NAME, 'reference'),
mandatory=True, mandatory=True,
doc="Master raw data component" doc="Reference raw data component"
) )
SLAVE = Application.Facility( SECONDARY = Application.Facility(
'slave', 'secondary',
public_name='Slave', public_name='Secondary',
module='isceobj.Sensor', module='isceobj.Sensor',
factory='createSensor', factory='createSensor',
args=(SENSOR_NAME,'slave'), args=(SENSOR_NAME,'secondary'),
mandatory=True, mandatory=True,
doc="Slave raw data component" doc="Secondary raw data component"
) )
MASTERDOP = Application.Facility( REFERENCEDOP = Application.Facility(
'masterdop', 'referencedop',
public_name='Master Doppler', public_name='Reference Doppler',
module='isceobj.Doppler', module='isceobj.Doppler',
factory='createDoppler', factory='createDoppler',
args=(DOPPLER_METHOD,), args=(DOPPLER_METHOD,),
mandatory=False, mandatory=False,
doc="Master Doppler calculation method" doc="Reference Doppler calculation method"
) )
SLAVEDOP = Application.Facility( SECONDARYDOP = Application.Facility(
'slavedop', 'secondarydop',
public_name='Slave Doppler', public_name='Secondary Doppler',
module='isceobj.Doppler', module='isceobj.Doppler',
factory='createDoppler', factory='createDoppler',
args=(DOPPLER_METHOD,), args=(DOPPLER_METHOD,),
mandatory=False, mandatory=False,
doc="Master Doppler calculation method" doc="Reference Doppler calculation method"
) )
DEM = Application.Facility( DEM = Application.Facility(
@ -591,10 +591,10 @@ class _InsarBase(Application, FrameMixin):
UNWRAPPER_2STAGE_NAME, UNWRAPPER_2STAGE_NAME,
SOLVER_2STAGE) SOLVER_2STAGE)
facility_list = (MASTER, facility_list = (REFERENCE,
SLAVE, SECONDARY,
MASTERDOP, REFERENCEDOP,
SLAVEDOP, SECONDARYDOP,
DEM, DEM,
DEM_STITCHER, DEM_STITCHER,
RUN_ESTIMATE_HEIGHTS, RUN_ESTIMATE_HEIGHTS,
@ -842,9 +842,9 @@ class _InsarBase(Application, FrameMixin):
from isceobj.Util.decorators import use_api from isceobj.Util.decorators import use_api
@use_api @use_api
def verifyDEM(self): def verifyDEM(self):
masterF = self._insar.masterFrame referenceF = self._insar.referenceFrame
slaveF = self._insar.slaveFrame secondaryF = self._insar.secondaryFrame
info = self.extractInfo(masterF, slaveF) info = self.extractInfo(referenceF, secondaryF)
#if an image has been specified, then no need to create one #if an image has been specified, then no need to create one
if not self.dem.filename: if not self.dem.filename:
self.createDem(info) self.createDem(info)
@ -962,7 +962,7 @@ class _InsarBase(Application, FrameMixin):
self.step('preprocess', self.step('preprocess',
func=self.runPreprocessor, func=self.runPreprocessor,
doc=( 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): class App(Tkinter.Frame):
def __init__(self,master=None): def __init__(self,reference=None):
Tkinter.Frame.__init__(self,master) Tkinter.Frame.__init__(self,reference)
self.master.title('ISSI Input File Generator') self.reference.title('ISSI Input File Generator')
self.filterList = None self.filterList = None
self.filterX = Tkinter.IntVar() self.filterX = Tkinter.IntVar()

View File

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

View File

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

View File

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

View File

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

View File

@ -108,4 +108,4 @@ if __name__ == "__main__":
import sys import sys
ds = Stitcher('wbdstitcher') ds = Stitcher('wbdstitcher')
ds.configure() 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 from iscesys.Compatibility import Compatibility
MASTER_DATE = Component.Parameter('masterDate', REFERENCE_DATE = Component.Parameter('referenceDate',
public_name='master date', public_name='reference date',
default=None, default=None,
type=str, type=str,
mandatory=True, mandatory=True,
doc='master acquistion date') doc='reference acquistion date')
SLAVE_DATE = Component.Parameter('slaveDate', SECONDARY_DATE = Component.Parameter('secondaryDate',
public_name='slave date', public_name='secondary date',
default=None, default=None,
type=str, type=str,
mandatory=True, mandatory=True,
doc='slave acquistion date') doc='secondary acquistion date')
MODE_COMBINATION = Component.Parameter('modeCombination', MODE_COMBINATION = Component.Parameter('modeCombination',
public_name='mode combination', public_name='mode combination',
@ -32,21 +32,21 @@ MODE_COMBINATION = Component.Parameter('modeCombination',
mandatory=True, mandatory=True,
doc='mode combination') doc='mode combination')
MASTER_FRAMES = Component.Parameter('masterFrames', REFERENCE_FRAMES = Component.Parameter('referenceFrames',
public_name = 'master frames', public_name = 'reference frames',
default = None, default = None,
type=str, type=str,
container=list, container=list,
mandatory=False, mandatory=False,
doc = 'master frames to process') doc = 'reference frames to process')
SLAVE_FRAMES = Component.Parameter('slaveFrames', SECONDARY_FRAMES = Component.Parameter('secondaryFrames',
public_name = 'slave frames', public_name = 'secondary frames',
default = None, default = None,
type=str, type=str,
container=list, container=list,
mandatory=False, mandatory=False,
doc = 'slave frames to process') doc = 'secondary frames to process')
STARTING_SWATH = Component.Parameter('startingSwath', STARTING_SWATH = Component.Parameter('startingSwath',
public_name='starting swath', public_name='starting swath',
@ -76,135 +76,135 @@ BURST_SYNCHRONIZATION = Component.Parameter('burstSynchronization',
mandatory = False, mandatory = False,
doc = 'average burst synchronization of all swaths and frames in percentage') doc = 'average burst synchronization of all swaths and frames in percentage')
SWATH_RANGE_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('swathRangeOffsetGeometricalMaster', SWATH_RANGE_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('swathRangeOffsetGeometricalReference',
public_name = 'swath range offset from geometry master', public_name = 'swath range offset from geometry reference',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'swath range offset from geometry master') doc = 'swath range offset from geometry reference')
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('swathAzimuthOffsetGeometricalMaster', SWATH_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('swathAzimuthOffsetGeometricalReference',
public_name = 'swath azimuth offset from geometry master', public_name = 'swath azimuth offset from geometry reference',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'swath azimuth offset from geometry master') doc = 'swath azimuth offset from geometry reference')
SWATH_RANGE_OFFSET_MATCHING_MASTER = Component.Parameter('swathRangeOffsetMatchingMaster', SWATH_RANGE_OFFSET_MATCHING_REFERENCE = Component.Parameter('swathRangeOffsetMatchingReference',
public_name = 'swath range offset from matching master', public_name = 'swath range offset from matching reference',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'swath range offset from matching master') doc = 'swath range offset from matching reference')
SWATH_AZIMUTH_OFFSET_MATCHING_MASTER = Component.Parameter('swathAzimuthOffsetMatchingMaster', SWATH_AZIMUTH_OFFSET_MATCHING_REFERENCE = Component.Parameter('swathAzimuthOffsetMatchingReference',
public_name = 'swath azimuth offset from matching master', public_name = 'swath azimuth offset from matching reference',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'swath azimuth offset from matching master') doc = 'swath azimuth offset from matching reference')
SWATH_RANGE_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('swathRangeOffsetGeometricalSlave', SWATH_RANGE_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('swathRangeOffsetGeometricalSecondary',
public_name = 'swath range offset from geometry slave', public_name = 'swath range offset from geometry secondary',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'swath range offset from geometry slave') doc = 'swath range offset from geometry secondary')
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('swathAzimuthOffsetGeometricalSlave', SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('swathAzimuthOffsetGeometricalSecondary',
public_name = 'swath azimuth offset from geometry slave', public_name = 'swath azimuth offset from geometry secondary',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'swath azimuth offset from geometry slave') doc = 'swath azimuth offset from geometry secondary')
SWATH_RANGE_OFFSET_MATCHING_SLAVE = Component.Parameter('swathRangeOffsetMatchingSlave', SWATH_RANGE_OFFSET_MATCHING_SECONDARY = Component.Parameter('swathRangeOffsetMatchingSecondary',
public_name = 'swath range offset from matching slave', public_name = 'swath range offset from matching secondary',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'swath range offset from matching slave') doc = 'swath range offset from matching secondary')
SWATH_AZIMUTH_OFFSET_MATCHING_SLAVE = Component.Parameter('swathAzimuthOffsetMatchingSlave', SWATH_AZIMUTH_OFFSET_MATCHING_SECONDARY = Component.Parameter('swathAzimuthOffsetMatchingSecondary',
public_name = 'swath azimuth offset from matching slave', public_name = 'swath azimuth offset from matching secondary',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'swath azimuth offset from matching slave') doc = 'swath azimuth offset from matching secondary')
FRAME_RANGE_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('frameRangeOffsetGeometricalMaster', FRAME_RANGE_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('frameRangeOffsetGeometricalReference',
public_name = 'frame range offset from geometry master', public_name = 'frame range offset from geometry reference',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'frame range offset from geometry master') doc = 'frame range offset from geometry reference')
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('frameAzimuthOffsetGeometricalMaster', FRAME_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('frameAzimuthOffsetGeometricalReference',
public_name = 'frame azimuth offset from geometry master', public_name = 'frame azimuth offset from geometry reference',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'frame azimuth offset from geometry master') doc = 'frame azimuth offset from geometry reference')
FRAME_RANGE_OFFSET_MATCHING_MASTER = Component.Parameter('frameRangeOffsetMatchingMaster', FRAME_RANGE_OFFSET_MATCHING_REFERENCE = Component.Parameter('frameRangeOffsetMatchingReference',
public_name = 'frame range offset from matching master', public_name = 'frame range offset from matching reference',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'frame range offset from matching master') doc = 'frame range offset from matching reference')
FRAME_AZIMUTH_OFFSET_MATCHING_MASTER = Component.Parameter('frameAzimuthOffsetMatchingMaster', FRAME_AZIMUTH_OFFSET_MATCHING_REFERENCE = Component.Parameter('frameAzimuthOffsetMatchingReference',
public_name = 'frame azimuth offset from matching master', public_name = 'frame azimuth offset from matching reference',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'frame azimuth offset from matching master') doc = 'frame azimuth offset from matching reference')
FRAME_RANGE_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('frameRangeOffsetGeometricalSlave', FRAME_RANGE_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('frameRangeOffsetGeometricalSecondary',
public_name = 'frame range offset from geometry slave', public_name = 'frame range offset from geometry secondary',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'frame range offset from geometry slave') doc = 'frame range offset from geometry secondary')
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('frameAzimuthOffsetGeometricalSlave', FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('frameAzimuthOffsetGeometricalSecondary',
public_name = 'frame azimuth offset from geometry slave', public_name = 'frame azimuth offset from geometry secondary',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'frame azimuth offset from geometry slave') doc = 'frame azimuth offset from geometry secondary')
FRAME_RANGE_OFFSET_MATCHING_SLAVE = Component.Parameter('frameRangeOffsetMatchingSlave', FRAME_RANGE_OFFSET_MATCHING_SECONDARY = Component.Parameter('frameRangeOffsetMatchingSecondary',
public_name = 'frame range offset from matching slave', public_name = 'frame range offset from matching secondary',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'frame range offset from matching slave') doc = 'frame range offset from matching secondary')
FRAME_AZIMUTH_OFFSET_MATCHING_SLAVE = Component.Parameter('frameAzimuthOffsetMatchingSlave', FRAME_AZIMUTH_OFFSET_MATCHING_SECONDARY = Component.Parameter('frameAzimuthOffsetMatchingSecondary',
public_name = 'frame azimuth offset from matching slave', public_name = 'frame azimuth offset from matching secondary',
default = None, default = None,
type = float, type = float,
mandatory = True, mandatory = True,
container = list, container = list,
doc = 'frame azimuth offset from matching slave') doc = 'frame azimuth offset from matching secondary')
NUMBER_RANGE_LOOKS1 = Component.Parameter('numberRangeLooks1', NUMBER_RANGE_LOOKS1 = Component.Parameter('numberRangeLooks1',
public_name='number of range looks 1', public_name='number of range looks 1',
@ -279,75 +279,75 @@ RADAR_DEM_AFFINE_TRANSFORM = Component.Parameter('radarDemAffineTransform',
doc = 'radar dem affine transform parameters') doc = 'radar dem affine transform parameters')
MASTER_SLC = Component.Parameter('masterSlc', REFERENCE_SLC = Component.Parameter('referenceSlc',
public_name='master slc', public_name='reference slc',
default=None, default=None,
type=str, type=str,
mandatory=False, mandatory=False,
doc='master slc file') doc='reference slc file')
SLAVE_SLC = Component.Parameter('slaveSlc', SECONDARY_SLC = Component.Parameter('secondarySlc',
public_name='slave slc', public_name='secondary slc',
default=None, default=None,
type=str, type=str,
mandatory=False, mandatory=False,
doc='slave slc file') doc='secondary slc file')
MASTER_SWATH_OFFSET = Component.Parameter('masterSwathOffset', REFERENCE_SWATH_OFFSET = Component.Parameter('referenceSwathOffset',
public_name='master swath offset', public_name='reference swath offset',
default=None, default=None,
type=str, type=str,
mandatory=False, mandatory=False,
doc='master swath offset file') doc='reference swath offset file')
SLAVE_SWATH_OFFSET = Component.Parameter('slaveSwathOffset', SECONDARY_SWATH_OFFSET = Component.Parameter('secondarySwathOffset',
public_name='slave swath offset', public_name='secondary swath offset',
default=None, default=None,
type=str, type=str,
mandatory=False, mandatory=False,
doc='slave swath offset file') doc='secondary swath offset file')
MASTER_FRAME_OFFSET = Component.Parameter('masterFrameOffset', REFERENCE_FRAME_OFFSET = Component.Parameter('referenceFrameOffset',
public_name='master frame offset', public_name='reference frame offset',
default=None, default=None,
type=str, type=str,
mandatory=False, mandatory=False,
doc='master frame offset file') doc='reference frame offset file')
SLAVE_FRAME_OFFSET = Component.Parameter('slaveFrameOffset', SECONDARY_FRAME_OFFSET = Component.Parameter('secondaryFrameOffset',
public_name='slave frame offset', public_name='secondary frame offset',
default=None, default=None,
type=str, type=str,
mandatory=False, mandatory=False,
doc='slave frame offset file') doc='secondary frame offset file')
MASTER_FRAME_PARAMETER = Component.Parameter('masterFrameParameter', REFERENCE_FRAME_PARAMETER = Component.Parameter('referenceFrameParameter',
public_name='master frame parameter', public_name='reference frame parameter',
default=None, default=None,
type=str, type=str,
mandatory=False, mandatory=False,
doc='master frame parameter file') doc='reference frame parameter file')
SLAVE_FRAME_PARAMETER = Component.Parameter('slaveFrameParameter', SECONDARY_FRAME_PARAMETER = Component.Parameter('secondaryFrameParameter',
public_name='slave frame parameter', public_name='secondary frame parameter',
default=None, default=None,
type=str, type=str,
mandatory=False, mandatory=False,
doc='slave frame parameter file') doc='secondary frame parameter file')
MASTER_TRACK_PARAMETER = Component.Parameter('masterTrackParameter', REFERENCE_TRACK_PARAMETER = Component.Parameter('referenceTrackParameter',
public_name='master track parameter', public_name='reference track parameter',
default=None, default=None,
type=str, type=str,
mandatory=False, mandatory=False,
doc='master track parameter file') doc='reference track parameter file')
SLAVE_TRACK_PARAMETER = Component.Parameter('slaveTrackParameter', SECONDARY_TRACK_PARAMETER = Component.Parameter('secondaryTrackParameter',
public_name='slave track parameter', public_name='secondary track parameter',
default=None, default=None,
type=str, type=str,
mandatory=False, mandatory=False,
doc='slave track parameter file') doc='secondary track parameter file')
DEM = Component.Parameter('dem', DEM = Component.Parameter('dem',
public_name='dem for coregistration', public_name='dem for coregistration',
@ -618,12 +618,12 @@ OFFSET_IMAGE_LEFTOFFSET = Component.Parameter('offsetImageLeftoffset',
mandatory=False, mandatory=False,
doc="offset image left offset in samples") doc="offset image left offset in samples")
SLAVE_SLC_COREGISTERED = Component.Parameter('slaveSlcCoregistered', SECONDARY_SLC_COREGISTERED = Component.Parameter('secondarySlcCoregistered',
public_name='coregistered slave slc', public_name='coregistered secondary slc',
default=None, default=None,
type=str, type=str,
mandatory=False, mandatory=False,
doc='coregistered slave slc file') doc='coregistered secondary slc file')
DENSE_OFFSET = Component.Parameter('denseOffset', DENSE_OFFSET = Component.Parameter('denseOffset',
public_name='dense offset', public_name='dense offset',
@ -681,31 +681,31 @@ class Alos2Proc(Component):
to modify and return their values. to modify and return their values.
""" """
parameter_list = (MASTER_DATE, parameter_list = (REFERENCE_DATE,
SLAVE_DATE, SECONDARY_DATE,
MODE_COMBINATION, MODE_COMBINATION,
MASTER_FRAMES, REFERENCE_FRAMES,
SLAVE_FRAMES, SECONDARY_FRAMES,
STARTING_SWATH, STARTING_SWATH,
ENDING_SWATH, ENDING_SWATH,
BURST_UNSYNCHRONIZED_TIME, BURST_UNSYNCHRONIZED_TIME,
BURST_SYNCHRONIZATION, BURST_SYNCHRONIZATION,
SWATH_RANGE_OFFSET_GEOMETRICAL_MASTER, SWATH_RANGE_OFFSET_GEOMETRICAL_REFERENCE,
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_MASTER, SWATH_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE,
SWATH_RANGE_OFFSET_MATCHING_MASTER, SWATH_RANGE_OFFSET_MATCHING_REFERENCE,
SWATH_AZIMUTH_OFFSET_MATCHING_MASTER, SWATH_AZIMUTH_OFFSET_MATCHING_REFERENCE,
SWATH_RANGE_OFFSET_GEOMETRICAL_SLAVE, SWATH_RANGE_OFFSET_GEOMETRICAL_SECONDARY,
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE, SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY,
SWATH_RANGE_OFFSET_MATCHING_SLAVE, SWATH_RANGE_OFFSET_MATCHING_SECONDARY,
SWATH_AZIMUTH_OFFSET_MATCHING_SLAVE, SWATH_AZIMUTH_OFFSET_MATCHING_SECONDARY,
FRAME_RANGE_OFFSET_GEOMETRICAL_MASTER, FRAME_RANGE_OFFSET_GEOMETRICAL_REFERENCE,
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_MASTER, FRAME_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE,
FRAME_RANGE_OFFSET_MATCHING_MASTER, FRAME_RANGE_OFFSET_MATCHING_REFERENCE,
FRAME_AZIMUTH_OFFSET_MATCHING_MASTER, FRAME_AZIMUTH_OFFSET_MATCHING_REFERENCE,
FRAME_RANGE_OFFSET_GEOMETRICAL_SLAVE, FRAME_RANGE_OFFSET_GEOMETRICAL_SECONDARY,
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE, FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY,
FRAME_RANGE_OFFSET_MATCHING_SLAVE, FRAME_RANGE_OFFSET_MATCHING_SECONDARY,
FRAME_AZIMUTH_OFFSET_MATCHING_SLAVE, FRAME_AZIMUTH_OFFSET_MATCHING_SECONDARY,
NUMBER_RANGE_LOOKS1, NUMBER_RANGE_LOOKS1,
NUMBER_AZIMUTH_LOOKS1, NUMBER_AZIMUTH_LOOKS1,
NUMBER_RANGE_LOOKS2, NUMBER_RANGE_LOOKS2,
@ -716,16 +716,16 @@ class Alos2Proc(Component):
NUMBER_AZIMUTH_LOOKS_ION, NUMBER_AZIMUTH_LOOKS_ION,
SUBBAND_RADAR_WAVLENGTH, SUBBAND_RADAR_WAVLENGTH,
RADAR_DEM_AFFINE_TRANSFORM, RADAR_DEM_AFFINE_TRANSFORM,
MASTER_SLC, REFERENCE_SLC,
SLAVE_SLC, SECONDARY_SLC,
MASTER_SWATH_OFFSET, REFERENCE_SWATH_OFFSET,
SLAVE_SWATH_OFFSET, SECONDARY_SWATH_OFFSET,
MASTER_FRAME_OFFSET, REFERENCE_FRAME_OFFSET,
SLAVE_FRAME_OFFSET, SECONDARY_FRAME_OFFSET,
MASTER_FRAME_PARAMETER, REFERENCE_FRAME_PARAMETER,
SLAVE_FRAME_PARAMETER, SECONDARY_FRAME_PARAMETER,
MASTER_TRACK_PARAMETER, REFERENCE_TRACK_PARAMETER,
SLAVE_TRACK_PARAMETER, SECONDARY_TRACK_PARAMETER,
DEM, DEM,
DEM_GEO, DEM_GEO,
WBD, WBD,
@ -764,7 +764,7 @@ class Alos2Proc(Component):
GEO_ION, GEO_ION,
OFFSET_IMAGE_TOPOFFSET, OFFSET_IMAGE_TOPOFFSET,
OFFSET_IMAGE_LEFTOFFSET, OFFSET_IMAGE_LEFTOFFSET,
SLAVE_SLC_COREGISTERED, SECONDARY_SLC_COREGISTERED,
DENSE_OFFSET, DENSE_OFFSET,
DENSE_OFFSET_SNR, DENSE_OFFSET_SNR,
DENSE_OFFSET_COV, DENSE_OFFSET_COV,
@ -785,12 +785,12 @@ class Alos2Proc(Component):
self.procDoc = procDoc self.procDoc = procDoc
return None return None
def setFilename(self, masterDate, slaveDate, nrlks1, nalks1, nrlks2, nalks2): def setFilename(self, referenceDate, secondaryDate, nrlks1, nalks1, nrlks2, nalks2):
# if masterDate == None: # if referenceDate == None:
# masterDate = self.masterDate # referenceDate = self.referenceDate
# if slaveDate == None: # if secondaryDate == None:
# slaveDate = self.slaveDate # secondaryDate = self.secondaryDate
# if nrlks1 == None: # if nrlks1 == None:
# nrlks1 = self.numberRangeLooks1 # nrlks1 = self.numberRangeLooks1
# if nalks1 == None: # if nalks1 == None:
@ -800,20 +800,20 @@ class Alos2Proc(Component):
# if nalks2 == None: # if nalks2 == None:
# nalks2 = self.numberAzimuthLooks2 # nalks2 = self.numberAzimuthLooks2
ms = masterDate + '-' + slaveDate ms = referenceDate + '-' + secondaryDate
ml1 = '_{}rlks_{}alks'.format(nrlks1, nalks1) ml1 = '_{}rlks_{}alks'.format(nrlks1, nalks1)
ml2 = '_{}rlks_{}alks'.format(nrlks1*nrlks2, nalks1*nalks2) ml2 = '_{}rlks_{}alks'.format(nrlks1*nrlks2, nalks1*nalks2)
self.masterSlc = masterDate + '.slc' self.referenceSlc = referenceDate + '.slc'
self.slaveSlc = slaveDate + '.slc' self.secondarySlc = secondaryDate + '.slc'
self.masterSwathOffset = 'swath_offset_' + masterDate + '.txt' self.referenceSwathOffset = 'swath_offset_' + referenceDate + '.txt'
self.slaveSwathOffset = 'swath_offset_' + slaveDate + '.txt' self.secondarySwathOffset = 'swath_offset_' + secondaryDate + '.txt'
self.masterFrameOffset = 'frame_offset_' + masterDate + '.txt' self.referenceFrameOffset = 'frame_offset_' + referenceDate + '.txt'
self.slaveFrameOffset = 'frame_offset_' + slaveDate + '.txt' self.secondaryFrameOffset = 'frame_offset_' + secondaryDate + '.txt'
self.masterFrameParameter = masterDate + '.frame.xml' self.referenceFrameParameter = referenceDate + '.frame.xml'
self.slaveFrameParameter = slaveDate + '.frame.xml' self.secondaryFrameParameter = secondaryDate + '.frame.xml'
self.masterTrackParameter = masterDate + '.track.xml' self.referenceTrackParameter = referenceDate + '.track.xml'
self.slaveTrackParameter = slaveDate + '.track.xml' self.secondaryTrackParameter = secondaryDate + '.track.xml'
#self.dem = #self.dem =
#self.demGeo = #self.demGeo =
#self.wbd = #self.wbd =
@ -850,7 +850,7 @@ class Alos2Proc(Component):
self.geoCoherence = ms + ml2 + '.cor.geo' self.geoCoherence = ms + ml2 + '.cor.geo'
self.geoLos = ms + ml2 + '.los.geo' self.geoLos = ms + ml2 + '.los.geo'
#dense offset field #dense offset field
self.slaveSlcCoregistered = slaveDate + '_coreg.slc' self.secondarySlcCoregistered = secondaryDate + '_coreg.slc'
self.denseOffset = ms + '_denseoffset.off' self.denseOffset = ms + '_denseoffset.off'
self.denseOffsetSnr = ms + '_denseoffset.snr' self.denseOffsetSnr = ms + '_denseoffset.snr'
self.denseOffsetCov = ms + '_denseoffset.cov' self.denseOffsetCov = ms + '_denseoffset.cov'
@ -891,42 +891,42 @@ class Alos2Proc(Component):
return None return None
def loadTrack(self, master=True): def loadTrack(self, reference=True):
''' '''
Load the track using Product Manager. Load the track using Product Manager.
''' '''
if master: if reference:
track = self.loadProduct(self.masterTrackParameter) track = self.loadProduct(self.referenceTrackParameter)
else: else:
track = self.loadProduct(self.slaveTrackParameter) track = self.loadProduct(self.secondaryTrackParameter)
track.frames = [] track.frames = []
for i, frameNumber in enumerate(self.masterFrames): for i, frameNumber in enumerate(self.referenceFrames):
os.chdir('f{}_{}'.format(i+1, frameNumber)) os.chdir('f{}_{}'.format(i+1, frameNumber))
if master: if reference:
track.frames.append(self.loadProduct(self.masterFrameParameter)) track.frames.append(self.loadProduct(self.referenceFrameParameter))
else: else:
track.frames.append(self.loadProduct(self.slaveFrameParameter)) track.frames.append(self.loadProduct(self.secondaryFrameParameter))
os.chdir('../') os.chdir('../')
return track return track
def saveTrack(self, track, master=True): def saveTrack(self, track, reference=True):
''' '''
Save the track to XML files using Product Manager. Save the track to XML files using Product Manager.
''' '''
if master: if reference:
self.saveProduct(track, self.masterTrackParameter) self.saveProduct(track, self.referenceTrackParameter)
else: 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)) os.chdir('f{}_{}'.format(i+1, frameNumber))
if master: if reference:
self.saveProduct(track.frames[i], self.masterFrameParameter) self.saveProduct(track.frames[i], self.referenceFrameParameter)
else: else:
self.saveProduct(track.frames[i], self.slaveFrameParameter) self.saveProduct(track.frames[i], self.secondaryFrameParameter)
os.chdir('../') os.chdir('../')
return None 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 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 referenceSample: reference sample where offset is computed, no need to be integer
masterLine: master line where offset is computed, no need to be integer referenceLine: reference line where offset is computed, no need to be integer
''' '''
import datetime import datetime
@ -166,14 +166,14 @@ def computeOffsetFromOrbit(masterSwath, masterTrack, slaveSwath, slaveTrack, mas
#compute a pair of range and azimuth offsets using geometry #compute a pair of range and azimuth offsets using geometry
#using Piyush's code for computing range and azimuth offsets #using Piyush's code for computing range and azimuth offsets
midRange = masterSwath.startingRange + masterSwath.rangePixelSize * masterSample midRange = referenceSwath.startingRange + referenceSwath.rangePixelSize * referenceSample
midSensingStart = masterSwath.sensingStart + datetime.timedelta(seconds = masterLine / masterSwath.prf) midSensingStart = referenceSwath.sensingStart + datetime.timedelta(seconds = referenceLine / referenceSwath.prf)
llh = masterTrack.orbit.rdr2geo(midSensingStart, midRange, side=pointingDirection[masterTrack.pointingDirection]) llh = referenceTrack.orbit.rdr2geo(midSensingStart, midRange, side=pointingDirection[referenceTrack.pointingDirection])
slvaz, slvrng = slaveTrack.orbit.geo2rdr(llh, side=pointingDirection[masterTrack.pointingDirection]) slvaz, slvrng = secondaryTrack.orbit.geo2rdr(llh, side=pointingDirection[referenceTrack.pointingDirection])
###Translate to offsets ###Translate to offsets
#at this point, slave range pixel size and prf should be the same as those of master #at this point, secondary range pixel size and prf should be the same as those of reference
rgoff = ((slvrng - slaveSwath.startingRange) / masterSwath.rangePixelSize) - masterSample rgoff = ((slvrng - secondarySwath.startingRange) / referenceSwath.rangePixelSize) - referenceSample
azoff = ((slvaz - slaveSwath.sensingStart).total_seconds() * masterSwath.prf) - masterLine azoff = ((slvaz - secondarySwath.sensingStart).total_seconds() * referenceSwath.prf) - referenceLine
return (rgoff, azoff) return (rgoff, azoff)
@ -589,7 +589,7 @@ def cal_coherence(inf, win=5, edge=0):
''' '''
compute coherence uisng only interferogram (phase). compute coherence uisng only interferogram (phase).
This routine still follows the regular equation for computing coherence, 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. can be computed using phase only.
inf: interferogram inf: interferogram
@ -974,9 +974,9 @@ def mosaicBurstAmplitude(swath, burstPrefix, outputFile, numberOfLooksThreshold=
create_xml(outputFile, swath.numberOfSamples, swath.numberOfLines, 'float') create_xml(outputFile, swath.numberOfSamples, swath.numberOfLines, 'float')
def resampleBursts(masterSwath, slaveSwath, def resampleBursts(referenceSwath, secondarySwath,
masterBurstDir, slaveBurstDir, slaveBurstResampledDir, interferogramDir, referenceBurstDir, secondaryBurstDir, secondaryBurstResampledDir, interferogramDir,
masterBurstPrefix, slaveBurstPrefix, slaveBurstResampledPrefix, interferogramPrefix, referenceBurstPrefix, secondaryBurstPrefix, secondaryBurstResampledPrefix, interferogramPrefix,
rangeOffset, azimuthOffset, rangeOffsetResidual=0, azimuthOffsetResidual=0): rangeOffset, azimuthOffset, rangeOffsetResidual=0, azimuthOffsetResidual=0):
import os import os
@ -985,119 +985,119 @@ def resampleBursts(masterSwath, slaveSwath,
import numpy.matlib import numpy.matlib
from contrib.alos2proc.alos2proc import resamp from contrib.alos2proc.alos2proc import resamp
os.makedirs(slaveBurstResampledDir, exist_ok=True) os.makedirs(secondaryBurstResampledDir, exist_ok=True)
os.makedirs(interferogramDir, exist_ok=True) os.makedirs(interferogramDir, exist_ok=True)
#get burst file names #get burst file names
masterBurstSlc = [masterBurstPrefix+'_%02d.slc'%(i+1) for i in range(masterSwath.numberOfBursts)] referenceBurstSlc = [referenceBurstPrefix+'_%02d.slc'%(i+1) for i in range(referenceSwath.numberOfBursts)]
slaveBurstSlc = [slaveBurstPrefix+'_%02d.slc'%(i+1) for i in range(slaveSwath.numberOfBursts)] secondaryBurstSlc = [secondaryBurstPrefix+'_%02d.slc'%(i+1) for i in range(secondarySwath.numberOfBursts)]
slaveBurstSlcResampled = [slaveBurstPrefix+'_%02d.slc'%(i+1) for i in range(masterSwath.numberOfBursts)] secondaryBurstSlcResampled = [secondaryBurstPrefix+'_%02d.slc'%(i+1) for i in range(referenceSwath.numberOfBursts)]
interferogram = [interferogramPrefix+'_%02d.int'%(i+1) for i in range(masterSwath.numberOfBursts)] interferogram = [interferogramPrefix+'_%02d.int'%(i+1) for i in range(referenceSwath.numberOfBursts)]
length = masterSwath.burstSlcNumberOfLines length = referenceSwath.burstSlcNumberOfLines
width = masterSwath.burstSlcNumberOfSamples width = referenceSwath.burstSlcNumberOfSamples
lengthSlave = slaveSwath.burstSlcNumberOfLines lengthSecondary = secondarySwath.burstSlcNumberOfLines
widthSlave = slaveSwath.burstSlcNumberOfSamples widthSecondary = secondarySwath.burstSlcNumberOfSamples
#slave burst slc start times #secondary burst slc start times
slaveBurstStartTimesSlc = [slaveSwath.firstBurstSlcStartTime + \ secondaryBurstStartTimesSlc = [secondarySwath.firstBurstSlcStartTime + \
datetime.timedelta(seconds=slaveSwath.burstSlcFirstLineOffsets[i]*slaveSwath.azimuthLineInterval) \ datetime.timedelta(seconds=secondarySwath.burstSlcFirstLineOffsets[i]*secondarySwath.azimuthLineInterval) \
for i in range(slaveSwath.numberOfBursts)] for i in range(secondarySwath.numberOfBursts)]
#slave burst raw start times #secondary burst raw start times
slaveBurstStartTimesRaw = [slaveSwath.firstBurstRawStartTime + \ secondaryBurstStartTimesRaw = [secondarySwath.firstBurstRawStartTime + \
datetime.timedelta(seconds=i*slaveSwath.burstCycleLength/slaveSwath.prf) \ datetime.timedelta(seconds=i*secondarySwath.burstCycleLength/secondarySwath.prf) \
for i in range(slaveSwath.numberOfBursts)] 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 #range offset
with open(rangeOffset, 'rb') as f: 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) rgoffBurst = np.fromfile(f, dtype=np.float32, count=length*width).reshape(length,width)
if type(rangeOffsetResidual) == np.ndarray: 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)] rgoffBurst[np.nonzero(rgoffBurst!=-999999.0)] += residual[np.nonzero(rgoffBurst!=-999999.0)]
else: else:
rgoffBurst[np.nonzero(rgoffBurst!=-999999.0)] += rangeOffsetResidual rgoffBurst[np.nonzero(rgoffBurst!=-999999.0)] += rangeOffsetResidual
#azimuth offset #azimuth offset
with open(azimuthOffset, 'rb') as f: 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) azoffBurst = np.fromfile(f, dtype=np.float32, count=length*width).reshape(length,width)
if type(azimuthOffsetResidual) == np.ndarray: 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)] azoffBurst[np.nonzero(azoffBurst!=-999999.0)] += residual[np.nonzero(azoffBurst!=-999999.0)]
else: else:
azoffBurst[np.nonzero(azoffBurst!=-999999.0)] += azimuthOffsetResidual azoffBurst[np.nonzero(azoffBurst!=-999999.0)] += azimuthOffsetResidual
#find the corresponding slave burst #find the corresponding secondary burst
#get mean offset to use #get mean offset to use
#remove BAD_VALUE = -999999.0 as defined in geo2rdr.f90 #remove BAD_VALUE = -999999.0 as defined in geo2rdr.f90
#single precision is not accurate enough to compute mean #single precision is not accurate enough to compute mean
azoffBurstMean = np.mean(azoffBurst[np.nonzero(azoffBurst!=-999999.0)], dtype=np.float64) azoffBurstMean = np.mean(azoffBurst[np.nonzero(azoffBurst!=-999999.0)], dtype=np.float64)
iSlave = -1 iSecondary = -1
for j in range(slaveSwath.numberOfBursts): for j in range(secondarySwath.numberOfBursts):
if abs(masterSwath.burstSlcFirstLineOffsets[i] + azoffBurstMean - slaveSwath.burstSlcFirstLineOffsets[j]) < (masterSwath.burstLength / masterSwath.prf * 2.0) / masterSwath.azimuthLineInterval: if abs(referenceSwath.burstSlcFirstLineOffsets[i] + azoffBurstMean - secondarySwath.burstSlcFirstLineOffsets[j]) < (referenceSwath.burstLength / referenceSwath.prf * 2.0) / referenceSwath.azimuthLineInterval:
iSlave = j iSecondary = j
break break
#output zero resampled burst/interferogram if no slave burst found #output zero resampled burst/interferogram if no secondary burst found
if iSlave == -1: if iSecondary == -1:
print('\nburst pair, master: %2d, slave: no'%(i+1)) print('\nburst pair, reference: %2d, secondary: no'%(i+1))
#output an interferogram with all pixels set to zero #output an interferogram with all pixels set to zero
os.chdir(interferogramDir) os.chdir(interferogramDir)
np.zeros((length, width), dtype=np.complex64).astype(np.complex64).tofile(interferogram[i]) np.zeros((length, width), dtype=np.complex64).astype(np.complex64).tofile(interferogram[i])
create_xml(interferogram[i], width, length, 'int') create_xml(interferogram[i], width, length, 'int')
os.chdir('../') os.chdir('../')
#output a resampled slave image with all pixels set to zero #output a resampled secondary image with all pixels set to zero
os.chdir(slaveBurstResampledDir) os.chdir(secondaryBurstResampledDir)
np.zeros((length, width), dtype=np.complex64).astype(np.complex64).tofile(slaveBurstSlcResampled[i]) np.zeros((length, width), dtype=np.complex64).astype(np.complex64).tofile(secondaryBurstSlcResampled[i])
create_xml(slaveBurstSlcResampled[i], width, length, 'slc') create_xml(secondaryBurstSlcResampled[i], width, length, 'slc')
os.chdir('../') os.chdir('../')
continue continue
else: 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 #adjust azimuth offset accordingly, since original azimuth offset assumes reference and secondary start with sensingStart
azoffBurst -= (slaveSwath.burstSlcFirstLineOffsets[iSlave]-masterSwath.burstSlcFirstLineOffsets[i]) azoffBurst -= (secondarySwath.burstSlcFirstLineOffsets[iSecondary]-referenceSwath.burstSlcFirstLineOffsets[i])
########################################################################## ##########################################################################
# 2. compute deramp and reramp signals # 2. compute deramp and reramp signals
########################################################################## ##########################################################################
cj = np.complex64(1j) cj = np.complex64(1j)
tbase = (slaveBurstStartTimesSlc[iSlave] - (slaveBurstStartTimesRaw[iSlave] + \ tbase = (secondaryBurstStartTimesSlc[iSecondary] - (secondaryBurstStartTimesRaw[iSecondary] + \
datetime.timedelta(seconds=(slaveSwath.burstLength - 1.0) / 2.0 / slaveSwath.prf))).total_seconds() datetime.timedelta(seconds=(secondarySwath.burstLength - 1.0) / 2.0 / secondarySwath.prf))).total_seconds()
#compute deramp signal #compute deramp signal
index1 = np.matlib.repmat(np.arange(widthSlave), lengthSlave, 1) index1 = np.matlib.repmat(np.arange(widthSecondary), lengthSecondary, 1)
index2 = np.matlib.repmat(np.arange(lengthSlave).reshape(lengthSlave, 1), 1, widthSlave) index2 = np.matlib.repmat(np.arange(lengthSecondary).reshape(lengthSecondary, 1), 1, widthSecondary)
ka = slaveSwath.azimuthFmrateVsPixel[3] * index1**3 + slaveSwath.azimuthFmrateVsPixel[2] * index1**2 + \ ka = secondarySwath.azimuthFmrateVsPixel[3] * index1**3 + secondarySwath.azimuthFmrateVsPixel[2] * index1**2 + \
slaveSwath.azimuthFmrateVsPixel[1] * index1 + slaveSwath.azimuthFmrateVsPixel[0] secondarySwath.azimuthFmrateVsPixel[1] * index1 + secondarySwath.azimuthFmrateVsPixel[0]
#use the convention that ka > 0 #use the convention that ka > 0
ka = -ka ka = -ka
t = tbase + index2*slaveSwath.azimuthLineInterval t = tbase + index2*secondarySwath.azimuthLineInterval
deramp = np.exp(cj * np.pi * (-ka) * t**2) deramp = np.exp(cj * np.pi * (-ka) * t**2)
#compute reramp signal #compute reramp signal
index1 = np.matlib.repmat(np.arange(width), length, 1) + rgoffBurst index1 = np.matlib.repmat(np.arange(width), length, 1) + rgoffBurst
index2 = np.matlib.repmat(np.arange(length).reshape(length, 1), 1, width) + azoffBurst index2 = np.matlib.repmat(np.arange(length).reshape(length, 1), 1, width) + azoffBurst
ka = slaveSwath.azimuthFmrateVsPixel[3] * index1**3 + slaveSwath.azimuthFmrateVsPixel[2] * index1**2 + \ ka = secondarySwath.azimuthFmrateVsPixel[3] * index1**3 + secondarySwath.azimuthFmrateVsPixel[2] * index1**2 + \
slaveSwath.azimuthFmrateVsPixel[1] * index1 + slaveSwath.azimuthFmrateVsPixel[0] secondarySwath.azimuthFmrateVsPixel[1] * index1 + secondarySwath.azimuthFmrateVsPixel[0]
#use the convention that ka > 0 #use the convention that ka > 0
ka = -ka ka = -ka
t = tbase + index2*slaveSwath.azimuthLineInterval t = tbase + index2*secondarySwath.azimuthLineInterval
reramp = np.exp(cj * np.pi * (ka) * t**2) reramp = np.exp(cj * np.pi * (ka) * t**2)
########################################################################## ##########################################################################
# 3. resample slave burst # 3. resample secondary burst
########################################################################## ##########################################################################
#go to slave directory to do resampling #go to secondary directory to do resampling
os.chdir(slaveBurstDir) os.chdir(secondaryBurstDir)
#output offsets #output offsets
rgoffBurstFile = "burst_rg.off" rgoffBurstFile = "burst_rg.off"
@ -1105,39 +1105,39 @@ def resampleBursts(masterSwath, slaveSwath,
rgoffBurst.astype(np.float32).tofile(rgoffBurstFile) rgoffBurst.astype(np.float32).tofile(rgoffBurstFile)
azoffBurst.astype(np.float32).tofile(azoffBurstFile) azoffBurst.astype(np.float32).tofile(azoffBurstFile)
#deramp slave burst #deramp secondary burst
slaveBurstDerampedFile = "slave.slc" secondaryBurstDerampedFile = "secondary.slc"
sburst = np.fromfile(slaveBurstSlc[iSlave], dtype=np.complex64).reshape(lengthSlave, widthSlave) sburst = np.fromfile(secondaryBurstSlc[iSecondary], dtype=np.complex64).reshape(lengthSecondary, widthSecondary)
(deramp * sburst).astype(np.complex64).tofile(slaveBurstDerampedFile) (deramp * sburst).astype(np.complex64).tofile(secondaryBurstDerampedFile)
create_xml(slaveBurstDerampedFile, widthSlave, lengthSlave, 'slc') create_xml(secondaryBurstDerampedFile, widthSecondary, lengthSecondary, 'slc')
#resampled slave burst #resampled secondary burst
slaveBurstResampFile = 'slave_resamp.slc' 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) #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 #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 #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] 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], 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], 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) azpos_off=0.0)
#read resampled slave burst and reramp #read resampled secondary burst and reramp
sburstResamp = reramp * (np.fromfile(slaveBurstResampFile, dtype=np.complex64).reshape(length, width)) sburstResamp = reramp * (np.fromfile(secondaryBurstResampFile, dtype=np.complex64).reshape(length, width))
#clear up #clear up
os.remove(rgoffBurstFile) os.remove(rgoffBurstFile)
os.remove(azoffBurstFile) os.remove(azoffBurstFile)
os.remove(slaveBurstDerampedFile) os.remove(secondaryBurstDerampedFile)
os.remove(slaveBurstDerampedFile+'.vrt') os.remove(secondaryBurstDerampedFile+'.vrt')
os.remove(slaveBurstDerampedFile+'.xml') os.remove(secondaryBurstDerampedFile+'.xml')
os.remove(slaveBurstResampFile) os.remove(secondaryBurstResampFile)
os.remove(slaveBurstResampFile+'.vrt') os.remove(secondaryBurstResampFile+'.vrt')
os.remove(slaveBurstResampFile+'.xml') os.remove(secondaryBurstResampFile+'.xml')
os.chdir('../') os.chdir('../')
@ -1145,14 +1145,14 @@ def resampleBursts(masterSwath, slaveSwath,
########################################################################## ##########################################################################
# 4. dump results # 4. dump results
########################################################################## ##########################################################################
#dump resampled slave burst #dump resampled secondary burst
os.chdir(slaveBurstResampledDir) os.chdir(secondaryBurstResampledDir)
sburstResamp.astype(np.complex64).tofile(slaveBurstSlcResampled[i]) sburstResamp.astype(np.complex64).tofile(secondaryBurstSlcResampled[i])
create_xml(slaveBurstSlcResampled[i], width, length, 'slc') create_xml(secondaryBurstSlcResampled[i], width, length, 'slc')
os.chdir('../') os.chdir('../')
#dump burst interferogram #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) os.chdir(interferogramDir)
(mburst * np.conj(sburstResamp)).astype(np.complex64).tofile(interferogram[i]) (mburst * np.conj(sburstResamp)).astype(np.complex64).tofile(interferogram[i])
create_xml(interferogram[i], width, length, 'int') create_xml(interferogram[i], width, length, 'int')

View File

@ -1,10 +1,10 @@
on the following paramters might be changed in the denseoffset steps: on the following paramters might be changed in the denseoffset steps:
======================================================================= =======================================================================
if self.frameOffsetMatching == False: if self.frameOffsetMatching == False:
self._insar.frameRangeOffsetMatchingMaster = offsetMaster[2] self._insar.frameRangeOffsetMatchingReference = offsetReference[2]
self._insar.frameAzimuthOffsetMatchingMaster = offsetMaster[3] self._insar.frameAzimuthOffsetMatchingReference = offsetReference[3]
self._insar.frameRangeOffsetMatchingSlave = offsetSlave[2] self._insar.frameRangeOffsetMatchingSecondary = offsetSecondary[2]
self._insar.frameAzimuthOffsetMatchingSlave = offsetSlave[3] self._insar.frameAzimuthOffsetMatchingSecondary = offsetSecondary[3]
Therefore these denseoffset steps could be moved to after 'frame_mosaic' step 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) catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser() self.updateParamemetersFromUser()
#masterTrack = self._insar.loadTrack(master=True) #referenceTrack = self._insar.loadTrack(reference=True)
#slaveTrack = self._insar.loadTrack(master=False) #secondaryTrack = self._insar.loadTrack(reference=False)
insarDir = 'insar' insarDir = 'insar'
os.makedirs(insarDir, exist_ok=True) os.makedirs(insarDir, exist_ok=True)

View File

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

View File

@ -20,10 +20,10 @@ def runDownloadDem(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name) catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser() self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True) referenceTrack = self._insar.loadTrack(reference=True)
slaveTrack = self._insar.loadTrack(master=False) secondaryTrack = self._insar.loadTrack(reference=False)
bboxGeo = getBboxGeo(masterTrack) bboxGeo = getBboxGeo(referenceTrack)
bbox = np.array(bboxGeo) 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]))) 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) catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser() self.updateParamemetersFromUser()
#masterTrack = self._insar.loadTrack(master=True) #referenceTrack = self._insar.loadTrack(reference=True)
#slaveTrack = self._insar.loadTrack(master=False) #secondaryTrack = self._insar.loadTrack(reference=False)
insarDir = 'insar' insarDir = 'insar'
os.makedirs(insarDir, exist_ok=True) os.makedirs(insarDir, exist_ok=True)

View File

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

View File

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

View File

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

View File

@ -16,14 +16,14 @@ def runFrameOffset(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name) catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser() self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True) referenceTrack = self._insar.loadTrack(reference=True)
slaveTrack = self._insar.loadTrack(master=False) secondaryTrack = self._insar.loadTrack(reference=False)
mosaicDir = 'insar' mosaicDir = 'insar'
os.makedirs(mosaicDir, exist_ok=True) os.makedirs(mosaicDir, exist_ok=True)
os.chdir(mosaicDir) os.chdir(mosaicDir)
if len(masterTrack.frames) > 1: if len(referenceTrack.frames) > 1:
if (self._insar.modeCombination == 21) or \ if (self._insar.modeCombination == 21) or \
(self._insar.modeCombination == 22) or \ (self._insar.modeCombination == 22) or \
(self._insar.modeCombination == 31) or \ (self._insar.modeCombination == 31) or \
@ -33,21 +33,21 @@ def runFrameOffset(self):
matchingMode=1 matchingMode=1
#compute swath offset #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) crossCorrelation=self.frameOffsetMatching, matchingMode=matchingMode)
#only use geometrical offset for slave #only use geometrical offset for secondary
offsetSlave = frameOffset(slaveTrack, self._insar.slaveSlc, self._insar.slaveFrameOffset, offsetSecondary = frameOffset(secondaryTrack, self._insar.secondarySlc, self._insar.secondaryFrameOffset,
crossCorrelation=False, matchingMode=matchingMode) crossCorrelation=False, matchingMode=matchingMode)
self._insar.frameRangeOffsetGeometricalMaster = offsetMaster[0] self._insar.frameRangeOffsetGeometricalReference = offsetReference[0]
self._insar.frameAzimuthOffsetGeometricalMaster = offsetMaster[1] self._insar.frameAzimuthOffsetGeometricalReference = offsetReference[1]
self._insar.frameRangeOffsetGeometricalSlave = offsetSlave[0] self._insar.frameRangeOffsetGeometricalSecondary = offsetSecondary[0]
self._insar.frameAzimuthOffsetGeometricalSlave = offsetSlave[1] self._insar.frameAzimuthOffsetGeometricalSecondary = offsetSecondary[1]
if self.frameOffsetMatching: if self.frameOffsetMatching:
self._insar.frameRangeOffsetMatchingMaster = offsetMaster[2] self._insar.frameRangeOffsetMatchingReference = offsetReference[2]
self._insar.frameAzimuthOffsetMatchingMaster = offsetMaster[3] self._insar.frameAzimuthOffsetMatchingReference = offsetReference[3]
#self._insar.frameRangeOffsetMatchingSlave = offsetSlave[2] #self._insar.frameRangeOffsetMatchingSecondary = offsetSecondary[2]
#self._insar.frameAzimuthOffsetMatchingSlave = offsetSlave[3] #self._insar.frameAzimuthOffsetMatchingSecondary = offsetSecondary[3]
os.chdir('../') os.chdir('../')
@ -188,8 +188,8 @@ def estimateFrameOffset(swath1, swath2, image1, image2, matchingMode=0):
else: else:
raise Exception('file type not supported yet.') raise Exception('file type not supported yet.')
ampcor.setMasterSlcImage(mSLC) ampcor.setReferenceSlcImage(mSLC)
ampcor.setSlaveSlcImage(sSLC) ampcor.setSecondarySlcImage(sSLC)
#MATCH REGION #MATCH REGION
#compute an offset at image center to use #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) catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser() self.updateParamemetersFromUser()
slaveTrack = self._insar.loadTrack(master=False) secondaryTrack = self._insar.loadTrack(reference=False)
insarDir = 'insar' insarDir = 'insar'
os.makedirs(insarDir, exist_ok=True) os.makedirs(insarDir, exist_ok=True)
@ -25,10 +25,10 @@ def runGeo2Rdr(self):
hasGPU= self.useGPU and self._insar.hasGPU() hasGPU= self.useGPU and self._insar.hasGPU()
if 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) self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.rangeOffset, self._insar.azimuthOffset)
else: 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) self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.rangeOffset, self._insar.azimuthOffset)
os.chdir('../') os.chdir('../')
@ -37,7 +37,7 @@ def runGeo2Rdr(self):
self._insar.procDoc.addAllFromCatalog(catalog) 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 import datetime
from zerodop.geo2rdr import createGeo2rdr from zerodop.geo2rdr import createGeo2rdr
from isceobj.Planet.Planet import Planet from isceobj.Planet.Planet import Planet
@ -61,20 +61,20 @@ def geo2RdrCPU(slaveTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFil
topo = createGeo2rdr() topo = createGeo2rdr()
topo.configure() topo.configure()
#set parameters #set parameters
topo.slantRangePixelSpacing = numberRangeLooks * slaveTrack.rangePixelSize topo.slantRangePixelSpacing = numberRangeLooks * secondaryTrack.rangePixelSize
topo.prf = 1.0 / (numberAzimuthLooks*slaveTrack.azimuthLineInterval) topo.prf = 1.0 / (numberAzimuthLooks*secondaryTrack.azimuthLineInterval)
topo.radarWavelength = slaveTrack.radarWavelength topo.radarWavelength = secondaryTrack.radarWavelength
topo.orbit = slaveTrack.orbit topo.orbit = secondaryTrack.orbit
topo.width = slaveTrack.numberOfSamples topo.width = secondaryTrack.numberOfSamples
topo.length = slaveTrack.numberOfLines topo.length = secondaryTrack.numberOfLines
topo.demLength = demImage.length topo.demLength = demImage.length
topo.demWidth = demImage.width topo.demWidth = demImage.width
topo.wireInputPort(name='planet', object=planet) topo.wireInputPort(name='planet', object=planet)
topo.numberRangeLooks = 1 # topo.numberRangeLooks = 1 #
topo.numberAzimuthLooks = 1 # must be set to be 1 topo.numberAzimuthLooks = 1 # must be set to be 1
topo.lookSide = pointingDirection[slaveTrack.pointingDirection] topo.lookSide = pointingDirection[secondaryTrack.pointingDirection]
topo.setSensingStart(slaveTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*slaveTrack.azimuthLineInterval)) topo.setSensingStart(secondaryTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*secondaryTrack.azimuthLineInterval))
topo.rangeFirstSample = slaveTrack.startingRange + (numberRangeLooks-1.0)/2.0*slaveTrack.rangePixelSize topo.rangeFirstSample = secondaryTrack.startingRange + (numberRangeLooks-1.0)/2.0*secondaryTrack.rangePixelSize
topo.dopplerCentroidCoeffs = [0.] # we are using zero doppler geometry topo.dopplerCentroidCoeffs = [0.] # we are using zero doppler geometry
#set files #set files
topo.latImage = latImage topo.latImage = latImage
@ -88,7 +88,7 @@ def geo2RdrCPU(slaveTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFil
return 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. currently we cannot set left/right looking.
works for right looking, but left looking probably not supported. 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') planet = Planet(pname='Earth')
grdr = PyGeo2rdr() grdr = PyGeo2rdr()
grdr.setRangePixelSpacing(numberRangeLooks * slaveTrack.rangePixelSize) grdr.setRangePixelSpacing(numberRangeLooks * secondaryTrack.rangePixelSize)
grdr.setPRF(1.0 / (numberAzimuthLooks*slaveTrack.azimuthLineInterval)) grdr.setPRF(1.0 / (numberAzimuthLooks*secondaryTrack.azimuthLineInterval))
grdr.setRadarWavelength(slaveTrack.radarWavelength) grdr.setRadarWavelength(secondaryTrack.radarWavelength)
#CHECK IF THIS WORKS!!! #CHECK IF THIS WORKS!!!
grdr.createOrbit(0, len(slaveTrack.orbit.stateVectors.list)) grdr.createOrbit(0, len(secondaryTrack.orbit.stateVectors.list))
count = 0 count = 0
for sv in slaveTrack.orbit.stateVectors.list: for sv in secondaryTrack.orbit.stateVectors.list:
td = DTU.seconds_since_midnight(sv.getTime()) td = DTU.seconds_since_midnight(sv.getTime())
pos = sv.getPosition() pos = sv.getPosition()
vel = sv.getVelocity() vel = sv.getVelocity()
@ -134,10 +134,10 @@ def geo2RdrGPU(slaveTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFil
count += 1 count += 1
grdr.setOrbitMethod(0) grdr.setOrbitMethod(0)
grdr.setWidth(slaveTrack.numberOfSamples) grdr.setWidth(secondaryTrack.numberOfSamples)
grdr.setLength(slaveTrack.numberOfLines) grdr.setLength(secondaryTrack.numberOfLines)
grdr.setSensingStart(DTU.seconds_since_midnight(slaveTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*slaveTrack.azimuthLineInterval))) grdr.setSensingStart(DTU.seconds_since_midnight(secondaryTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*secondaryTrack.azimuthLineInterval)))
grdr.setRangeFirstSample(slaveTrack.startingRange + (numberRangeLooks-1.0)/2.0*slaveTrack.rangePixelSize) grdr.setRangeFirstSample(secondaryTrack.startingRange + (numberRangeLooks-1.0)/2.0*secondaryTrack.rangePixelSize)
grdr.setNumberRangeLooks(1) grdr.setNumberRangeLooks(1)
grdr.setNumberAzimuthLooks(1) grdr.setNumberAzimuthLooks(1)
grdr.setEllipsoidMajorSemiAxis(planet.ellipsoid.a) grdr.setEllipsoidMajorSemiAxis(planet.ellipsoid.a)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -40,8 +40,8 @@ def runSlcMatch(self):
os.makedirs(denseOffsetDir, exist_ok=True) os.makedirs(denseOffsetDir, exist_ok=True)
os.chdir(denseOffsetDir) os.chdir(denseOffsetDir)
masterTrack = self._insar.loadProduct(self._insar.masterTrackParameter) referenceTrack = self._insar.loadProduct(self._insar.referenceTrackParameter)
slaveTrack = self._insar.loadProduct(self._insar.slaveTrackParameter) secondaryTrack = self._insar.loadProduct(self._insar.secondaryTrackParameter)
######################################################################################### #########################################################################################
@ -50,34 +50,34 @@ def runSlcMatch(self):
# compute geometric offsets # compute geometric offsets
################################################## ##################################################
if self.useGPU and self._insar.hasGPU(): 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') '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') 'lat.rdr', 'lon.rdr', 'hgt.rdr', 'rg.off', 'az.off')
else: else:
topoCPU(masterTrack, 1, 1, demFile, topoCPU(referenceTrack, 1, 1, demFile,
'lat.rdr', 'lon.rdr', 'hgt.rdr', 'los.rdr') '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') 'lat.rdr', 'lon.rdr', 'hgt.rdr', 'rg.off', 'az.off')
################################################## ##################################################
# resample SLC # resample SLC
################################################## ##################################################
#SlaveSlcResampled = os.path.splitext(self._insar.slaveSlc)[0]+'_resamp'+os.path.splitext(self._insar.slaveSlc)[1] #SecondarySlcResampled = os.path.splitext(self._insar.secondarySlc)[0]+'_resamp'+os.path.splitext(self._insar.secondarySlc)[1]
SlaveSlcResampled = self._insar.slaveSlcCoregistered SecondarySlcResampled = self._insar.secondarySlcCoregistered
rangeOffsets2Frac = 0.0 rangeOffsets2Frac = 0.0
azimuthOffsets2Frac = 0.0 azimuthOffsets2Frac = 0.0
resamp(self._insar.slaveSlc, resamp(self._insar.secondarySlc,
SlaveSlcResampled, SecondarySlcResampled,
'rg.off', 'rg.off',
'az.off', 'az.off',
masterTrack.numberOfSamples, masterTrack.numberOfLines, referenceTrack.numberOfSamples, referenceTrack.numberOfLines,
slaveTrack.prf, secondaryTrack.prf,
slaveTrack.dopplerVsPixel, secondaryTrack.dopplerVsPixel,
[rangeOffsets2Frac, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [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]) [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: if self.estimateResidualOffset:
@ -85,8 +85,8 @@ def runSlcMatch(self):
numberOfOffsets = 800 numberOfOffsets = 800
rangeStep = 50 rangeStep = 50
length = masterTrack.numberOfLines length = referenceTrack.numberOfLines
width = masterTrack.numberOfSamples width = referenceTrack.numberOfSamples
waterBodyRadar('lat.rdr', 'lon.rdr', wbdFile, 'wbd.rdr') waterBodyRadar('lat.rdr', 'lon.rdr', wbdFile, 'wbd.rdr')
wbd=np.memmap('wbd.rdr', dtype=np.int8, mode='r', shape=(length, width)) wbd=np.memmap('wbd.rdr', dtype=np.int8, mode='r', shape=(length, width))
azimuthStep = int(length/width*rangeStep+0.5) azimuthStep = int(length/width*rangeStep+0.5)
@ -119,20 +119,20 @@ def runSlcMatch(self):
ampcor.configure() ampcor.configure()
mSLC = isceobj.createSlcImage() mSLC = isceobj.createSlcImage()
mSLC.load(self._insar.masterSlc+'.xml') mSLC.load(self._insar.referenceSlc+'.xml')
mSLC.setAccessMode('read') mSLC.setAccessMode('read')
mSLC.createImage() mSLC.createImage()
sSLC = isceobj.createSlcImage() sSLC = isceobj.createSlcImage()
sSLC.load(SlaveSlcResampled+'.xml') sSLC.load(SecondarySlcResampled+'.xml')
sSLC.setAccessMode('read') sSLC.setAccessMode('read')
sSLC.createImage() sSLC.createImage()
ampcor.setImageDataType1('complex') ampcor.setImageDataType1('complex')
ampcor.setImageDataType2('complex') ampcor.setImageDataType2('complex')
ampcor.setMasterSlcImage(mSLC) ampcor.setReferenceSlcImage(mSLC)
ampcor.setSlaveSlcImage(sSLC) ampcor.setSecondarySlcImage(sSLC)
#MATCH REGION #MATCH REGION
#compute an offset at image center to use #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') catalog.addItem('warning message', 'too few offsets left for slc residual offset estimation', 'runSlcMatch')
else: else:
rangeOffset, azimuthOffset = meanOffset(refinedOffsets) rangeOffset, azimuthOffset = meanOffset(refinedOffsets)
os.remove(SlaveSlcResampled) os.remove(SecondarySlcResampled)
os.remove(SlaveSlcResampled+'.vrt') os.remove(SecondarySlcResampled+'.vrt')
os.remove(SlaveSlcResampled+'.xml') os.remove(SecondarySlcResampled+'.xml')
rangeOffsets2Frac = rangeOffset rangeOffsets2Frac = rangeOffset
azimuthOffsets2Frac = azimuthOffset azimuthOffsets2Frac = azimuthOffset
resamp(self._insar.slaveSlc, resamp(self._insar.secondarySlc,
SlaveSlcResampled, SecondarySlcResampled,
'rg.off', 'rg.off',
'az.off', 'az.off',
masterTrack.numberOfSamples, masterTrack.numberOfLines, referenceTrack.numberOfSamples, referenceTrack.numberOfLines,
slaveTrack.prf, secondaryTrack.prf,
slaveTrack.dopplerVsPixel, secondaryTrack.dopplerVsPixel,
[rangeOffsets2Frac, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [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]) [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 range', numberOfOffsetsRange, 'runSlcMatch')
catalog.addItem('number of offsets azimuth', numberOfOffsetsAzimuth, '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) catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser() self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True) referenceTrack = self._insar.loadTrack(reference=True)
slaveTrack = self._insar.loadTrack(master=False) secondaryTrack = self._insar.loadTrack(reference=False)
denseOffsetDir = 'dense_offset' denseOffsetDir = 'dense_offset'
os.makedirs(denseOffsetDir, exist_ok=True) 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 matchingMode=1
#if master offsets from matching are not already computed #if reference offsets from matching are not already computed
if self.frameOffsetMatching == False: 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) 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) crossCorrelation=True, matchingMode=matchingMode)
if self.frameOffsetMatching == False: if self.frameOffsetMatching == False:
self._insar.frameRangeOffsetMatchingMaster = offsetMaster[2] self._insar.frameRangeOffsetMatchingReference = offsetReference[2]
self._insar.frameAzimuthOffsetMatchingMaster = offsetMaster[3] self._insar.frameAzimuthOffsetMatchingReference = offsetReference[3]
self._insar.frameRangeOffsetMatchingSlave = offsetSlave[2] self._insar.frameRangeOffsetMatchingSecondary = offsetSecondary[2]
self._insar.frameAzimuthOffsetMatchingSlave = offsetSlave[3] self._insar.frameAzimuthOffsetMatchingSecondary = offsetSecondary[3]
################################################## ##################################################
# mosaic slc # mosaic slc
################################################## ##################################################
numberOfFrames = len(masterTrack.frames) numberOfFrames = len(referenceTrack.frames)
if numberOfFrames == 1: if numberOfFrames == 1:
import shutil import shutil
#frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.masterFrames[0])) #frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.referenceFrames[0]))
frameDir = os.path.join('f1_{}/s{}'.format(self._insar.masterFrames[0], self._insar.startingSwath)) frameDir = os.path.join('f1_{}/s{}'.format(self._insar.referenceFrames[0], self._insar.startingSwath))
if not os.path.isfile(self._insar.masterSlc): if not os.path.isfile(self._insar.referenceSlc):
if os.path.isfile(os.path.join('../', frameDir, self._insar.masterSlc)): if os.path.isfile(os.path.join('../', frameDir, self._insar.referenceSlc)):
os.symlink(os.path.join('../', frameDir, self._insar.masterSlc), self._insar.masterSlc) os.symlink(os.path.join('../', frameDir, self._insar.referenceSlc), self._insar.referenceSlc)
#shutil.copy2() can overwrite #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.referenceSlc+'.vrt'), self._insar.referenceSlc+'.vrt')
shutil.copy2(os.path.join('../', frameDir, self._insar.masterSlc+'.xml'), self._insar.masterSlc+'.xml') shutil.copy2(os.path.join('../', frameDir, self._insar.referenceSlc+'.xml'), self._insar.referenceSlc+'.xml')
if not os.path.isfile(self._insar.slaveSlc): if not os.path.isfile(self._insar.secondarySlc):
if os.path.isfile(os.path.join('../', frameDir, self._insar.slaveSlc)): if os.path.isfile(os.path.join('../', frameDir, self._insar.secondarySlc)):
os.symlink(os.path.join('../', frameDir, self._insar.slaveSlc), self._insar.slaveSlc) os.symlink(os.path.join('../', frameDir, self._insar.secondarySlc), self._insar.secondarySlc)
shutil.copy2(os.path.join('../', frameDir, self._insar.slaveSlc+'.vrt'), self._insar.slaveSlc+'.vrt') shutil.copy2(os.path.join('../', frameDir, self._insar.secondarySlc+'.vrt'), self._insar.secondarySlc+'.vrt')
shutil.copy2(os.path.join('../', frameDir, self._insar.slaveSlc+'.xml'), self._insar.slaveSlc+'.xml') shutil.copy2(os.path.join('../', frameDir, self._insar.secondarySlc+'.xml'), self._insar.secondarySlc+'.xml')
#update track parameters #update track parameters
######################################################### #########################################################
#mosaic size #mosaic size
masterTrack.numberOfSamples = masterTrack.frames[0].swaths[0].numberOfSamples referenceTrack.numberOfSamples = referenceTrack.frames[0].swaths[0].numberOfSamples
masterTrack.numberOfLines = masterTrack.frames[0].swaths[0].numberOfLines referenceTrack.numberOfLines = referenceTrack.frames[0].swaths[0].numberOfLines
#NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE #NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE
#range parameters #range parameters
masterTrack.startingRange = masterTrack.frames[0].swaths[0].startingRange referenceTrack.startingRange = referenceTrack.frames[0].swaths[0].startingRange
masterTrack.rangeSamplingRate = masterTrack.frames[0].swaths[0].rangeSamplingRate referenceTrack.rangeSamplingRate = referenceTrack.frames[0].swaths[0].rangeSamplingRate
masterTrack.rangePixelSize = masterTrack.frames[0].swaths[0].rangePixelSize referenceTrack.rangePixelSize = referenceTrack.frames[0].swaths[0].rangePixelSize
#azimuth parameters #azimuth parameters
masterTrack.sensingStart = masterTrack.frames[0].swaths[0].sensingStart referenceTrack.sensingStart = referenceTrack.frames[0].swaths[0].sensingStart
masterTrack.prf = masterTrack.frames[0].swaths[0].prf referenceTrack.prf = referenceTrack.frames[0].swaths[0].prf
masterTrack.azimuthPixelSize = masterTrack.frames[0].swaths[0].azimuthPixelSize referenceTrack.azimuthPixelSize = referenceTrack.frames[0].swaths[0].azimuthPixelSize
masterTrack.azimuthLineInterval = masterTrack.frames[0].swaths[0].azimuthLineInterval 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 #mosaic size
slaveTrack.numberOfSamples = slaveTrack.frames[0].swaths[0].numberOfSamples secondaryTrack.numberOfSamples = secondaryTrack.frames[0].swaths[0].numberOfSamples
slaveTrack.numberOfLines = slaveTrack.frames[0].swaths[0].numberOfLines secondaryTrack.numberOfLines = secondaryTrack.frames[0].swaths[0].numberOfLines
#NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE #NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE
#range parameters #range parameters
slaveTrack.startingRange = slaveTrack.frames[0].swaths[0].startingRange secondaryTrack.startingRange = secondaryTrack.frames[0].swaths[0].startingRange
slaveTrack.rangeSamplingRate = slaveTrack.frames[0].swaths[0].rangeSamplingRate secondaryTrack.rangeSamplingRate = secondaryTrack.frames[0].swaths[0].rangeSamplingRate
slaveTrack.rangePixelSize = slaveTrack.frames[0].swaths[0].rangePixelSize secondaryTrack.rangePixelSize = secondaryTrack.frames[0].swaths[0].rangePixelSize
#azimuth parameters #azimuth parameters
slaveTrack.sensingStart = slaveTrack.frames[0].swaths[0].sensingStart secondaryTrack.sensingStart = secondaryTrack.frames[0].swaths[0].sensingStart
slaveTrack.prf = slaveTrack.frames[0].swaths[0].prf secondaryTrack.prf = secondaryTrack.frames[0].swaths[0].prf
slaveTrack.azimuthPixelSize = slaveTrack.frames[0].swaths[0].azimuthPixelSize secondaryTrack.azimuthPixelSize = secondaryTrack.frames[0].swaths[0].azimuthPixelSize
slaveTrack.azimuthLineInterval = slaveTrack.frames[0].swaths[0].azimuthLineInterval 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: else:
#mosaic master slc #mosaic reference slc
######################################################### #########################################################
#choose offsets #choose offsets
rangeOffsets = self._insar.frameRangeOffsetMatchingMaster rangeOffsets = self._insar.frameRangeOffsetMatchingReference
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingMaster azimuthOffsets = self._insar.frameAzimuthOffsetMatchingReference
#list of input files #list of input files
slcs = [] slcs = []
for i, frameNumber in enumerate(self._insar.masterFrames): for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber) frameDir = 'f{}_{}'.format(i+1, frameNumber)
swathDir = 's{}'.format(self._insar.startingSwath) 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 #note that track parameters are updated after mosaicking
#parameters update is checked, it is OK. #parameters update is checked, it is OK.
frameMosaic(masterTrack, slcs, self._insar.masterSlc, frameMosaic(referenceTrack, slcs, self._insar.referenceSlc,
rangeOffsets, azimuthOffsets, 1, 1, rangeOffsets, azimuthOffsets, 1, 1,
updateTrack=True, phaseCompensation=True, resamplingMethod=2) updateTrack=True, phaseCompensation=True, resamplingMethod=2)
create_xml(self._insar.masterSlc, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'slc') create_xml(self._insar.referenceSlc, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'slc')
masterTrack.dopplerVsPixel = computeTrackDoppler(masterTrack) referenceTrack.dopplerVsPixel = computeTrackDoppler(referenceTrack)
#mosaic slave slc #mosaic secondary slc
######################################################### #########################################################
#choose offsets #choose offsets
rangeOffsets = self._insar.frameRangeOffsetMatchingSlave rangeOffsets = self._insar.frameRangeOffsetMatchingSecondary
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingSlave azimuthOffsets = self._insar.frameAzimuthOffsetMatchingSecondary
#list of input files #list of input files
slcs = [] slcs = []
for i, frameNumber in enumerate(self._insar.masterFrames): for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber) frameDir = 'f{}_{}'.format(i+1, frameNumber)
swathDir = 's{}'.format(self._insar.startingSwath) 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 #note that track parameters are updated after mosaicking
#parameters update is checked, it is OK. #parameters update is checked, it is OK.
frameMosaic(slaveTrack, slcs, self._insar.slaveSlc, frameMosaic(secondaryTrack, slcs, self._insar.secondarySlc,
rangeOffsets, azimuthOffsets, 1, 1, rangeOffsets, azimuthOffsets, 1, 1,
updateTrack=True, phaseCompensation=True, resamplingMethod=2) updateTrack=True, phaseCompensation=True, resamplingMethod=2)
create_xml(self._insar.slaveSlc, slaveTrack.numberOfSamples, slaveTrack.numberOfLines, 'slc') create_xml(self._insar.secondarySlc, secondaryTrack.numberOfSamples, secondaryTrack.numberOfLines, 'slc')
slaveTrack.dopplerVsPixel = computeTrackDoppler(slaveTrack) secondaryTrack.dopplerVsPixel = computeTrackDoppler(secondaryTrack)
#save parameter file inside denseoffset directory #save parameter file inside denseoffset directory
self._insar.saveProduct(masterTrack, self._insar.masterTrackParameter) self._insar.saveProduct(referenceTrack, self._insar.referenceTrackParameter)
self._insar.saveProduct(slaveTrack, self._insar.slaveTrackParameter) self._insar.saveProduct(secondaryTrack, self._insar.secondaryTrackParameter)
os.chdir('../') os.chdir('../')

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -26,15 +26,15 @@ def runCoregCc(self):
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name) catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser() self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True) referenceTrack = self._insar.loadTrack(reference=True)
slaveTrack = self._insar.loadTrack(master=False) secondaryTrack = self._insar.loadTrack(reference=False)
#demFile = os.path.abspath(self._insar.dem) #demFile = os.path.abspath(self._insar.dem)
#wbdFile = os.path.abspath(self._insar.wbd) #wbdFile = os.path.abspath(self._insar.wbd)
############################################################################### ###############################################################################
self._insar.rangeResidualOffsetCc = [[] for i in range(len(masterTrack.frames))] self._insar.rangeResidualOffsetCc = [[] for i in range(len(referenceTrack.frames))]
self._insar.azimuthResidualOffsetCc = [[] for i in range(len(masterTrack.frames))] self._insar.azimuthResidualOffsetCc = [[] for i in range(len(referenceTrack.frames))]
for i, frameNumber in enumerate(self._insar.masterFrames): for i, frameNumber in enumerate(self._insar.referenceFrames):
frameDir = 'f{}_{}'.format(i+1, frameNumber) frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir) os.chdir(frameDir)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)): 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)) print('processing frame {}, swath {}'.format(frameNumber, swathNumber))
masterSwath = masterTrack.frames[i].swaths[j] referenceSwath = referenceTrack.frames[i].swaths[j]
slaveSwath = slaveTrack.frames[i].swaths[j] secondarySwath = secondaryTrack.frames[i].swaths[j]
################################################## ##################################################
# estimate cross-correlation offsets # estimate cross-correlation offsets
@ -64,11 +64,11 @@ def runCoregCc(self):
landRatio = np.sum(wbd==0) / length / width landRatio = np.sum(wbd==0) / length / width
del wbd del wbd
if (landRatio <= 0.00125): 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') print('set offsets to zero\n\n')
self._insar.rangeResidualOffsetCc[i].append(0.0) self._insar.rangeResidualOffsetCc[i].append(0.0)
self._insar.azimuthResidualOffsetCc[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 continue
#total number of offsets to use #total number of offsets to use
numberOfOffsets /= landRatio numberOfOffsets /= landRatio
@ -102,37 +102,37 @@ def runCoregCc(self):
catalog.addItem('number of azimuth offsets at frame {}, swath {}'.format(frameNumber, swathNumber), '{}'.format(numberOfOffsetsAzimuth), 'runCoregCc') 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 #need to cp to current directory to make it (gdal) work
if not os.path.isfile(self._insar.masterMagnitude): if not os.path.isfile(self._insar.referenceMagnitude):
os.symlink(os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude), self._insar.masterMagnitude) os.symlink(os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude), self._insar.referenceMagnitude)
#shutil.copy2() can overwrite #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.referenceBurstPrefix, self._insar.referenceMagnitude+'.vrt'), self._insar.referenceMagnitude+'.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+'.xml'), self._insar.referenceMagnitude+'.xml')
if not os.path.isfile(self._insar.slaveMagnitude): if not os.path.isfile(self._insar.secondaryMagnitude):
os.symlink(os.path.join(self._insar.slaveBurstPrefix + '_1_coreg_geom', self._insar.slaveMagnitude), self._insar.slaveMagnitude) os.symlink(os.path.join(self._insar.secondaryBurstPrefix + '_1_coreg_geom', self._insar.secondaryMagnitude), self._insar.secondaryMagnitude)
#shutil.copy2() can overwrite #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.secondaryBurstPrefix + '_1_coreg_geom', self._insar.secondaryMagnitude+'.vrt'), self._insar.secondaryMagnitude+'.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+'.xml'), self._insar.secondaryMagnitude+'.xml')
#matching #matching
ampcor = Ampcor(name='insarapp_slcs_ampcor') ampcor = Ampcor(name='insarapp_slcs_ampcor')
ampcor.configure() ampcor.configure()
mMag = isceobj.createImage() mMag = isceobj.createImage()
mMag.load(self._insar.masterMagnitude+'.xml') mMag.load(self._insar.referenceMagnitude+'.xml')
mMag.setAccessMode('read') mMag.setAccessMode('read')
mMag.createImage() mMag.createImage()
sMag = isceobj.createImage() sMag = isceobj.createImage()
sMag.load(self._insar.slaveMagnitude+'.xml') sMag.load(self._insar.secondaryMagnitude+'.xml')
sMag.setAccessMode('read') sMag.setAccessMode('read')
sMag.createImage() sMag.createImage()
ampcor.setImageDataType1('real') ampcor.setImageDataType1('real')
ampcor.setImageDataType2('real') ampcor.setImageDataType2('real')
ampcor.setMasterSlcImage(mMag) ampcor.setReferenceSlcImage(mMag)
ampcor.setSlaveSlcImage(sMag) ampcor.setSecondarySlcImage(sMag)
#MATCH REGION #MATCH REGION
rgoff = 0 rgoff = 0
@ -201,12 +201,12 @@ def runCoregCc(self):
sMag.finalizeImage() sMag.finalizeImage()
#clear up #clear up
os.remove(self._insar.masterMagnitude) os.remove(self._insar.referenceMagnitude)
os.remove(self._insar.masterMagnitude+'.vrt') os.remove(self._insar.referenceMagnitude+'.vrt')
os.remove(self._insar.masterMagnitude+'.xml') os.remove(self._insar.referenceMagnitude+'.xml')
os.remove(self._insar.slaveMagnitude) os.remove(self._insar.secondaryMagnitude)
os.remove(self._insar.slaveMagnitude+'.vrt') os.remove(self._insar.secondaryMagnitude+'.vrt')
os.remove(self._insar.slaveMagnitude+'.xml') os.remove(self._insar.secondaryMagnitude+'.xml')
#compute average offsets to use in resampling #compute average offsets to use in resampling
if refinedOffsets == None: if refinedOffsets == None:
@ -214,9 +214,9 @@ def runCoregCc(self):
azimuthOffset = 0 azimuthOffset = 0
self._insar.rangeResidualOffsetCc[i].append(rangeOffset) self._insar.rangeResidualOffsetCc[i].append(rangeOffset)
self._insar.azimuthResidualOffsetCc[i].append(azimuthOffset) 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') 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: else:
rangeOffset, azimuthOffset = meanOffset(refinedOffsets) rangeOffset, azimuthOffset = meanOffset(refinedOffsets)
#for range offset, need to compute from a polynomial #for range offset, need to compute from a polynomial
@ -258,38 +258,38 @@ def runCoregCc(self):
################################################## ##################################################
# resample bursts # resample bursts
################################################## ##################################################
slaveBurstResampledDir = self._insar.slaveBurstPrefix + '_2_coreg_cc' secondaryBurstResampledDir = self._insar.secondaryBurstPrefix + '_2_coreg_cc'
#interferogramDir = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix + '_coreg_geom' #interferogramDir = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix + '_coreg_geom'
interferogramDir = 'burst_interf_2_coreg_cc' interferogramDir = 'burst_interf_2_coreg_cc'
interferogramPrefix = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix interferogramPrefix = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix
resampleBursts(masterSwath, slaveSwath, resampleBursts(referenceSwath, secondarySwath,
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, slaveBurstResampledDir, interferogramDir, self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, secondaryBurstResampledDir, interferogramDir,
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, self._insar.slaveBurstPrefix, interferogramPrefix, self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, self._insar.secondaryBurstPrefix, interferogramPrefix,
self._insar.rangeOffset, self._insar.azimuthOffset, rangeOffsetResidual=rangeOffset, azimuthOffsetResidual=azimuthOffset) self._insar.rangeOffset, self._insar.azimuthOffset, rangeOffsetResidual=rangeOffset, azimuthOffsetResidual=azimuthOffset)
################################################## ##################################################
# mosaic burst amplitudes and interferograms # mosaic burst amplitudes and interferograms
################################################## ##################################################
os.chdir(slaveBurstResampledDir) os.chdir(secondaryBurstResampledDir)
mosaicBurstAmplitude(masterSwath, self._insar.slaveBurstPrefix, self._insar.slaveMagnitude, numberOfLooksThreshold=4) mosaicBurstAmplitude(referenceSwath, self._insar.secondaryBurstPrefix, self._insar.secondaryMagnitude, numberOfLooksThreshold=4)
os.chdir('../') os.chdir('../')
os.chdir(interferogramDir) os.chdir(interferogramDir)
mosaicBurstInterferogram(masterSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4) mosaicBurstInterferogram(referenceSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
os.chdir('../') os.chdir('../')
################################################## ##################################################
# final amplitude and interferogram # final amplitude and interferogram
################################################## ##################################################
amp = np.zeros((masterSwath.numberOfLines, 2*masterSwath.numberOfSamples), dtype=np.float32) amp = np.zeros((referenceSwath.numberOfLines, 2*referenceSwath.numberOfSamples), dtype=np.float32)
amp[0:, 1:masterSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(slaveBurstResampledDir, self._insar.slaveMagnitude), \ amp[0:, 1:referenceSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(secondaryBurstResampledDir, self._insar.secondaryMagnitude), \
dtype=np.float32).reshape(masterSwath.numberOfLines, masterSwath.numberOfSamples) dtype=np.float32).reshape(referenceSwath.numberOfLines, referenceSwath.numberOfSamples)
amp[0:, 0:masterSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude), \ amp[0:, 0:referenceSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude), \
dtype=np.float32).reshape(masterSwath.numberOfLines, masterSwath.numberOfSamples) dtype=np.float32).reshape(referenceSwath.numberOfLines, referenceSwath.numberOfSamples)
amp.astype(np.float32).tofile(self._insar.amplitude) 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), self._insar.interferogram)
os.rename(os.path.join(interferogramDir, self._insar.interferogram+'.vrt'), self._insar.interferogram+'.vrt') 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) catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
self.updateParamemetersFromUser() self.updateParamemetersFromUser()
masterTrack = self._insar.loadTrack(master=True) referenceTrack = self._insar.loadTrack(reference=True)
slaveTrack = self._insar.loadTrack(master=False) secondaryTrack = self._insar.loadTrack(reference=False)
demFile = os.path.abspath(self._insar.dem) demFile = os.path.abspath(self._insar.dem)
wbdFile = os.path.abspath(self._insar.wbd) 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) frameDir = 'f{}_{}'.format(i+1, frameNumber)
os.chdir(frameDir) os.chdir(frameDir)
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)): 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)) print('processing frame {}, swath {}'.format(frameNumber, swathNumber))
masterSwath = masterTrack.frames[i].swaths[j] referenceSwath = referenceTrack.frames[i].swaths[j]
slaveSwath = slaveTrack.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 #set up track parameters just for computing offsets
#ALL track parameters are listed here #ALL track parameters are listed here
#master #reference
#masterTrack.passDirection = #referenceTrack.passDirection =
#masterTrack.pointingDirection = #referenceTrack.pointingDirection =
#masterTrack.operationMode = #referenceTrack.operationMode =
#masterTrack.radarWavelength = #referenceTrack.radarWavelength =
masterTrack.numberOfSamples = masterSwath.numberOfSamples referenceTrack.numberOfSamples = referenceSwath.numberOfSamples
masterTrack.numberOfLines = masterSwath.numberOfLines referenceTrack.numberOfLines = referenceSwath.numberOfLines
masterTrack.startingRange = masterSwath.startingRange referenceTrack.startingRange = referenceSwath.startingRange
#masterTrack.rangeSamplingRate = #referenceTrack.rangeSamplingRate =
masterTrack.rangePixelSize = masterSwath.rangePixelSize referenceTrack.rangePixelSize = referenceSwath.rangePixelSize
masterTrack.sensingStart = masterSwath.sensingStart referenceTrack.sensingStart = referenceSwath.sensingStart
#masterTrack.prf = #referenceTrack.prf =
#masterTrack.azimuthPixelSize = #referenceTrack.azimuthPixelSize =
masterTrack.azimuthLineInterval = masterSwath.azimuthLineInterval referenceTrack.azimuthLineInterval = referenceSwath.azimuthLineInterval
#masterTrack.dopplerVsPixel = #referenceTrack.dopplerVsPixel =
#masterTrack.frames = #referenceTrack.frames =
#masterTrack.orbit = #referenceTrack.orbit =
#slave #secondary
slaveTrack.numberOfSamples = slaveSwath.numberOfSamples secondaryTrack.numberOfSamples = secondarySwath.numberOfSamples
slaveTrack.numberOfLines = slaveSwath.numberOfLines secondaryTrack.numberOfLines = secondarySwath.numberOfLines
slaveTrack.startingRange = slaveSwath.startingRange secondaryTrack.startingRange = secondarySwath.startingRange
slaveTrack.rangePixelSize = slaveSwath.rangePixelSize secondaryTrack.rangePixelSize = secondarySwath.rangePixelSize
slaveTrack.sensingStart = slaveSwath.sensingStart secondaryTrack.sensingStart = secondarySwath.sensingStart
slaveTrack.azimuthLineInterval = slaveSwath.azimuthLineInterval secondaryTrack.azimuthLineInterval = secondarySwath.azimuthLineInterval
if self.useGPU and self._insar.hasGPU(): 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) 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) self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.rangeOffset, self._insar.azimuthOffset)
else: else:
topoCPU(masterTrack, 1, 1, demFile, topoCPU(referenceTrack, 1, 1, demFile,
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.los) 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) 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) waterBodyRadar(self._insar.latitude, self._insar.longitude, wbdFile, self._insar.wbdOut)
@ -106,28 +106,28 @@ def runCoregGeom(self):
################################################## ##################################################
# resample bursts # resample bursts
################################################## ##################################################
slaveBurstResampledDir = self._insar.slaveBurstPrefix + '_1_coreg_geom' secondaryBurstResampledDir = self._insar.secondaryBurstPrefix + '_1_coreg_geom'
#interferogramDir = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix + '_coreg_geom' #interferogramDir = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix + '_coreg_geom'
interferogramDir = 'burst_interf_1_coreg_geom' interferogramDir = 'burst_interf_1_coreg_geom'
interferogramPrefix = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix interferogramPrefix = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix
resampleBursts(masterSwath, slaveSwath, resampleBursts(referenceSwath, secondarySwath,
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, slaveBurstResampledDir, interferogramDir, self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, secondaryBurstResampledDir, interferogramDir,
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, self._insar.slaveBurstPrefix, interferogramPrefix, self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, self._insar.secondaryBurstPrefix, interferogramPrefix,
self._insar.rangeOffset, self._insar.azimuthOffset, rangeOffsetResidual=0, azimuthOffsetResidual=0) self._insar.rangeOffset, self._insar.azimuthOffset, rangeOffsetResidual=0, azimuthOffsetResidual=0)
################################################## ##################################################
# mosaic burst amplitudes and interferograms # mosaic burst amplitudes and interferograms
################################################## ##################################################
os.chdir(slaveBurstResampledDir) os.chdir(secondaryBurstResampledDir)
mosaicBurstAmplitude(masterSwath, self._insar.slaveBurstPrefix, self._insar.slaveMagnitude, numberOfLooksThreshold=4) mosaicBurstAmplitude(referenceSwath, self._insar.secondaryBurstPrefix, self._insar.secondaryMagnitude, numberOfLooksThreshold=4)
os.chdir('../') os.chdir('../')
#the interferogram is not good enough, do not mosaic #the interferogram is not good enough, do not mosaic
mosaic=False mosaic=False
if mosaic: if mosaic:
os.chdir(interferogramDir) os.chdir(interferogramDir)
mosaicBurstInterferogram(masterSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4) mosaicBurstInterferogram(referenceSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
os.chdir('../') os.chdir('../')

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -43,4 +43,4 @@ def getFactoriesInfo():
def createInsarProc(name=None, procDoc= None): def createInsarProc(name=None, procDoc= None):
from .InsarProc import InsarProc 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 import logging
logger = logging.getLogger('isce.insar.extractInfo') logger = logging.getLogger('isce.insar.extractInfo')
def extractInfo(self, master, slave): def extractInfo(self, reference, secondary):
from contrib.frameUtils.FrameInfoExtractor import FrameInfoExtractor from contrib.frameUtils.FrameInfoExtractor import FrameInfoExtractor
FIE = FrameInfoExtractor() FIE = FrameInfoExtractor()
masterInfo = FIE.extractInfoFromFrame(master) referenceInfo = FIE.extractInfoFromFrame(reference)
slaveInfo = FIE.extractInfoFromFrame(slave) secondaryInfo = FIE.extractInfoFromFrame(secondary)
masterInfo.sensingStart = [masterInfo.sensingStart, slaveInfo.sensingStart] referenceInfo.sensingStart = [referenceInfo.sensingStart, secondaryInfo.sensingStart]
masterInfo.sensingStop = [masterInfo.sensingStop, slaveInfo.sensingStop] referenceInfo.sensingStop = [referenceInfo.sensingStop, secondaryInfo.sensingStop]
# for stitched frames do not make sense anymore # for stitched frames do not make sense anymore
mbb = masterInfo.getBBox() mbb = referenceInfo.getBBox()
sbb = slaveInfo.getBBox() sbb = secondaryInfo.getBBox()
latEarlyNear = mbb[0][0] latEarlyNear = mbb[0][0]
latLateNear = mbb[2][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[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])]) ret.append([min(mbb[3][0], sbb[3][0]), min(mbb[3][1], sbb[3][1])])
masterInfo.bbox = ret referenceInfo.bbox = ret
return masterInfo return referenceInfo
# the track should be the same for both # the track should be the same for both

View File

@ -52,14 +52,14 @@ def runCorrect(self):
posIndx = 1 posIndx = 1
mocompPosition1 = objFormSlc1.mocompPosition mocompPosition1 = objFormSlc1.mocompPosition
planet = self.insar.masterFrame.instrument.platform.planet planet = self.insar.referenceFrame.instrument.platform.planet
prf1 = self.insar.masterFrame.instrument.PRF prf1 = self.insar.referenceFrame.instrument.PRF
objCorrect = stdproc.createCorrect() objCorrect = stdproc.createCorrect()
objCorrect.wireInputPort(name='peg', object=self.insar.peg) 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='planet', object=planet)
objCorrect.wireInputPort(name='interferogram', object=intImage) 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 # Average velocity and height measurements
v = self.insar.procVelocity v = self.insar.procVelocity
h = self.insar.averageHeight h = self.insar.averageHeight

View File

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

View File

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

View File

@ -32,10 +32,10 @@ import stdproc
import sys import sys
logger = logging.getLogger('isce.insar.runFdMocomp') 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., USE_DOP = {'AVERAGE' : lambda x, y: (x+y)/2.,
'MASTER': lambda x, y: x, 'REFERENCE': lambda x, y: x,
'SLAVE': lambda x, y: y} 'SECONDARY': lambda x, y: y}
def runFdMocomp(self, use_dop="average"): def runFdMocomp(self, use_dop="average"):
""" """
@ -45,27 +45,27 @@ def runFdMocomp(self, use_dop="average"):
H2 = self.insar.fdH2 H2 = self.insar.fdH2
peg = self.insar.peg peg = self.insar.peg
lookSide = self.insar._lookSide lookSide = self.insar._lookSide
masterOrbit = self.insar.masterOrbit referenceOrbit = self.insar.referenceOrbit
slaveOrbit = self.insar.slaveOrbit secondaryOrbit = self.insar.secondaryOrbit
rangeSamplingRate = ( rangeSamplingRate = (
self.insar.getMasterFrame().instrument.rangeSamplingRate) self.insar.getReferenceFrame().instrument.rangeSamplingRate)
rangePulseDuration = ( rangePulseDuration = (
self.insar.getSlaveFrame().instrument.pulseLength) self.insar.getSecondaryFrame().instrument.pulseLength)
chirpExtension = self.insar.chirpExtension chirpExtension = self.insar.chirpExtension
chirpSize = int(rangeSamplingRate * rangePulseDuration) chirpSize = int(rangeSamplingRate * rangePulseDuration)
number_range_bins = self.insar.numberRangeBins number_range_bins = self.insar.numberRangeBins
masterCentroid = self.insar.masterDoppler.fractionalCentroid referenceCentroid = self.insar.referenceDoppler.fractionalCentroid
slaveCentroid = self.insar.slaveDoppler.fractionalCentroid secondaryCentroid = self.insar.secondaryDoppler.fractionalCentroid
logger.info("Correcting Doppler centroid for motion compensation") logger.info("Correcting Doppler centroid for motion compensation")
result = [] result = []
for centroid, frame, orbit, H in zip((masterCentroid, slaveCentroid), for centroid, frame, orbit, H in zip((referenceCentroid, secondaryCentroid),
(self.insar.masterFrame, (self.insar.referenceFrame,
self.insar.slaveFrame), self.insar.secondaryFrame),
(masterOrbit, slaveOrbit), (referenceOrbit, secondaryOrbit),
(H1, H2) (H1, H2)
): ):
fdmocomp = stdproc.createFdMocomp() fdmocomp = stdproc.createFdMocomp()
@ -80,13 +80,13 @@ def runFdMocomp(self, use_dop="average"):
result.append( fdmocomp.dopplerCentroid ) result.append( fdmocomp.dopplerCentroid )
pass pass
masterDopplerCorrection, slaveDopplerCorrection = result referenceDopplerCorrection, secondaryDopplerCorrection = result
# print masterDopplerCorrection, slaveDopplerCorrection # print referenceDopplerCorrection, secondaryDopplerCorrection
# use_dop = "F" # use_dop = "F"
try: try:
fd = USE_DOP[use_dop.upper()](masterDopplerCorrection, fd = USE_DOP[use_dop.upper()](referenceDopplerCorrection,
slaveDopplerCorrection) secondaryDopplerCorrection)
except KeyError: except KeyError:
print("Unrecognized use_dop option. use_dop = ",use_dop) print("Unrecognized use_dop option. use_dop = ",use_dop)
print("Not found in dictionary:",USE_DOP.keys()) 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') logger = logging.getLogger('isce.insar.runFormSLC')
#Run FormSLC for master #Run FormSLC for reference
def master(self, deltaf=None): def reference(self, deltaf=None):
from isceobj.Catalog import recordInputsAndOutputs from isceobj.Catalog import recordInputsAndOutputs
from iscesys.ImageUtil.ImageUtil import ImageUtil as IU from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
@ -45,9 +45,9 @@ def master(self, deltaf=None):
v,h = self.insar.vh() v,h = self.insar.vh()
objRaw = self.insar.rawMasterIQImage.clone() objRaw = self.insar.rawReferenceIQImage.clone()
objRaw.accessMode = 'read' objRaw.accessMode = 'read'
objFormSlc = stdproc.createFormSLC(name='insarapp_formslc_master') objFormSlc = stdproc.createFormSLC(name='insarapp_formslc_reference')
objFormSlc.setBodyFixedVelocity(v) objFormSlc.setBodyFixedVelocity(v)
objFormSlc.setSpacecraftHeight(h) objFormSlc.setSpacecraftHeight(h)
objFormSlc.setAzimuthPatchSize(self.patchSize) objFormSlc.setAzimuthPatchSize(self.patchSize)
@ -55,18 +55,18 @@ def master(self, deltaf=None):
objFormSlc.setNumberPatches(self.numPatches) objFormSlc.setNumberPatches(self.numPatches)
objFormSlc.setLookSide(self.insar._lookSide) objFormSlc.setLookSide(self.insar._lookSide)
objFormSlc.setNumberAzimuthLooks(self.insar.numberAzimuthLooks) objFormSlc.setNumberAzimuthLooks(self.insar.numberAzimuthLooks)
logger.info("Focusing Master image") logger.info("Focusing Reference image")
objFormSlc.stdWriter = self.stdWriter objFormSlc.stdWriter = self.stdWriter
if (deltaf is not None) and (objFormSlc.azimuthResolution is None): if (deltaf is not None) and (objFormSlc.azimuthResolution is None):
ins = self.insar.masterFrame.getInstrument() ins = self.insar.referenceFrame.getInstrument()
prf = ins.getPulseRepetitionFrequency() prf = ins.getPulseRepetitionFrequency()
res = ins.getPlatform().getAntennaLength() / 2.0 res = ins.getPlatform().getAntennaLength() / 2.0
azbw = min(v/res, prf) azbw = min(v/res, prf)
res = v/azbw res = v/azbw
factor = 1.0 - (abs(deltaf)/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 azres = res / factor
#jng This is a temporary solution seems it looks that same banding problem #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. #can be resolved by doubling the azres. The default azResFactor is still one.
@ -74,9 +74,9 @@ def master(self, deltaf=None):
####newInputs ####newInputs
objSlc = objFormSlc(rawImage=objRaw, objSlc = objFormSlc(rawImage=objRaw,
orbit=self.insar.masterOrbit, orbit=self.insar.referenceOrbit,
frame=self.insar.masterFrame, frame=self.insar.referenceFrame,
planet=self.insar.masterFrame.instrument.platform.planet, planet=self.insar.referenceFrame.instrument.platform.planet,
doppler=self.insar.dopplerCentroid, doppler=self.insar.dopplerCentroid,
peg=self.insar.peg) peg=self.insar.peg)
@ -86,23 +86,23 @@ def master(self, deltaf=None):
objSlc.finalizeImage() objSlc.finalizeImage()
objRaw.finalizeImage() objRaw.finalizeImage()
recordInputsAndOutputs(self.insar.procDoc, objFormSlc, recordInputsAndOutputs(self.insar.procDoc, objFormSlc,
"runFormSLC.master", logger, "runFormSLC.master") "runFormSLC.reference", logger, "runFormSLC.reference")
logger.info('New Width = %d'%(imageSlc.getWidth())) logger.info('New Width = %d'%(imageSlc.getWidth()))
self.insar.masterSlcImage = imageSlc self.insar.referenceSlcImage = imageSlc
self.insar.formSLC1 = objFormSlc self.insar.formSLC1 = objFormSlc
return objFormSlc.numberPatches return objFormSlc.numberPatches
#Run FormSLC on slave #Run FormSLC on secondary
def slave(self, deltaf=None): def secondary(self, deltaf=None):
from isceobj.Catalog import recordInputsAndOutputs from isceobj.Catalog import recordInputsAndOutputs
from iscesys.ImageUtil.ImageUtil import ImageUtil as IU from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
v,h = self.insar.vh() v,h = self.insar.vh()
objRaw = self.insar.rawSlaveIQImage.clone() objRaw = self.insar.rawSecondaryIQImage.clone()
objRaw.accessMode = 'read' objRaw.accessMode = 'read'
objFormSlc = stdproc.createFormSLC(name='insarapp_formslc_slave') objFormSlc = stdproc.createFormSLC(name='insarapp_formslc_secondary')
objFormSlc.setBodyFixedVelocity(v) objFormSlc.setBodyFixedVelocity(v)
objFormSlc.setSpacecraftHeight(h) objFormSlc.setSpacecraftHeight(h)
objFormSlc.setAzimuthPatchSize(self.patchSize) objFormSlc.setAzimuthPatchSize(self.patchSize)
@ -110,24 +110,24 @@ def slave(self, deltaf=None):
objFormSlc.setNumberPatches(self.numPatches) objFormSlc.setNumberPatches(self.numPatches)
objFormSlc.setNumberAzimuthLooks(self.insar.numberAzimuthLooks) objFormSlc.setNumberAzimuthLooks(self.insar.numberAzimuthLooks)
objFormSlc.setLookSide(self.insar._lookSide) objFormSlc.setLookSide(self.insar._lookSide)
logger.info("Focusing Master image") logger.info("Focusing Reference image")
objFormSlc.stdWriter = self.stdWriter objFormSlc.stdWriter = self.stdWriter
if (deltaf is not None) and (objFormSlc.azimuthResolution is None): if (deltaf is not None) and (objFormSlc.azimuthResolution is None):
ins = self.insar.slaveFrame.getInstrument() ins = self.insar.secondaryFrame.getInstrument()
prf = ins.getPulseRepetitionFrequency() prf = ins.getPulseRepetitionFrequency()
res = ins.getPlatform().getAntennaLength()/2.0 res = ins.getPlatform().getAntennaLength()/2.0
azbw = min(v / res, prf) azbw = min(v / res, prf)
res = v / azbw res = v / azbw
factor = 1.0 - (abs(deltaf) / 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 azres = res/factor
objFormSlc.setAzimuthResolution(azres) objFormSlc.setAzimuthResolution(azres)
objSlc = objFormSlc(rawImage=objRaw, objSlc = objFormSlc(rawImage=objRaw,
orbit=self.insar.slaveOrbit, orbit=self.insar.secondaryOrbit,
frame=self.insar.slaveFrame, frame=self.insar.secondaryFrame,
planet=self.insar.slaveFrame.instrument.platform.planet, planet=self.insar.secondaryFrame.instrument.platform.planet,
doppler=self.insar.dopplerCentroid, doppler=self.insar.dopplerCentroid,
peg=self.insar.peg) peg=self.insar.peg)
@ -137,22 +137,22 @@ def slave(self, deltaf=None):
objSlc.finalizeImage() objSlc.finalizeImage()
objRaw.finalizeImage() objRaw.finalizeImage()
recordInputsAndOutputs(self.insar.procDoc, objFormSlc, recordInputsAndOutputs(self.insar.procDoc, objFormSlc,
"runFormSLC.slave", logger, "runFormSLC.slave") "runFormSLC.secondary", logger, "runFormSLC.secondary")
logger.info('New Width = %d'%(imageSlc.getWidth())) logger.info('New Width = %d'%(imageSlc.getWidth()))
self.insar.slaveSlcImage = imageSlc self.insar.secondarySlcImage = imageSlc
self.insar.formSLC2 = objFormSlc self.insar.formSLC2 = objFormSlc
return objFormSlc.numberPatches return objFormSlc.numberPatches
@use_api @use_api
def runFormSLC(self): def runFormSLC(self):
mDoppler = self.insar.masterDoppler.getDopplerCoefficients(inHz=True) mDoppler = self.insar.referenceDoppler.getDopplerCoefficients(inHz=True)
sDoppler = self.insar.slaveDoppler.getDopplerCoefficients(inHz=True) sDoppler = self.insar.secondaryDoppler.getDopplerCoefficients(inHz=True)
deltaf = abs(mDoppler[0] - sDoppler[0]) deltaf = abs(mDoppler[0] - sDoppler[0])
n_master = master(self, deltaf=deltaf) n_reference = reference(self, deltaf=deltaf)
n_slave = slave(self, deltaf=deltaf) n_secondary = secondary(self, deltaf=deltaf)
self.insar.setNumberPatches(min(n_master, n_slave)) self.insar.setNumberPatches(min(n_reference, n_secondary))
self.is_mocomp = int( self.is_mocomp = int(
(self.insar.formSLC1.azimuthPatchSize - (self.insar.formSLC1.azimuthPatchSize -
self.insar.formSLC1.numberValidPulses)/2 self.insar.formSLC1.numberValidPulses)/2

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -63,22 +63,22 @@ def runSetmocomppath(self, peg=None):
""" """
planet = ( planet = (
self._insar.getMasterFrame().getInstrument().getPlatform().getPlanet()) self._insar.getReferenceFrame().getInstrument().getPlatform().getPlanet())
masterOrbit = self._insar.getMasterOrbit() referenceOrbit = self._insar.getReferenceOrbit()
slaveOrbit = self._insar.getSlaveOrbit() secondaryOrbit = self._insar.getSecondaryOrbit()
if peg: if peg:
#If the input peg is set, then use it #If the input peg is set, then use it
self._insar.setPeg(peg) self._insar.setPeg(peg)
logger.info("Using the given peg = %r", peg) logger.info("Using the given peg = %r", peg)
self._insar.setFirstAverageHeight( self._insar.setFirstAverageHeight(
averageHeightAboveElp(planet, peg, masterOrbit)) averageHeightAboveElp(planet, peg, referenceOrbit))
self._insar.setSecondAverageHeight( self._insar.setSecondAverageHeight(
averageHeightAboveElp(planet, peg, slaveOrbit)) averageHeightAboveElp(planet, peg, secondaryOrbit))
self._insar.setFirstProcVelocity( self._insar.setFirstProcVelocity(
sVelocityAtMidOrbit(planet, peg, masterOrbit)) sVelocityAtMidOrbit(planet, peg, referenceOrbit))
self._insar.setSecondProcVelocity( self._insar.setSecondProcVelocity(
sVelocityAtMidOrbit(planet, peg, slaveOrbit)) sVelocityAtMidOrbit(planet, peg, secondaryOrbit))
# recordInputsAndOutputs(self._insar.procDoc, peg, "peg", # recordInputsAndOutputs(self._insar.procDoc, peg, "peg",
# logger, "runSetmocomppath") # logger, "runSetmocomppath")
return return
@ -86,17 +86,17 @@ def runSetmocomppath(self, peg=None):
logger.info("Selecting peg points from frames") logger.info("Selecting peg points from frames")
pegpts = [] pegpts = []
pegpts.append(self._insar.getMasterFrame().peg) pegpts.append(self._insar.getReferenceFrame().peg)
pegpts.append(self._insar.getMasterFrame().peg) pegpts.append(self._insar.getReferenceFrame().peg)
peg = averagePeg(pegpts, planet) peg = averagePeg(pegpts, planet)
self._insar.setPeg(peg) self._insar.setPeg(peg)
self._insar.setFirstAverageHeight( self._insar.setFirstAverageHeight(
self._insar.getMasterFrame().platformHeight) self._insar.getReferenceFrame().platformHeight)
self._insar.setSecondAverageHeight( self._insar.setSecondAverageHeight(
self._insar.getSlaveFrame().platformHeight) self._insar.getSecondaryFrame().platformHeight)
self._insar.setFirstProcVelocity( self._insar.setFirstProcVelocity(
self._insar.getMasterFrame().procVelocity) self._insar.getReferenceFrame().procVelocity)
self._insar.setSecondProcVelocity( 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() planet = self.insar.referenceFrame.getInstrument().getPlatform().getPlanet()
prf1 = self.insar.masterFrame.getInstrument().getPulseRepetitionFrequency() prf1 = self.insar.referenceFrame.getInstrument().getPulseRepetitionFrequency()
objTopo = stdproc.createTopo() objTopo = stdproc.createTopo()
objTopo.wireInputPort(name='peg', object=self.insar.peg) 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='planet', object=planet)
objTopo.wireInputPort(name='dem', object=objDem) objTopo.wireInputPort(name='dem', object=objDem)
objTopo.wireInputPort(name='interferogram', object=intImage) 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] centroid = self.insar.dopplerCentroid.getDopplerCoefficients(inHz=False)[0]
objTopo.setDopplerCentroidConstantTerm(centroid) objTopo.setDopplerCentroidConstantTerm(centroid)

View File

@ -50,7 +50,7 @@ def runUnwrap(self,costMode = None,initMethod = None, defomax = None, initOnly =
wrapName = self.insar.topophaseFlatFilename wrapName = self.insar.topophaseFlatFilename
unwrapName = self.insar.unwrappedIntFilename unwrapName = self.insar.unwrappedIntFilename
wavelength = self.insar.masterFrame.getInstrument().getRadarWavelength() wavelength = self.insar.referenceFrame.getInstrument().getRadarWavelength()
width = self.insar.resampIntImage.width width = self.insar.resampIntImage.width
earthRadius = self.insar.peg.radiusOfCurvature earthRadius = self.insar.peg.radiusOfCurvature
altitude = self.insar.averageHeight altitude = self.insar.averageHeight
@ -58,10 +58,10 @@ def runUnwrap(self,costMode = None,initMethod = None, defomax = None, initOnly =
rangeLooks = self.insar.topo.numberRangeLooks rangeLooks = self.insar.topo.numberRangeLooks
azimuthLooks = self.insar.topo.numberAzimuthLooks 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 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)) rgres = abs(SPEED_OF_LIGHT / (2.0 * rBW))
rngfact = rgres/self.insar.topo.slantRangePixelSpacing rngfact = rgres/self.insar.topo.slantRangePixelSpacing

View File

@ -33,17 +33,17 @@ def runUpdatePreprocInfo(self, use_dop="average"):
peg = self.insar.peg peg = self.insar.peg
pegRc = peg.radiusOfCurvature pegRc = peg.radiusOfCurvature
masterFrame = self.insar.masterFrame referenceFrame = self.insar.referenceFrame
slaveFrame = self.insar.slaveFrame secondaryFrame = self.insar.secondaryFrame
prf1 = masterFrame.getInstrument().getPulseRepetitionFrequency() prf1 = referenceFrame.getInstrument().getPulseRepetitionFrequency()
prf2 = slaveFrame.getInstrument().getPulseRepetitionFrequency() prf2 = secondaryFrame.getInstrument().getPulseRepetitionFrequency()
masterDoppler = self.insar.masterDoppler referenceDoppler = self.insar.referenceDoppler
slaveDoppler = self.insar.slaveDoppler secondaryDoppler = self.insar.secondaryDoppler
## red flag. ## red flag.
fd = runFdMocomp(self, use_dop=use_dop) fd = runFdMocomp(self, use_dop=use_dop)
averageDoppler = masterDoppler.average(slaveDoppler) averageDoppler = referenceDoppler.average(secondaryDoppler)
averageDoppler.fractionalCentroid = fd averageDoppler.fractionalCentroid = fd
self.insar.dopplerCentroid =averageDoppler self.insar.dopplerCentroid =averageDoppler
return None 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 ## design princple does not use composition, this is an attempt to
## fix that ## fix that
class RadarSwath(object): 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='frame', object=frame1)
objCorrect.wireInputPort(name='planet', object=planet) objCorrect.wireInputPort(name='planet', object=planet)
objCorrect.wireInputPort(name='interferogram', object=intImage) 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 #objCorrect.setDopplerCentroidConstantTerm(centroid) #ML 2014-08-05
# Average velocity and height measurements # Average velocity and height measurements
objCorrect.setBodyFixedVelocity(velocity) 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) IU.copyAttributes(infos['demImage'], demImage)
objGeo(peg=infos['peg'], frame=frame1, objGeo(peg=infos['peg'], frame=frame1,
planet=planet, dem=demImage, tobegeocoded=inImage, planet=planet, dem=demImage, tobegeocoded=inImage,
geoPosting=None, masterslc=formSLC1) geoPosting=None, referenceslc=formSLC1)
if catalog is not None: if catalog is not None:
isceobj.Catalog.recordInputsAndOutputs(catalog, objGeo, isceobj.Catalog.recordInputsAndOutputs(catalog, objGeo,

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