diversity: replaced oppressive language with neutral definitions of the images that comprise an interferogram through the entire repository
parent
edea69d4b6
commit
e03042f4e5
|
@ -58,7 +58,7 @@ git reset --hard origin/master
|
|||
|
||||
```
|
||||
git checkout master
|
||||
(potentially update your local master against upstream, as described above)
|
||||
(potentially update your local reference against upstream, as described above)
|
||||
git checkout -b my_new_feature_branch
|
||||
|
||||
# do work. For example:
|
||||
|
|
42
README.md
42
README.md
|
@ -451,7 +451,7 @@ for example:
|
|||
>>> f = open("PICKLE/formslc")
|
||||
>>> import pickle
|
||||
>>> a = pickle.load(f)
|
||||
>>> o = f.getMasterOrbit()
|
||||
>>> o = f.getReferenceOrbit()
|
||||
>>> t, x, p, off = o._unpackOrbit()
|
||||
>>> print(t)
|
||||
>>> print(x)
|
||||
|
@ -529,7 +529,7 @@ The basic (ALOS) input file looks like this (indentation is optional):
|
|||
<stripmapApp>
|
||||
<component name="stripmapApp">
|
||||
<property name="sensor name">ALOS</property>
|
||||
<component name="Master">
|
||||
<component name="Reference">
|
||||
<property name="IMAGEFILE">
|
||||
/a/b/c/20070215/IMG-HH-ALPSRP056480670-H1.0__A
|
||||
</property>
|
||||
|
@ -538,7 +538,7 @@ The basic (ALOS) input file looks like this (indentation is optional):
|
|||
</property>
|
||||
<property name="OUTPUT">20070215</property>
|
||||
</component>
|
||||
<component name="Slave">
|
||||
<component name="Secondary">
|
||||
<property name="IMAGEFILE">
|
||||
/a/b/c/20061231/IMG-HH-ALPSRP049770670-H1.0__A
|
||||
</property>
|
||||
|
@ -564,7 +564,7 @@ properties and other components that are configurable. The property tags
|
|||
give the values of a single variable in the ISCE code. One of the properties
|
||||
defined in stripmapApp.py is the "sensor name" property. In the above example
|
||||
it is given the value ALOS. In order to run stripmapApp.py two images need to
|
||||
be specified. These are defined as components named 'Master' and 'Slave'.
|
||||
be specified. These are defined as components named 'Reference' and 'Secondary'.
|
||||
These components have properties named 'IMAGEFILE', 'LEADERFILE', and 'OUTPUT'
|
||||
with the values given in the above example.
|
||||
|
||||
|
@ -587,10 +587,10 @@ between three files as follows:
|
|||
<stripmapApp>
|
||||
<component name="insar">
|
||||
<property name="Sensor name">ALOS</property>
|
||||
<component name="master">
|
||||
<component name="reference">
|
||||
<catalog>20070215.xml</catalog>
|
||||
</component>
|
||||
<component name="slave">
|
||||
<component name="secondary">
|
||||
<catalog>20061231.xml</catalog>
|
||||
</component>
|
||||
</component>
|
||||
|
@ -600,7 +600,7 @@ between three files as follows:
|
|||
#### 20070215.xml
|
||||
|
||||
```xml
|
||||
<component name="Master">
|
||||
<component name="Reference">
|
||||
<property name="IMAGEFILE">
|
||||
/a/b/c/20070215/IMG-HH-ALPSRP056480670-H1.0__A
|
||||
</property>
|
||||
|
@ -614,7 +614,7 @@ between three files as follows:
|
|||
#### 20061231.xml
|
||||
|
||||
```xml
|
||||
<component name="Slave">
|
||||
<component name="Secondary">
|
||||
<property name="IMAGEFILE">
|
||||
/a/b/c/20061231/IMG-HH-ALPSRP049770670-H1.0__A
|
||||
</property>
|
||||
|
@ -636,7 +636,7 @@ The inputs are Sentinel GRD zipfiles
|
|||
<property name="epsg id">32618</property>
|
||||
<property name="geocode spacing">100</property>
|
||||
<property name="geocode interpolation method">bilinear</property>
|
||||
<component name="master">
|
||||
<component name="reference">
|
||||
<property name="safe">$dir$/rtcApp/data/S1A_IW_GRDH_1SDV_20181221T225104_20181221T225129_025130_02C664_B46C.zip</property>
|
||||
<property name="orbit directory">$dir$/orbits</property>
|
||||
<property name="output directory">$dir$/rtcApp/output</property>
|
||||
|
@ -679,7 +679,7 @@ This line creates an instance of the class Insar (that is given the family name
|
|||
Other applications could be created that could make several different instances
|
||||
of the Insar. Each instance would have the family name "insar" and would be
|
||||
given a unique instance name. This is possible for every component. In the
|
||||
above example xml files instances name "Master" and "Slave" of a family named
|
||||
above example xml files instances name "Reference" and "Secondary" of a family named
|
||||
"alos" are created.
|
||||
|
||||
### Component Configuration Files: Locations, Names, Priorities
|
||||
|
@ -710,23 +710,23 @@ the filename can be anything you choose. Configuration parameters can also be
|
|||
entered directly on the command line as in the following example:
|
||||
|
||||
```bash
|
||||
> stripmapApp.py insar.master.output=master_c.raw
|
||||
> stripmapApp.py insar.reference.output=reference_c.raw
|
||||
```
|
||||
|
||||
This example indicates that the variable named 'output' of the Component
|
||||
named 'master' belonging to the Component (or Application) named 'insar'
|
||||
will be given the name "master\_c.raw".
|
||||
named 'reference' belonging to the Component (or Application) named 'insar'
|
||||
will be given the name "reference\_c.raw".
|
||||
|
||||
The priority sequence on the command line goes from lowest priority on the left
|
||||
to highest priority on the right. So, if we use the command line,
|
||||
|
||||
```bash
|
||||
> stripmapApp.py myInputFile.xml insar.master.output=master_c.raw
|
||||
> stripmapApp.py myInputFile.xml insar.reference.output=reference_c.raw
|
||||
```
|
||||
|
||||
where the myInputFile.xml file also gives a value for the insar master output
|
||||
file as master\_d.raw, then the one defined on the right will win, i.e.,
|
||||
master\_c.raw.
|
||||
where the myInputFile.xml file also gives a value for the insar reference output
|
||||
file as reference\_d.raw, then the one defined on the right will win, i.e.,
|
||||
reference\_c.raw.
|
||||
|
||||
(2) The next priority location is the local directory in which stripmapApp.py is
|
||||
executed. Any xml file placed in this directory named according to either the
|
||||
|
@ -799,16 +799,16 @@ will see that the call to \_\_init\_\_ passes 'family=self.class.family' and
|
|||
'name=name' to the Component constructor (super class of Ampcor). The family
|
||||
name is given as "nstage" on line 265. The instance name is passed as the
|
||||
value of the 'name=name' and was passed to it from whatever program created it.
|
||||
Nstage is created in components/isceobj/StripmapProc/runRefineSlaveTiming.py where
|
||||
it is given the name 'master_offset1' on line 35. If you are setting a parameter that
|
||||
Nstage is created in components/isceobj/StripmapProc/runRefineSecondaryTiming.py where
|
||||
it is given the name 'reference_offset1' on line 35. If you are setting a parameter that
|
||||
should be the same for all uses of Ampcor, then you can use the
|
||||
family name 'ampcor' for the name of the xml file as 'ampcor.xml'. It is more
|
||||
likely that you will want to use the instance name 'master\_offset1.xml'
|
||||
likely that you will want to use the instance name 'reference\_offset1.xml'
|
||||
Use the family name 'ampcor' for the component tag 'name'.
|
||||
|
||||
Example for SLC matching use of Ampcor:
|
||||
|
||||
Filename: master\_offset1.xml:
|
||||
Filename: reference\_offset1.xml:
|
||||
|
||||
```xml
|
||||
<dummy>
|
||||
|
|
|
@ -26,8 +26,8 @@ class insarProcXML(object):
|
|||
def raw_rsc(self, key=None, write=False):
|
||||
'''Write out the RSC files for Raw data.'''
|
||||
|
||||
if key not in ['master', 'slave']:
|
||||
raise ValueError('Raw Files can only be written for master or slave.')
|
||||
if key not in ['reference', 'secondary']:
|
||||
raise ValueError('Raw Files can only be written for reference or secondary.')
|
||||
|
||||
|
||||
rsc = OrderedDict()
|
||||
|
@ -137,8 +137,8 @@ class insarProcXML(object):
|
|||
Create rsc files for all the interferograms generated by ISCE.
|
||||
'''
|
||||
|
||||
if key not in ['master', 'slave']:
|
||||
raise ValueError('SLC files can only be written for master or slave.')
|
||||
if key not in ['reference', 'secondary']:
|
||||
raise ValueError('SLC files can only be written for reference or secondary.')
|
||||
|
||||
if raw is None:
|
||||
rsc = self.raw_rsc(key=key, write=False)
|
||||
|
@ -221,8 +221,8 @@ if __name__ == '__main__':
|
|||
'''Run the test on input xml file.'''
|
||||
|
||||
converter = insarProcXML()
|
||||
master_raw_rsc = converter.raw_rsc(key='master', write=True)
|
||||
slave_raw_rsc = converter.raw_rsc(key='slave', write=True)
|
||||
reference_raw_rsc = converter.raw_rsc(key='reference', write=True)
|
||||
secondary_raw_rsc = converter.raw_rsc(key='secondary', write=True)
|
||||
|
||||
master_slc_rsc = converter.slc_rsc(raw=master_raw_rsc, key='master', write=True)
|
||||
slave_slc_rsc = converter.slc_rsc(raw=slave_raw_rsc, key='slave', write=True)
|
||||
reference_slc_rsc = converter.slc_rsc(raw=reference_raw_rsc, key='reference', write=True)
|
||||
secondary_slc_rsc = converter.slc_rsc(raw=secondary_raw_rsc, key='secondary', write=True)
|
||||
|
|
|
@ -78,7 +78,7 @@ class orbit_info:
|
|||
self.slook = np.sqrt(1-self.clook**2)
|
||||
# print('Estimated Look Angle: %3.2f degrees'%(np.arccos(self.clook)*180.0/np.pi))
|
||||
|
||||
def getBaseline(self, slave):
|
||||
def getBaseline(self, secondary):
|
||||
'''Compute baseline between current object and another orbit object.'''
|
||||
|
||||
ind = np.int(self.nvec/2)
|
||||
|
@ -93,17 +93,17 @@ class orbit_info:
|
|||
vvec = np.cross(crp, rvec)
|
||||
mvel = np.linalg.norm(mvel)
|
||||
|
||||
ind = np.int(slave.nvec/2) #First guess
|
||||
spos = np.array(slave.pos[ind])
|
||||
svel = np.array(slave.vel[ind])
|
||||
ind = np.int(secondary.nvec/2) #First guess
|
||||
spos = np.array(secondary.pos[ind])
|
||||
svel = np.array(secondary.vel[ind])
|
||||
svel = np.linalg.norm(svel)
|
||||
|
||||
dx = spos - mpos;
|
||||
z_offset = slave.prf*np.dot(dx, vvec)/mvel
|
||||
z_offset = secondary.prf*np.dot(dx, vvec)/mvel
|
||||
|
||||
ind = np.int(ind - z_offset) #Refined estimate
|
||||
spos = slave.pos[ind]
|
||||
svel = slave.vel[ind]
|
||||
spos = secondary.pos[ind]
|
||||
svel = secondary.vel[ind]
|
||||
svel = np.linalg.norm(svel)
|
||||
|
||||
dx = spos-mpos
|
||||
|
@ -169,16 +169,16 @@ if __name__ == '__main__':
|
|||
Days = np.zeros(nSar)
|
||||
|
||||
#######Setting the first scene as temporary reference.
|
||||
master = Orbits[0]
|
||||
reference = Orbits[0]
|
||||
|
||||
|
||||
Dopplers[0] = master.fd
|
||||
Days[0] = master.dt.toordinal()
|
||||
Dopplers[0] = reference.fd
|
||||
Days[0] = reference.dt.toordinal()
|
||||
for k in xrange(1,nSar):
|
||||
slave = Orbits[k]
|
||||
Bperp[k] = master.getBaseline(slave)
|
||||
Dopplers[k] = slave.fd
|
||||
Days[k] = slave.dt.toordinal()
|
||||
secondary = Orbits[k]
|
||||
Bperp[k] = reference.getBaseline(secondary)
|
||||
Dopplers[k] = secondary.fd
|
||||
Days[k] = secondary.dt.toordinal()
|
||||
|
||||
|
||||
print("************************************")
|
||||
|
@ -193,7 +193,7 @@ if __name__ == '__main__':
|
|||
|
||||
geomRho = (1-np.clip(np.abs(Bperp[:,None]-Bperp[None,:])/inps.Bcrit, 0., 1.))
|
||||
tempRho = np.exp(-1.0*np.abs(Days[:,None]-Days[None,:])/inps.Tau)
|
||||
dopRho = (np.abs(Dopplers[:,None] - Dopplers[None,:])/ master.prf) < inps.dop
|
||||
dopRho = (np.abs(Dopplers[:,None] - Dopplers[None,:])/ reference.prf) < inps.dop
|
||||
|
||||
Rho = geomRho * tempRho * dopRho
|
||||
for kk in xrange(nSar):
|
||||
|
@ -205,17 +205,17 @@ if __name__ == '__main__':
|
|||
|
||||
####Currently sorting on average coherence.
|
||||
|
||||
masterChoice = np.argsort(avgRho)
|
||||
masterOrbit = Orbits[masterChoice[0]]
|
||||
masterBperp = Bperp[masterChoice[0]]
|
||||
referenceChoice = np.argsort(avgRho)
|
||||
referenceOrbit = Orbits[referenceChoice[0]]
|
||||
referenceBperp = Bperp[referenceChoice[0]]
|
||||
|
||||
|
||||
print('*************************************')
|
||||
print('Ranking for Master Scene Selection: ')
|
||||
print('Ranking for Reference Scene Selection: ')
|
||||
print('**************************************')
|
||||
print('Rank Index Date nViable Avg. Coh.' )
|
||||
for kk in xrange(nSar):
|
||||
ind = masterChoice[kk]
|
||||
ind = referenceChoice[kk]
|
||||
print('{0:>3} {1:>3} {2:>10} {3:>4} {4:>2.3f}'.format(kk+1, ind+1, Orbits[ind].dt.strftime('%Y-%m-%d'), numViable[ind], avgRho[ind]))
|
||||
|
||||
print('***************************************')
|
||||
|
@ -234,31 +234,31 @@ if __name__ == '__main__':
|
|||
|
||||
[ii,jj] = np.where(Rho > inps.cThresh)
|
||||
|
||||
print('Master Slave Bperp Deltat')
|
||||
print('Reference Secondary Bperp Deltat')
|
||||
for mind, sind in itertools.izip(ii,jj):
|
||||
master = Orbits[mind]
|
||||
slave = Orbits[sind]
|
||||
if master.dt > slave.dt:
|
||||
print('{0:>10} {1:>10} {2:>4.2f} {3:>4.2f}'.format(master.dt.strftime('%Y-%m-%d'), slave.dt.strftime('%Y-%m-%d'), Bperp[mind]-Bperp[sind], Days[mind] - Days[sind]))
|
||||
xmlname = '%s/insar_%s_%s.xml'%(inps.dirname, master.dt.strftime('%Y%m%d'), slave.dt.strftime('%Y%m%d'))
|
||||
reference = Orbits[mind]
|
||||
secondary = Orbits[sind]
|
||||
if reference.dt > secondary.dt:
|
||||
print('{0:>10} {1:>10} {2:>4.2f} {3:>4.2f}'.format(reference.dt.strftime('%Y-%m-%d'), secondary.dt.strftime('%Y-%m-%d'), Bperp[mind]-Bperp[sind], Days[mind] - Days[sind]))
|
||||
xmlname = '%s/insar_%s_%s.xml'%(inps.dirname, reference.dt.strftime('%Y%m%d'), secondary.dt.strftime('%Y%m%d'))
|
||||
|
||||
# sarxml.sartoinsarXML(master.filename, slave.filename, base=inps.base, out=xmlname)
|
||||
# sarxml.sartoinsarXML(reference.filename, secondary.filename, base=inps.base, out=xmlname)
|
||||
|
||||
|
||||
print('***************************************')
|
||||
|
||||
#######Currently picks master peg point.
|
||||
#######Currently picks reference peg point.
|
||||
print('***************************************')
|
||||
commonPeg = masterOrbit.peg
|
||||
commonPeg = referenceOrbit.peg
|
||||
print('Common peg point: ')
|
||||
print(commonPeg)
|
||||
print('Bperp Range: [%f , %f] '%(Bperp.min()-masterBperp, Bperp.max()-masterBperp))
|
||||
print('Bperp Range: [%f , %f] '%(Bperp.min()-referenceBperp, Bperp.max()-referenceBperp))
|
||||
|
||||
######Choose median doppler
|
||||
commonDop = np.median(Dopplers)
|
||||
maxDop = np.max(Dopplers)
|
||||
minDop = np.min(Dopplers)
|
||||
varDop = np.max(np.abs(Dopplers-commonDop))/masterOrbit.prf
|
||||
varDop = np.max(np.abs(Dopplers-commonDop))/referenceOrbit.prf
|
||||
|
||||
print('Common Doppler: ', commonDop)
|
||||
print('Doppler Range: [%f, %f]'%(minDop, maxDop))
|
||||
|
|
|
@ -28,49 +28,49 @@ logging.config.fileConfig(
|
|||
logger = logging.getLogger('isce.insar')
|
||||
|
||||
|
||||
MASTER_DIR = Application.Parameter('masterDir',
|
||||
public_name='master directory',
|
||||
REFERENCE_DIR = Application.Parameter('referenceDir',
|
||||
public_name='reference directory',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc="master data directory")
|
||||
doc="reference data directory")
|
||||
|
||||
SLAVE_DIR = Application.Parameter('slaveDir',
|
||||
public_name='slave directory',
|
||||
SECONDARY_DIR = Application.Parameter('secondaryDir',
|
||||
public_name='secondary directory',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc="slave data directory")
|
||||
doc="secondary data directory")
|
||||
|
||||
MASTER_FRAMES = Application.Parameter('masterFrames',
|
||||
public_name = 'master frames',
|
||||
REFERENCE_FRAMES = Application.Parameter('referenceFrames',
|
||||
public_name = 'reference frames',
|
||||
default = None,
|
||||
type=str,
|
||||
container=list,
|
||||
mandatory=False,
|
||||
doc = 'master frames to process')
|
||||
doc = 'reference frames to process')
|
||||
|
||||
SLAVE_FRAMES = Application.Parameter('slaveFrames',
|
||||
public_name = 'slave frames',
|
||||
SECONDARY_FRAMES = Application.Parameter('secondaryFrames',
|
||||
public_name = 'secondary frames',
|
||||
default = None,
|
||||
type=str,
|
||||
container=list,
|
||||
mandatory=False,
|
||||
doc = 'slave frames to process')
|
||||
doc = 'secondary frames to process')
|
||||
|
||||
MASTER_POLARIZATION = Application.Parameter('masterPolarization',
|
||||
public_name='master polarization',
|
||||
REFERENCE_POLARIZATION = Application.Parameter('referencePolarization',
|
||||
public_name='reference polarization',
|
||||
default='HH',
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc="master polarization to process")
|
||||
doc="reference polarization to process")
|
||||
|
||||
SLAVE_POLARIZATION = Application.Parameter('slavePolarization',
|
||||
public_name='slave polarization',
|
||||
SECONDARY_POLARIZATION = Application.Parameter('secondaryPolarization',
|
||||
public_name='secondary polarization',
|
||||
default='HH',
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc="slave polarization to process")
|
||||
doc="secondary polarization to process")
|
||||
|
||||
#for ScanSAR-stripmap, always process all swaths,
|
||||
#user's settings are overwritten
|
||||
|
@ -524,21 +524,21 @@ RENDERER = Application.Parameter('renderer',
|
|||
#####################################################################
|
||||
|
||||
#Facility declarations
|
||||
MASTER = Application.Facility('master',
|
||||
public_name='master',
|
||||
REFERENCE = Application.Facility('reference',
|
||||
public_name='reference',
|
||||
module='isceobj.Sensor.MultiMode',
|
||||
factory='createSensor',
|
||||
args=('ALOS2', 'master'),
|
||||
args=('ALOS2', 'reference'),
|
||||
mandatory=True,
|
||||
doc="master component")
|
||||
doc="reference component")
|
||||
|
||||
SLAVE = Application.Facility('slave',
|
||||
public_name='slave',
|
||||
SECONDARY = Application.Facility('secondary',
|
||||
public_name='secondary',
|
||||
module='isceobj.Sensor.MultiMode',
|
||||
factory='createSensor',
|
||||
args=('ALOS2','slave'),
|
||||
args=('ALOS2','secondary'),
|
||||
mandatory=True,
|
||||
doc="slave component")
|
||||
doc="secondary component")
|
||||
|
||||
# RUN_UNWRAPPER = Application.Facility('runUnwrapper',
|
||||
# public_name='Run unwrapper',
|
||||
|
@ -568,12 +568,12 @@ _INSAR = Application.Facility('_insar',
|
|||
## Common interface for all insar applications.
|
||||
class Alos2InSAR(Application):
|
||||
family = 'alos2insar'
|
||||
parameter_list = (MASTER_DIR,
|
||||
SLAVE_DIR,
|
||||
MASTER_FRAMES,
|
||||
SLAVE_FRAMES,
|
||||
MASTER_POLARIZATION,
|
||||
SLAVE_POLARIZATION,
|
||||
parameter_list = (REFERENCE_DIR,
|
||||
SECONDARY_DIR,
|
||||
REFERENCE_FRAMES,
|
||||
SECONDARY_FRAMES,
|
||||
REFERENCE_POLARIZATION,
|
||||
SECONDARY_POLARIZATION,
|
||||
STARTING_SWATH,
|
||||
ENDING_SWATH,
|
||||
DEM,
|
||||
|
@ -637,8 +637,8 @@ class Alos2InSAR(Application):
|
|||
PICKLE_LOAD_DIR,
|
||||
RENDERER)
|
||||
|
||||
facility_list = (MASTER,
|
||||
SLAVE,
|
||||
facility_list = (REFERENCE,
|
||||
SECONDARY,
|
||||
#RUN_UNWRAPPER,
|
||||
#RUN_UNWRAP_2STAGE,
|
||||
_INSAR)
|
||||
|
@ -793,7 +793,7 @@ class Alos2InSAR(Application):
|
|||
self.step('preprocess',
|
||||
func=self.runPreprocessor,
|
||||
doc=(
|
||||
"""Preprocess the master and slave sensor data to raw images"""
|
||||
"""Preprocess the reference and secondary sensor data to raw images"""
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -1064,10 +1064,10 @@ class Alos2InSAR(Application):
|
|||
if self.wbd != None:
|
||||
self._insar.wbd = self.wbd
|
||||
|
||||
if self._insar.masterDate != None and self._insar.slaveDate != None and \
|
||||
if self._insar.referenceDate != None and self._insar.secondaryDate != None and \
|
||||
self._insar.numberRangeLooks1 != None and self._insar.numberAzimuthLooks1 != None and \
|
||||
self._insar.numberRangeLooks2 != None and self._insar.numberAzimuthLooks2 != None:
|
||||
self._insar.setFilename(masterDate=self._insar.masterDate, slaveDate=self._insar.slaveDate,
|
||||
self._insar.setFilename(referenceDate=self._insar.referenceDate, secondaryDate=self._insar.secondaryDate,
|
||||
nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1,
|
||||
nrlks2=self._insar.numberRangeLooks2, nalks2=self._insar.numberAzimuthLooks2)
|
||||
|
||||
|
|
|
@ -28,49 +28,49 @@ logging.config.fileConfig(
|
|||
logger = logging.getLogger('isce.insar')
|
||||
|
||||
|
||||
MASTER_DIR = Application.Parameter('masterDir',
|
||||
public_name='master directory',
|
||||
REFERENCE_DIR = Application.Parameter('referenceDir',
|
||||
public_name='reference directory',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc="master data directory")
|
||||
doc="reference data directory")
|
||||
|
||||
SLAVE_DIR = Application.Parameter('slaveDir',
|
||||
public_name='slave directory',
|
||||
SECONDARY_DIR = Application.Parameter('secondaryDir',
|
||||
public_name='secondary directory',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc="slave data directory")
|
||||
doc="secondary data directory")
|
||||
|
||||
MASTER_FRAMES = Application.Parameter('masterFrames',
|
||||
public_name = 'master frames',
|
||||
REFERENCE_FRAMES = Application.Parameter('referenceFrames',
|
||||
public_name = 'reference frames',
|
||||
default = None,
|
||||
type=str,
|
||||
container=list,
|
||||
mandatory=False,
|
||||
doc = 'master frames to process')
|
||||
doc = 'reference frames to process')
|
||||
|
||||
SLAVE_FRAMES = Application.Parameter('slaveFrames',
|
||||
public_name = 'slave frames',
|
||||
SECONDARY_FRAMES = Application.Parameter('secondaryFrames',
|
||||
public_name = 'secondary frames',
|
||||
default = None,
|
||||
type=str,
|
||||
container=list,
|
||||
mandatory=False,
|
||||
doc = 'slave frames to process')
|
||||
doc = 'secondary frames to process')
|
||||
|
||||
MASTER_POLARIZATION = Application.Parameter('masterPolarization',
|
||||
public_name='master polarization',
|
||||
REFERENCE_POLARIZATION = Application.Parameter('referencePolarization',
|
||||
public_name='reference polarization',
|
||||
default='HH',
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc="master polarization to process")
|
||||
doc="reference polarization to process")
|
||||
|
||||
SLAVE_POLARIZATION = Application.Parameter('slavePolarization',
|
||||
public_name='slave polarization',
|
||||
SECONDARY_POLARIZATION = Application.Parameter('secondaryPolarization',
|
||||
public_name='secondary polarization',
|
||||
default='HH',
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc="slave polarization to process")
|
||||
doc="secondary polarization to process")
|
||||
|
||||
STARTING_SWATH = Application.Parameter('startingSwath',
|
||||
public_name='starting swath',
|
||||
|
@ -460,21 +460,21 @@ RENDERER = Application.Parameter('renderer',
|
|||
#####################################################################
|
||||
|
||||
#Facility declarations
|
||||
MASTER = Application.Facility('master',
|
||||
public_name='master',
|
||||
REFERENCE = Application.Facility('reference',
|
||||
public_name='reference',
|
||||
module='isceobj.Sensor.MultiMode',
|
||||
factory='createSensor',
|
||||
args=('ALOS2', 'master'),
|
||||
args=('ALOS2', 'reference'),
|
||||
mandatory=True,
|
||||
doc="master component")
|
||||
doc="reference component")
|
||||
|
||||
SLAVE = Application.Facility('slave',
|
||||
public_name='slave',
|
||||
SECONDARY = Application.Facility('secondary',
|
||||
public_name='secondary',
|
||||
module='isceobj.Sensor.MultiMode',
|
||||
factory='createSensor',
|
||||
args=('ALOS2','slave'),
|
||||
args=('ALOS2','secondary'),
|
||||
mandatory=True,
|
||||
doc="slave component")
|
||||
doc="secondary component")
|
||||
|
||||
# RUN_UNWRAPPER = Application.Facility('runUnwrapper',
|
||||
# public_name='Run unwrapper',
|
||||
|
@ -504,12 +504,12 @@ _INSAR = Application.Facility('_insar',
|
|||
## Common interface for all insar applications.
|
||||
class Alos2burstInSAR(Application):
|
||||
family = 'alos2burstinsar'
|
||||
parameter_list = (MASTER_DIR,
|
||||
SLAVE_DIR,
|
||||
MASTER_FRAMES,
|
||||
SLAVE_FRAMES,
|
||||
MASTER_POLARIZATION,
|
||||
SLAVE_POLARIZATION,
|
||||
parameter_list = (REFERENCE_DIR,
|
||||
SECONDARY_DIR,
|
||||
REFERENCE_FRAMES,
|
||||
SECONDARY_FRAMES,
|
||||
REFERENCE_POLARIZATION,
|
||||
SECONDARY_POLARIZATION,
|
||||
STARTING_SWATH,
|
||||
ENDING_SWATH,
|
||||
DEM,
|
||||
|
@ -566,8 +566,8 @@ class Alos2burstInSAR(Application):
|
|||
PICKLE_LOAD_DIR,
|
||||
RENDERER)
|
||||
|
||||
facility_list = (MASTER,
|
||||
SLAVE,
|
||||
facility_list = (REFERENCE,
|
||||
SECONDARY,
|
||||
#RUN_UNWRAPPER,
|
||||
#RUN_UNWRAP_2STAGE,
|
||||
_INSAR)
|
||||
|
@ -720,7 +720,7 @@ class Alos2burstInSAR(Application):
|
|||
# Run a preprocessor for the two acquisitions
|
||||
self.step('preprocess', func=self.runPreprocessor,
|
||||
doc=(
|
||||
"""Preprocess the master and slave sensor data to raw images"""
|
||||
"""Preprocess the reference and secondary sensor data to raw images"""
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -991,17 +991,17 @@ class Alos2burstInSAR(Application):
|
|||
if self.wbd != None:
|
||||
self._insar.wbd = self.wbd
|
||||
|
||||
if self._insar.masterDate != None and self._insar.slaveDate != None and \
|
||||
if self._insar.referenceDate != None and self._insar.secondaryDate != None and \
|
||||
self._insar.numberRangeLooks1 != None and self._insar.numberAzimuthLooks1 != None and \
|
||||
self._insar.numberRangeLooks2 != None and self._insar.numberAzimuthLooks2 != None:
|
||||
self._insar.setFilename(masterDate=self._insar.masterDate, slaveDate=self._insar.slaveDate,
|
||||
self._insar.setFilename(referenceDate=self._insar.referenceDate, secondaryDate=self._insar.secondaryDate,
|
||||
nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1,
|
||||
nrlks2=self._insar.numberRangeLooks2, nalks2=self._insar.numberAzimuthLooks2)
|
||||
|
||||
if self._insar.masterDate != None and self._insar.slaveDate != None and \
|
||||
if self._insar.referenceDate != None and self._insar.secondaryDate != None and \
|
||||
self._insar.numberRangeLooks1 != None and self._insar.numberAzimuthLooks1 != None and \
|
||||
self._insar.numberRangeLooksSd != None and self._insar.numberAzimuthLooksSd != None:
|
||||
self._insar.setFilenameSd(masterDate=self._insar.masterDate, slaveDate=self._insar.slaveDate,
|
||||
self._insar.setFilenameSd(referenceDate=self._insar.referenceDate, secondaryDate=self._insar.secondaryDate,
|
||||
nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1,
|
||||
nrlks_sd=self._insar.numberRangeLooksSd, nalks_sd=self._insar.numberAzimuthLooksSd, nsd=3)
|
||||
|
||||
|
|
|
@ -39,16 +39,16 @@ from mroipac.baseline.Baseline import Baseline
|
|||
class calculateBaselineApp(FactoryInit):
|
||||
|
||||
def main(self):
|
||||
masterFrame = self.populateFrame(self.masterObj)
|
||||
slaveFrame = self.populateFrame(self.slaveObj)
|
||||
referenceFrame = self.populateFrame(self.referenceObj)
|
||||
secondaryFrame = self.populateFrame(self.secondaryObj)
|
||||
|
||||
# Calculate the baseline information
|
||||
baseline = Baseline()
|
||||
baseline.wireInputPort(name='masterFrame',object=masterFrame)
|
||||
baseline.wireInputPort(name='slaveFrame',object=slaveFrame)
|
||||
baseline.wireInputPort(name='masterOrbit',object=masterFrame.getOrbit())
|
||||
baseline.wireInputPort(name='slaveOrbit',object=slaveFrame.getOrbit())
|
||||
baseline.wireInputPort(name='ellipsoid',object=masterFrame.getInstrument().getPlatform().getPlanet().get_elp())
|
||||
baseline.wireInputPort(name='referenceFrame',object=referenceFrame)
|
||||
baseline.wireInputPort(name='secondaryFrame',object=secondaryFrame)
|
||||
baseline.wireInputPort(name='referenceOrbit',object=referenceFrame.getOrbit())
|
||||
baseline.wireInputPort(name='secondaryOrbit',object=secondaryFrame.getOrbit())
|
||||
baseline.wireInputPort(name='ellipsoid',object=referenceFrame.getInstrument().getPlatform().getPlanet().get_elp())
|
||||
baseline.baseline()
|
||||
print(baseline)
|
||||
|
||||
|
@ -68,8 +68,8 @@ class calculateBaselineApp(FactoryInit):
|
|||
def __init__(self,arglist):
|
||||
FactoryInit.__init__(self)
|
||||
self.initFactory(arglist)
|
||||
self.masterObj = self.getComponent('Master')
|
||||
self.slaveObj = self.getComponent('Slave')
|
||||
self.referenceObj = self.getComponent('Reference')
|
||||
self.secondaryObj = self.getComponent('Secondary')
|
||||
self.logger = logging.getLogger('isce.calculateBaseline')
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
@ -81,9 +81,9 @@ def main():
|
|||
fi.defaultInitModule = 'InitFromXmlFile'
|
||||
fi.initComponentFromFile()
|
||||
|
||||
master = fi.getComponent('Master')
|
||||
reference = fi.getComponent('Reference')
|
||||
|
||||
toGeneric = ToGeneric(rawObj=master)
|
||||
toGeneric = ToGeneric(rawObj=reference)
|
||||
toGeneric.convert()
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
@ -215,12 +215,12 @@ class Dpm(_InsarBase):
|
|||
|
||||
minLat, maxLat, minLon, maxLon = self.insar.topo.snwe
|
||||
|
||||
planet = self.insar.masterFrame.instrument.getPlatform().getPlanet()
|
||||
planet = self.insar.referenceFrame.instrument.getPlatform().getPlanet()
|
||||
|
||||
objGeo = stdproc.createGeocode()
|
||||
objGeo.listInputPorts()
|
||||
objGeo.wireInputPort(name='peg',object=self.insar.peg)
|
||||
objGeo.wireInputPort(name='frame',object=self.insar.masterFrame)
|
||||
objGeo.wireInputPort(name='frame',object=self.insar.referenceFrame)
|
||||
objGeo.wireInputPort(name='planet',object=planet)
|
||||
objGeo.wireInputPort(name='dem',object=demImage)
|
||||
objGeo.wireInputPort(name='interferogram',object=intImage)
|
||||
|
@ -240,7 +240,7 @@ class Dpm(_InsarBase):
|
|||
mocompPosition1 = objFormSlc1.getMocompPosition()
|
||||
posIndx = 1
|
||||
objGeo.referenceOrbit = mocompPosition1[posIndx]
|
||||
prf1 = self.insar.masterFrame.instrument.getPulseRepetitionFrequency()
|
||||
prf1 = self.insar.referenceFrame.instrument.getPulseRepetitionFrequency()
|
||||
dp = self.insar.dopplerCentroid.getDopplerCoefficients(inHz=False)[0]
|
||||
v = self.insar.procVelocity
|
||||
h = self.insar.averageHeight
|
||||
|
@ -311,16 +311,16 @@ class Dpm(_InsarBase):
|
|||
print("objTopo.maxLon = ", maxLon)
|
||||
pause(message="Paused in runGeocode4rlks")
|
||||
|
||||
planet = self.insar.masterFrame.instrument.getPlatform().getPlanet()
|
||||
planet = self.insar.referenceFrame.instrument.getPlatform().getPlanet()
|
||||
|
||||
objGeo = stdproc.createGeocode()
|
||||
objGeo.listInputPorts()
|
||||
objGeo.wireInputPort(name='peg',object=self.insar.peg)
|
||||
# objGeo.wireInputPort(name='frame',object=self.insar.masterFrame)
|
||||
objGeo.rangeFirstSample = self.insar.masterFrame.getStartingRange()
|
||||
objGeo.slantRangePixelSpacing = self.insar.masterFrame.instrument.getRangePixelSize()*4
|
||||
objGeo.prf = self.insar.masterFrame.instrument.getPulseRepetitionFrequency()
|
||||
objGeo.radarWavelength = self.insar.masterFrame.instrument.getRadarWavelength()
|
||||
# objGeo.wireInputPort(name='frame',object=self.insar.referenceFrame)
|
||||
objGeo.rangeFirstSample = self.insar.referenceFrame.getStartingRange()
|
||||
objGeo.slantRangePixelSpacing = self.insar.referenceFrame.instrument.getRangePixelSize()*4
|
||||
objGeo.prf = self.insar.referenceFrame.instrument.getPulseRepetitionFrequency()
|
||||
objGeo.radarWavelength = self.insar.referenceFrame.instrument.getRadarWavelength()
|
||||
objGeo.wireInputPort(name='planet',object=planet)
|
||||
objGeo.wireInputPort(name='dem',object=demImage)
|
||||
objGeo.wireInputPort(name='interferogram',object=intImage)
|
||||
|
@ -340,7 +340,7 @@ class Dpm(_InsarBase):
|
|||
mocompPosition1 = objFormSlc1.getMocompPosition()
|
||||
posIndx = 1
|
||||
objGeo.setReferenceOrbit(mocompPosition1[posIndx])
|
||||
prf1 = self.insar.masterFrame.instrument.getPulseRepetitionFrequency()
|
||||
prf1 = self.insar.referenceFrame.instrument.getPulseRepetitionFrequency()
|
||||
dp = self.insar.dopplerCentroid.getDopplerCoefficients(inHz=False)[0]
|
||||
v = self.insar.procVelocity
|
||||
h = self.insar.averageHeight
|
||||
|
@ -425,11 +425,11 @@ class Dpm(_InsarBase):
|
|||
|
||||
minLat, maxLat, minLon, maxLon = self.insar.topo.snwe
|
||||
|
||||
planet = self.insar.masterFrame.instrument.getPlatform().getPlanet()
|
||||
planet = self.insar.referenceFrame.instrument.getPlatform().getPlanet()
|
||||
|
||||
objGeo = stdproc.createGeocode()
|
||||
objGeo.wireInputPort(name='peg',object=self.insar.peg)
|
||||
objGeo.wireInputPort(name='frame',object=self.insar.masterFrame)
|
||||
objGeo.wireInputPort(name='frame',object=self.insar.referenceFrame)
|
||||
objGeo.wireInputPort(name='planet',object=planet)
|
||||
objGeo.wireInputPort(name='dem',object=demImage)
|
||||
objGeo.wireInputPort(name='interferogram',object=intImage)
|
||||
|
@ -443,7 +443,7 @@ class Dpm(_InsarBase):
|
|||
objGeo.stdWriter = self.stdWriter.set_file_tags("geocode", "log", "err", "out")
|
||||
# see mocompbaseline
|
||||
objGeo.setReferenceOrbit(mocompPosition1[posIndx])
|
||||
prf1 = self.insar.masterFrame.instrument.getPulseRepetitionFrequency()
|
||||
prf1 = self.insar.referenceFrame.instrument.getPulseRepetitionFrequency()
|
||||
dp = self.insar.dopplerCentroid.getDopplerCoefficients(inHz=False)[0]
|
||||
v = self.insar.procVelocity
|
||||
h = self.insar.averageHeight
|
||||
|
|
|
@ -315,9 +315,9 @@ def main():
|
|||
fi.defaultInitModule = 'InitFromXmlFile'
|
||||
fi.initComponentFromFile()
|
||||
|
||||
master = fi.getComponent('Master')
|
||||
reference = fi.getComponent('Reference')
|
||||
|
||||
focuser = Focuser(rawObj=master)
|
||||
focuser = Focuser(rawObj=reference)
|
||||
focuser.focuser()
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
@ -82,7 +82,7 @@ PEG_SELECT = Application.Parameter(
|
|||
public_name='peg select',
|
||||
default='average',
|
||||
mandatory=False,
|
||||
doc='Peg selection method. Can be master, slave or average'
|
||||
doc='Peg selection method. Can be reference, secondary or average'
|
||||
)
|
||||
|
||||
PEG_LAT = Application.Parameter(
|
||||
|
@ -156,7 +156,7 @@ USE_DOP = Application.Parameter(
|
|||
default="average",
|
||||
type=float,
|
||||
mandatory=False,
|
||||
doc="Choose whether to use master, slave, or average Doppler for processing."
|
||||
doc="Choose whether to use reference, secondary, or average Doppler for processing."
|
||||
)
|
||||
|
||||
UNWRAPPER_NAME = Application.Parameter(
|
||||
|
@ -414,44 +414,44 @@ RENDERER = Application.Parameter(
|
|||
)
|
||||
|
||||
#Facility declarations
|
||||
MASTER = Application.Facility(
|
||||
'master',
|
||||
public_name='Master',
|
||||
REFERENCE = Application.Facility(
|
||||
'reference',
|
||||
public_name='Reference',
|
||||
module='isceobj.Sensor',
|
||||
factory='createSensor',
|
||||
args=(SENSOR_NAME, 'master'),
|
||||
args=(SENSOR_NAME, 'reference'),
|
||||
mandatory=True,
|
||||
doc="Master raw data component"
|
||||
doc="Reference raw data component"
|
||||
)
|
||||
|
||||
SLAVE = Application.Facility(
|
||||
'slave',
|
||||
public_name='Slave',
|
||||
SECONDARY = Application.Facility(
|
||||
'secondary',
|
||||
public_name='Secondary',
|
||||
module='isceobj.Sensor',
|
||||
factory='createSensor',
|
||||
args=(SENSOR_NAME,'slave'),
|
||||
args=(SENSOR_NAME,'secondary'),
|
||||
mandatory=True,
|
||||
doc="Slave raw data component"
|
||||
doc="Secondary raw data component"
|
||||
)
|
||||
|
||||
MASTERDOP = Application.Facility(
|
||||
'masterdop',
|
||||
public_name='Master Doppler',
|
||||
REFERENCEDOP = Application.Facility(
|
||||
'referencedop',
|
||||
public_name='Reference Doppler',
|
||||
module='isceobj.Doppler',
|
||||
factory='createDoppler',
|
||||
args=(DOPPLER_METHOD,),
|
||||
mandatory=False,
|
||||
doc="Master Doppler calculation method"
|
||||
doc="Reference Doppler calculation method"
|
||||
)
|
||||
|
||||
SLAVEDOP = Application.Facility(
|
||||
'slavedop',
|
||||
public_name='Slave Doppler',
|
||||
SECONDARYDOP = Application.Facility(
|
||||
'secondarydop',
|
||||
public_name='Secondary Doppler',
|
||||
module='isceobj.Doppler',
|
||||
factory='createDoppler',
|
||||
args=(DOPPLER_METHOD,),
|
||||
mandatory=False,
|
||||
doc="Master Doppler calculation method"
|
||||
doc="Reference Doppler calculation method"
|
||||
)
|
||||
|
||||
DEM = Application.Facility(
|
||||
|
@ -591,10 +591,10 @@ class _InsarBase(Application, FrameMixin):
|
|||
UNWRAPPER_2STAGE_NAME,
|
||||
SOLVER_2STAGE)
|
||||
|
||||
facility_list = (MASTER,
|
||||
SLAVE,
|
||||
MASTERDOP,
|
||||
SLAVEDOP,
|
||||
facility_list = (REFERENCE,
|
||||
SECONDARY,
|
||||
REFERENCEDOP,
|
||||
SECONDARYDOP,
|
||||
DEM,
|
||||
DEM_STITCHER,
|
||||
RUN_ESTIMATE_HEIGHTS,
|
||||
|
@ -842,9 +842,9 @@ class _InsarBase(Application, FrameMixin):
|
|||
from isceobj.Util.decorators import use_api
|
||||
@use_api
|
||||
def verifyDEM(self):
|
||||
masterF = self._insar.masterFrame
|
||||
slaveF = self._insar.slaveFrame
|
||||
info = self.extractInfo(masterF, slaveF)
|
||||
referenceF = self._insar.referenceFrame
|
||||
secondaryF = self._insar.secondaryFrame
|
||||
info = self.extractInfo(referenceF, secondaryF)
|
||||
#if an image has been specified, then no need to create one
|
||||
if not self.dem.filename:
|
||||
self.createDem(info)
|
||||
|
@ -962,7 +962,7 @@ class _InsarBase(Application, FrameMixin):
|
|||
self.step('preprocess',
|
||||
func=self.runPreprocessor,
|
||||
doc=(
|
||||
"""Preprocess the master and slave sensor data to raw images"""
|
||||
"""Preprocess the reference and secondary sensor data to raw images"""
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
@ -8,9 +8,9 @@ import xml.etree.ElementTree as ElementTree
|
|||
|
||||
class App(Tkinter.Frame):
|
||||
|
||||
def __init__(self,master=None):
|
||||
Tkinter.Frame.__init__(self,master)
|
||||
self.master.title('ISSI Input File Generator')
|
||||
def __init__(self,reference=None):
|
||||
Tkinter.Frame.__init__(self,reference)
|
||||
self.reference.title('ISSI Input File Generator')
|
||||
|
||||
self.filterList = None
|
||||
self.filterX = Tkinter.IntVar()
|
||||
|
|
|
@ -49,7 +49,7 @@ SENSOR = Application.Facility('sensor',
|
|||
factory='createSensor',
|
||||
args=(SENSOR_NAME, ),
|
||||
mandatory=True,
|
||||
doc="Master raw data component"
|
||||
doc="Reference raw data component"
|
||||
)
|
||||
DOPPLER = Application.Facility('doppler',
|
||||
public_name='doppler',
|
||||
|
@ -57,7 +57,7 @@ DOPPLER = Application.Facility('doppler',
|
|||
factory='createDoppler',
|
||||
args=(DOPPLER_METHOD, ),
|
||||
mandatory=False,
|
||||
doc="Master Doppler calculation method"
|
||||
doc="Reference Doppler calculation method"
|
||||
)
|
||||
|
||||
class makeRawApp(Application):
|
||||
|
|
|
@ -194,12 +194,12 @@ GEOCODE_LIST = Application.Parameter(
|
|||
|
||||
|
||||
#Facility declarations
|
||||
MASTER = Application.Facility(
|
||||
'master',
|
||||
public_name='Master',
|
||||
REFERENCE = Application.Facility(
|
||||
'reference',
|
||||
public_name='Reference',
|
||||
module='isceobj.Sensor.GRD',
|
||||
factory='createSensor',
|
||||
args=(SENSOR_NAME, 'master'),
|
||||
args=(SENSOR_NAME, 'reference'),
|
||||
mandatory=True,
|
||||
doc="GRD data component"
|
||||
)
|
||||
|
@ -246,7 +246,7 @@ class GRDSAR(Application):
|
|||
POLARIZATIONS,
|
||||
GEOCODE_LIST)
|
||||
|
||||
facility_list = (MASTER,
|
||||
facility_list = (REFERENCE,
|
||||
DEM_STITCHER,
|
||||
_GRD)
|
||||
|
||||
|
|
|
@ -57,24 +57,24 @@ SENSOR_NAME = Application.Parameter(
|
|||
default = None,
|
||||
type = str,
|
||||
mandatory = False,
|
||||
doc = 'Sensor name for both master and slave')
|
||||
doc = 'Sensor name for both reference and secondary')
|
||||
|
||||
|
||||
MASTER_SENSOR_NAME = Application.Parameter(
|
||||
'masterSensorName',
|
||||
public_name='master sensor name',
|
||||
REFERENCE_SENSOR_NAME = Application.Parameter(
|
||||
'referenceSensorName',
|
||||
public_name='reference sensor name',
|
||||
default = None,
|
||||
type=str,
|
||||
mandatory = True,
|
||||
doc = "Master sensor name if mixing sensors")
|
||||
doc = "Reference sensor name if mixing sensors")
|
||||
|
||||
SLAVE_SENSOR_NAME = Application.Parameter(
|
||||
'slaveSensorName',
|
||||
public_name='slave sensor name',
|
||||
SECONDARY_SENSOR_NAME = Application.Parameter(
|
||||
'secondarySensorName',
|
||||
public_name='secondary sensor name',
|
||||
default = None,
|
||||
type=str,
|
||||
mandatory = True,
|
||||
doc = "Slave sensor name if mixing sensors")
|
||||
doc = "Secondary sensor name if mixing sensors")
|
||||
|
||||
|
||||
CORRELATION_METHOD = Application.Parameter(
|
||||
|
@ -89,17 +89,17 @@ CORRELATION_METHOD = Application.Parameter(
|
|||
phase_gradient=phase gradient"""
|
||||
)
|
||||
)
|
||||
MASTER_DOPPLER_METHOD = Application.Parameter(
|
||||
'masterDopplerMethod',
|
||||
public_name='master doppler method',
|
||||
REFERENCE_DOPPLER_METHOD = Application.Parameter(
|
||||
'referenceDopplerMethod',
|
||||
public_name='reference doppler method',
|
||||
default=None,
|
||||
type=str, mandatory=False,
|
||||
doc= "Doppler calculation method.Choices: 'useDOPIQ', 'useDefault'."
|
||||
)
|
||||
|
||||
SLAVE_DOPPLER_METHOD = Application.Parameter(
|
||||
'slaveDopplerMethod',
|
||||
public_name='slave doppler method',
|
||||
SECONDARY_DOPPLER_METHOD = Application.Parameter(
|
||||
'secondaryDopplerMethod',
|
||||
public_name='secondary doppler method',
|
||||
default=None,
|
||||
type=str, mandatory=False,
|
||||
doc="Doppler calculation method. Choices: 'useDOPIQ','useDefault'.")
|
||||
|
@ -448,24 +448,24 @@ DISPERSIVE_FILTER_COHERENCE_THRESHOLD = Application.Parameter('dispersive_filter
|
|||
doc='Coherence threshold to generate a mask file which gets used in the iterative filtering of the dispersive and non-disperive phase')
|
||||
#Facility declarations
|
||||
|
||||
MASTER = Application.Facility(
|
||||
'master',
|
||||
public_name='Master',
|
||||
REFERENCE = Application.Facility(
|
||||
'reference',
|
||||
public_name='Reference',
|
||||
module='isceobj.StripmapProc.Sensor',
|
||||
factory='createSensor',
|
||||
args=(SENSOR_NAME, MASTER_SENSOR_NAME, 'master'),
|
||||
args=(SENSOR_NAME, REFERENCE_SENSOR_NAME, 'reference'),
|
||||
mandatory=False,
|
||||
doc="Master raw data component"
|
||||
doc="Reference raw data component"
|
||||
)
|
||||
|
||||
SLAVE = Application.Facility(
|
||||
'slave',
|
||||
public_name='Slave',
|
||||
SECONDARY = Application.Facility(
|
||||
'secondary',
|
||||
public_name='Secondary',
|
||||
module='isceobj.StripmapProc.Sensor',
|
||||
factory='createSensor',
|
||||
args=(SENSOR_NAME, SLAVE_SENSOR_NAME,'slave'),
|
||||
args=(SENSOR_NAME, SECONDARY_SENSOR_NAME,'secondary'),
|
||||
mandatory=False,
|
||||
doc="Slave raw data component"
|
||||
doc="Secondary raw data component"
|
||||
)
|
||||
|
||||
DEM_STITCHER = Application.Facility(
|
||||
|
@ -516,12 +516,12 @@ class _RoiBase(Application, FrameMixin):
|
|||
family = 'insar'
|
||||
## Define Class parameters in this list
|
||||
parameter_list = (SENSOR_NAME,
|
||||
MASTER_SENSOR_NAME,
|
||||
SLAVE_SENSOR_NAME,
|
||||
REFERENCE_SENSOR_NAME,
|
||||
SECONDARY_SENSOR_NAME,
|
||||
FILTER_STRENGTH,
|
||||
CORRELATION_METHOD,
|
||||
MASTER_DOPPLER_METHOD,
|
||||
SLAVE_DOPPLER_METHOD,
|
||||
REFERENCE_DOPPLER_METHOD,
|
||||
SECONDARY_DOPPLER_METHOD,
|
||||
UNWRAPPER_NAME,
|
||||
DO_UNWRAP,
|
||||
DO_UNWRAP_2STAGE,
|
||||
|
@ -564,8 +564,8 @@ class _RoiBase(Application, FrameMixin):
|
|||
DISPERSIVE_FILTER_MASK_TYPE,
|
||||
DISPERSIVE_FILTER_COHERENCE_THRESHOLD)
|
||||
|
||||
facility_list = (MASTER,
|
||||
SLAVE,
|
||||
facility_list = (REFERENCE,
|
||||
SECONDARY,
|
||||
DEM_STITCHER,
|
||||
RUN_UNWRAPPER,
|
||||
RUN_UNWRAP_2STAGE,
|
||||
|
@ -729,7 +729,7 @@ class _RoiBase(Application, FrameMixin):
|
|||
self.runTopo = StripmapProc.createTopo(self)
|
||||
self.runGeo2rdr = StripmapProc.createGeo2rdr(self)
|
||||
self.runResampleSlc = StripmapProc.createResampleSlc(self)
|
||||
self.runRefineSlaveTiming = StripmapProc.createRefineSlaveTiming(self)
|
||||
self.runRefineSecondaryTiming = StripmapProc.createRefineSecondaryTiming(self)
|
||||
self.runDenseOffsets = StripmapProc.createDenseOffsets(self)
|
||||
self.runRubbersheetRange = StripmapProc.createRubbersheetRange(self) #Modified by V. Brancato 10.07.2019
|
||||
self.runRubbersheetAzimuth =StripmapProc.createRubbersheetAzimuth(self) #Modified by V. Brancato 10.07.2019
|
||||
|
@ -752,7 +752,7 @@ class _RoiBase(Application, FrameMixin):
|
|||
self.step('preprocess',
|
||||
func=self.runPreprocessor,
|
||||
doc=(
|
||||
"""Preprocess the master and slave sensor data to raw images"""
|
||||
"""Preprocess the reference and secondary sensor data to raw images"""
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -776,7 +776,7 @@ class _RoiBase(Application, FrameMixin):
|
|||
self.step('coarse_resample', func=self.runResampleSlc,
|
||||
args=('coarse',))
|
||||
|
||||
self.step('misregistration', func=self.runRefineSlaveTiming)
|
||||
self.step('misregistration', func=self.runRefineSecondaryTiming)
|
||||
|
||||
self.step('refined_resample', func=self.runResampleSlc,
|
||||
args=('refined',))
|
||||
|
@ -856,7 +856,7 @@ class _RoiBase(Application, FrameMixin):
|
|||
self.runResampleSlc('coarse')
|
||||
|
||||
# refine geometry offsets using offsets computed by cross correlation
|
||||
self.runRefineSlaveTiming()
|
||||
self.runRefineSecondaryTiming()
|
||||
|
||||
# resampling using refined offsets
|
||||
self.runResampleSlc('refined')
|
||||
|
@ -966,7 +966,7 @@ class Insar(_RoiBase):
|
|||
self.runResampleSlc()
|
||||
#self.runResamp_only()
|
||||
|
||||
self.runRefineSlaveTiming()
|
||||
self.runRefineSecondaryTiming()
|
||||
|
||||
#self.insar.topoIntImage=self.insar.resampOnlyImage
|
||||
#self.runTopo()
|
||||
|
|
|
@ -535,24 +535,24 @@ ION_NUMBER_RANGE_LOOKS0 = Application.Parameter('ION_numberRangeLooks0',
|
|||
#####################################################################
|
||||
|
||||
#Facility declarations
|
||||
MASTER = Application.Facility(
|
||||
'master',
|
||||
public_name='Master',
|
||||
REFERENCE = Application.Facility(
|
||||
'reference',
|
||||
public_name='Reference',
|
||||
module='isceobj.Sensor.TOPS',
|
||||
factory='createSensor',
|
||||
args=(SENSOR_NAME, 'master'),
|
||||
args=(SENSOR_NAME, 'reference'),
|
||||
mandatory=True,
|
||||
doc="Master raw data component"
|
||||
doc="Reference raw data component"
|
||||
)
|
||||
|
||||
SLAVE = Application.Facility(
|
||||
'slave',
|
||||
public_name='Slave',
|
||||
SECONDARY = Application.Facility(
|
||||
'secondary',
|
||||
public_name='Secondary',
|
||||
module='isceobj.Sensor.TOPS',
|
||||
factory='createSensor',
|
||||
args=(SENSOR_NAME,'slave'),
|
||||
args=(SENSOR_NAME,'secondary'),
|
||||
mandatory=True,
|
||||
doc="Slave raw data component"
|
||||
doc="Secondary raw data component"
|
||||
)
|
||||
|
||||
DEM_STITCHER = Application.Facility(
|
||||
|
@ -665,8 +665,8 @@ class TopsInSAR(Application):
|
|||
########################################################
|
||||
)
|
||||
|
||||
facility_list = (MASTER,
|
||||
SLAVE,
|
||||
facility_list = (REFERENCE,
|
||||
SECONDARY,
|
||||
DEM_STITCHER,
|
||||
RUN_UNWRAPPER,
|
||||
RUN_UNWRAP_2STAGE,
|
||||
|
@ -858,7 +858,7 @@ class TopsInSAR(Application):
|
|||
self.step('preprocess',
|
||||
func=self.runPreprocessor,
|
||||
doc=(
|
||||
"""Preprocess the master and slave sensor data to raw images"""
|
||||
"""Preprocess the reference and secondary sensor data to raw images"""
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -901,7 +901,7 @@ class TopsInSAR(Application):
|
|||
###Estimate fine offsets
|
||||
self.step('fineoffsets', func=self.runFineOffsets)
|
||||
|
||||
###Resample slave bursts
|
||||
###Resample secondary bursts
|
||||
self.step('fineresamp', func=self.runFineResamp)
|
||||
|
||||
###calculate ionospheric phase
|
||||
|
@ -986,7 +986,7 @@ class TopsInSAR(Application):
|
|||
###Estimate fine offsets
|
||||
self.runFineOffsets()
|
||||
|
||||
###Resample slave bursts
|
||||
###Resample secondary bursts
|
||||
self.runFineResamp()
|
||||
|
||||
###calculate ionospheric phase
|
||||
|
|
|
@ -108,4 +108,4 @@ if __name__ == "__main__":
|
|||
import sys
|
||||
ds = Stitcher('wbdstitcher')
|
||||
ds.configure()
|
||||
ds.run()
|
||||
ds.run()
|
||||
|
|
|
@ -11,19 +11,19 @@ from iscesys.DateTimeUtil.DateTimeUtil import DateTimeUtil as DTU
|
|||
from iscesys.Compatibility import Compatibility
|
||||
|
||||
|
||||
MASTER_DATE = Component.Parameter('masterDate',
|
||||
public_name='master date',
|
||||
REFERENCE_DATE = Component.Parameter('referenceDate',
|
||||
public_name='reference date',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=True,
|
||||
doc='master acquistion date')
|
||||
doc='reference acquistion date')
|
||||
|
||||
SLAVE_DATE = Component.Parameter('slaveDate',
|
||||
public_name='slave date',
|
||||
SECONDARY_DATE = Component.Parameter('secondaryDate',
|
||||
public_name='secondary date',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=True,
|
||||
doc='slave acquistion date')
|
||||
doc='secondary acquistion date')
|
||||
|
||||
MODE_COMBINATION = Component.Parameter('modeCombination',
|
||||
public_name='mode combination',
|
||||
|
@ -32,21 +32,21 @@ MODE_COMBINATION = Component.Parameter('modeCombination',
|
|||
mandatory=True,
|
||||
doc='mode combination')
|
||||
|
||||
MASTER_FRAMES = Component.Parameter('masterFrames',
|
||||
public_name = 'master frames',
|
||||
REFERENCE_FRAMES = Component.Parameter('referenceFrames',
|
||||
public_name = 'reference frames',
|
||||
default = None,
|
||||
type=str,
|
||||
container=list,
|
||||
mandatory=False,
|
||||
doc = 'master frames to process')
|
||||
doc = 'reference frames to process')
|
||||
|
||||
SLAVE_FRAMES = Component.Parameter('slaveFrames',
|
||||
public_name = 'slave frames',
|
||||
SECONDARY_FRAMES = Component.Parameter('secondaryFrames',
|
||||
public_name = 'secondary frames',
|
||||
default = None,
|
||||
type=str,
|
||||
container=list,
|
||||
mandatory=False,
|
||||
doc = 'slave frames to process')
|
||||
doc = 'secondary frames to process')
|
||||
|
||||
STARTING_SWATH = Component.Parameter('startingSwath',
|
||||
public_name='starting swath',
|
||||
|
@ -76,135 +76,135 @@ BURST_SYNCHRONIZATION = Component.Parameter('burstSynchronization',
|
|||
mandatory = False,
|
||||
doc = 'average burst synchronization of all swaths and frames in percentage')
|
||||
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('swathRangeOffsetGeometricalMaster',
|
||||
public_name = 'swath range offset from geometry master',
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('swathRangeOffsetGeometricalReference',
|
||||
public_name = 'swath range offset from geometry reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath range offset from geometry master')
|
||||
doc = 'swath range offset from geometry reference')
|
||||
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('swathAzimuthOffsetGeometricalMaster',
|
||||
public_name = 'swath azimuth offset from geometry master',
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('swathAzimuthOffsetGeometricalReference',
|
||||
public_name = 'swath azimuth offset from geometry reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath azimuth offset from geometry master')
|
||||
doc = 'swath azimuth offset from geometry reference')
|
||||
|
||||
SWATH_RANGE_OFFSET_MATCHING_MASTER = Component.Parameter('swathRangeOffsetMatchingMaster',
|
||||
public_name = 'swath range offset from matching master',
|
||||
SWATH_RANGE_OFFSET_MATCHING_REFERENCE = Component.Parameter('swathRangeOffsetMatchingReference',
|
||||
public_name = 'swath range offset from matching reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath range offset from matching master')
|
||||
doc = 'swath range offset from matching reference')
|
||||
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_MASTER = Component.Parameter('swathAzimuthOffsetMatchingMaster',
|
||||
public_name = 'swath azimuth offset from matching master',
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_REFERENCE = Component.Parameter('swathAzimuthOffsetMatchingReference',
|
||||
public_name = 'swath azimuth offset from matching reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath azimuth offset from matching master')
|
||||
doc = 'swath azimuth offset from matching reference')
|
||||
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('swathRangeOffsetGeometricalSlave',
|
||||
public_name = 'swath range offset from geometry slave',
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('swathRangeOffsetGeometricalSecondary',
|
||||
public_name = 'swath range offset from geometry secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath range offset from geometry slave')
|
||||
doc = 'swath range offset from geometry secondary')
|
||||
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('swathAzimuthOffsetGeometricalSlave',
|
||||
public_name = 'swath azimuth offset from geometry slave',
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('swathAzimuthOffsetGeometricalSecondary',
|
||||
public_name = 'swath azimuth offset from geometry secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath azimuth offset from geometry slave')
|
||||
doc = 'swath azimuth offset from geometry secondary')
|
||||
|
||||
SWATH_RANGE_OFFSET_MATCHING_SLAVE = Component.Parameter('swathRangeOffsetMatchingSlave',
|
||||
public_name = 'swath range offset from matching slave',
|
||||
SWATH_RANGE_OFFSET_MATCHING_SECONDARY = Component.Parameter('swathRangeOffsetMatchingSecondary',
|
||||
public_name = 'swath range offset from matching secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath range offset from matching slave')
|
||||
doc = 'swath range offset from matching secondary')
|
||||
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_SLAVE = Component.Parameter('swathAzimuthOffsetMatchingSlave',
|
||||
public_name = 'swath azimuth offset from matching slave',
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_SECONDARY = Component.Parameter('swathAzimuthOffsetMatchingSecondary',
|
||||
public_name = 'swath azimuth offset from matching secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath azimuth offset from matching slave')
|
||||
doc = 'swath azimuth offset from matching secondary')
|
||||
|
||||
|
||||
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('frameRangeOffsetGeometricalMaster',
|
||||
public_name = 'frame range offset from geometry master',
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('frameRangeOffsetGeometricalReference',
|
||||
public_name = 'frame range offset from geometry reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame range offset from geometry master')
|
||||
doc = 'frame range offset from geometry reference')
|
||||
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('frameAzimuthOffsetGeometricalMaster',
|
||||
public_name = 'frame azimuth offset from geometry master',
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('frameAzimuthOffsetGeometricalReference',
|
||||
public_name = 'frame azimuth offset from geometry reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame azimuth offset from geometry master')
|
||||
doc = 'frame azimuth offset from geometry reference')
|
||||
|
||||
FRAME_RANGE_OFFSET_MATCHING_MASTER = Component.Parameter('frameRangeOffsetMatchingMaster',
|
||||
public_name = 'frame range offset from matching master',
|
||||
FRAME_RANGE_OFFSET_MATCHING_REFERENCE = Component.Parameter('frameRangeOffsetMatchingReference',
|
||||
public_name = 'frame range offset from matching reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame range offset from matching master')
|
||||
doc = 'frame range offset from matching reference')
|
||||
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_MASTER = Component.Parameter('frameAzimuthOffsetMatchingMaster',
|
||||
public_name = 'frame azimuth offset from matching master',
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_REFERENCE = Component.Parameter('frameAzimuthOffsetMatchingReference',
|
||||
public_name = 'frame azimuth offset from matching reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame azimuth offset from matching master')
|
||||
doc = 'frame azimuth offset from matching reference')
|
||||
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('frameRangeOffsetGeometricalSlave',
|
||||
public_name = 'frame range offset from geometry slave',
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('frameRangeOffsetGeometricalSecondary',
|
||||
public_name = 'frame range offset from geometry secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame range offset from geometry slave')
|
||||
doc = 'frame range offset from geometry secondary')
|
||||
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('frameAzimuthOffsetGeometricalSlave',
|
||||
public_name = 'frame azimuth offset from geometry slave',
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('frameAzimuthOffsetGeometricalSecondary',
|
||||
public_name = 'frame azimuth offset from geometry secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame azimuth offset from geometry slave')
|
||||
doc = 'frame azimuth offset from geometry secondary')
|
||||
|
||||
FRAME_RANGE_OFFSET_MATCHING_SLAVE = Component.Parameter('frameRangeOffsetMatchingSlave',
|
||||
public_name = 'frame range offset from matching slave',
|
||||
FRAME_RANGE_OFFSET_MATCHING_SECONDARY = Component.Parameter('frameRangeOffsetMatchingSecondary',
|
||||
public_name = 'frame range offset from matching secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame range offset from matching slave')
|
||||
doc = 'frame range offset from matching secondary')
|
||||
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_SLAVE = Component.Parameter('frameAzimuthOffsetMatchingSlave',
|
||||
public_name = 'frame azimuth offset from matching slave',
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_SECONDARY = Component.Parameter('frameAzimuthOffsetMatchingSecondary',
|
||||
public_name = 'frame azimuth offset from matching secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame azimuth offset from matching slave')
|
||||
doc = 'frame azimuth offset from matching secondary')
|
||||
|
||||
NUMBER_RANGE_LOOKS1 = Component.Parameter('numberRangeLooks1',
|
||||
public_name='number of range looks 1',
|
||||
|
@ -279,75 +279,75 @@ RADAR_DEM_AFFINE_TRANSFORM = Component.Parameter('radarDemAffineTransform',
|
|||
doc = 'radar dem affine transform parameters')
|
||||
|
||||
|
||||
MASTER_SLC = Component.Parameter('masterSlc',
|
||||
public_name='master slc',
|
||||
REFERENCE_SLC = Component.Parameter('referenceSlc',
|
||||
public_name='reference slc',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='master slc file')
|
||||
doc='reference slc file')
|
||||
|
||||
SLAVE_SLC = Component.Parameter('slaveSlc',
|
||||
public_name='slave slc',
|
||||
SECONDARY_SLC = Component.Parameter('secondarySlc',
|
||||
public_name='secondary slc',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='slave slc file')
|
||||
doc='secondary slc file')
|
||||
|
||||
MASTER_SWATH_OFFSET = Component.Parameter('masterSwathOffset',
|
||||
public_name='master swath offset',
|
||||
REFERENCE_SWATH_OFFSET = Component.Parameter('referenceSwathOffset',
|
||||
public_name='reference swath offset',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='master swath offset file')
|
||||
doc='reference swath offset file')
|
||||
|
||||
SLAVE_SWATH_OFFSET = Component.Parameter('slaveSwathOffset',
|
||||
public_name='slave swath offset',
|
||||
SECONDARY_SWATH_OFFSET = Component.Parameter('secondarySwathOffset',
|
||||
public_name='secondary swath offset',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='slave swath offset file')
|
||||
doc='secondary swath offset file')
|
||||
|
||||
MASTER_FRAME_OFFSET = Component.Parameter('masterFrameOffset',
|
||||
public_name='master frame offset',
|
||||
REFERENCE_FRAME_OFFSET = Component.Parameter('referenceFrameOffset',
|
||||
public_name='reference frame offset',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='master frame offset file')
|
||||
doc='reference frame offset file')
|
||||
|
||||
SLAVE_FRAME_OFFSET = Component.Parameter('slaveFrameOffset',
|
||||
public_name='slave frame offset',
|
||||
SECONDARY_FRAME_OFFSET = Component.Parameter('secondaryFrameOffset',
|
||||
public_name='secondary frame offset',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='slave frame offset file')
|
||||
doc='secondary frame offset file')
|
||||
|
||||
MASTER_FRAME_PARAMETER = Component.Parameter('masterFrameParameter',
|
||||
public_name='master frame parameter',
|
||||
REFERENCE_FRAME_PARAMETER = Component.Parameter('referenceFrameParameter',
|
||||
public_name='reference frame parameter',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='master frame parameter file')
|
||||
doc='reference frame parameter file')
|
||||
|
||||
SLAVE_FRAME_PARAMETER = Component.Parameter('slaveFrameParameter',
|
||||
public_name='slave frame parameter',
|
||||
SECONDARY_FRAME_PARAMETER = Component.Parameter('secondaryFrameParameter',
|
||||
public_name='secondary frame parameter',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='slave frame parameter file')
|
||||
doc='secondary frame parameter file')
|
||||
|
||||
MASTER_TRACK_PARAMETER = Component.Parameter('masterTrackParameter',
|
||||
public_name='master track parameter',
|
||||
REFERENCE_TRACK_PARAMETER = Component.Parameter('referenceTrackParameter',
|
||||
public_name='reference track parameter',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='master track parameter file')
|
||||
doc='reference track parameter file')
|
||||
|
||||
SLAVE_TRACK_PARAMETER = Component.Parameter('slaveTrackParameter',
|
||||
public_name='slave track parameter',
|
||||
SECONDARY_TRACK_PARAMETER = Component.Parameter('secondaryTrackParameter',
|
||||
public_name='secondary track parameter',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='slave track parameter file')
|
||||
doc='secondary track parameter file')
|
||||
|
||||
DEM = Component.Parameter('dem',
|
||||
public_name='dem for coregistration',
|
||||
|
@ -618,12 +618,12 @@ OFFSET_IMAGE_LEFTOFFSET = Component.Parameter('offsetImageLeftoffset',
|
|||
mandatory=False,
|
||||
doc="offset image left offset in samples")
|
||||
|
||||
SLAVE_SLC_COREGISTERED = Component.Parameter('slaveSlcCoregistered',
|
||||
public_name='coregistered slave slc',
|
||||
SECONDARY_SLC_COREGISTERED = Component.Parameter('secondarySlcCoregistered',
|
||||
public_name='coregistered secondary slc',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='coregistered slave slc file')
|
||||
doc='coregistered secondary slc file')
|
||||
|
||||
DENSE_OFFSET = Component.Parameter('denseOffset',
|
||||
public_name='dense offset',
|
||||
|
@ -681,31 +681,31 @@ class Alos2Proc(Component):
|
|||
to modify and return their values.
|
||||
"""
|
||||
|
||||
parameter_list = (MASTER_DATE,
|
||||
SLAVE_DATE,
|
||||
parameter_list = (REFERENCE_DATE,
|
||||
SECONDARY_DATE,
|
||||
MODE_COMBINATION,
|
||||
MASTER_FRAMES,
|
||||
SLAVE_FRAMES,
|
||||
REFERENCE_FRAMES,
|
||||
SECONDARY_FRAMES,
|
||||
STARTING_SWATH,
|
||||
ENDING_SWATH,
|
||||
BURST_UNSYNCHRONIZED_TIME,
|
||||
BURST_SYNCHRONIZATION,
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_MASTER,
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_MASTER,
|
||||
SWATH_RANGE_OFFSET_MATCHING_MASTER,
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_MASTER,
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_SLAVE,
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE,
|
||||
SWATH_RANGE_OFFSET_MATCHING_SLAVE,
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_SLAVE,
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_MASTER,
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_MASTER,
|
||||
FRAME_RANGE_OFFSET_MATCHING_MASTER,
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_MASTER,
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_SLAVE,
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE,
|
||||
FRAME_RANGE_OFFSET_MATCHING_SLAVE,
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_SLAVE,
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_REFERENCE,
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE,
|
||||
SWATH_RANGE_OFFSET_MATCHING_REFERENCE,
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_REFERENCE,
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_SECONDARY,
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY,
|
||||
SWATH_RANGE_OFFSET_MATCHING_SECONDARY,
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_SECONDARY,
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_REFERENCE,
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE,
|
||||
FRAME_RANGE_OFFSET_MATCHING_REFERENCE,
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_REFERENCE,
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_SECONDARY,
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY,
|
||||
FRAME_RANGE_OFFSET_MATCHING_SECONDARY,
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_SECONDARY,
|
||||
NUMBER_RANGE_LOOKS1,
|
||||
NUMBER_AZIMUTH_LOOKS1,
|
||||
NUMBER_RANGE_LOOKS2,
|
||||
|
@ -716,16 +716,16 @@ class Alos2Proc(Component):
|
|||
NUMBER_AZIMUTH_LOOKS_ION,
|
||||
SUBBAND_RADAR_WAVLENGTH,
|
||||
RADAR_DEM_AFFINE_TRANSFORM,
|
||||
MASTER_SLC,
|
||||
SLAVE_SLC,
|
||||
MASTER_SWATH_OFFSET,
|
||||
SLAVE_SWATH_OFFSET,
|
||||
MASTER_FRAME_OFFSET,
|
||||
SLAVE_FRAME_OFFSET,
|
||||
MASTER_FRAME_PARAMETER,
|
||||
SLAVE_FRAME_PARAMETER,
|
||||
MASTER_TRACK_PARAMETER,
|
||||
SLAVE_TRACK_PARAMETER,
|
||||
REFERENCE_SLC,
|
||||
SECONDARY_SLC,
|
||||
REFERENCE_SWATH_OFFSET,
|
||||
SECONDARY_SWATH_OFFSET,
|
||||
REFERENCE_FRAME_OFFSET,
|
||||
SECONDARY_FRAME_OFFSET,
|
||||
REFERENCE_FRAME_PARAMETER,
|
||||
SECONDARY_FRAME_PARAMETER,
|
||||
REFERENCE_TRACK_PARAMETER,
|
||||
SECONDARY_TRACK_PARAMETER,
|
||||
DEM,
|
||||
DEM_GEO,
|
||||
WBD,
|
||||
|
@ -764,7 +764,7 @@ class Alos2Proc(Component):
|
|||
GEO_ION,
|
||||
OFFSET_IMAGE_TOPOFFSET,
|
||||
OFFSET_IMAGE_LEFTOFFSET,
|
||||
SLAVE_SLC_COREGISTERED,
|
||||
SECONDARY_SLC_COREGISTERED,
|
||||
DENSE_OFFSET,
|
||||
DENSE_OFFSET_SNR,
|
||||
DENSE_OFFSET_COV,
|
||||
|
@ -785,12 +785,12 @@ class Alos2Proc(Component):
|
|||
self.procDoc = procDoc
|
||||
return None
|
||||
|
||||
def setFilename(self, masterDate, slaveDate, nrlks1, nalks1, nrlks2, nalks2):
|
||||
def setFilename(self, referenceDate, secondaryDate, nrlks1, nalks1, nrlks2, nalks2):
|
||||
|
||||
# if masterDate == None:
|
||||
# masterDate = self.masterDate
|
||||
# if slaveDate == None:
|
||||
# slaveDate = self.slaveDate
|
||||
# if referenceDate == None:
|
||||
# referenceDate = self.referenceDate
|
||||
# if secondaryDate == None:
|
||||
# secondaryDate = self.secondaryDate
|
||||
# if nrlks1 == None:
|
||||
# nrlks1 = self.numberRangeLooks1
|
||||
# if nalks1 == None:
|
||||
|
@ -800,20 +800,20 @@ class Alos2Proc(Component):
|
|||
# if nalks2 == None:
|
||||
# nalks2 = self.numberAzimuthLooks2
|
||||
|
||||
ms = masterDate + '-' + slaveDate
|
||||
ms = referenceDate + '-' + secondaryDate
|
||||
ml1 = '_{}rlks_{}alks'.format(nrlks1, nalks1)
|
||||
ml2 = '_{}rlks_{}alks'.format(nrlks1*nrlks2, nalks1*nalks2)
|
||||
|
||||
self.masterSlc = masterDate + '.slc'
|
||||
self.slaveSlc = slaveDate + '.slc'
|
||||
self.masterSwathOffset = 'swath_offset_' + masterDate + '.txt'
|
||||
self.slaveSwathOffset = 'swath_offset_' + slaveDate + '.txt'
|
||||
self.masterFrameOffset = 'frame_offset_' + masterDate + '.txt'
|
||||
self.slaveFrameOffset = 'frame_offset_' + slaveDate + '.txt'
|
||||
self.masterFrameParameter = masterDate + '.frame.xml'
|
||||
self.slaveFrameParameter = slaveDate + '.frame.xml'
|
||||
self.masterTrackParameter = masterDate + '.track.xml'
|
||||
self.slaveTrackParameter = slaveDate + '.track.xml'
|
||||
self.referenceSlc = referenceDate + '.slc'
|
||||
self.secondarySlc = secondaryDate + '.slc'
|
||||
self.referenceSwathOffset = 'swath_offset_' + referenceDate + '.txt'
|
||||
self.secondarySwathOffset = 'swath_offset_' + secondaryDate + '.txt'
|
||||
self.referenceFrameOffset = 'frame_offset_' + referenceDate + '.txt'
|
||||
self.secondaryFrameOffset = 'frame_offset_' + secondaryDate + '.txt'
|
||||
self.referenceFrameParameter = referenceDate + '.frame.xml'
|
||||
self.secondaryFrameParameter = secondaryDate + '.frame.xml'
|
||||
self.referenceTrackParameter = referenceDate + '.track.xml'
|
||||
self.secondaryTrackParameter = secondaryDate + '.track.xml'
|
||||
#self.dem =
|
||||
#self.demGeo =
|
||||
#self.wbd =
|
||||
|
@ -850,7 +850,7 @@ class Alos2Proc(Component):
|
|||
self.geoCoherence = ms + ml2 + '.cor.geo'
|
||||
self.geoLos = ms + ml2 + '.los.geo'
|
||||
#dense offset field
|
||||
self.slaveSlcCoregistered = slaveDate + '_coreg.slc'
|
||||
self.secondarySlcCoregistered = secondaryDate + '_coreg.slc'
|
||||
self.denseOffset = ms + '_denseoffset.off'
|
||||
self.denseOffsetSnr = ms + '_denseoffset.snr'
|
||||
self.denseOffsetCov = ms + '_denseoffset.cov'
|
||||
|
@ -891,42 +891,42 @@ class Alos2Proc(Component):
|
|||
return None
|
||||
|
||||
|
||||
def loadTrack(self, master=True):
|
||||
def loadTrack(self, reference=True):
|
||||
'''
|
||||
Load the track using Product Manager.
|
||||
'''
|
||||
if master:
|
||||
track = self.loadProduct(self.masterTrackParameter)
|
||||
if reference:
|
||||
track = self.loadProduct(self.referenceTrackParameter)
|
||||
else:
|
||||
track = self.loadProduct(self.slaveTrackParameter)
|
||||
track = self.loadProduct(self.secondaryTrackParameter)
|
||||
|
||||
track.frames = []
|
||||
for i, frameNumber in enumerate(self.masterFrames):
|
||||
for i, frameNumber in enumerate(self.referenceFrames):
|
||||
os.chdir('f{}_{}'.format(i+1, frameNumber))
|
||||
if master:
|
||||
track.frames.append(self.loadProduct(self.masterFrameParameter))
|
||||
if reference:
|
||||
track.frames.append(self.loadProduct(self.referenceFrameParameter))
|
||||
else:
|
||||
track.frames.append(self.loadProduct(self.slaveFrameParameter))
|
||||
track.frames.append(self.loadProduct(self.secondaryFrameParameter))
|
||||
os.chdir('../')
|
||||
|
||||
return track
|
||||
|
||||
|
||||
def saveTrack(self, track, master=True):
|
||||
def saveTrack(self, track, reference=True):
|
||||
'''
|
||||
Save the track to XML files using Product Manager.
|
||||
'''
|
||||
if master:
|
||||
self.saveProduct(track, self.masterTrackParameter)
|
||||
if reference:
|
||||
self.saveProduct(track, self.referenceTrackParameter)
|
||||
else:
|
||||
self.saveProduct(track, self.slaveTrackParameter)
|
||||
self.saveProduct(track, self.secondaryTrackParameter)
|
||||
|
||||
for i, frameNumber in enumerate(self.masterFrames):
|
||||
for i, frameNumber in enumerate(self.referenceFrames):
|
||||
os.chdir('f{}_{}'.format(i+1, frameNumber))
|
||||
if master:
|
||||
self.saveProduct(track.frames[i], self.masterFrameParameter)
|
||||
if reference:
|
||||
self.saveProduct(track.frames[i], self.referenceFrameParameter)
|
||||
else:
|
||||
self.saveProduct(track.frames[i], self.slaveFrameParameter)
|
||||
self.saveProduct(track.frames[i], self.secondaryFrameParameter)
|
||||
os.chdir('../')
|
||||
|
||||
return None
|
||||
|
|
|
@ -154,11 +154,11 @@ def cal_coherence_1(inf, win=5):
|
|||
|
||||
|
||||
|
||||
def computeOffsetFromOrbit(masterSwath, masterTrack, slaveSwath, slaveTrack, masterSample, masterLine):
|
||||
def computeOffsetFromOrbit(referenceSwath, referenceTrack, secondarySwath, secondaryTrack, referenceSample, referenceLine):
|
||||
'''
|
||||
compute range and azimuth offsets using orbit. all range/azimuth indexes start with 0
|
||||
masterSample: master sample where offset is computed, no need to be integer
|
||||
masterLine: master line where offset is computed, no need to be integer
|
||||
referenceSample: reference sample where offset is computed, no need to be integer
|
||||
referenceLine: reference line where offset is computed, no need to be integer
|
||||
'''
|
||||
import datetime
|
||||
|
||||
|
@ -166,14 +166,14 @@ def computeOffsetFromOrbit(masterSwath, masterTrack, slaveSwath, slaveTrack, mas
|
|||
|
||||
#compute a pair of range and azimuth offsets using geometry
|
||||
#using Piyush's code for computing range and azimuth offsets
|
||||
midRange = masterSwath.startingRange + masterSwath.rangePixelSize * masterSample
|
||||
midSensingStart = masterSwath.sensingStart + datetime.timedelta(seconds = masterLine / masterSwath.prf)
|
||||
llh = masterTrack.orbit.rdr2geo(midSensingStart, midRange, side=pointingDirection[masterTrack.pointingDirection])
|
||||
slvaz, slvrng = slaveTrack.orbit.geo2rdr(llh, side=pointingDirection[masterTrack.pointingDirection])
|
||||
midRange = referenceSwath.startingRange + referenceSwath.rangePixelSize * referenceSample
|
||||
midSensingStart = referenceSwath.sensingStart + datetime.timedelta(seconds = referenceLine / referenceSwath.prf)
|
||||
llh = referenceTrack.orbit.rdr2geo(midSensingStart, midRange, side=pointingDirection[referenceTrack.pointingDirection])
|
||||
slvaz, slvrng = secondaryTrack.orbit.geo2rdr(llh, side=pointingDirection[referenceTrack.pointingDirection])
|
||||
###Translate to offsets
|
||||
#at this point, slave range pixel size and prf should be the same as those of master
|
||||
rgoff = ((slvrng - slaveSwath.startingRange) / masterSwath.rangePixelSize) - masterSample
|
||||
azoff = ((slvaz - slaveSwath.sensingStart).total_seconds() * masterSwath.prf) - masterLine
|
||||
#at this point, secondary range pixel size and prf should be the same as those of reference
|
||||
rgoff = ((slvrng - secondarySwath.startingRange) / referenceSwath.rangePixelSize) - referenceSample
|
||||
azoff = ((slvaz - secondarySwath.sensingStart).total_seconds() * referenceSwath.prf) - referenceLine
|
||||
|
||||
return (rgoff, azoff)
|
||||
|
||||
|
@ -589,7 +589,7 @@ def cal_coherence(inf, win=5, edge=0):
|
|||
'''
|
||||
compute coherence uisng only interferogram (phase).
|
||||
This routine still follows the regular equation for computing coherence,
|
||||
but assumes the amplitudes of master and slave are one, so that coherence
|
||||
but assumes the amplitudes of reference and secondary are one, so that coherence
|
||||
can be computed using phase only.
|
||||
|
||||
inf: interferogram
|
||||
|
@ -974,9 +974,9 @@ def mosaicBurstAmplitude(swath, burstPrefix, outputFile, numberOfLooksThreshold=
|
|||
create_xml(outputFile, swath.numberOfSamples, swath.numberOfLines, 'float')
|
||||
|
||||
|
||||
def resampleBursts(masterSwath, slaveSwath,
|
||||
masterBurstDir, slaveBurstDir, slaveBurstResampledDir, interferogramDir,
|
||||
masterBurstPrefix, slaveBurstPrefix, slaveBurstResampledPrefix, interferogramPrefix,
|
||||
def resampleBursts(referenceSwath, secondarySwath,
|
||||
referenceBurstDir, secondaryBurstDir, secondaryBurstResampledDir, interferogramDir,
|
||||
referenceBurstPrefix, secondaryBurstPrefix, secondaryBurstResampledPrefix, interferogramPrefix,
|
||||
rangeOffset, azimuthOffset, rangeOffsetResidual=0, azimuthOffsetResidual=0):
|
||||
|
||||
import os
|
||||
|
@ -985,119 +985,119 @@ def resampleBursts(masterSwath, slaveSwath,
|
|||
import numpy.matlib
|
||||
from contrib.alos2proc.alos2proc import resamp
|
||||
|
||||
os.makedirs(slaveBurstResampledDir, exist_ok=True)
|
||||
os.makedirs(secondaryBurstResampledDir, exist_ok=True)
|
||||
os.makedirs(interferogramDir, exist_ok=True)
|
||||
|
||||
#get burst file names
|
||||
masterBurstSlc = [masterBurstPrefix+'_%02d.slc'%(i+1) for i in range(masterSwath.numberOfBursts)]
|
||||
slaveBurstSlc = [slaveBurstPrefix+'_%02d.slc'%(i+1) for i in range(slaveSwath.numberOfBursts)]
|
||||
slaveBurstSlcResampled = [slaveBurstPrefix+'_%02d.slc'%(i+1) for i in range(masterSwath.numberOfBursts)]
|
||||
interferogram = [interferogramPrefix+'_%02d.int'%(i+1) for i in range(masterSwath.numberOfBursts)]
|
||||
referenceBurstSlc = [referenceBurstPrefix+'_%02d.slc'%(i+1) for i in range(referenceSwath.numberOfBursts)]
|
||||
secondaryBurstSlc = [secondaryBurstPrefix+'_%02d.slc'%(i+1) for i in range(secondarySwath.numberOfBursts)]
|
||||
secondaryBurstSlcResampled = [secondaryBurstPrefix+'_%02d.slc'%(i+1) for i in range(referenceSwath.numberOfBursts)]
|
||||
interferogram = [interferogramPrefix+'_%02d.int'%(i+1) for i in range(referenceSwath.numberOfBursts)]
|
||||
|
||||
length = masterSwath.burstSlcNumberOfLines
|
||||
width = masterSwath.burstSlcNumberOfSamples
|
||||
lengthSlave = slaveSwath.burstSlcNumberOfLines
|
||||
widthSlave = slaveSwath.burstSlcNumberOfSamples
|
||||
length = referenceSwath.burstSlcNumberOfLines
|
||||
width = referenceSwath.burstSlcNumberOfSamples
|
||||
lengthSecondary = secondarySwath.burstSlcNumberOfLines
|
||||
widthSecondary = secondarySwath.burstSlcNumberOfSamples
|
||||
|
||||
#slave burst slc start times
|
||||
slaveBurstStartTimesSlc = [slaveSwath.firstBurstSlcStartTime + \
|
||||
datetime.timedelta(seconds=slaveSwath.burstSlcFirstLineOffsets[i]*slaveSwath.azimuthLineInterval) \
|
||||
for i in range(slaveSwath.numberOfBursts)]
|
||||
#slave burst raw start times
|
||||
slaveBurstStartTimesRaw = [slaveSwath.firstBurstRawStartTime + \
|
||||
datetime.timedelta(seconds=i*slaveSwath.burstCycleLength/slaveSwath.prf) \
|
||||
for i in range(slaveSwath.numberOfBursts)]
|
||||
#secondary burst slc start times
|
||||
secondaryBurstStartTimesSlc = [secondarySwath.firstBurstSlcStartTime + \
|
||||
datetime.timedelta(seconds=secondarySwath.burstSlcFirstLineOffsets[i]*secondarySwath.azimuthLineInterval) \
|
||||
for i in range(secondarySwath.numberOfBursts)]
|
||||
#secondary burst raw start times
|
||||
secondaryBurstStartTimesRaw = [secondarySwath.firstBurstRawStartTime + \
|
||||
datetime.timedelta(seconds=i*secondarySwath.burstCycleLength/secondarySwath.prf) \
|
||||
for i in range(secondarySwath.numberOfBursts)]
|
||||
|
||||
|
||||
for i in range(masterSwath.numberOfBursts):
|
||||
for i in range(referenceSwath.numberOfBursts):
|
||||
|
||||
##########################################################################
|
||||
# 1. get offsets and corresponding slave burst
|
||||
# 1. get offsets and corresponding secondary burst
|
||||
##########################################################################
|
||||
#range offset
|
||||
with open(rangeOffset, 'rb') as f:
|
||||
f.seek(masterSwath.burstSlcFirstLineOffsets[i] * width * np.dtype(np.float32).itemsize, 0)
|
||||
f.seek(referenceSwath.burstSlcFirstLineOffsets[i] * width * np.dtype(np.float32).itemsize, 0)
|
||||
rgoffBurst = np.fromfile(f, dtype=np.float32, count=length*width).reshape(length,width)
|
||||
if type(rangeOffsetResidual) == np.ndarray:
|
||||
residual = rangeOffsetResidual[0+masterSwath.burstSlcFirstLineOffsets[i]:length+masterSwath.burstSlcFirstLineOffsets[i],:]
|
||||
residual = rangeOffsetResidual[0+referenceSwath.burstSlcFirstLineOffsets[i]:length+referenceSwath.burstSlcFirstLineOffsets[i],:]
|
||||
rgoffBurst[np.nonzero(rgoffBurst!=-999999.0)] += residual[np.nonzero(rgoffBurst!=-999999.0)]
|
||||
else:
|
||||
rgoffBurst[np.nonzero(rgoffBurst!=-999999.0)] += rangeOffsetResidual
|
||||
#azimuth offset
|
||||
with open(azimuthOffset, 'rb') as f:
|
||||
f.seek(masterSwath.burstSlcFirstLineOffsets[i] * width * np.dtype(np.float32).itemsize, 0)
|
||||
f.seek(referenceSwath.burstSlcFirstLineOffsets[i] * width * np.dtype(np.float32).itemsize, 0)
|
||||
azoffBurst = np.fromfile(f, dtype=np.float32, count=length*width).reshape(length,width)
|
||||
if type(azimuthOffsetResidual) == np.ndarray:
|
||||
residual = azimuthOffsetResidual[0+masterSwath.burstSlcFirstLineOffsets[i]:length+masterSwath.burstSlcFirstLineOffsets[i],:]
|
||||
residual = azimuthOffsetResidual[0+referenceSwath.burstSlcFirstLineOffsets[i]:length+referenceSwath.burstSlcFirstLineOffsets[i],:]
|
||||
azoffBurst[np.nonzero(azoffBurst!=-999999.0)] += residual[np.nonzero(azoffBurst!=-999999.0)]
|
||||
else:
|
||||
azoffBurst[np.nonzero(azoffBurst!=-999999.0)] += azimuthOffsetResidual
|
||||
|
||||
#find the corresponding slave burst
|
||||
#find the corresponding secondary burst
|
||||
#get mean offset to use
|
||||
#remove BAD_VALUE = -999999.0 as defined in geo2rdr.f90
|
||||
#single precision is not accurate enough to compute mean
|
||||
azoffBurstMean = np.mean(azoffBurst[np.nonzero(azoffBurst!=-999999.0)], dtype=np.float64)
|
||||
iSlave = -1
|
||||
for j in range(slaveSwath.numberOfBursts):
|
||||
if abs(masterSwath.burstSlcFirstLineOffsets[i] + azoffBurstMean - slaveSwath.burstSlcFirstLineOffsets[j]) < (masterSwath.burstLength / masterSwath.prf * 2.0) / masterSwath.azimuthLineInterval:
|
||||
iSlave = j
|
||||
iSecondary = -1
|
||||
for j in range(secondarySwath.numberOfBursts):
|
||||
if abs(referenceSwath.burstSlcFirstLineOffsets[i] + azoffBurstMean - secondarySwath.burstSlcFirstLineOffsets[j]) < (referenceSwath.burstLength / referenceSwath.prf * 2.0) / referenceSwath.azimuthLineInterval:
|
||||
iSecondary = j
|
||||
break
|
||||
|
||||
#output zero resampled burst/interferogram if no slave burst found
|
||||
if iSlave == -1:
|
||||
print('\nburst pair, master: %2d, slave: no'%(i+1))
|
||||
#output zero resampled burst/interferogram if no secondary burst found
|
||||
if iSecondary == -1:
|
||||
print('\nburst pair, reference: %2d, secondary: no'%(i+1))
|
||||
#output an interferogram with all pixels set to zero
|
||||
os.chdir(interferogramDir)
|
||||
np.zeros((length, width), dtype=np.complex64).astype(np.complex64).tofile(interferogram[i])
|
||||
create_xml(interferogram[i], width, length, 'int')
|
||||
os.chdir('../')
|
||||
#output a resampled slave image with all pixels set to zero
|
||||
os.chdir(slaveBurstResampledDir)
|
||||
np.zeros((length, width), dtype=np.complex64).astype(np.complex64).tofile(slaveBurstSlcResampled[i])
|
||||
create_xml(slaveBurstSlcResampled[i], width, length, 'slc')
|
||||
#output a resampled secondary image with all pixels set to zero
|
||||
os.chdir(secondaryBurstResampledDir)
|
||||
np.zeros((length, width), dtype=np.complex64).astype(np.complex64).tofile(secondaryBurstSlcResampled[i])
|
||||
create_xml(secondaryBurstSlcResampled[i], width, length, 'slc')
|
||||
os.chdir('../')
|
||||
continue
|
||||
else:
|
||||
print('\nburst pair, master: %2d, slave: %3d'%(i+1, iSlave+1))
|
||||
print('\nburst pair, reference: %2d, secondary: %3d'%(i+1, iSecondary+1))
|
||||
|
||||
#adjust azimuth offset accordingly, since original azimuth offset assumes master and slave start with sensingStart
|
||||
azoffBurst -= (slaveSwath.burstSlcFirstLineOffsets[iSlave]-masterSwath.burstSlcFirstLineOffsets[i])
|
||||
#adjust azimuth offset accordingly, since original azimuth offset assumes reference and secondary start with sensingStart
|
||||
azoffBurst -= (secondarySwath.burstSlcFirstLineOffsets[iSecondary]-referenceSwath.burstSlcFirstLineOffsets[i])
|
||||
|
||||
|
||||
##########################################################################
|
||||
# 2. compute deramp and reramp signals
|
||||
##########################################################################
|
||||
cj = np.complex64(1j)
|
||||
tbase = (slaveBurstStartTimesSlc[iSlave] - (slaveBurstStartTimesRaw[iSlave] + \
|
||||
datetime.timedelta(seconds=(slaveSwath.burstLength - 1.0) / 2.0 / slaveSwath.prf))).total_seconds()
|
||||
tbase = (secondaryBurstStartTimesSlc[iSecondary] - (secondaryBurstStartTimesRaw[iSecondary] + \
|
||||
datetime.timedelta(seconds=(secondarySwath.burstLength - 1.0) / 2.0 / secondarySwath.prf))).total_seconds()
|
||||
|
||||
#compute deramp signal
|
||||
index1 = np.matlib.repmat(np.arange(widthSlave), lengthSlave, 1)
|
||||
index2 = np.matlib.repmat(np.arange(lengthSlave).reshape(lengthSlave, 1), 1, widthSlave)
|
||||
ka = slaveSwath.azimuthFmrateVsPixel[3] * index1**3 + slaveSwath.azimuthFmrateVsPixel[2] * index1**2 + \
|
||||
slaveSwath.azimuthFmrateVsPixel[1] * index1 + slaveSwath.azimuthFmrateVsPixel[0]
|
||||
index1 = np.matlib.repmat(np.arange(widthSecondary), lengthSecondary, 1)
|
||||
index2 = np.matlib.repmat(np.arange(lengthSecondary).reshape(lengthSecondary, 1), 1, widthSecondary)
|
||||
ka = secondarySwath.azimuthFmrateVsPixel[3] * index1**3 + secondarySwath.azimuthFmrateVsPixel[2] * index1**2 + \
|
||||
secondarySwath.azimuthFmrateVsPixel[1] * index1 + secondarySwath.azimuthFmrateVsPixel[0]
|
||||
#use the convention that ka > 0
|
||||
ka = -ka
|
||||
t = tbase + index2*slaveSwath.azimuthLineInterval
|
||||
t = tbase + index2*secondarySwath.azimuthLineInterval
|
||||
deramp = np.exp(cj * np.pi * (-ka) * t**2)
|
||||
|
||||
#compute reramp signal
|
||||
index1 = np.matlib.repmat(np.arange(width), length, 1) + rgoffBurst
|
||||
index2 = np.matlib.repmat(np.arange(length).reshape(length, 1), 1, width) + azoffBurst
|
||||
ka = slaveSwath.azimuthFmrateVsPixel[3] * index1**3 + slaveSwath.azimuthFmrateVsPixel[2] * index1**2 + \
|
||||
slaveSwath.azimuthFmrateVsPixel[1] * index1 + slaveSwath.azimuthFmrateVsPixel[0]
|
||||
ka = secondarySwath.azimuthFmrateVsPixel[3] * index1**3 + secondarySwath.azimuthFmrateVsPixel[2] * index1**2 + \
|
||||
secondarySwath.azimuthFmrateVsPixel[1] * index1 + secondarySwath.azimuthFmrateVsPixel[0]
|
||||
#use the convention that ka > 0
|
||||
ka = -ka
|
||||
t = tbase + index2*slaveSwath.azimuthLineInterval
|
||||
t = tbase + index2*secondarySwath.azimuthLineInterval
|
||||
reramp = np.exp(cj * np.pi * (ka) * t**2)
|
||||
|
||||
|
||||
##########################################################################
|
||||
# 3. resample slave burst
|
||||
# 3. resample secondary burst
|
||||
##########################################################################
|
||||
#go to slave directory to do resampling
|
||||
os.chdir(slaveBurstDir)
|
||||
#go to secondary directory to do resampling
|
||||
os.chdir(secondaryBurstDir)
|
||||
|
||||
#output offsets
|
||||
rgoffBurstFile = "burst_rg.off"
|
||||
|
@ -1105,39 +1105,39 @@ def resampleBursts(masterSwath, slaveSwath,
|
|||
rgoffBurst.astype(np.float32).tofile(rgoffBurstFile)
|
||||
azoffBurst.astype(np.float32).tofile(azoffBurstFile)
|
||||
|
||||
#deramp slave burst
|
||||
slaveBurstDerampedFile = "slave.slc"
|
||||
sburst = np.fromfile(slaveBurstSlc[iSlave], dtype=np.complex64).reshape(lengthSlave, widthSlave)
|
||||
(deramp * sburst).astype(np.complex64).tofile(slaveBurstDerampedFile)
|
||||
create_xml(slaveBurstDerampedFile, widthSlave, lengthSlave, 'slc')
|
||||
#deramp secondary burst
|
||||
secondaryBurstDerampedFile = "secondary.slc"
|
||||
sburst = np.fromfile(secondaryBurstSlc[iSecondary], dtype=np.complex64).reshape(lengthSecondary, widthSecondary)
|
||||
(deramp * sburst).astype(np.complex64).tofile(secondaryBurstDerampedFile)
|
||||
create_xml(secondaryBurstDerampedFile, widthSecondary, lengthSecondary, 'slc')
|
||||
|
||||
#resampled slave burst
|
||||
slaveBurstResampFile = 'slave_resamp.slc'
|
||||
#resampled secondary burst
|
||||
secondaryBurstResampFile = 'secondary_resamp.slc'
|
||||
|
||||
#resample slave burst
|
||||
#resample secondary burst
|
||||
#now doppler has bigger impact now, as it's value is about 35 Hz (azimuth resampling frequency is now only 1/20 * PRF)
|
||||
#we don't know if this doppler value is accurate or not, so we set it to zero, which seems to give best resampling result
|
||||
#otherwise if it is not accurate and we still use it, it will significantly affect resampling result
|
||||
dopplerVsPixel = slaveSwath.dopplerVsPixel
|
||||
dopplerVsPixel = secondarySwath.dopplerVsPixel
|
||||
dopplerVsPixel = [0.0, 0.0, 0.0, 0.0]
|
||||
|
||||
resamp(slaveBurstDerampedFile, slaveBurstResampFile, rgoffBurstFile, azoffBurstFile, width, length, 1.0/slaveSwath.azimuthLineInterval, dopplerVsPixel,
|
||||
resamp(secondaryBurstDerampedFile, secondaryBurstResampFile, rgoffBurstFile, azoffBurstFile, width, length, 1.0/secondarySwath.azimuthLineInterval, dopplerVsPixel,
|
||||
rgcoef=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
azcoef=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
azpos_off=0.0)
|
||||
|
||||
#read resampled slave burst and reramp
|
||||
sburstResamp = reramp * (np.fromfile(slaveBurstResampFile, dtype=np.complex64).reshape(length, width))
|
||||
#read resampled secondary burst and reramp
|
||||
sburstResamp = reramp * (np.fromfile(secondaryBurstResampFile, dtype=np.complex64).reshape(length, width))
|
||||
|
||||
#clear up
|
||||
os.remove(rgoffBurstFile)
|
||||
os.remove(azoffBurstFile)
|
||||
os.remove(slaveBurstDerampedFile)
|
||||
os.remove(slaveBurstDerampedFile+'.vrt')
|
||||
os.remove(slaveBurstDerampedFile+'.xml')
|
||||
os.remove(slaveBurstResampFile)
|
||||
os.remove(slaveBurstResampFile+'.vrt')
|
||||
os.remove(slaveBurstResampFile+'.xml')
|
||||
os.remove(secondaryBurstDerampedFile)
|
||||
os.remove(secondaryBurstDerampedFile+'.vrt')
|
||||
os.remove(secondaryBurstDerampedFile+'.xml')
|
||||
os.remove(secondaryBurstResampFile)
|
||||
os.remove(secondaryBurstResampFile+'.vrt')
|
||||
os.remove(secondaryBurstResampFile+'.xml')
|
||||
|
||||
os.chdir('../')
|
||||
|
||||
|
@ -1145,14 +1145,14 @@ def resampleBursts(masterSwath, slaveSwath,
|
|||
##########################################################################
|
||||
# 4. dump results
|
||||
##########################################################################
|
||||
#dump resampled slave burst
|
||||
os.chdir(slaveBurstResampledDir)
|
||||
sburstResamp.astype(np.complex64).tofile(slaveBurstSlcResampled[i])
|
||||
create_xml(slaveBurstSlcResampled[i], width, length, 'slc')
|
||||
#dump resampled secondary burst
|
||||
os.chdir(secondaryBurstResampledDir)
|
||||
sburstResamp.astype(np.complex64).tofile(secondaryBurstSlcResampled[i])
|
||||
create_xml(secondaryBurstSlcResampled[i], width, length, 'slc')
|
||||
os.chdir('../')
|
||||
|
||||
#dump burst interferogram
|
||||
mburst = np.fromfile(os.path.join(masterBurstDir, masterBurstSlc[i]), dtype=np.complex64).reshape(length, width)
|
||||
mburst = np.fromfile(os.path.join(referenceBurstDir, referenceBurstSlc[i]), dtype=np.complex64).reshape(length, width)
|
||||
os.chdir(interferogramDir)
|
||||
(mburst * np.conj(sburstResamp)).astype(np.complex64).tofile(interferogram[i])
|
||||
create_xml(interferogram[i], width, length, 'int')
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
on the following paramters might be changed in the denseoffset steps:
|
||||
=======================================================================
|
||||
if self.frameOffsetMatching == False:
|
||||
self._insar.frameRangeOffsetMatchingMaster = offsetMaster[2]
|
||||
self._insar.frameAzimuthOffsetMatchingMaster = offsetMaster[3]
|
||||
self._insar.frameRangeOffsetMatchingSlave = offsetSlave[2]
|
||||
self._insar.frameAzimuthOffsetMatchingSlave = offsetSlave[3]
|
||||
self._insar.frameRangeOffsetMatchingReference = offsetReference[2]
|
||||
self._insar.frameAzimuthOffsetMatchingReference = offsetReference[3]
|
||||
self._insar.frameRangeOffsetMatchingSecondary = offsetSecondary[2]
|
||||
self._insar.frameAzimuthOffsetMatchingSecondary = offsetSecondary[3]
|
||||
|
||||
|
||||
Therefore these denseoffset steps could be moved to after 'frame_mosaic' step
|
||||
|
|
|
@ -18,8 +18,8 @@ def runCoherence(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
#masterTrack = self._insar.loadTrack(master=True)
|
||||
#slaveTrack = self._insar.loadTrack(master=False)
|
||||
#referenceTrack = self._insar.loadTrack(reference=True)
|
||||
#secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
insarDir = 'insar'
|
||||
os.makedirs(insarDir, exist_ok=True)
|
||||
|
|
|
@ -27,8 +27,8 @@ def runDenseOffset(self):
|
|||
os.makedirs(denseOffsetDir, exist_ok=True)
|
||||
os.chdir(denseOffsetDir)
|
||||
|
||||
#masterTrack = self._insar.loadProduct(self._insar.masterTrackParameter)
|
||||
#slaveTrack = self._insar.loadProduct(self._insar.slaveTrackParameter)
|
||||
#referenceTrack = self._insar.loadProduct(self._insar.referenceTrackParameter)
|
||||
#secondaryTrack = self._insar.loadProduct(self._insar.secondaryTrackParameter)
|
||||
|
||||
#########################################################################################
|
||||
|
||||
|
@ -101,24 +101,24 @@ def runDenseOffsetCPU(self):
|
|||
from isceobj.Alos2Proc.Alos2ProcPublic import runCmd
|
||||
|
||||
####For this module currently, we need to create an actual file on disk
|
||||
for infile in [self._insar.masterSlc, self._insar.slaveSlcCoregistered]:
|
||||
for infile in [self._insar.referenceSlc, self._insar.secondarySlcCoregistered]:
|
||||
if os.path.isfile(infile):
|
||||
continue
|
||||
cmd = 'gdal_translate -of ENVI {0}.vrt {0}'.format(infile)
|
||||
runCmd(cmd)
|
||||
|
||||
m = isceobj.createSlcImage()
|
||||
m.load(self._insar.masterSlc + '.xml')
|
||||
m.load(self._insar.referenceSlc + '.xml')
|
||||
m.setAccessMode('READ')
|
||||
|
||||
s = isceobj.createSlcImage()
|
||||
s.load(self._insar.slaveSlcCoregistered + '.xml')
|
||||
s.load(self._insar.secondarySlcCoregistered + '.xml')
|
||||
s.setAccessMode('READ')
|
||||
|
||||
#objOffset.numberThreads = 1
|
||||
print('\n************* dense offset estimation parameters *************')
|
||||
print('master SLC: %s' % (self._insar.masterSlc))
|
||||
print('slave SLC: %s' % (self._insar.slaveSlcCoregistered))
|
||||
print('reference SLC: %s' % (self._insar.referenceSlc))
|
||||
print('secondary SLC: %s' % (self._insar.secondarySlcCoregistered))
|
||||
print('dense offset estimation window width: %d' % (self.offsetWindowWidth))
|
||||
print('dense offset estimation window hight: %d' % (self.offsetWindowHeight))
|
||||
print('dense offset search window width: %d' % (self.offsetSearchWindowWidth))
|
||||
|
@ -216,23 +216,23 @@ def runDenseOffsetGPU(self):
|
|||
|
||||
|
||||
####For this module currently, we need to create an actual file on disk
|
||||
for infile in [self._insar.masterSlc, self._insar.slaveSlcCoregistered]:
|
||||
for infile in [self._insar.referenceSlc, self._insar.secondarySlcCoregistered]:
|
||||
if os.path.isfile(infile):
|
||||
continue
|
||||
cmd = 'gdal_translate -of ENVI {0}.vrt {0}'.format(infile)
|
||||
runCmd(cmd)
|
||||
|
||||
m = isceobj.createSlcImage()
|
||||
m.load(self._insar.masterSlc + '.xml')
|
||||
m.load(self._insar.referenceSlc + '.xml')
|
||||
m.setAccessMode('READ')
|
||||
|
||||
s = isceobj.createSlcImage()
|
||||
s.load(self._insar.slaveSlcCoregistered + '.xml')
|
||||
s.load(self._insar.secondarySlcCoregistered + '.xml')
|
||||
s.setAccessMode('READ')
|
||||
|
||||
print('\n************* dense offset estimation parameters *************')
|
||||
print('master SLC: %s' % (self._insar.masterSlc))
|
||||
print('slave SLC: %s' % (self._insar.slaveSlcCoregistered))
|
||||
print('reference SLC: %s' % (self._insar.referenceSlc))
|
||||
print('secondary SLC: %s' % (self._insar.secondarySlcCoregistered))
|
||||
print('dense offset estimation window width: %d' % (self.offsetWindowWidth))
|
||||
print('dense offset estimation window hight: %d' % (self.offsetWindowHeight))
|
||||
print('dense offset search window width: %d' % (self.offsetSearchWindowWidth))
|
||||
|
@ -249,12 +249,12 @@ def runDenseOffsetGPU(self):
|
|||
objOffset.nStreams = 2
|
||||
#original ampcor program in roi_pac uses phase gradient to deramp
|
||||
objOffset.derampMethod = 2
|
||||
objOffset.masterImageName = self._insar.masterSlc
|
||||
objOffset.masterImageHeight = m.length
|
||||
objOffset.masterImageWidth = m.width
|
||||
objOffset.slaveImageName = self._insar.slaveSlcCoregistered
|
||||
objOffset.slaveImageHeight = s.length
|
||||
objOffset.slaveImageWidth = s.width
|
||||
objOffset.referenceImageName = self._insar.referenceSlc
|
||||
objOffset.referenceImageHeight = m.length
|
||||
objOffset.referenceImageWidth = m.width
|
||||
objOffset.secondaryImageName = self._insar.secondarySlcCoregistered
|
||||
objOffset.secondaryImageHeight = s.length
|
||||
objOffset.secondaryImageWidth = s.width
|
||||
objOffset.offsetImageName = self._insar.denseOffset
|
||||
objOffset.snrImageName = self._insar.denseOffsetSnr
|
||||
|
||||
|
@ -273,8 +273,8 @@ def runDenseOffsetGPU(self):
|
|||
objOffset.grossOffsetAcrossStatic = 0
|
||||
objOffset.grossOffsetDownStatic = 0
|
||||
|
||||
objOffset.masterStartPixelDownStatic = self.offsetWindowHeight//2
|
||||
objOffset.masterStartPixelAcrossStatic = self.offsetWindowWidth//2
|
||||
objOffset.referenceStartPixelDownStatic = self.offsetWindowHeight//2
|
||||
objOffset.referenceStartPixelAcrossStatic = self.offsetWindowWidth//2
|
||||
|
||||
objOffset.numberWindowDown = (m.length - 2*self.offsetSearchWindowHeight - self.offsetWindowHeight) // self.offsetSkipHeight
|
||||
objOffset.numberWindowAcross = (m.width - 2*self.offsetSearchWindowWidth - self.offsetWindowWidth) // self.offsetSkipWidth
|
||||
|
|
|
@ -18,15 +18,15 @@ def runDiffInterferogram(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
|
||||
insarDir = 'insar'
|
||||
os.makedirs(insarDir, exist_ok=True)
|
||||
os.chdir(insarDir)
|
||||
|
||||
|
||||
rangePixelSize = self._insar.numberRangeLooks1 * masterTrack.rangePixelSize
|
||||
radarWavelength = masterTrack.radarWavelength
|
||||
rangePixelSize = self._insar.numberRangeLooks1 * referenceTrack.rangePixelSize
|
||||
radarWavelength = referenceTrack.radarWavelength
|
||||
|
||||
cmd = "imageMath.py -e='a*exp(-1.0*J*b*4.0*{}*{}/{}) * (b!=0)' --a={} --b={} -o {} -t cfloat".format(np.pi, rangePixelSize, radarWavelength, self._insar.interferogram, self._insar.rectRangeOffset, self._insar.differentialInterferogram)
|
||||
runCmd(cmd)
|
||||
|
|
|
@ -20,10 +20,10 @@ def runDownloadDem(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
bboxGeo = getBboxGeo(masterTrack)
|
||||
bboxGeo = getBboxGeo(referenceTrack)
|
||||
bbox = np.array(bboxGeo)
|
||||
bboxStr = '{} {} {} {}'.format(np.int(np.floor(bbox[0])), np.int(np.ceil(bbox[1])), np.int(np.floor(bbox[2])), np.int(np.ceil(bbox[3])))
|
||||
|
||||
|
|
|
@ -24,8 +24,8 @@ def runFilt(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
#masterTrack = self._insar.loadTrack(master=True)
|
||||
#slaveTrack = self._insar.loadTrack(master=False)
|
||||
#referenceTrack = self._insar.loadTrack(reference=True)
|
||||
#secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
insarDir = 'insar'
|
||||
os.makedirs(insarDir, exist_ok=True)
|
||||
|
|
|
@ -28,8 +28,8 @@ def runFiltOffset(self):
|
|||
os.makedirs(denseOffsetDir, exist_ok=True)
|
||||
os.chdir(denseOffsetDir)
|
||||
|
||||
#masterTrack = self._insar.loadProduct(self._insar.masterTrackParameter)
|
||||
#slaveTrack = self._insar.loadProduct(self._insar.slaveTrackParameter)
|
||||
#referenceTrack = self._insar.loadProduct(self._insar.referenceTrackParameter)
|
||||
#secondaryTrack = self._insar.loadProduct(self._insar.secondaryTrackParameter)
|
||||
|
||||
#########################################################################################
|
||||
|
||||
|
|
|
@ -21,10 +21,10 @@ def runFormInterferogram(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
|
@ -33,27 +33,27 @@ def runFormInterferogram(self):
|
|||
|
||||
print('forming interferogram frame {}, swath {}'.format(frameNumber, swathNumber))
|
||||
|
||||
masterSwath = masterTrack.frames[i].swaths[j]
|
||||
slaveSwath = slaveTrack.frames[i].swaths[j]
|
||||
referenceSwath = referenceTrack.frames[i].swaths[j]
|
||||
secondarySwath = secondaryTrack.frames[i].swaths[j]
|
||||
|
||||
|
||||
#############################################
|
||||
#1. form interferogram
|
||||
#############################################
|
||||
refinedOffsets = readOffset('cull.off')
|
||||
intWidth = int(masterSwath.numberOfSamples / self._insar.numberRangeLooks1)
|
||||
intLength = int(masterSwath.numberOfLines / self._insar.numberAzimuthLooks1)
|
||||
dopplerVsPixel = [i/slaveSwath.prf for i in slaveSwath.dopplerVsPixel]
|
||||
intWidth = int(referenceSwath.numberOfSamples / self._insar.numberRangeLooks1)
|
||||
intLength = int(referenceSwath.numberOfLines / self._insar.numberAzimuthLooks1)
|
||||
dopplerVsPixel = [i/secondarySwath.prf for i in secondarySwath.dopplerVsPixel]
|
||||
|
||||
#master slc
|
||||
#reference slc
|
||||
mSLC = isceobj.createSlcImage()
|
||||
mSLC.load(self._insar.masterSlc+'.xml')
|
||||
mSLC.load(self._insar.referenceSlc+'.xml')
|
||||
mSLC.setAccessMode('read')
|
||||
mSLC.createImage()
|
||||
|
||||
#slave slc
|
||||
#secondary slc
|
||||
sSLC = isceobj.createSlcImage()
|
||||
sSLC.load(self._insar.slaveSlc+'.xml')
|
||||
sSLC.load(self._insar.secondarySlc+'.xml')
|
||||
sSLC.setAccessMode('read')
|
||||
sSLC.createImage()
|
||||
|
||||
|
@ -86,14 +86,14 @@ def runFormInterferogram(self):
|
|||
objResamp.wireInputPort(name='offsets', object=refinedOffsets)
|
||||
objResamp.stdWriter = stdWriter
|
||||
objResamp.setNumberFitCoefficients(6)
|
||||
objResamp.setNumberRangeBin1(masterSwath.numberOfSamples)
|
||||
objResamp.setNumberRangeBin2(slaveSwath.numberOfSamples)
|
||||
objResamp.setNumberRangeBin1(referenceSwath.numberOfSamples)
|
||||
objResamp.setNumberRangeBin2(secondarySwath.numberOfSamples)
|
||||
objResamp.setStartLine(1)
|
||||
objResamp.setNumberLines(masterSwath.numberOfLines)
|
||||
objResamp.setNumberLines(referenceSwath.numberOfLines)
|
||||
objResamp.setFirstLineOffset(1)
|
||||
objResamp.setDopplerCentroidCoefficients(dopplerVsPixel)
|
||||
objResamp.setRadarWavelength(slaveTrack.radarWavelength)
|
||||
objResamp.setSlantRangePixelSpacing(slaveSwath.rangePixelSize)
|
||||
objResamp.setRadarWavelength(secondaryTrack.radarWavelength)
|
||||
objResamp.setSlantRangePixelSpacing(secondarySwath.rangePixelSize)
|
||||
objResamp.setNumberRangeLooks(self._insar.numberRangeLooks1)
|
||||
objResamp.setNumberAzimuthLooks(self._insar.numberAzimuthLooks1)
|
||||
objResamp.setFlattenWithOffsetFitFlag(0)
|
||||
|
|
|
@ -20,17 +20,17 @@ def runFrameMosaic(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
mosaicDir = 'insar'
|
||||
os.makedirs(mosaicDir, exist_ok=True)
|
||||
os.chdir(mosaicDir)
|
||||
|
||||
numberOfFrames = len(masterTrack.frames)
|
||||
numberOfFrames = len(referenceTrack.frames)
|
||||
if numberOfFrames == 1:
|
||||
import shutil
|
||||
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.masterFrames[0]))
|
||||
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.referenceFrames[0]))
|
||||
if not os.path.isfile(self._insar.interferogram):
|
||||
os.symlink(os.path.join('../', frameDir, self._insar.interferogram), self._insar.interferogram)
|
||||
#shutil.copy2() can overwrite
|
||||
|
@ -51,75 +51,75 @@ def runFrameMosaic(self):
|
|||
#update track parameters
|
||||
#########################################################
|
||||
#mosaic size
|
||||
masterTrack.numberOfSamples = masterTrack.frames[0].numberOfSamples
|
||||
masterTrack.numberOfLines = masterTrack.frames[0].numberOfLines
|
||||
referenceTrack.numberOfSamples = referenceTrack.frames[0].numberOfSamples
|
||||
referenceTrack.numberOfLines = referenceTrack.frames[0].numberOfLines
|
||||
#NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE
|
||||
#range parameters
|
||||
masterTrack.startingRange = masterTrack.frames[0].startingRange
|
||||
masterTrack.rangeSamplingRate = masterTrack.frames[0].rangeSamplingRate
|
||||
masterTrack.rangePixelSize = masterTrack.frames[0].rangePixelSize
|
||||
referenceTrack.startingRange = referenceTrack.frames[0].startingRange
|
||||
referenceTrack.rangeSamplingRate = referenceTrack.frames[0].rangeSamplingRate
|
||||
referenceTrack.rangePixelSize = referenceTrack.frames[0].rangePixelSize
|
||||
#azimuth parameters
|
||||
masterTrack.sensingStart = masterTrack.frames[0].sensingStart
|
||||
masterTrack.prf = masterTrack.frames[0].prf
|
||||
masterTrack.azimuthPixelSize = masterTrack.frames[0].azimuthPixelSize
|
||||
masterTrack.azimuthLineInterval = masterTrack.frames[0].azimuthLineInterval
|
||||
referenceTrack.sensingStart = referenceTrack.frames[0].sensingStart
|
||||
referenceTrack.prf = referenceTrack.frames[0].prf
|
||||
referenceTrack.azimuthPixelSize = referenceTrack.frames[0].azimuthPixelSize
|
||||
referenceTrack.azimuthLineInterval = referenceTrack.frames[0].azimuthLineInterval
|
||||
|
||||
#update track parameters, slave
|
||||
#update track parameters, secondary
|
||||
#########################################################
|
||||
#mosaic size
|
||||
slaveTrack.numberOfSamples = slaveTrack.frames[0].numberOfSamples
|
||||
slaveTrack.numberOfLines = slaveTrack.frames[0].numberOfLines
|
||||
secondaryTrack.numberOfSamples = secondaryTrack.frames[0].numberOfSamples
|
||||
secondaryTrack.numberOfLines = secondaryTrack.frames[0].numberOfLines
|
||||
#NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE
|
||||
#range parameters
|
||||
slaveTrack.startingRange = slaveTrack.frames[0].startingRange
|
||||
slaveTrack.rangeSamplingRate = slaveTrack.frames[0].rangeSamplingRate
|
||||
slaveTrack.rangePixelSize = slaveTrack.frames[0].rangePixelSize
|
||||
secondaryTrack.startingRange = secondaryTrack.frames[0].startingRange
|
||||
secondaryTrack.rangeSamplingRate = secondaryTrack.frames[0].rangeSamplingRate
|
||||
secondaryTrack.rangePixelSize = secondaryTrack.frames[0].rangePixelSize
|
||||
#azimuth parameters
|
||||
slaveTrack.sensingStart = slaveTrack.frames[0].sensingStart
|
||||
slaveTrack.prf = slaveTrack.frames[0].prf
|
||||
slaveTrack.azimuthPixelSize = slaveTrack.frames[0].azimuthPixelSize
|
||||
slaveTrack.azimuthLineInterval = slaveTrack.frames[0].azimuthLineInterval
|
||||
secondaryTrack.sensingStart = secondaryTrack.frames[0].sensingStart
|
||||
secondaryTrack.prf = secondaryTrack.frames[0].prf
|
||||
secondaryTrack.azimuthPixelSize = secondaryTrack.frames[0].azimuthPixelSize
|
||||
secondaryTrack.azimuthLineInterval = secondaryTrack.frames[0].azimuthLineInterval
|
||||
|
||||
else:
|
||||
#choose offsets
|
||||
if self.frameOffsetMatching:
|
||||
rangeOffsets = self._insar.frameRangeOffsetMatchingMaster
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingMaster
|
||||
rangeOffsets = self._insar.frameRangeOffsetMatchingReference
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingReference
|
||||
else:
|
||||
rangeOffsets = self._insar.frameRangeOffsetGeometricalMaster
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalMaster
|
||||
rangeOffsets = self._insar.frameRangeOffsetGeometricalReference
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalReference
|
||||
|
||||
#list of input files
|
||||
inputInterferograms = []
|
||||
inputAmplitudes = []
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
inputInterferograms.append(os.path.join('../', frameDir, 'mosaic', self._insar.interferogram))
|
||||
inputAmplitudes.append(os.path.join('../', frameDir, 'mosaic', self._insar.amplitude))
|
||||
|
||||
#note that track parameters are updated after mosaicking
|
||||
#mosaic amplitudes
|
||||
frameMosaic(masterTrack, inputAmplitudes, self._insar.amplitude,
|
||||
frameMosaic(referenceTrack, inputAmplitudes, self._insar.amplitude,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
|
||||
updateTrack=False, phaseCompensation=False, resamplingMethod=0)
|
||||
#mosaic interferograms
|
||||
frameMosaic(masterTrack, inputInterferograms, self._insar.interferogram,
|
||||
frameMosaic(referenceTrack, inputInterferograms, self._insar.interferogram,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
|
||||
updateTrack=True, phaseCompensation=True, resamplingMethod=1)
|
||||
|
||||
create_xml(self._insar.amplitude, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'int')
|
||||
create_xml(self._insar.amplitude, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'int')
|
||||
|
||||
#update slave parameters here
|
||||
#do not match for slave, always use geometrical
|
||||
rangeOffsets = self._insar.frameRangeOffsetGeometricalSlave
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalSlave
|
||||
frameMosaicParameters(slaveTrack, rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
|
||||
#update secondary parameters here
|
||||
#do not match for secondary, always use geometrical
|
||||
rangeOffsets = self._insar.frameRangeOffsetGeometricalSecondary
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalSecondary
|
||||
frameMosaicParameters(secondaryTrack, rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
|
||||
|
||||
os.chdir('../')
|
||||
#save parameter file
|
||||
self._insar.saveProduct(masterTrack, self._insar.masterTrackParameter)
|
||||
self._insar.saveProduct(slaveTrack, self._insar.slaveTrackParameter)
|
||||
self._insar.saveProduct(referenceTrack, self._insar.referenceTrackParameter)
|
||||
self._insar.saveProduct(secondaryTrack, self._insar.secondaryTrackParameter)
|
||||
|
||||
catalog.printToLog(logger, "runFrameMosaic")
|
||||
self._insar.procDoc.addAllFromCatalog(catalog)
|
||||
|
|
|
@ -16,14 +16,14 @@ def runFrameOffset(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
mosaicDir = 'insar'
|
||||
os.makedirs(mosaicDir, exist_ok=True)
|
||||
os.chdir(mosaicDir)
|
||||
|
||||
if len(masterTrack.frames) > 1:
|
||||
if len(referenceTrack.frames) > 1:
|
||||
if (self._insar.modeCombination == 21) or \
|
||||
(self._insar.modeCombination == 22) or \
|
||||
(self._insar.modeCombination == 31) or \
|
||||
|
@ -33,21 +33,21 @@ def runFrameOffset(self):
|
|||
matchingMode=1
|
||||
|
||||
#compute swath offset
|
||||
offsetMaster = frameOffset(masterTrack, self._insar.masterSlc, self._insar.masterFrameOffset,
|
||||
offsetReference = frameOffset(referenceTrack, self._insar.referenceSlc, self._insar.referenceFrameOffset,
|
||||
crossCorrelation=self.frameOffsetMatching, matchingMode=matchingMode)
|
||||
#only use geometrical offset for slave
|
||||
offsetSlave = frameOffset(slaveTrack, self._insar.slaveSlc, self._insar.slaveFrameOffset,
|
||||
#only use geometrical offset for secondary
|
||||
offsetSecondary = frameOffset(secondaryTrack, self._insar.secondarySlc, self._insar.secondaryFrameOffset,
|
||||
crossCorrelation=False, matchingMode=matchingMode)
|
||||
|
||||
self._insar.frameRangeOffsetGeometricalMaster = offsetMaster[0]
|
||||
self._insar.frameAzimuthOffsetGeometricalMaster = offsetMaster[1]
|
||||
self._insar.frameRangeOffsetGeometricalSlave = offsetSlave[0]
|
||||
self._insar.frameAzimuthOffsetGeometricalSlave = offsetSlave[1]
|
||||
self._insar.frameRangeOffsetGeometricalReference = offsetReference[0]
|
||||
self._insar.frameAzimuthOffsetGeometricalReference = offsetReference[1]
|
||||
self._insar.frameRangeOffsetGeometricalSecondary = offsetSecondary[0]
|
||||
self._insar.frameAzimuthOffsetGeometricalSecondary = offsetSecondary[1]
|
||||
if self.frameOffsetMatching:
|
||||
self._insar.frameRangeOffsetMatchingMaster = offsetMaster[2]
|
||||
self._insar.frameAzimuthOffsetMatchingMaster = offsetMaster[3]
|
||||
#self._insar.frameRangeOffsetMatchingSlave = offsetSlave[2]
|
||||
#self._insar.frameAzimuthOffsetMatchingSlave = offsetSlave[3]
|
||||
self._insar.frameRangeOffsetMatchingReference = offsetReference[2]
|
||||
self._insar.frameAzimuthOffsetMatchingReference = offsetReference[3]
|
||||
#self._insar.frameRangeOffsetMatchingSecondary = offsetSecondary[2]
|
||||
#self._insar.frameAzimuthOffsetMatchingSecondary = offsetSecondary[3]
|
||||
|
||||
|
||||
os.chdir('../')
|
||||
|
@ -188,8 +188,8 @@ def estimateFrameOffset(swath1, swath2, image1, image2, matchingMode=0):
|
|||
else:
|
||||
raise Exception('file type not supported yet.')
|
||||
|
||||
ampcor.setMasterSlcImage(mSLC)
|
||||
ampcor.setSlaveSlcImage(sSLC)
|
||||
ampcor.setReferenceSlcImage(mSLC)
|
||||
ampcor.setSecondarySlcImage(sSLC)
|
||||
|
||||
#MATCH REGION
|
||||
#compute an offset at image center to use
|
||||
|
|
|
@ -16,7 +16,7 @@ def runGeo2Rdr(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
insarDir = 'insar'
|
||||
os.makedirs(insarDir, exist_ok=True)
|
||||
|
@ -25,10 +25,10 @@ def runGeo2Rdr(self):
|
|||
|
||||
hasGPU= self.useGPU and self._insar.hasGPU()
|
||||
if hasGPU:
|
||||
geo2RdrGPU(slaveTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
|
||||
geo2RdrGPU(secondaryTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
|
||||
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.rangeOffset, self._insar.azimuthOffset)
|
||||
else:
|
||||
geo2RdrCPU(slaveTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
|
||||
geo2RdrCPU(secondaryTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
|
||||
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.rangeOffset, self._insar.azimuthOffset)
|
||||
|
||||
os.chdir('../')
|
||||
|
@ -37,7 +37,7 @@ def runGeo2Rdr(self):
|
|||
self._insar.procDoc.addAllFromCatalog(catalog)
|
||||
|
||||
|
||||
def geo2RdrCPU(slaveTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFile, hgtFile, rangeOffsetFile, azimuthOffsetFile):
|
||||
def geo2RdrCPU(secondaryTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFile, hgtFile, rangeOffsetFile, azimuthOffsetFile):
|
||||
import datetime
|
||||
from zerodop.geo2rdr import createGeo2rdr
|
||||
from isceobj.Planet.Planet import Planet
|
||||
|
@ -61,20 +61,20 @@ def geo2RdrCPU(slaveTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFil
|
|||
topo = createGeo2rdr()
|
||||
topo.configure()
|
||||
#set parameters
|
||||
topo.slantRangePixelSpacing = numberRangeLooks * slaveTrack.rangePixelSize
|
||||
topo.prf = 1.0 / (numberAzimuthLooks*slaveTrack.azimuthLineInterval)
|
||||
topo.radarWavelength = slaveTrack.radarWavelength
|
||||
topo.orbit = slaveTrack.orbit
|
||||
topo.width = slaveTrack.numberOfSamples
|
||||
topo.length = slaveTrack.numberOfLines
|
||||
topo.slantRangePixelSpacing = numberRangeLooks * secondaryTrack.rangePixelSize
|
||||
topo.prf = 1.0 / (numberAzimuthLooks*secondaryTrack.azimuthLineInterval)
|
||||
topo.radarWavelength = secondaryTrack.radarWavelength
|
||||
topo.orbit = secondaryTrack.orbit
|
||||
topo.width = secondaryTrack.numberOfSamples
|
||||
topo.length = secondaryTrack.numberOfLines
|
||||
topo.demLength = demImage.length
|
||||
topo.demWidth = demImage.width
|
||||
topo.wireInputPort(name='planet', object=planet)
|
||||
topo.numberRangeLooks = 1 #
|
||||
topo.numberAzimuthLooks = 1 # must be set to be 1
|
||||
topo.lookSide = pointingDirection[slaveTrack.pointingDirection]
|
||||
topo.setSensingStart(slaveTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*slaveTrack.azimuthLineInterval))
|
||||
topo.rangeFirstSample = slaveTrack.startingRange + (numberRangeLooks-1.0)/2.0*slaveTrack.rangePixelSize
|
||||
topo.lookSide = pointingDirection[secondaryTrack.pointingDirection]
|
||||
topo.setSensingStart(secondaryTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*secondaryTrack.azimuthLineInterval))
|
||||
topo.rangeFirstSample = secondaryTrack.startingRange + (numberRangeLooks-1.0)/2.0*secondaryTrack.rangePixelSize
|
||||
topo.dopplerCentroidCoeffs = [0.] # we are using zero doppler geometry
|
||||
#set files
|
||||
topo.latImage = latImage
|
||||
|
@ -88,7 +88,7 @@ def geo2RdrCPU(slaveTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFil
|
|||
return
|
||||
|
||||
|
||||
def geo2RdrGPU(slaveTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFile, hgtFile, rangeOffsetFile, azimuthOffsetFile):
|
||||
def geo2RdrGPU(secondaryTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFile, hgtFile, rangeOffsetFile, azimuthOffsetFile):
|
||||
'''
|
||||
currently we cannot set left/right looking.
|
||||
works for right looking, but left looking probably not supported.
|
||||
|
@ -118,14 +118,14 @@ def geo2RdrGPU(slaveTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFil
|
|||
planet = Planet(pname='Earth')
|
||||
grdr = PyGeo2rdr()
|
||||
|
||||
grdr.setRangePixelSpacing(numberRangeLooks * slaveTrack.rangePixelSize)
|
||||
grdr.setPRF(1.0 / (numberAzimuthLooks*slaveTrack.azimuthLineInterval))
|
||||
grdr.setRadarWavelength(slaveTrack.radarWavelength)
|
||||
grdr.setRangePixelSpacing(numberRangeLooks * secondaryTrack.rangePixelSize)
|
||||
grdr.setPRF(1.0 / (numberAzimuthLooks*secondaryTrack.azimuthLineInterval))
|
||||
grdr.setRadarWavelength(secondaryTrack.radarWavelength)
|
||||
|
||||
#CHECK IF THIS WORKS!!!
|
||||
grdr.createOrbit(0, len(slaveTrack.orbit.stateVectors.list))
|
||||
grdr.createOrbit(0, len(secondaryTrack.orbit.stateVectors.list))
|
||||
count = 0
|
||||
for sv in slaveTrack.orbit.stateVectors.list:
|
||||
for sv in secondaryTrack.orbit.stateVectors.list:
|
||||
td = DTU.seconds_since_midnight(sv.getTime())
|
||||
pos = sv.getPosition()
|
||||
vel = sv.getVelocity()
|
||||
|
@ -134,10 +134,10 @@ def geo2RdrGPU(slaveTrack, numberRangeLooks, numberAzimuthLooks, latFile, lonFil
|
|||
count += 1
|
||||
|
||||
grdr.setOrbitMethod(0)
|
||||
grdr.setWidth(slaveTrack.numberOfSamples)
|
||||
grdr.setLength(slaveTrack.numberOfLines)
|
||||
grdr.setSensingStart(DTU.seconds_since_midnight(slaveTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*slaveTrack.azimuthLineInterval)))
|
||||
grdr.setRangeFirstSample(slaveTrack.startingRange + (numberRangeLooks-1.0)/2.0*slaveTrack.rangePixelSize)
|
||||
grdr.setWidth(secondaryTrack.numberOfSamples)
|
||||
grdr.setLength(secondaryTrack.numberOfLines)
|
||||
grdr.setSensingStart(DTU.seconds_since_midnight(secondaryTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*secondaryTrack.azimuthLineInterval)))
|
||||
grdr.setRangeFirstSample(secondaryTrack.startingRange + (numberRangeLooks-1.0)/2.0*secondaryTrack.rangePixelSize)
|
||||
grdr.setNumberRangeLooks(1)
|
||||
grdr.setNumberAzimuthLooks(1)
|
||||
grdr.setEllipsoidMajorSemiAxis(planet.ellipsoid.a)
|
||||
|
|
|
@ -19,8 +19,8 @@ def runGeocode(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
#slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
#secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
demFile = os.path.abspath(self._insar.demGeo)
|
||||
|
||||
|
@ -30,7 +30,7 @@ def runGeocode(self):
|
|||
|
||||
#compute bounding box for geocoding
|
||||
if self.bbox == None:
|
||||
bbox = getBboxGeo(masterTrack)
|
||||
bbox = getBboxGeo(referenceTrack)
|
||||
else:
|
||||
bbox = self.bbox
|
||||
catalog.addItem('geocode bounding box', bbox, 'runGeocode')
|
||||
|
@ -61,7 +61,7 @@ def runGeocode(self):
|
|||
else:
|
||||
interpMethod = self.geocodeInterpMethod.lower()
|
||||
|
||||
geocode(masterTrack, demFile, inputFile, bbox, numberRangeLooks, numberAzimuthLooks, interpMethod, 0, 0)
|
||||
geocode(referenceTrack, demFile, inputFile, bbox, numberRangeLooks, numberAzimuthLooks, interpMethod, 0, 0)
|
||||
|
||||
|
||||
os.chdir('../')
|
||||
|
|
|
@ -26,8 +26,8 @@ def runGeocodeOffset(self):
|
|||
|
||||
#use original track object to determine bbox
|
||||
if self.bbox == None:
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
bbox = getBboxGeo(masterTrack)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
bbox = getBboxGeo(referenceTrack)
|
||||
else:
|
||||
bbox = self.bbox
|
||||
catalog.addItem('geocode bounding box', bbox, 'runGeocodeOffset')
|
||||
|
@ -38,13 +38,13 @@ def runGeocodeOffset(self):
|
|||
os.makedirs(denseOffsetDir, exist_ok=True)
|
||||
os.chdir(denseOffsetDir)
|
||||
|
||||
masterTrack = self._insar.loadProduct(self._insar.masterTrackParameter)
|
||||
#slaveTrack = self._insar.loadProduct(self._insar.slaveTrackParameter)
|
||||
referenceTrack = self._insar.loadProduct(self._insar.referenceTrackParameter)
|
||||
#secondaryTrack = self._insar.loadProduct(self._insar.secondaryTrackParameter)
|
||||
|
||||
#########################################################################################
|
||||
#compute bounding box for geocoding
|
||||
#if self.bbox == None:
|
||||
# bbox = getBboxGeo(masterTrack)
|
||||
# bbox = getBboxGeo(referenceTrack)
|
||||
#else:
|
||||
# bbox = self.bbox
|
||||
#catalog.addItem('geocode bounding box', bbox, 'runGeocodeOffset')
|
||||
|
@ -55,7 +55,7 @@ def runGeocodeOffset(self):
|
|||
|
||||
for inputFile in geocodeList:
|
||||
interpMethod = 'nearest'
|
||||
geocode(masterTrack, demFile, inputFile, bbox, self.offsetSkipWidth, self.offsetSkipHeight, interpMethod, self._insar.offsetImageTopoffset, self._insar.offsetImageLeftoffset, addMultilookOffset=False)
|
||||
geocode(referenceTrack, demFile, inputFile, bbox, self.offsetSkipWidth, self.offsetSkipHeight, interpMethod, self._insar.offsetImageTopoffset, self._insar.offsetImageLeftoffset, addMultilookOffset=False)
|
||||
#########################################################################################
|
||||
|
||||
os.chdir('../')
|
||||
|
|
|
@ -23,8 +23,8 @@ def runIonFilt(self):
|
|||
self._insar.procDoc.addAllFromCatalog(catalog)
|
||||
return
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
from isceobj.Alos2Proc.runIonSubband import defineIonDir
|
||||
ionDir = defineIonDir()
|
||||
|
|
|
@ -22,13 +22,13 @@ def runIonSubband(self):
|
|||
self._insar.procDoc.addAllFromCatalog(catalog)
|
||||
return
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
#using 1/3, 1/3, 1/3 band split
|
||||
radarWavelength = masterTrack.radarWavelength
|
||||
rangeBandwidth = masterTrack.frames[0].swaths[0].rangeBandwidth
|
||||
rangeSamplingRate = masterTrack.frames[0].swaths[0].rangeSamplingRate
|
||||
radarWavelength = referenceTrack.radarWavelength
|
||||
rangeBandwidth = referenceTrack.frames[0].swaths[0].rangeBandwidth
|
||||
rangeSamplingRate = referenceTrack.frames[0].swaths[0].rangeSamplingRate
|
||||
radarWavelengthLower = SPEED_OF_LIGHT/(SPEED_OF_LIGHT / radarWavelength - rangeBandwidth / 3.0)
|
||||
radarWavelengthUpper = SPEED_OF_LIGHT/(SPEED_OF_LIGHT / radarWavelength + rangeBandwidth / 3.0)
|
||||
subbandRadarWavelength = [radarWavelengthLower, radarWavelengthUpper]
|
||||
|
@ -64,7 +64,7 @@ def runIonSubband(self):
|
|||
#create insar processing directories
|
||||
for k in range(2):
|
||||
subbandDir = ionDir['subband'][k]
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
swathDir = 's{}'.format(swathNumber)
|
||||
|
@ -84,7 +84,7 @@ def runIonSubband(self):
|
|||
from isceobj.Alos2Proc.Alos2ProcPublic import readOffset
|
||||
from contrib.alos2proc.alos2proc import rg_filter
|
||||
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
swathDir = 's{}'.format(swathNumber)
|
||||
|
@ -105,8 +105,8 @@ def runIonSubband(self):
|
|||
print('interferogram already exists at swath {}, frame {}'.format(swathNumber, frameNumber))
|
||||
continue
|
||||
|
||||
#filter master and slave images
|
||||
for slcx in [self._insar.masterSlc, self._insar.slaveSlc]:
|
||||
#filter reference and secondary images
|
||||
for slcx in [self._insar.referenceSlc, self._insar.secondarySlc]:
|
||||
slc = os.path.join('../', frameDir, swathDir, slcx)
|
||||
slcLower = os.path.join(ionDir['subband'][0], frameDir, swathDir, slcx)
|
||||
slcUpper = os.path.join(ionDir['subband'][1], frameDir, swathDir, slcx)
|
||||
|
@ -120,7 +120,7 @@ def runIonSubband(self):
|
|||
os.chdir(os.path.join(ionDir['subband'][k], frameDir, swathDir))
|
||||
#recreate xml file to remove the file path
|
||||
#can also use fixImageXml.py?
|
||||
for x in [self._insar.masterSlc, self._insar.slaveSlc]:
|
||||
for x in [self._insar.referenceSlc, self._insar.secondarySlc]:
|
||||
img = isceobj.createSlcImage()
|
||||
img.load(x + '.xml')
|
||||
img.setFilename(x)
|
||||
|
@ -131,23 +131,23 @@ def runIonSubband(self):
|
|||
#############################################
|
||||
#1. form interferogram
|
||||
#############################################
|
||||
masterSwath = masterTrack.frames[i].swaths[j]
|
||||
slaveSwath = slaveTrack.frames[i].swaths[j]
|
||||
referenceSwath = referenceTrack.frames[i].swaths[j]
|
||||
secondarySwath = secondaryTrack.frames[i].swaths[j]
|
||||
|
||||
refinedOffsets = readOffset(os.path.join('../../../../', frameDir, swathDir, 'cull.off'))
|
||||
intWidth = int(masterSwath.numberOfSamples / self._insar.numberRangeLooks1)
|
||||
intLength = int(masterSwath.numberOfLines / self._insar.numberAzimuthLooks1)
|
||||
dopplerVsPixel = [i/slaveSwath.prf for i in slaveSwath.dopplerVsPixel]
|
||||
intWidth = int(referenceSwath.numberOfSamples / self._insar.numberRangeLooks1)
|
||||
intLength = int(referenceSwath.numberOfLines / self._insar.numberAzimuthLooks1)
|
||||
dopplerVsPixel = [i/secondarySwath.prf for i in secondarySwath.dopplerVsPixel]
|
||||
|
||||
#master slc
|
||||
#reference slc
|
||||
mSLC = isceobj.createSlcImage()
|
||||
mSLC.load(self._insar.masterSlc+'.xml')
|
||||
mSLC.load(self._insar.referenceSlc+'.xml')
|
||||
mSLC.setAccessMode('read')
|
||||
mSLC.createImage()
|
||||
|
||||
#slave slc
|
||||
#secondary slc
|
||||
sSLC = isceobj.createSlcImage()
|
||||
sSLC.load(self._insar.slaveSlc+'.xml')
|
||||
sSLC.load(self._insar.secondarySlc+'.xml')
|
||||
sSLC.setAccessMode('read')
|
||||
sSLC.createImage()
|
||||
|
||||
|
@ -180,14 +180,14 @@ def runIonSubband(self):
|
|||
objResamp.wireInputPort(name='offsets', object=refinedOffsets)
|
||||
objResamp.stdWriter = stdWriter
|
||||
objResamp.setNumberFitCoefficients(6)
|
||||
objResamp.setNumberRangeBin1(masterSwath.numberOfSamples)
|
||||
objResamp.setNumberRangeBin2(slaveSwath.numberOfSamples)
|
||||
objResamp.setNumberRangeBin1(referenceSwath.numberOfSamples)
|
||||
objResamp.setNumberRangeBin2(secondarySwath.numberOfSamples)
|
||||
objResamp.setStartLine(1)
|
||||
objResamp.setNumberLines(masterSwath.numberOfLines)
|
||||
objResamp.setNumberLines(referenceSwath.numberOfLines)
|
||||
objResamp.setFirstLineOffset(1)
|
||||
objResamp.setDopplerCentroidCoefficients(dopplerVsPixel)
|
||||
objResamp.setRadarWavelength(subbandRadarWavelength[k])
|
||||
objResamp.setSlantRangePixelSpacing(slaveSwath.rangePixelSize)
|
||||
objResamp.setSlantRangePixelSpacing(secondarySwath.rangePixelSize)
|
||||
objResamp.setNumberRangeLooks(self._insar.numberRangeLooks1)
|
||||
objResamp.setNumberAzimuthLooks(self._insar.numberAzimuthLooks1)
|
||||
objResamp.setFlattenWithOffsetFitFlag(0)
|
||||
|
@ -214,12 +214,12 @@ def runIonSubband(self):
|
|||
#############################################
|
||||
#3. delete subband slcs
|
||||
#############################################
|
||||
os.remove(self._insar.masterSlc)
|
||||
os.remove(self._insar.masterSlc + '.vrt')
|
||||
os.remove(self._insar.masterSlc + '.xml')
|
||||
os.remove(self._insar.slaveSlc)
|
||||
os.remove(self._insar.slaveSlc + '.vrt')
|
||||
os.remove(self._insar.slaveSlc + '.xml')
|
||||
os.remove(self._insar.referenceSlc)
|
||||
os.remove(self._insar.referenceSlc + '.vrt')
|
||||
os.remove(self._insar.referenceSlc + '.xml')
|
||||
os.remove(self._insar.secondarySlc)
|
||||
os.remove(self._insar.secondarySlc + '.vrt')
|
||||
os.remove(self._insar.secondarySlc + '.xml')
|
||||
|
||||
os.chdir('../../../')
|
||||
|
||||
|
@ -232,7 +232,7 @@ def runIonSubband(self):
|
|||
|
||||
for k in range(2):
|
||||
os.chdir(ionDir['subband'][k])
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
|
||||
|
@ -249,7 +249,7 @@ def runIonSubband(self):
|
|||
(self._insar.endingSwath-self._insar.startingSwath+1 > 1)
|
||||
):
|
||||
import shutil
|
||||
swathDir = 's{}'.format(masterTrack.frames[i].swaths[0].swathNumber)
|
||||
swathDir = 's{}'.format(referenceTrack.frames[i].swaths[0].swathNumber)
|
||||
|
||||
# if not os.path.isfile(self._insar.interferogram):
|
||||
# os.symlink(os.path.join('../', swathDir, self._insar.interferogram), self._insar.interferogram)
|
||||
|
@ -275,20 +275,20 @@ def runIonSubband(self):
|
|||
continue
|
||||
|
||||
#choose offsets
|
||||
numberOfFrames = len(masterTrack.frames)
|
||||
numberOfSwaths = len(masterTrack.frames[i].swaths)
|
||||
numberOfFrames = len(referenceTrack.frames)
|
||||
numberOfSwaths = len(referenceTrack.frames[i].swaths)
|
||||
if self.swathOffsetMatching:
|
||||
#no need to do this as the API support 2-d list
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetMatchingMaster
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingMaster
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetMatchingReference
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingReference
|
||||
|
||||
else:
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetGeometricalMaster
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalMaster
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetGeometricalReference
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalReference
|
||||
|
||||
rangeOffsets = rangeOffsets[i]
|
||||
azimuthOffsets = azimuthOffsets[i]
|
||||
|
@ -304,16 +304,16 @@ def runIonSubband(self):
|
|||
|
||||
#compute phase needed to be compensated using startingRange
|
||||
if j >= 1:
|
||||
#phaseDiffSwath1 = -4.0 * np.pi * (masterTrack.frames[i].swaths[j-1].startingRange - slaveTrack.frames[i].swaths[j-1].startingRange)/subbandRadarWavelength[k]
|
||||
#phaseDiffSwath2 = -4.0 * np.pi * (masterTrack.frames[i].swaths[j].startingRange - slaveTrack.frames[i].swaths[j].startingRange)/subbandRadarWavelength[k]
|
||||
phaseDiffSwath1 = +4.0 * np.pi * masterTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
|
||||
-4.0 * np.pi * slaveTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
|
||||
phaseDiffSwath2 = +4.0 * np.pi * masterTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
|
||||
-4.0 * np.pi * slaveTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
|
||||
if masterTrack.frames[i].swaths[j-1].startingRange - slaveTrack.frames[i].swaths[j-1].startingRange == \
|
||||
masterTrack.frames[i].swaths[j].startingRange - slaveTrack.frames[i].swaths[j].startingRange:
|
||||
#phaseDiffSwath1 = -4.0 * np.pi * (referenceTrack.frames[i].swaths[j-1].startingRange - secondaryTrack.frames[i].swaths[j-1].startingRange)/subbandRadarWavelength[k]
|
||||
#phaseDiffSwath2 = -4.0 * np.pi * (referenceTrack.frames[i].swaths[j].startingRange - secondaryTrack.frames[i].swaths[j].startingRange)/subbandRadarWavelength[k]
|
||||
phaseDiffSwath1 = +4.0 * np.pi * referenceTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
|
||||
-4.0 * np.pi * secondaryTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
|
||||
phaseDiffSwath2 = +4.0 * np.pi * referenceTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
|
||||
-4.0 * np.pi * secondaryTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
|
||||
if referenceTrack.frames[i].swaths[j-1].startingRange - secondaryTrack.frames[i].swaths[j-1].startingRange == \
|
||||
referenceTrack.frames[i].swaths[j].startingRange - secondaryTrack.frames[i].swaths[j].startingRange:
|
||||
#phaseDiff.append(phaseDiffSwath2 - phaseDiffSwath1)
|
||||
#if master and slave versions are all before or after version 2.025 (starting range error < 0.5 m),
|
||||
#if reference and secondary versions are all before or after version 2.025 (starting range error < 0.5 m),
|
||||
#it should be OK to do the above.
|
||||
#see results in neom where it meets the above requirement, but there is still phase diff
|
||||
#to be less risky, we do not input values here
|
||||
|
@ -323,7 +323,7 @@ def runIonSubband(self):
|
|||
|
||||
#note that frame parameters are updated after mosaicking, here no need to update parameters
|
||||
#mosaic amplitudes
|
||||
swathMosaic(masterTrack.frames[i], inputAmplitudes, self._insar.amplitude,
|
||||
swathMosaic(referenceTrack.frames[i], inputAmplitudes, self._insar.amplitude,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, resamplingMethod=0)
|
||||
#mosaic interferograms
|
||||
#These are for ALOS-2, may need to change for ALOS-4!
|
||||
|
@ -338,7 +338,7 @@ def runIonSubband(self):
|
|||
phaseDiffFixed = None
|
||||
snapThreshold = None
|
||||
|
||||
(phaseDiffEst, phaseDiffUsed, phaseDiffSource) = swathMosaic(masterTrack.frames[i], inputInterferograms, self._insar.interferogram,
|
||||
(phaseDiffEst, phaseDiffUsed, phaseDiffSource) = swathMosaic(referenceTrack.frames[i], inputInterferograms, self._insar.interferogram,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, updateFrame=False,
|
||||
phaseCompensation=True, phaseDiff=phaseDiff, phaseDiffFixed=phaseDiffFixed, snapThreshold=snapThreshold, pcRangeLooks=1, pcAzimuthLooks=4,
|
||||
filt=False, resamplingMethod=1)
|
||||
|
@ -357,10 +357,10 @@ def runIonSubband(self):
|
|||
phaseDiffUnstableExist = True
|
||||
catalog.addItem('{} subswath phase difference unstable exists'.format(ionDir['subband'][k]), phaseDiffUnstableExist, 'runIonSubband')
|
||||
|
||||
create_xml(self._insar.amplitude, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'int')
|
||||
create_xml(self._insar.amplitude, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'int')
|
||||
|
||||
#update slave frame parameters here, here no need to update parameters
|
||||
#update secondary frame parameters here, here no need to update parameters
|
||||
os.chdir('../')
|
||||
#save parameter file, here no need to save parameter file
|
||||
os.chdir('../')
|
||||
|
@ -380,10 +380,10 @@ def runIonSubband(self):
|
|||
os.makedirs(mosaicDir, exist_ok=True)
|
||||
os.chdir(mosaicDir)
|
||||
|
||||
numberOfFrames = len(masterTrack.frames)
|
||||
numberOfFrames = len(referenceTrack.frames)
|
||||
if numberOfFrames == 1:
|
||||
import shutil
|
||||
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.masterFrames[0]))
|
||||
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.referenceFrames[0]))
|
||||
# if not os.path.isfile(self._insar.interferogram):
|
||||
# os.symlink(os.path.join('../', frameDir, self._insar.interferogram), self._insar.interferogram)
|
||||
# #shutil.copy2() can overwrite
|
||||
|
@ -406,34 +406,34 @@ def runIonSubband(self):
|
|||
else:
|
||||
#choose offsets
|
||||
if self.frameOffsetMatching:
|
||||
rangeOffsets = self._insar.frameRangeOffsetMatchingMaster
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingMaster
|
||||
rangeOffsets = self._insar.frameRangeOffsetMatchingReference
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingReference
|
||||
else:
|
||||
rangeOffsets = self._insar.frameRangeOffsetGeometricalMaster
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalMaster
|
||||
rangeOffsets = self._insar.frameRangeOffsetGeometricalReference
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalReference
|
||||
|
||||
#list of input files
|
||||
inputInterferograms = []
|
||||
inputAmplitudes = []
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
inputInterferograms.append(os.path.join('../', frameDir, 'mosaic', self._insar.interferogram))
|
||||
inputAmplitudes.append(os.path.join('../', frameDir, 'mosaic', self._insar.amplitude))
|
||||
|
||||
#note that track parameters are updated after mosaicking
|
||||
#mosaic amplitudes
|
||||
frameMosaic(masterTrack, inputAmplitudes, self._insar.amplitude,
|
||||
frameMosaic(referenceTrack, inputAmplitudes, self._insar.amplitude,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
|
||||
updateTrack=False, phaseCompensation=False, resamplingMethod=0)
|
||||
#mosaic interferograms
|
||||
frameMosaic(masterTrack, inputInterferograms, self._insar.interferogram,
|
||||
frameMosaic(referenceTrack, inputInterferograms, self._insar.interferogram,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
|
||||
updateTrack=False, phaseCompensation=True, resamplingMethod=1)
|
||||
|
||||
create_xml(self._insar.amplitude, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'int')
|
||||
create_xml(self._insar.amplitude, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'int')
|
||||
|
||||
#update slave parameters here, no need to update slave parameters here
|
||||
#update secondary parameters here, no need to update secondary parameters here
|
||||
|
||||
os.chdir('../')
|
||||
#save parameter file, no need to save parameter file here
|
||||
|
@ -448,7 +448,7 @@ def runIonSubband(self):
|
|||
|
||||
for k in range(2):
|
||||
os.chdir(ionDir['subband'][k])
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
#keep subswath interferograms
|
||||
#shutil.rmtree(frameDir)
|
||||
|
@ -470,7 +470,7 @@ def runIonSubband(self):
|
|||
os.makedirs(insarDir, exist_ok=True)
|
||||
os.chdir(insarDir)
|
||||
|
||||
rangePixelSize = self._insar.numberRangeLooks1 * masterTrack.rangePixelSize
|
||||
rangePixelSize = self._insar.numberRangeLooks1 * referenceTrack.rangePixelSize
|
||||
radarWavelength = subbandRadarWavelength[k]
|
||||
rectRangeOffset = os.path.join('../../../', insarDir, self._insar.rectRangeOffset)
|
||||
|
||||
|
|
|
@ -23,8 +23,8 @@ def runIonUwrap(self):
|
|||
self._insar.procDoc.addAllFromCatalog(catalog)
|
||||
return
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
wbdFile = os.path.abspath(self._insar.wbd)
|
||||
|
||||
from isceobj.Alos2Proc.runIonSubband import defineIonDir
|
||||
|
@ -197,8 +197,8 @@ def runIonUwrap(self):
|
|||
from isceobj.Alos2Proc.Alos2ProcPublic import snaphuUnwrap
|
||||
|
||||
for k in range(2):
|
||||
tmid = masterTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*masterTrack.azimuthLineInterval+
|
||||
masterTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*masterTrack.azimuthLineInterval)
|
||||
tmid = referenceTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*referenceTrack.azimuthLineInterval+
|
||||
referenceTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*referenceTrack.azimuthLineInterval)
|
||||
|
||||
if self.filterSubbandInt:
|
||||
toBeUnwrapped = 'filt_'+subbandPrefix[k]+ml2+'.int'
|
||||
|
@ -207,7 +207,7 @@ def runIonUwrap(self):
|
|||
toBeUnwrapped = subbandPrefix[k]+ml2+'.int'
|
||||
coherenceFile = 'diff'+ml2+'.cor'
|
||||
|
||||
snaphuUnwrap(masterTrack, tmid,
|
||||
snaphuUnwrap(referenceTrack, tmid,
|
||||
toBeUnwrapped,
|
||||
coherenceFile,
|
||||
subbandPrefix[k]+ml2+'.unw',
|
||||
|
|
|
@ -20,8 +20,8 @@ def runLook(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
#masterTrack = self._insar.loadTrack(master=True)
|
||||
#slaveTrack = self._insar.loadTrack(master=False)
|
||||
#referenceTrack = self._insar.loadTrack(reference=True)
|
||||
#secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
wbdFile = os.path.abspath(self._insar.wbd)
|
||||
|
||||
insarDir = 'insar'
|
||||
|
|
|
@ -23,8 +23,8 @@ def runPrepareSlc(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
|
||||
####################################################
|
||||
|
@ -33,7 +33,7 @@ def runPrepareSlc(self):
|
|||
#for ScanSAR-stripmap interferometry, we always crop slcs
|
||||
#for other cases, up to users
|
||||
if ((self._insar.modeCombination == 31) or (self._insar.modeCombination == 32)) or (self.cropSlc):
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
|
@ -42,14 +42,14 @@ def runPrepareSlc(self):
|
|||
|
||||
print('cropping frame {}, swath {}'.format(frameNumber, swathNumber))
|
||||
|
||||
masterSwath = masterTrack.frames[i].swaths[j]
|
||||
slaveSwath = slaveTrack.frames[i].swaths[j]
|
||||
referenceSwath = referenceTrack.frames[i].swaths[j]
|
||||
secondarySwath = secondaryTrack.frames[i].swaths[j]
|
||||
|
||||
#crop master
|
||||
cropSlc(masterTrack.orbit, masterSwath, self._insar.masterSlc, slaveTrack.orbit, slaveSwath, edge=0, useVirtualFile=self.useVirtualFile)
|
||||
#crop slave, since slave may go through resampling, we set edge=9
|
||||
#cropSlc(slaveTrack.orbit, slaveSwath, self._insar.slaveSlc, masterTrack.orbit, masterSwath, edge=9, useVirtualFile=self.useVirtualFile)
|
||||
cropSlc(slaveTrack.orbit, slaveSwath, self._insar.slaveSlc, masterTrack.orbit, masterSwath, edge=0, useVirtualFile=self.useVirtualFile)
|
||||
#crop reference
|
||||
cropSlc(referenceTrack.orbit, referenceSwath, self._insar.referenceSlc, secondaryTrack.orbit, secondarySwath, edge=0, useVirtualFile=self.useVirtualFile)
|
||||
#crop secondary, since secondary may go through resampling, we set edge=9
|
||||
#cropSlc(secondaryTrack.orbit, secondarySwath, self._insar.secondarySlc, referenceTrack.orbit, referenceSwath, edge=9, useVirtualFile=self.useVirtualFile)
|
||||
cropSlc(secondaryTrack.orbit, secondarySwath, self._insar.secondarySlc, referenceTrack.orbit, referenceSwath, edge=0, useVirtualFile=self.useVirtualFile)
|
||||
|
||||
os.chdir('../')
|
||||
os.chdir('../')
|
||||
|
@ -59,10 +59,10 @@ def runPrepareSlc(self):
|
|||
#2. range-filter slc
|
||||
####################################################
|
||||
#compute filtering parameters, radarwavelength and range bandwidth should be the same across all swaths and frames
|
||||
centerfreq1 = SPEED_OF_LIGHT / masterTrack.radarWavelength
|
||||
bandwidth1 = masterTrack.frames[0].swaths[0].rangeBandwidth
|
||||
centerfreq2 = SPEED_OF_LIGHT / slaveTrack.radarWavelength
|
||||
bandwidth2 = slaveTrack.frames[0].swaths[0].rangeBandwidth
|
||||
centerfreq1 = SPEED_OF_LIGHT / referenceTrack.radarWavelength
|
||||
bandwidth1 = referenceTrack.frames[0].swaths[0].rangeBandwidth
|
||||
centerfreq2 = SPEED_OF_LIGHT / secondaryTrack.radarWavelength
|
||||
bandwidth2 = secondaryTrack.frames[0].swaths[0].rangeBandwidth
|
||||
overlapfreq = overlapFrequency(centerfreq1, bandwidth1, centerfreq2, bandwidth2)
|
||||
|
||||
if overlapfreq == None:
|
||||
|
@ -73,7 +73,7 @@ def runPrepareSlc(self):
|
|||
raise Exception('there is not enough overlap bandwidth in range')
|
||||
centerfreq = (overlapfreq[1] + overlapfreq[0]) / 2.0
|
||||
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
|
@ -82,14 +82,14 @@ def runPrepareSlc(self):
|
|||
|
||||
print('range filtering frame {}, swath {}'.format(frameNumber, swathNumber))
|
||||
|
||||
masterSwath = masterTrack.frames[i].swaths[j]
|
||||
slaveSwath = slaveTrack.frames[i].swaths[j]
|
||||
referenceSwath = referenceTrack.frames[i].swaths[j]
|
||||
secondarySwath = secondaryTrack.frames[i].swaths[j]
|
||||
|
||||
# #compute filtering parameters
|
||||
# centerfreq1 = SPEED_OF_LIGHT / masterTrack.radarWavelength
|
||||
# bandwidth1 = masterSwath.rangeBandwidth
|
||||
# centerfreq2 = SPEED_OF_LIGHT / slaveTrack.radarWavelength
|
||||
# bandwidth2 = slaveSwath.rangeBandwidth
|
||||
# centerfreq1 = SPEED_OF_LIGHT / referenceTrack.radarWavelength
|
||||
# bandwidth1 = referenceSwath.rangeBandwidth
|
||||
# centerfreq2 = SPEED_OF_LIGHT / secondaryTrack.radarWavelength
|
||||
# bandwidth2 = secondarySwath.rangeBandwidth
|
||||
# overlapfreq = overlapFrequency(centerfreq1, bandwidth1, centerfreq2, bandwidth2)
|
||||
|
||||
# if overlapfreq == None:
|
||||
|
@ -100,65 +100,65 @@ def runPrepareSlc(self):
|
|||
# raise Exception('there is not enough overlap bandwidth in range')
|
||||
# centerfreq = (overlapfreq[1] + overlapfreq[0]) / 2.0
|
||||
|
||||
#filter master
|
||||
#filter reference
|
||||
if abs(centerfreq1 - centerfreq) < 1.0 and (bandwidth1 - 1.0) < overlapbandwidth:
|
||||
print('no need to range filter {}'.format(self._insar.masterSlc))
|
||||
print('no need to range filter {}'.format(self._insar.referenceSlc))
|
||||
else:
|
||||
print('range filter {}'.format(self._insar.masterSlc))
|
||||
print('range filter {}'.format(self._insar.referenceSlc))
|
||||
tmpSlc = 'tmp.slc'
|
||||
rg_filter(self._insar.masterSlc, 1, [tmpSlc], [overlapbandwidth / masterSwath.rangeSamplingRate],
|
||||
[(centerfreq - centerfreq1) / masterSwath.rangeSamplingRate],
|
||||
rg_filter(self._insar.referenceSlc, 1, [tmpSlc], [overlapbandwidth / referenceSwath.rangeSamplingRate],
|
||||
[(centerfreq - centerfreq1) / referenceSwath.rangeSamplingRate],
|
||||
257, 2048, 0.1, 0, 0.0)
|
||||
|
||||
if os.path.isfile(self._insar.masterSlc):
|
||||
os.remove(self._insar.masterSlc)
|
||||
os.remove(self._insar.masterSlc+'.vrt')
|
||||
os.remove(self._insar.masterSlc+'.xml')
|
||||
if os.path.isfile(self._insar.referenceSlc):
|
||||
os.remove(self._insar.referenceSlc)
|
||||
os.remove(self._insar.referenceSlc+'.vrt')
|
||||
os.remove(self._insar.referenceSlc+'.xml')
|
||||
|
||||
img = isceobj.createSlcImage()
|
||||
img.load(tmpSlc + '.xml')
|
||||
#remove original
|
||||
os.remove(tmpSlc + '.vrt')
|
||||
os.remove(tmpSlc + '.xml')
|
||||
os.rename(tmpSlc, self._insar.masterSlc)
|
||||
os.rename(tmpSlc, self._insar.referenceSlc)
|
||||
#creat new
|
||||
img.setFilename(self._insar.masterSlc)
|
||||
img.extraFilename = self._insar.masterSlc + '.vrt'
|
||||
img.setFilename(self._insar.referenceSlc)
|
||||
img.extraFilename = self._insar.referenceSlc + '.vrt'
|
||||
img.setAccessMode('READ')
|
||||
img.renderHdr()
|
||||
|
||||
masterTrack.radarWavelength = SPEED_OF_LIGHT/centerfreq
|
||||
masterSwath.rangeBandwidth = overlapbandwidth
|
||||
referenceTrack.radarWavelength = SPEED_OF_LIGHT/centerfreq
|
||||
referenceSwath.rangeBandwidth = overlapbandwidth
|
||||
|
||||
#filter slave
|
||||
#filter secondary
|
||||
if abs(centerfreq2 - centerfreq) < 1.0 and (bandwidth2 - 1.0) < overlapbandwidth:
|
||||
print('no need to range filter {}'.format(self._insar.slaveSlc))
|
||||
print('no need to range filter {}'.format(self._insar.secondarySlc))
|
||||
else:
|
||||
print('range filter {}'.format(self._insar.slaveSlc))
|
||||
print('range filter {}'.format(self._insar.secondarySlc))
|
||||
tmpSlc = 'tmp.slc'
|
||||
rg_filter(self._insar.slaveSlc, 1, [tmpSlc], [overlapbandwidth / slaveSwath.rangeSamplingRate],
|
||||
[(centerfreq - centerfreq2) / slaveSwath.rangeSamplingRate],
|
||||
rg_filter(self._insar.secondarySlc, 1, [tmpSlc], [overlapbandwidth / secondarySwath.rangeSamplingRate],
|
||||
[(centerfreq - centerfreq2) / secondarySwath.rangeSamplingRate],
|
||||
257, 2048, 0.1, 0, 0.0)
|
||||
|
||||
if os.path.isfile(self._insar.slaveSlc):
|
||||
os.remove(self._insar.slaveSlc)
|
||||
os.remove(self._insar.slaveSlc+'.vrt')
|
||||
os.remove(self._insar.slaveSlc+'.xml')
|
||||
if os.path.isfile(self._insar.secondarySlc):
|
||||
os.remove(self._insar.secondarySlc)
|
||||
os.remove(self._insar.secondarySlc+'.vrt')
|
||||
os.remove(self._insar.secondarySlc+'.xml')
|
||||
|
||||
img = isceobj.createSlcImage()
|
||||
img.load(tmpSlc + '.xml')
|
||||
#remove original
|
||||
os.remove(tmpSlc + '.vrt')
|
||||
os.remove(tmpSlc + '.xml')
|
||||
os.rename(tmpSlc, self._insar.slaveSlc)
|
||||
os.rename(tmpSlc, self._insar.secondarySlc)
|
||||
#creat new
|
||||
img.setFilename(self._insar.slaveSlc)
|
||||
img.extraFilename = self._insar.slaveSlc + '.vrt'
|
||||
img.setFilename(self._insar.secondarySlc)
|
||||
img.extraFilename = self._insar.secondarySlc + '.vrt'
|
||||
img.setAccessMode('READ')
|
||||
img.renderHdr()
|
||||
|
||||
slaveTrack.radarWavelength = SPEED_OF_LIGHT/centerfreq
|
||||
slaveSwath.rangeBandwidth = overlapbandwidth
|
||||
secondaryTrack.radarWavelength = SPEED_OF_LIGHT/centerfreq
|
||||
secondarySwath.rangeBandwidth = overlapbandwidth
|
||||
|
||||
os.chdir('../')
|
||||
os.chdir('../')
|
||||
|
@ -167,7 +167,7 @@ def runPrepareSlc(self):
|
|||
####################################################
|
||||
#3. equalize sample size
|
||||
####################################################
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
|
@ -176,59 +176,59 @@ def runPrepareSlc(self):
|
|||
|
||||
print('equalize sample size frame {}, swath {}'.format(frameNumber, swathNumber))
|
||||
|
||||
masterSwath = masterTrack.frames[i].swaths[j]
|
||||
slaveSwath = slaveTrack.frames[i].swaths[j]
|
||||
referenceSwath = referenceTrack.frames[i].swaths[j]
|
||||
secondarySwath = secondaryTrack.frames[i].swaths[j]
|
||||
|
||||
if abs(masterSwath.rangeSamplingRate - slaveSwath.rangeSamplingRate) < 1.0 and abs(masterSwath.prf - slaveSwath.prf) < 1.0:
|
||||
print('no need to resample {}.'.format(self._insar.slaveSlc))
|
||||
if abs(referenceSwath.rangeSamplingRate - secondarySwath.rangeSamplingRate) < 1.0 and abs(referenceSwath.prf - secondarySwath.prf) < 1.0:
|
||||
print('no need to resample {}.'.format(self._insar.secondarySlc))
|
||||
else:
|
||||
outWidth = round(slaveSwath.numberOfSamples / slaveSwath.rangeSamplingRate * masterSwath.rangeSamplingRate)
|
||||
outLength = round(slaveSwath.numberOfLines / slaveSwath.prf * masterSwath.prf)
|
||||
outWidth = round(secondarySwath.numberOfSamples / secondarySwath.rangeSamplingRate * referenceSwath.rangeSamplingRate)
|
||||
outLength = round(secondarySwath.numberOfLines / secondarySwath.prf * referenceSwath.prf)
|
||||
|
||||
tmpSlc = 'tmp.slc'
|
||||
resamp(self._insar.slaveSlc, tmpSlc, 'fake', 'fake', outWidth, outLength, slaveSwath.prf, slaveSwath.dopplerVsPixel,
|
||||
rgcoef=[0.0, (1.0/masterSwath.rangeSamplingRate) / (1.0/slaveSwath.rangeSamplingRate) - 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
azcoef=[0.0, 0.0, (1.0/masterSwath.prf) / (1.0/slaveSwath.prf) - 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
resamp(self._insar.secondarySlc, tmpSlc, 'fake', 'fake', outWidth, outLength, secondarySwath.prf, secondarySwath.dopplerVsPixel,
|
||||
rgcoef=[0.0, (1.0/referenceSwath.rangeSamplingRate) / (1.0/secondarySwath.rangeSamplingRate) - 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
azcoef=[0.0, 0.0, (1.0/referenceSwath.prf) / (1.0/secondarySwath.prf) - 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
azpos_off=0.0)
|
||||
|
||||
if os.path.isfile(self._insar.slaveSlc):
|
||||
os.remove(self._insar.slaveSlc)
|
||||
os.remove(self._insar.slaveSlc+'.vrt')
|
||||
os.remove(self._insar.slaveSlc+'.xml')
|
||||
if os.path.isfile(self._insar.secondarySlc):
|
||||
os.remove(self._insar.secondarySlc)
|
||||
os.remove(self._insar.secondarySlc+'.vrt')
|
||||
os.remove(self._insar.secondarySlc+'.xml')
|
||||
|
||||
img = isceobj.createSlcImage()
|
||||
img.load(tmpSlc + '.xml')
|
||||
#remove original
|
||||
os.remove(tmpSlc + '.vrt')
|
||||
os.remove(tmpSlc + '.xml')
|
||||
os.rename(tmpSlc, self._insar.slaveSlc)
|
||||
os.rename(tmpSlc, self._insar.secondarySlc)
|
||||
#creat new
|
||||
img.setFilename(self._insar.slaveSlc)
|
||||
img.extraFilename = self._insar.slaveSlc + '.vrt'
|
||||
img.setFilename(self._insar.secondarySlc)
|
||||
img.extraFilename = self._insar.secondarySlc + '.vrt'
|
||||
img.setAccessMode('READ')
|
||||
img.renderHdr()
|
||||
|
||||
#update parameters
|
||||
#update doppler and azfmrate first
|
||||
index2 = np.arange(outWidth)
|
||||
index = np.arange(outWidth) * (1.0/masterSwath.rangeSamplingRate) / (1.0/slaveSwath.rangeSamplingRate)
|
||||
dop = np.polyval(slaveSwath.dopplerVsPixel[::-1], index)
|
||||
index = np.arange(outWidth) * (1.0/referenceSwath.rangeSamplingRate) / (1.0/secondarySwath.rangeSamplingRate)
|
||||
dop = np.polyval(secondarySwath.dopplerVsPixel[::-1], index)
|
||||
p = np.polyfit(index2, dop, 3)
|
||||
slaveSwath.dopplerVsPixel = [p[3], p[2], p[1], p[0]]
|
||||
secondarySwath.dopplerVsPixel = [p[3], p[2], p[1], p[0]]
|
||||
|
||||
azfmrate = np.polyval(slaveSwath.azimuthFmrateVsPixel[::-1], index)
|
||||
azfmrate = np.polyval(secondarySwath.azimuthFmrateVsPixel[::-1], index)
|
||||
p = np.polyfit(index2, azfmrate, 3)
|
||||
slaveSwath.azimuthFmrateVsPixel = [p[3], p[2], p[1], p[0]]
|
||||
secondarySwath.azimuthFmrateVsPixel = [p[3], p[2], p[1], p[0]]
|
||||
|
||||
slaveSwath.numberOfSamples = outWidth
|
||||
slaveSwath.numberOfLines = outLength
|
||||
secondarySwath.numberOfSamples = outWidth
|
||||
secondarySwath.numberOfLines = outLength
|
||||
|
||||
slaveSwath.prf = masterSwath.prf
|
||||
slaveSwath.rangeSamplingRate = masterSwath.rangeSamplingRate
|
||||
slaveSwath.rangePixelSize = masterSwath.rangePixelSize
|
||||
slaveSwath.azimuthPixelSize = masterSwath.azimuthPixelSize
|
||||
slaveSwath.azimuthLineInterval = masterSwath.azimuthLineInterval
|
||||
slaveSwath.prfFraction = masterSwath.prfFraction
|
||||
secondarySwath.prf = referenceSwath.prf
|
||||
secondarySwath.rangeSamplingRate = referenceSwath.rangeSamplingRate
|
||||
secondarySwath.rangePixelSize = referenceSwath.rangePixelSize
|
||||
secondarySwath.azimuthPixelSize = referenceSwath.azimuthPixelSize
|
||||
secondarySwath.azimuthLineInterval = referenceSwath.azimuthLineInterval
|
||||
secondarySwath.prfFraction = referenceSwath.prfFraction
|
||||
|
||||
os.chdir('../')
|
||||
os.chdir('../')
|
||||
|
@ -237,7 +237,7 @@ def runPrepareSlc(self):
|
|||
####################################################
|
||||
#4. mbf
|
||||
####################################################
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
|
@ -246,85 +246,85 @@ def runPrepareSlc(self):
|
|||
|
||||
print('azimuth filter frame {}, swath {}'.format(frameNumber, swathNumber))
|
||||
|
||||
masterSwath = masterTrack.frames[i].swaths[j]
|
||||
slaveSwath = slaveTrack.frames[i].swaths[j]
|
||||
referenceSwath = referenceTrack.frames[i].swaths[j]
|
||||
secondarySwath = secondaryTrack.frames[i].swaths[j]
|
||||
|
||||
#using Piyush's code for computing range and azimuth offsets
|
||||
midRange = masterSwath.startingRange + masterSwath.rangePixelSize * masterSwath.numberOfSamples * 0.5
|
||||
midSensingStart = masterSwath.sensingStart + datetime.timedelta(seconds = masterSwath.numberOfLines * 0.5 / masterSwath.prf)
|
||||
llh = masterTrack.orbit.rdr2geo(midSensingStart, midRange)
|
||||
slvaz, slvrng = slaveTrack.orbit.geo2rdr(llh)
|
||||
midRange = referenceSwath.startingRange + referenceSwath.rangePixelSize * referenceSwath.numberOfSamples * 0.5
|
||||
midSensingStart = referenceSwath.sensingStart + datetime.timedelta(seconds = referenceSwath.numberOfLines * 0.5 / referenceSwath.prf)
|
||||
llh = referenceTrack.orbit.rdr2geo(midSensingStart, midRange)
|
||||
slvaz, slvrng = secondaryTrack.orbit.geo2rdr(llh)
|
||||
###Translate to offsets
|
||||
#at this point, slave range pixel size and prf should be the same as those of master
|
||||
rgoff = ((slvrng - slaveSwath.startingRange) / masterSwath.rangePixelSize) - masterSwath.numberOfSamples * 0.5
|
||||
azoff = ((slvaz - slaveSwath.sensingStart).total_seconds() * masterSwath.prf) - masterSwath.numberOfLines * 0.5
|
||||
#at this point, secondary range pixel size and prf should be the same as those of reference
|
||||
rgoff = ((slvrng - secondarySwath.startingRange) / referenceSwath.rangePixelSize) - referenceSwath.numberOfSamples * 0.5
|
||||
azoff = ((slvaz - secondarySwath.sensingStart).total_seconds() * referenceSwath.prf) - referenceSwath.numberOfLines * 0.5
|
||||
|
||||
#filter master
|
||||
#filter reference
|
||||
if not ((self._insar.modeCombination == 21) and (self._insar.burstSynchronization <= self.burstSynchronizationThreshold)):
|
||||
print('no need to azimuth filter {}.'.format(self._insar.masterSlc))
|
||||
print('no need to azimuth filter {}.'.format(self._insar.referenceSlc))
|
||||
else:
|
||||
index = np.arange(masterSwath.numberOfSamples) + rgoff
|
||||
dop = np.polyval(slaveSwath.dopplerVsPixel[::-1], index)
|
||||
index = np.arange(referenceSwath.numberOfSamples) + rgoff
|
||||
dop = np.polyval(secondarySwath.dopplerVsPixel[::-1], index)
|
||||
p = np.polyfit(index-rgoff, dop, 3)
|
||||
dopplerVsPixelSlave = [p[3], p[2], p[1], p[0]]
|
||||
dopplerVsPixelSecondary = [p[3], p[2], p[1], p[0]]
|
||||
|
||||
tmpSlc = 'tmp.slc'
|
||||
mbf(self._insar.masterSlc, tmpSlc, masterSwath.prf, 1.0,
|
||||
masterSwath.burstLength, masterSwath.burstCycleLength-masterSwath.burstLength,
|
||||
self._insar.burstUnsynchronizedTime * masterSwath.prf,
|
||||
(masterSwath.burstStartTime - masterSwath.sensingStart).total_seconds() * masterSwath.prf,
|
||||
masterSwath.azimuthFmrateVsPixel, masterSwath.dopplerVsPixel, dopplerVsPixelSlave)
|
||||
mbf(self._insar.referenceSlc, tmpSlc, referenceSwath.prf, 1.0,
|
||||
referenceSwath.burstLength, referenceSwath.burstCycleLength-referenceSwath.burstLength,
|
||||
self._insar.burstUnsynchronizedTime * referenceSwath.prf,
|
||||
(referenceSwath.burstStartTime - referenceSwath.sensingStart).total_seconds() * referenceSwath.prf,
|
||||
referenceSwath.azimuthFmrateVsPixel, referenceSwath.dopplerVsPixel, dopplerVsPixelSecondary)
|
||||
|
||||
if os.path.isfile(self._insar.masterSlc):
|
||||
os.remove(self._insar.masterSlc)
|
||||
os.remove(self._insar.masterSlc+'.vrt')
|
||||
os.remove(self._insar.masterSlc+'.xml')
|
||||
if os.path.isfile(self._insar.referenceSlc):
|
||||
os.remove(self._insar.referenceSlc)
|
||||
os.remove(self._insar.referenceSlc+'.vrt')
|
||||
os.remove(self._insar.referenceSlc+'.xml')
|
||||
|
||||
img = isceobj.createSlcImage()
|
||||
img.load(tmpSlc + '.xml')
|
||||
#remove original
|
||||
os.remove(tmpSlc + '.vrt')
|
||||
os.remove(tmpSlc + '.xml')
|
||||
os.rename(tmpSlc, self._insar.masterSlc)
|
||||
os.rename(tmpSlc, self._insar.referenceSlc)
|
||||
#creat new
|
||||
img.setFilename(self._insar.masterSlc)
|
||||
img.extraFilename = self._insar.masterSlc + '.vrt'
|
||||
img.setFilename(self._insar.referenceSlc)
|
||||
img.extraFilename = self._insar.referenceSlc + '.vrt'
|
||||
img.setAccessMode('READ')
|
||||
img.renderHdr()
|
||||
|
||||
#filter slave
|
||||
#filter secondary
|
||||
if not(
|
||||
((self._insar.modeCombination == 21) and (self._insar.burstSynchronization <= self.burstSynchronizationThreshold)) or \
|
||||
(self._insar.modeCombination == 31)
|
||||
):
|
||||
print('no need to azimuth filter {}.'.format(self._insar.slaveSlc))
|
||||
print('no need to azimuth filter {}.'.format(self._insar.secondarySlc))
|
||||
else:
|
||||
index = np.arange(slaveSwath.numberOfSamples) - rgoff
|
||||
dop = np.polyval(masterSwath.dopplerVsPixel[::-1], index)
|
||||
index = np.arange(secondarySwath.numberOfSamples) - rgoff
|
||||
dop = np.polyval(referenceSwath.dopplerVsPixel[::-1], index)
|
||||
p = np.polyfit(index+rgoff, dop, 3)
|
||||
dopplerVsPixelMaster = [p[3], p[2], p[1], p[0]]
|
||||
dopplerVsPixelReference = [p[3], p[2], p[1], p[0]]
|
||||
|
||||
tmpSlc = 'tmp.slc'
|
||||
mbf(self._insar.slaveSlc, tmpSlc, slaveSwath.prf, 1.0,
|
||||
slaveSwath.burstLength, slaveSwath.burstCycleLength-slaveSwath.burstLength,
|
||||
-self._insar.burstUnsynchronizedTime * slaveSwath.prf,
|
||||
(slaveSwath.burstStartTime - slaveSwath.sensingStart).total_seconds() * slaveSwath.prf,
|
||||
slaveSwath.azimuthFmrateVsPixel, slaveSwath.dopplerVsPixel, dopplerVsPixelMaster)
|
||||
mbf(self._insar.secondarySlc, tmpSlc, secondarySwath.prf, 1.0,
|
||||
secondarySwath.burstLength, secondarySwath.burstCycleLength-secondarySwath.burstLength,
|
||||
-self._insar.burstUnsynchronizedTime * secondarySwath.prf,
|
||||
(secondarySwath.burstStartTime - secondarySwath.sensingStart).total_seconds() * secondarySwath.prf,
|
||||
secondarySwath.azimuthFmrateVsPixel, secondarySwath.dopplerVsPixel, dopplerVsPixelReference)
|
||||
|
||||
if os.path.isfile(self._insar.slaveSlc):
|
||||
os.remove(self._insar.slaveSlc)
|
||||
os.remove(self._insar.slaveSlc+'.vrt')
|
||||
os.remove(self._insar.slaveSlc+'.xml')
|
||||
if os.path.isfile(self._insar.secondarySlc):
|
||||
os.remove(self._insar.secondarySlc)
|
||||
os.remove(self._insar.secondarySlc+'.vrt')
|
||||
os.remove(self._insar.secondarySlc+'.xml')
|
||||
|
||||
img = isceobj.createSlcImage()
|
||||
img.load(tmpSlc + '.xml')
|
||||
#remove original
|
||||
os.remove(tmpSlc + '.vrt')
|
||||
os.remove(tmpSlc + '.xml')
|
||||
os.rename(tmpSlc, self._insar.slaveSlc)
|
||||
os.rename(tmpSlc, self._insar.secondarySlc)
|
||||
#creat new
|
||||
img.setFilename(self._insar.slaveSlc)
|
||||
img.extraFilename = self._insar.slaveSlc + '.vrt'
|
||||
img.setFilename(self._insar.secondarySlc)
|
||||
img.extraFilename = self._insar.secondarySlc + '.vrt'
|
||||
img.setAccessMode('READ')
|
||||
img.renderHdr()
|
||||
|
||||
|
@ -332,8 +332,8 @@ def runPrepareSlc(self):
|
|||
os.chdir('../')
|
||||
|
||||
#in case parameters changed
|
||||
self._insar.saveTrack(masterTrack, master=True)
|
||||
self._insar.saveTrack(slaveTrack, master=False)
|
||||
self._insar.saveTrack(referenceTrack, reference=True)
|
||||
self._insar.saveTrack(secondaryTrack, reference=False)
|
||||
|
||||
catalog.printToLog(logger, "runPrepareSlc")
|
||||
self._insar.procDoc.addAllFromCatalog(catalog)
|
||||
|
|
|
@ -27,24 +27,24 @@ def runPreprocessor(self):
|
|||
#find files
|
||||
#actually no need to use absolute path any longer, since we are able to find file from vrt now. 27-JAN-2020, CRL.
|
||||
#denseoffset may still need absolute path when making links
|
||||
self.masterDir = os.path.abspath(self.masterDir)
|
||||
self.slaveDir = os.path.abspath(self.slaveDir)
|
||||
self.referenceDir = os.path.abspath(self.referenceDir)
|
||||
self.secondaryDir = os.path.abspath(self.secondaryDir)
|
||||
|
||||
ledFilesMaster = sorted(glob.glob(os.path.join(self.masterDir, 'LED-ALOS2*-*-*')))
|
||||
imgFilesMaster = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*-*-*'.format(self.masterPolarization.upper()))))
|
||||
ledFilesReference = sorted(glob.glob(os.path.join(self.referenceDir, 'LED-ALOS2*-*-*')))
|
||||
imgFilesReference = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*-*-*'.format(self.referencePolarization.upper()))))
|
||||
|
||||
ledFilesSlave = sorted(glob.glob(os.path.join(self.slaveDir, 'LED-ALOS2*-*-*')))
|
||||
imgFilesSlave = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*-*-*'.format(self.slavePolarization.upper()))))
|
||||
ledFilesSecondary = sorted(glob.glob(os.path.join(self.secondaryDir, 'LED-ALOS2*-*-*')))
|
||||
imgFilesSecondary = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*-*-*'.format(self.secondaryPolarization.upper()))))
|
||||
|
||||
firstFrameMaster = ledFilesMaster[0].split('-')[-3][-4:]
|
||||
firstFrameSlave = ledFilesSlave[0].split('-')[-3][-4:]
|
||||
firstFrameImagesMaster = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.masterPolarization.upper(), firstFrameMaster))))
|
||||
firstFrameImagesSlave = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.slavePolarization.upper(), firstFrameSlave))))
|
||||
firstFrameReference = ledFilesReference[0].split('-')[-3][-4:]
|
||||
firstFrameSecondary = ledFilesSecondary[0].split('-')[-3][-4:]
|
||||
firstFrameImagesReference = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.referencePolarization.upper(), firstFrameReference))))
|
||||
firstFrameImagesSecondary = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.secondaryPolarization.upper(), firstFrameSecondary))))
|
||||
|
||||
|
||||
#determin operation mode
|
||||
masterMode = os.path.basename(ledFilesMaster[0]).split('-')[-1][0:3]
|
||||
slaveMode = os.path.basename(ledFilesSlave[0]).split('-')[-1][0:3]
|
||||
referenceMode = os.path.basename(ledFilesReference[0]).split('-')[-1][0:3]
|
||||
secondaryMode = os.path.basename(ledFilesSecondary[0]).split('-')[-1][0:3]
|
||||
spotlightModes = ['SBS']
|
||||
stripmapModes = ['UBS', 'UBD', 'HBS', 'HBD', 'HBQ', 'FBS', 'FBD', 'FBQ']
|
||||
scansarNominalModes = ['WBS', 'WBD', 'WWS', 'WWD']
|
||||
|
@ -52,21 +52,21 @@ def runPreprocessor(self):
|
|||
scansarModes = ['WBS', 'WBD', 'WWS', 'WWD', 'VBS', 'VBD']
|
||||
|
||||
#usable combinations
|
||||
if (masterMode in spotlightModes) and (slaveMode in spotlightModes):
|
||||
if (referenceMode in spotlightModes) and (secondaryMode in spotlightModes):
|
||||
self._insar.modeCombination = 0
|
||||
elif (masterMode in stripmapModes) and (slaveMode in stripmapModes):
|
||||
elif (referenceMode in stripmapModes) and (secondaryMode in stripmapModes):
|
||||
self._insar.modeCombination = 1
|
||||
elif (masterMode in scansarNominalModes) and (slaveMode in scansarNominalModes):
|
||||
elif (referenceMode in scansarNominalModes) and (secondaryMode in scansarNominalModes):
|
||||
self._insar.modeCombination = 21
|
||||
elif (masterMode in scansarWideModes) and (slaveMode in scansarWideModes):
|
||||
elif (referenceMode in scansarWideModes) and (secondaryMode in scansarWideModes):
|
||||
self._insar.modeCombination = 22
|
||||
elif (masterMode in scansarNominalModes) and (slaveMode in stripmapModes):
|
||||
elif (referenceMode in scansarNominalModes) and (secondaryMode in stripmapModes):
|
||||
self._insar.modeCombination = 31
|
||||
elif (masterMode in scansarWideModes) and (slaveMode in stripmapModes):
|
||||
elif (referenceMode in scansarWideModes) and (secondaryMode in stripmapModes):
|
||||
self._insar.modeCombination = 32
|
||||
else:
|
||||
print('\n\nthis mode combination is not possible')
|
||||
print('note that for ScanSAR-stripmap, ScanSAR must be master\n\n')
|
||||
print('note that for ScanSAR-stripmap, ScanSAR must be reference\n\n')
|
||||
raise Exception('mode combination not supported')
|
||||
|
||||
# pixel size from real data processing. azimuth pixel size may change a bit as
|
||||
|
@ -111,112 +111,112 @@ def runPreprocessor(self):
|
|||
self._insar.numberAzimuthLooksIon = self.numberAzimuthLooksIon
|
||||
|
||||
if self._insar.numberRangeLooks1 == None:
|
||||
if masterMode in ['SBS']:
|
||||
if referenceMode in ['SBS']:
|
||||
self._insar.numberRangeLooks1 = 2
|
||||
elif masterMode in ['UBS', 'UBD']:
|
||||
elif referenceMode in ['UBS', 'UBD']:
|
||||
self._insar.numberRangeLooks1 = 2
|
||||
elif masterMode in ['HBS', 'HBD', 'HBQ']:
|
||||
elif referenceMode in ['HBS', 'HBD', 'HBQ']:
|
||||
self._insar.numberRangeLooks1 = 2
|
||||
elif masterMode in ['FBS', 'FBD', 'FBQ']:
|
||||
elif referenceMode in ['FBS', 'FBD', 'FBQ']:
|
||||
self._insar.numberRangeLooks1 = 2
|
||||
elif masterMode in ['WBS', 'WBD']:
|
||||
elif referenceMode in ['WBS', 'WBD']:
|
||||
self._insar.numberRangeLooks1 = 1
|
||||
elif masterMode in ['WWS', 'WWD']:
|
||||
elif referenceMode in ['WWS', 'WWD']:
|
||||
self._insar.numberRangeLooks1 = 2
|
||||
elif masterMode in ['VBS', 'VBD']:
|
||||
elif referenceMode in ['VBS', 'VBD']:
|
||||
self._insar.numberRangeLooks1 = 1
|
||||
else:
|
||||
raise Exception('unknow acquisition mode')
|
||||
|
||||
if self._insar.numberAzimuthLooks1 == None:
|
||||
if masterMode in ['SBS']:
|
||||
if referenceMode in ['SBS']:
|
||||
self._insar.numberAzimuthLooks1 = 4
|
||||
elif masterMode in ['UBS', 'UBD']:
|
||||
elif referenceMode in ['UBS', 'UBD']:
|
||||
self._insar.numberAzimuthLooks1 = 2
|
||||
elif masterMode in ['HBS', 'HBD', 'HBQ']:
|
||||
elif referenceMode in ['HBS', 'HBD', 'HBQ']:
|
||||
self._insar.numberAzimuthLooks1 = 2
|
||||
elif masterMode in ['FBS', 'FBD', 'FBQ']:
|
||||
elif referenceMode in ['FBS', 'FBD', 'FBQ']:
|
||||
self._insar.numberAzimuthLooks1 = 4
|
||||
elif masterMode in ['WBS', 'WBD']:
|
||||
elif referenceMode in ['WBS', 'WBD']:
|
||||
self._insar.numberAzimuthLooks1 = 14
|
||||
elif masterMode in ['WWS', 'WWD']:
|
||||
elif referenceMode in ['WWS', 'WWD']:
|
||||
self._insar.numberAzimuthLooks1 = 14
|
||||
elif masterMode in ['VBS', 'VBD']:
|
||||
elif referenceMode in ['VBS', 'VBD']:
|
||||
self._insar.numberAzimuthLooks1 = 14
|
||||
else:
|
||||
raise Exception('unknow acquisition mode')
|
||||
|
||||
if self._insar.numberRangeLooks2 == None:
|
||||
if masterMode in spotlightModes:
|
||||
if referenceMode in spotlightModes:
|
||||
self._insar.numberRangeLooks2 = 4
|
||||
elif masterMode in stripmapModes:
|
||||
elif referenceMode in stripmapModes:
|
||||
self._insar.numberRangeLooks2 = 4
|
||||
elif masterMode in scansarModes:
|
||||
elif referenceMode in scansarModes:
|
||||
self._insar.numberRangeLooks2 = 5
|
||||
else:
|
||||
raise Exception('unknow acquisition mode')
|
||||
|
||||
if self._insar.numberAzimuthLooks2 == None:
|
||||
if masterMode in spotlightModes:
|
||||
if referenceMode in spotlightModes:
|
||||
self._insar.numberAzimuthLooks2 = 4
|
||||
elif masterMode in stripmapModes:
|
||||
elif referenceMode in stripmapModes:
|
||||
self._insar.numberAzimuthLooks2 = 4
|
||||
elif masterMode in scansarModes:
|
||||
elif referenceMode in scansarModes:
|
||||
self._insar.numberAzimuthLooks2 = 2
|
||||
else:
|
||||
raise Exception('unknow acquisition mode')
|
||||
|
||||
if self._insar.numberRangeLooksIon == None:
|
||||
if masterMode in spotlightModes:
|
||||
if referenceMode in spotlightModes:
|
||||
self._insar.numberRangeLooksIon = 16
|
||||
elif masterMode in stripmapModes:
|
||||
elif referenceMode in stripmapModes:
|
||||
self._insar.numberRangeLooksIon = 16
|
||||
elif masterMode in scansarModes:
|
||||
elif referenceMode in scansarModes:
|
||||
self._insar.numberRangeLooksIon = 40
|
||||
else:
|
||||
raise Exception('unknow acquisition mode')
|
||||
|
||||
if self._insar.numberAzimuthLooksIon == None:
|
||||
if masterMode in spotlightModes:
|
||||
if referenceMode in spotlightModes:
|
||||
self._insar.numberAzimuthLooksIon = 16
|
||||
elif masterMode in stripmapModes:
|
||||
elif referenceMode in stripmapModes:
|
||||
self._insar.numberAzimuthLooksIon = 16
|
||||
elif masterMode in scansarModes:
|
||||
elif referenceMode in scansarModes:
|
||||
self._insar.numberAzimuthLooksIon = 16
|
||||
else:
|
||||
raise Exception('unknow acquisition mode')
|
||||
|
||||
|
||||
#define processing file names
|
||||
self._insar.masterDate = os.path.basename(ledFilesMaster[0]).split('-')[2]
|
||||
self._insar.slaveDate = os.path.basename(ledFilesSlave[0]).split('-')[2]
|
||||
self._insar.setFilename(masterDate=self._insar.masterDate, slaveDate=self._insar.slaveDate, nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1, nrlks2=self._insar.numberRangeLooks2, nalks2=self._insar.numberAzimuthLooks2)
|
||||
self._insar.referenceDate = os.path.basename(ledFilesReference[0]).split('-')[2]
|
||||
self._insar.secondaryDate = os.path.basename(ledFilesSecondary[0]).split('-')[2]
|
||||
self._insar.setFilename(referenceDate=self._insar.referenceDate, secondaryDate=self._insar.secondaryDate, nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1, nrlks2=self._insar.numberRangeLooks2, nalks2=self._insar.numberAzimuthLooks2)
|
||||
|
||||
|
||||
#find frame numbers
|
||||
if (self._insar.modeCombination == 31) or (self._insar.modeCombination == 32):
|
||||
if (self.masterFrames == None) or (self.slaveFrames == None):
|
||||
raise Exception('for ScanSAR-stripmap inteferometry, you must set master and slave frame numbers')
|
||||
if (self.referenceFrames == None) or (self.secondaryFrames == None):
|
||||
raise Exception('for ScanSAR-stripmap inteferometry, you must set reference and secondary frame numbers')
|
||||
#if not set, find frames automatically
|
||||
if self.masterFrames == None:
|
||||
self.masterFrames = []
|
||||
for led in ledFilesMaster:
|
||||
if self.referenceFrames == None:
|
||||
self.referenceFrames = []
|
||||
for led in ledFilesReference:
|
||||
frameNumber = os.path.basename(led).split('-')[1][-4:]
|
||||
if frameNumber not in self.masterFrames:
|
||||
self.masterFrames.append(frameNumber)
|
||||
if self.slaveFrames == None:
|
||||
self.slaveFrames = []
|
||||
for led in ledFilesSlave:
|
||||
if frameNumber not in self.referenceFrames:
|
||||
self.referenceFrames.append(frameNumber)
|
||||
if self.secondaryFrames == None:
|
||||
self.secondaryFrames = []
|
||||
for led in ledFilesSecondary:
|
||||
frameNumber = os.path.basename(led).split('-')[1][-4:]
|
||||
if frameNumber not in self.slaveFrames:
|
||||
self.slaveFrames.append(frameNumber)
|
||||
if frameNumber not in self.secondaryFrames:
|
||||
self.secondaryFrames.append(frameNumber)
|
||||
#sort frames
|
||||
self.masterFrames = sorted(self.masterFrames)
|
||||
self.slaveFrames = sorted(self.slaveFrames)
|
||||
self.referenceFrames = sorted(self.referenceFrames)
|
||||
self.secondaryFrames = sorted(self.secondaryFrames)
|
||||
#check number of frames
|
||||
if len(self.masterFrames) != len(self.slaveFrames):
|
||||
raise Exception('number of frames in master dir is not equal to number of frames \
|
||||
in slave dir. please set frame number manually')
|
||||
if len(self.referenceFrames) != len(self.secondaryFrames):
|
||||
raise Exception('number of frames in reference dir is not equal to number of frames \
|
||||
in secondary dir. please set frame number manually')
|
||||
|
||||
|
||||
#find swath numbers (if not ScanSAR-ScanSAR, compute valid swaths)
|
||||
|
@ -245,7 +245,7 @@ def runPreprocessor(self):
|
|||
numberOfSwaths = 7
|
||||
overlapSubswaths = []
|
||||
for i in range(numberOfSwaths):
|
||||
overlapRatio = check_overlap(ledFilesMaster[0], firstFrameImagesMaster[i], ledFilesSlave[0], firstFrameImagesSlave[0])
|
||||
overlapRatio = check_overlap(ledFilesReference[0], firstFrameImagesReference[i], ledFilesSecondary[0], firstFrameImagesSecondary[0])
|
||||
if overlapRatio > 1.0 / 4.0:
|
||||
overlapSubswaths.append(i+1)
|
||||
if overlapSubswaths == []:
|
||||
|
@ -254,8 +254,8 @@ def runPreprocessor(self):
|
|||
self.endingSwath = int(overlapSubswaths[-1])
|
||||
|
||||
#save the valid frames and swaths for future processing
|
||||
self._insar.masterFrames = self.masterFrames
|
||||
self._insar.slaveFrames = self.slaveFrames
|
||||
self._insar.referenceFrames = self.referenceFrames
|
||||
self._insar.secondaryFrames = self.secondaryFrames
|
||||
self._insar.startingSwath = self.startingSwath
|
||||
self._insar.endingSwath = self.endingSwath
|
||||
|
||||
|
@ -263,76 +263,76 @@ def runPreprocessor(self):
|
|||
##################################################
|
||||
#1. create directories and read data
|
||||
##################################################
|
||||
self.master.configure()
|
||||
self.slave.configure()
|
||||
self.master.track.configure()
|
||||
self.slave.track.configure()
|
||||
for i, (masterFrame, slaveFrame) in enumerate(zip(self._insar.masterFrames, self._insar.slaveFrames)):
|
||||
self.reference.configure()
|
||||
self.secondary.configure()
|
||||
self.reference.track.configure()
|
||||
self.secondary.track.configure()
|
||||
for i, (referenceFrame, secondaryFrame) in enumerate(zip(self._insar.referenceFrames, self._insar.secondaryFrames)):
|
||||
#frame number starts with 1
|
||||
frameDir = 'f{}_{}'.format(i+1, masterFrame)
|
||||
frameDir = 'f{}_{}'.format(i+1, referenceFrame)
|
||||
os.makedirs(frameDir, exist_ok=True)
|
||||
os.chdir(frameDir)
|
||||
|
||||
#attach a frame to master and slave
|
||||
frameObjMaster = MultiMode.createFrame()
|
||||
frameObjSlave = MultiMode.createFrame()
|
||||
frameObjMaster.configure()
|
||||
frameObjSlave.configure()
|
||||
self.master.track.frames.append(frameObjMaster)
|
||||
self.slave.track.frames.append(frameObjSlave)
|
||||
#attach a frame to reference and secondary
|
||||
frameObjReference = MultiMode.createFrame()
|
||||
frameObjSecondary = MultiMode.createFrame()
|
||||
frameObjReference.configure()
|
||||
frameObjSecondary.configure()
|
||||
self.reference.track.frames.append(frameObjReference)
|
||||
self.secondary.track.frames.append(frameObjSecondary)
|
||||
|
||||
#swath number starts with 1
|
||||
for j in range(self._insar.startingSwath, self._insar.endingSwath+1):
|
||||
print('processing frame {} swath {}'.format(masterFrame, j))
|
||||
print('processing frame {} swath {}'.format(referenceFrame, j))
|
||||
|
||||
swathDir = 's{}'.format(j)
|
||||
os.makedirs(swathDir, exist_ok=True)
|
||||
os.chdir(swathDir)
|
||||
|
||||
#attach a swath to master and slave
|
||||
swathObjMaster = MultiMode.createSwath()
|
||||
swathObjSlave = MultiMode.createSwath()
|
||||
swathObjMaster.configure()
|
||||
swathObjSlave.configure()
|
||||
self.master.track.frames[-1].swaths.append(swathObjMaster)
|
||||
self.slave.track.frames[-1].swaths.append(swathObjSlave)
|
||||
#attach a swath to reference and secondary
|
||||
swathObjReference = MultiMode.createSwath()
|
||||
swathObjSecondary = MultiMode.createSwath()
|
||||
swathObjReference.configure()
|
||||
swathObjSecondary.configure()
|
||||
self.reference.track.frames[-1].swaths.append(swathObjReference)
|
||||
self.secondary.track.frames[-1].swaths.append(swathObjSecondary)
|
||||
|
||||
#setup master
|
||||
self.master.leaderFile = sorted(glob.glob(os.path.join(self.masterDir, 'LED-ALOS2*{}-*-*'.format(masterFrame))))[0]
|
||||
if masterMode in scansarModes:
|
||||
self.master.imageFile = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.masterPolarization.upper(), masterFrame, j))))[0]
|
||||
#setup reference
|
||||
self.reference.leaderFile = sorted(glob.glob(os.path.join(self.referenceDir, 'LED-ALOS2*{}-*-*'.format(referenceFrame))))[0]
|
||||
if referenceMode in scansarModes:
|
||||
self.reference.imageFile = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.referencePolarization.upper(), referenceFrame, j))))[0]
|
||||
else:
|
||||
self.master.imageFile = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.masterPolarization.upper(), masterFrame))))[0]
|
||||
self.master.outputFile = self._insar.masterSlc
|
||||
self.master.useVirtualFile = self.useVirtualFile
|
||||
#read master
|
||||
(imageFDR, imageData)=self.master.readImage()
|
||||
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.master.readLeader()
|
||||
self.master.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.master.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.master.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.reference.imageFile = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.referencePolarization.upper(), referenceFrame))))[0]
|
||||
self.reference.outputFile = self._insar.referenceSlc
|
||||
self.reference.useVirtualFile = self.useVirtualFile
|
||||
#read reference
|
||||
(imageFDR, imageData)=self.reference.readImage()
|
||||
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.reference.readLeader()
|
||||
self.reference.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.reference.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.reference.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
|
||||
#setup slave
|
||||
self.slave.leaderFile = sorted(glob.glob(os.path.join(self.slaveDir, 'LED-ALOS2*{}-*-*'.format(slaveFrame))))[0]
|
||||
if slaveMode in scansarModes:
|
||||
self.slave.imageFile = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.slavePolarization.upper(), slaveFrame, j))))[0]
|
||||
#setup secondary
|
||||
self.secondary.leaderFile = sorted(glob.glob(os.path.join(self.secondaryDir, 'LED-ALOS2*{}-*-*'.format(secondaryFrame))))[0]
|
||||
if secondaryMode in scansarModes:
|
||||
self.secondary.imageFile = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.secondaryPolarization.upper(), secondaryFrame, j))))[0]
|
||||
else:
|
||||
self.slave.imageFile = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.slavePolarization.upper(), slaveFrame))))[0]
|
||||
self.slave.outputFile = self._insar.slaveSlc
|
||||
self.slave.useVirtualFile = self.useVirtualFile
|
||||
#read slave
|
||||
(imageFDR, imageData)=self.slave.readImage()
|
||||
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.slave.readLeader()
|
||||
self.slave.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.slave.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.slave.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.secondary.imageFile = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.secondaryPolarization.upper(), secondaryFrame))))[0]
|
||||
self.secondary.outputFile = self._insar.secondarySlc
|
||||
self.secondary.useVirtualFile = self.useVirtualFile
|
||||
#read secondary
|
||||
(imageFDR, imageData)=self.secondary.readImage()
|
||||
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.secondary.readLeader()
|
||||
self.secondary.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.secondary.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.secondary.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
|
||||
os.chdir('../')
|
||||
self._insar.saveProduct(self.master.track.frames[-1], self._insar.masterFrameParameter)
|
||||
self._insar.saveProduct(self.slave.track.frames[-1], self._insar.slaveFrameParameter)
|
||||
self._insar.saveProduct(self.reference.track.frames[-1], self._insar.referenceFrameParameter)
|
||||
self._insar.saveProduct(self.secondary.track.frames[-1], self._insar.secondaryFrameParameter)
|
||||
os.chdir('../')
|
||||
self._insar.saveProduct(self.master.track, self._insar.masterTrackParameter)
|
||||
self._insar.saveProduct(self.slave.track, self._insar.slaveTrackParameter)
|
||||
self._insar.saveProduct(self.reference.track, self._insar.referenceTrackParameter)
|
||||
self._insar.saveProduct(self.secondary.track, self._insar.secondaryTrackParameter)
|
||||
|
||||
|
||||
##################################################
|
||||
|
@ -345,53 +345,53 @@ def runPreprocessor(self):
|
|||
#synTime = 0
|
||||
synPercentage = 0
|
||||
|
||||
numberOfFrames = len(self._insar.masterFrames)
|
||||
numberOfFrames = len(self._insar.referenceFrames)
|
||||
numberOfSwaths = self._insar.endingSwath - self._insar.startingSwath + 1
|
||||
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
masterSwath = self.master.track.frames[i].swaths[j]
|
||||
slaveSwath = self.slave.track.frames[i].swaths[j]
|
||||
referenceSwath = self.reference.track.frames[i].swaths[j]
|
||||
secondarySwath = self.secondary.track.frames[i].swaths[j]
|
||||
#using Piyush's code for computing range and azimuth offsets
|
||||
midRange = masterSwath.startingRange + masterSwath.rangePixelSize * masterSwath.numberOfSamples * 0.5
|
||||
midSensingStart = masterSwath.sensingStart + datetime.timedelta(seconds = masterSwath.numberOfLines * 0.5 / masterSwath.prf)
|
||||
llh = self.master.track.orbit.rdr2geo(midSensingStart, midRange)
|
||||
slvaz, slvrng = self.slave.track.orbit.geo2rdr(llh)
|
||||
midRange = referenceSwath.startingRange + referenceSwath.rangePixelSize * referenceSwath.numberOfSamples * 0.5
|
||||
midSensingStart = referenceSwath.sensingStart + datetime.timedelta(seconds = referenceSwath.numberOfLines * 0.5 / referenceSwath.prf)
|
||||
llh = self.reference.track.orbit.rdr2geo(midSensingStart, midRange)
|
||||
slvaz, slvrng = self.secondary.track.orbit.geo2rdr(llh)
|
||||
###Translate to offsets
|
||||
#note that slave range pixel size and prf might be different from master, here we assume there is a virtual slave with same
|
||||
#note that secondary range pixel size and prf might be different from reference, here we assume there is a virtual secondary with same
|
||||
#range pixel size and prf
|
||||
rgoff = ((slvrng - slaveSwath.startingRange) / masterSwath.rangePixelSize) - masterSwath.numberOfSamples * 0.5
|
||||
azoff = ((slvaz - slaveSwath.sensingStart).total_seconds() * masterSwath.prf) - masterSwath.numberOfLines * 0.5
|
||||
rgoff = ((slvrng - secondarySwath.startingRange) / referenceSwath.rangePixelSize) - referenceSwath.numberOfSamples * 0.5
|
||||
azoff = ((slvaz - secondarySwath.sensingStart).total_seconds() * referenceSwath.prf) - referenceSwath.numberOfLines * 0.5
|
||||
|
||||
#compute burst synchronization
|
||||
#burst parameters for ScanSAR wide mode not estimed yet
|
||||
if self._insar.modeCombination == 21:
|
||||
scburstStartLine = (masterSwath.burstStartTime - masterSwath.sensingStart).total_seconds() * masterSwath.prf + azoff
|
||||
#slave burst start times corresponding to master burst start times (100% synchronization)
|
||||
scburstStartLines = np.arange(scburstStartLine - 100000*masterSwath.burstCycleLength, \
|
||||
scburstStartLine + 100000*masterSwath.burstCycleLength, \
|
||||
masterSwath.burstCycleLength)
|
||||
dscburstStartLines = -((slaveSwath.burstStartTime - slaveSwath.sensingStart).total_seconds() * slaveSwath.prf - scburstStartLines)
|
||||
scburstStartLine = (referenceSwath.burstStartTime - referenceSwath.sensingStart).total_seconds() * referenceSwath.prf + azoff
|
||||
#secondary burst start times corresponding to reference burst start times (100% synchronization)
|
||||
scburstStartLines = np.arange(scburstStartLine - 100000*referenceSwath.burstCycleLength, \
|
||||
scburstStartLine + 100000*referenceSwath.burstCycleLength, \
|
||||
referenceSwath.burstCycleLength)
|
||||
dscburstStartLines = -((secondarySwath.burstStartTime - secondarySwath.sensingStart).total_seconds() * secondarySwath.prf - scburstStartLines)
|
||||
#find the difference with minimum absolute value
|
||||
unsynLines = dscburstStartLines[np.argmin(np.absolute(dscburstStartLines))]
|
||||
if np.absolute(unsynLines) >= slaveSwath.burstLength:
|
||||
if np.absolute(unsynLines) >= secondarySwath.burstLength:
|
||||
synLines = 0
|
||||
if unsynLines > 0:
|
||||
unsynLines = slaveSwath.burstLength
|
||||
unsynLines = secondarySwath.burstLength
|
||||
else:
|
||||
unsynLines = -slaveSwath.burstLength
|
||||
unsynLines = -secondarySwath.burstLength
|
||||
else:
|
||||
synLines = slaveSwath.burstLength - np.absolute(unsynLines)
|
||||
synLines = secondarySwath.burstLength - np.absolute(unsynLines)
|
||||
|
||||
unsynTime += unsynLines / masterSwath.prf
|
||||
synPercentage += synLines / masterSwath.burstLength * 100.0
|
||||
unsynTime += unsynLines / referenceSwath.prf
|
||||
synPercentage += synLines / referenceSwath.burstLength * 100.0
|
||||
|
||||
catalog.addItem('burst synchronization of frame {} swath {}'.format(frameNumber, swathNumber), '%.1f%%'%(synLines / masterSwath.burstLength * 100.0), 'runPreprocessor')
|
||||
catalog.addItem('burst synchronization of frame {} swath {}'.format(frameNumber, swathNumber), '%.1f%%'%(synLines / referenceSwath.burstLength * 100.0), 'runPreprocessor')
|
||||
|
||||
############################################################################################
|
||||
#illustration of the sign of the number of unsynchronized lines (unsynLines)
|
||||
#The convention is the same as ampcor offset, that is,
|
||||
# slaveLineNumber = masterLineNumber + unsynLines
|
||||
# secondaryLineNumber = referenceLineNumber + unsynLines
|
||||
#
|
||||
# |-----------------------| ------------
|
||||
# | | ^
|
||||
|
@ -403,35 +403,35 @@ def runPreprocessor(self):
|
|||
# | | | |
|
||||
# | | | |
|
||||
# |-----------------------| | |
|
||||
# Master Burst | |
|
||||
# Reference Burst | |
|
||||
# | |
|
||||
# | |
|
||||
# | |
|
||||
# | |
|
||||
# |-----------------------|
|
||||
# Slave Burst
|
||||
# Secondary Burst
|
||||
#
|
||||
#
|
||||
############################################################################################
|
||||
|
||||
##burst parameters for ScanSAR wide mode not estimed yet
|
||||
elif self._insar.modeCombination == 31:
|
||||
#scansar is master
|
||||
scburstStartLine = (masterSwath.burstStartTime - masterSwath.sensingStart).total_seconds() * masterSwath.prf + azoff
|
||||
#slave burst start times corresponding to master burst start times (100% synchronization)
|
||||
#scansar is reference
|
||||
scburstStartLine = (referenceSwath.burstStartTime - referenceSwath.sensingStart).total_seconds() * referenceSwath.prf + azoff
|
||||
#secondary burst start times corresponding to reference burst start times (100% synchronization)
|
||||
for k in range(-100000, 100000):
|
||||
saz_burstx = scburstStartLine + masterSwath.burstCycleLength * k
|
||||
st_burstx = slaveSwath.sensingStart + datetime.timedelta(seconds=saz_burstx / masterSwath.prf)
|
||||
if saz_burstx >= 0.0 and saz_burstx <= slaveSwath.numberOfLines -1:
|
||||
slaveSwath.burstStartTime = st_burstx
|
||||
slaveSwath.burstLength = masterSwath.burstLength
|
||||
slaveSwath.burstCycleLength = masterSwath.burstCycleLength
|
||||
slaveSwath.swathNumber = masterSwath.swathNumber
|
||||
saz_burstx = scburstStartLine + referenceSwath.burstCycleLength * k
|
||||
st_burstx = secondarySwath.sensingStart + datetime.timedelta(seconds=saz_burstx / referenceSwath.prf)
|
||||
if saz_burstx >= 0.0 and saz_burstx <= secondarySwath.numberOfLines -1:
|
||||
secondarySwath.burstStartTime = st_burstx
|
||||
secondarySwath.burstLength = referenceSwath.burstLength
|
||||
secondarySwath.burstCycleLength = referenceSwath.burstCycleLength
|
||||
secondarySwath.swathNumber = referenceSwath.swathNumber
|
||||
break
|
||||
#unsynLines = 0
|
||||
#synLines = masterSwath.burstLength
|
||||
#unsynTime += unsynLines / masterSwath.prf
|
||||
#synPercentage += synLines / masterSwath.burstLength * 100.0
|
||||
#synLines = referenceSwath.burstLength
|
||||
#unsynTime += unsynLines / referenceSwath.prf
|
||||
#synPercentage += synLines / referenceSwath.burstLength * 100.0
|
||||
catalog.addItem('burst synchronization of frame {} swath {}'.format(frameNumber, swathNumber), '%.1f%%'%(100.0), 'runPreprocessor')
|
||||
else:
|
||||
pass
|
||||
|
@ -439,7 +439,7 @@ def runPreprocessor(self):
|
|||
#overwrite original frame parameter file
|
||||
if self._insar.modeCombination == 31:
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
self._insar.saveProduct(self.slave.track.frames[i], os.path.join(frameDir, self._insar.slaveFrameParameter))
|
||||
self._insar.saveProduct(self.secondary.track.frames[i], os.path.join(frameDir, self._insar.secondaryFrameParameter))
|
||||
|
||||
#getting average
|
||||
if self._insar.modeCombination == 21:
|
||||
|
@ -461,8 +461,8 @@ def runPreprocessor(self):
|
|||
##################################################
|
||||
#3. compute baseline
|
||||
##################################################
|
||||
#only compute baseline at four corners and center of the master track
|
||||
bboxRdr = getBboxRdr(self.master.track)
|
||||
#only compute baseline at four corners and center of the reference track
|
||||
bboxRdr = getBboxRdr(self.reference.track)
|
||||
|
||||
rangeMin = bboxRdr[0]
|
||||
rangeMax = bboxRdr[1]
|
||||
|
@ -483,16 +483,16 @@ def runPreprocessor(self):
|
|||
#modify Piyush's code for computing baslines
|
||||
refElp = Planet(pname='Earth').ellipsoid
|
||||
for x in points:
|
||||
masterSV = self.master.track.orbit.interpolate(x[0], method='hermite')
|
||||
target = self.master.track.orbit.rdr2geo(x[0], x[1])
|
||||
referenceSV = self.reference.track.orbit.interpolate(x[0], method='hermite')
|
||||
target = self.reference.track.orbit.rdr2geo(x[0], x[1])
|
||||
|
||||
slvTime, slvrng = self.slave.track.orbit.geo2rdr(target)
|
||||
slaveSV = self.slave.track.orbit.interpolateOrbit(slvTime, method='hermite')
|
||||
slvTime, slvrng = self.secondary.track.orbit.geo2rdr(target)
|
||||
secondarySV = self.secondary.track.orbit.interpolateOrbit(slvTime, method='hermite')
|
||||
|
||||
targxyz = np.array(refElp.LLH(target[0], target[1], target[2]).ecef().tolist())
|
||||
mxyz = np.array(masterSV.getPosition())
|
||||
mvel = np.array(masterSV.getVelocity())
|
||||
sxyz = np.array(slaveSV.getPosition())
|
||||
mxyz = np.array(referenceSV.getPosition())
|
||||
mvel = np.array(referenceSV.getVelocity())
|
||||
sxyz = np.array(secondarySV.getPosition())
|
||||
|
||||
#to fix abrupt change near zero in baseline grid. JUN-05-2020
|
||||
mvelunit = mvel / np.linalg.norm(mvel)
|
||||
|
@ -507,27 +507,27 @@ def runPreprocessor(self):
|
|||
direction = np.sign(np.dot( np.cross(targxyz-mxyz, sxyz-mxyz), mvel))
|
||||
Bperp.append(direction*perp)
|
||||
|
||||
catalog.addItem('parallel baseline at upperleft of master track', Bpar[0], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at upperright of master track', Bpar[1], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at lowerleft of master track', Bpar[2], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at lowerright of master track', Bpar[3], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at center of master track', Bpar[4], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at upperleft of reference track', Bpar[0], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at upperright of reference track', Bpar[1], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at lowerleft of reference track', Bpar[2], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at lowerright of reference track', Bpar[3], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at center of reference track', Bpar[4], 'runPreprocessor')
|
||||
|
||||
catalog.addItem('perpendicular baseline at upperleft of master track', Bperp[0], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at upperright of master track', Bperp[1], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at lowerleft of master track', Bperp[2], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at lowerright of master track', Bperp[3], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at center of master track', Bperp[4], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at upperleft of reference track', Bperp[0], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at upperright of reference track', Bperp[1], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at lowerleft of reference track', Bperp[2], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at lowerright of reference track', Bperp[3], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at center of reference track', Bperp[4], 'runPreprocessor')
|
||||
|
||||
|
||||
##################################################
|
||||
#4. compute bounding box
|
||||
##################################################
|
||||
masterBbox = getBboxGeo(self.master.track)
|
||||
slaveBbox = getBboxGeo(self.slave.track)
|
||||
referenceBbox = getBboxGeo(self.reference.track)
|
||||
secondaryBbox = getBboxGeo(self.secondary.track)
|
||||
|
||||
catalog.addItem('master bounding box', masterBbox, 'runPreprocessor')
|
||||
catalog.addItem('slave bounding box', slaveBbox, 'runPreprocessor')
|
||||
catalog.addItem('reference bounding box', referenceBbox, 'runPreprocessor')
|
||||
catalog.addItem('secondary bounding box', secondaryBbox, 'runPreprocessor')
|
||||
|
||||
|
||||
catalog.printToLog(logger, "runPreprocessor")
|
||||
|
@ -538,22 +538,22 @@ def runPreprocessor(self):
|
|||
def check_overlap(ldr_m, img_m, ldr_s, img_s):
|
||||
from isceobj.Constants import SPEED_OF_LIGHT
|
||||
|
||||
rangeSamplingRateMaster, widthMaster, nearRangeMaster = read_param_for_checking_overlap(ldr_m, img_m)
|
||||
rangeSamplingRateSlave, widthSlave, nearRangeSlave = read_param_for_checking_overlap(ldr_s, img_s)
|
||||
rangeSamplingRateReference, widthReference, nearRangeReference = read_param_for_checking_overlap(ldr_m, img_m)
|
||||
rangeSamplingRateSecondary, widthSecondary, nearRangeSecondary = read_param_for_checking_overlap(ldr_s, img_s)
|
||||
|
||||
farRangeMaster = nearRangeMaster + (widthMaster-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateMaster
|
||||
farRangeSlave = nearRangeSlave + (widthSlave-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateSlave
|
||||
farRangeReference = nearRangeReference + (widthReference-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateReference
|
||||
farRangeSecondary = nearRangeSecondary + (widthSecondary-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateSecondary
|
||||
|
||||
#This should be good enough, although precise image offsets are not used.
|
||||
if farRangeMaster <= nearRangeSlave:
|
||||
if farRangeReference <= nearRangeSecondary:
|
||||
overlapRatio = 0.0
|
||||
elif farRangeSlave <= nearRangeMaster:
|
||||
elif farRangeSecondary <= nearRangeReference:
|
||||
overlapRatio = 0.0
|
||||
else:
|
||||
# 0 1 2 3
|
||||
ranges = np.array([nearRangeMaster, farRangeMaster, nearRangeSlave, farRangeSlave])
|
||||
ranges = np.array([nearRangeReference, farRangeReference, nearRangeSecondary, farRangeSecondary])
|
||||
rangesIndex = np.argsort(ranges)
|
||||
overlapRatio = ranges[rangesIndex[2]]-ranges[rangesIndex[1]] / (farRangeMaster-nearRangeMaster)
|
||||
overlapRatio = ranges[rangesIndex[2]]-ranges[rangesIndex[1]] / (farRangeReference-nearRangeReference)
|
||||
|
||||
return overlapRatio
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ def runRdr2Geo(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
demFile = os.path.abspath(self._insar.dem)
|
||||
wbdFile = os.path.abspath(self._insar.wbd)
|
||||
|
||||
|
@ -27,10 +27,10 @@ def runRdr2Geo(self):
|
|||
|
||||
|
||||
if self.useGPU and self._insar.hasGPU():
|
||||
topoGPU(masterTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, demFile,
|
||||
topoGPU(referenceTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, demFile,
|
||||
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.los)
|
||||
else:
|
||||
snwe = topoCPU(masterTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, demFile,
|
||||
snwe = topoCPU(referenceTrack, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, demFile,
|
||||
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.los)
|
||||
waterBodyRadar(self._insar.latitude, self._insar.longitude, wbdFile, self._insar.wbdOut)
|
||||
|
||||
|
@ -40,7 +40,7 @@ def runRdr2Geo(self):
|
|||
self._insar.procDoc.addAllFromCatalog(catalog)
|
||||
|
||||
|
||||
def topoCPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile, lonFile, hgtFile, losFile):
|
||||
def topoCPU(referenceTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile, lonFile, hgtFile, losFile):
|
||||
import datetime
|
||||
import isceobj
|
||||
from zerodop.topozero import createTopozero
|
||||
|
@ -55,19 +55,19 @@ def topoCPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile,
|
|||
planet = Planet(pname='Earth')
|
||||
|
||||
topo = createTopozero()
|
||||
topo.slantRangePixelSpacing = numberRangeLooks * masterTrack.rangePixelSize
|
||||
topo.prf = 1.0 / (numberAzimuthLooks*masterTrack.azimuthLineInterval)
|
||||
topo.radarWavelength = masterTrack.radarWavelength
|
||||
topo.orbit = masterTrack.orbit
|
||||
topo.width = masterTrack.numberOfSamples
|
||||
topo.length = masterTrack.numberOfLines
|
||||
topo.slantRangePixelSpacing = numberRangeLooks * referenceTrack.rangePixelSize
|
||||
topo.prf = 1.0 / (numberAzimuthLooks*referenceTrack.azimuthLineInterval)
|
||||
topo.radarWavelength = referenceTrack.radarWavelength
|
||||
topo.orbit = referenceTrack.orbit
|
||||
topo.width = referenceTrack.numberOfSamples
|
||||
topo.length = referenceTrack.numberOfLines
|
||||
topo.wireInputPort(name='dem', object=demImage)
|
||||
topo.wireInputPort(name='planet', object=planet)
|
||||
topo.numberRangeLooks = 1 #must be set as 1
|
||||
topo.numberAzimuthLooks = 1 #must be set as 1 Cunren
|
||||
topo.lookSide = pointingDirection[masterTrack.pointingDirection]
|
||||
topo.sensingStart = masterTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*masterTrack.azimuthLineInterval)
|
||||
topo.rangeFirstSample = masterTrack.startingRange + (numberRangeLooks-1.0)/2.0*masterTrack.rangePixelSize
|
||||
topo.lookSide = pointingDirection[referenceTrack.pointingDirection]
|
||||
topo.sensingStart = referenceTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*referenceTrack.azimuthLineInterval)
|
||||
topo.rangeFirstSample = referenceTrack.startingRange + (numberRangeLooks-1.0)/2.0*referenceTrack.rangePixelSize
|
||||
topo.demInterpolationMethod='BIQUINTIC'
|
||||
|
||||
topo.latFilename = latFile
|
||||
|
@ -82,7 +82,7 @@ def topoCPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile,
|
|||
return list(topo.snwe)
|
||||
|
||||
|
||||
def topoGPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile, lonFile, hgtFile, losFile):
|
||||
def topoGPU(referenceTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile, lonFile, hgtFile, losFile):
|
||||
'''
|
||||
Try with GPU module.
|
||||
'''
|
||||
|
@ -97,8 +97,8 @@ def topoGPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile,
|
|||
|
||||
#creat poynomials
|
||||
polyDoppler = Poly2D(name='topsApp_dopplerPoly')
|
||||
polyDoppler.setWidth(masterTrack.numberOfSamples)
|
||||
polyDoppler.setLength(masterTrack.numberOfLines)
|
||||
polyDoppler.setWidth(referenceTrack.numberOfSamples)
|
||||
polyDoppler.setLength(referenceTrack.numberOfLines)
|
||||
polyDoppler.setNormRange(1.0)
|
||||
polyDoppler.setNormAzimuth(1.0)
|
||||
polyDoppler.setMeanRange(0.0)
|
||||
|
@ -107,32 +107,32 @@ def topoGPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile,
|
|||
polyDoppler.createPoly2D()
|
||||
|
||||
slantRangeImage = Poly2D()
|
||||
slantRangeImage.setWidth(masterTrack.numberOfSamples)
|
||||
slantRangeImage.setLength(masterTrack.numberOfLines)
|
||||
slantRangeImage.setWidth(referenceTrack.numberOfSamples)
|
||||
slantRangeImage.setLength(referenceTrack.numberOfLines)
|
||||
slantRangeImage.setNormRange(1.0)
|
||||
slantRangeImage.setNormAzimuth(1.0)
|
||||
slantRangeImage.setMeanRange(0.)
|
||||
slantRangeImage.setMeanAzimuth(0.)
|
||||
slantRangeImage.initPoly(rangeOrder=1,azimuthOrder=0,
|
||||
coeffs=[[masterTrack.startingRange + (numberRangeLooks-1.0)/2.0*masterTrack.rangePixelSize,numberRangeLooks * masterTrack.rangePixelSize]])
|
||||
coeffs=[[referenceTrack.startingRange + (numberRangeLooks-1.0)/2.0*referenceTrack.rangePixelSize,numberRangeLooks * referenceTrack.rangePixelSize]])
|
||||
slantRangeImage.createPoly2D()
|
||||
|
||||
#creat images
|
||||
latImage = isceobj.createImage()
|
||||
latImage.initImage(latFile, 'write', masterTrack.numberOfSamples, 'DOUBLE')
|
||||
latImage.initImage(latFile, 'write', referenceTrack.numberOfSamples, 'DOUBLE')
|
||||
latImage.createImage()
|
||||
|
||||
lonImage = isceobj.createImage()
|
||||
lonImage.initImage(lonFile, 'write', masterTrack.numberOfSamples, 'DOUBLE')
|
||||
lonImage.initImage(lonFile, 'write', referenceTrack.numberOfSamples, 'DOUBLE')
|
||||
lonImage.createImage()
|
||||
|
||||
losImage = isceobj.createImage()
|
||||
losImage.initImage(losFile, 'write', masterTrack.numberOfSamples, 'FLOAT', bands=2, scheme='BIL')
|
||||
losImage.initImage(losFile, 'write', referenceTrack.numberOfSamples, 'FLOAT', bands=2, scheme='BIL')
|
||||
losImage.setCaster('write', 'DOUBLE')
|
||||
losImage.createImage()
|
||||
|
||||
heightImage = isceobj.createImage()
|
||||
heightImage.initImage(hgtFile, 'write', masterTrack.numberOfSamples, 'DOUBLE')
|
||||
heightImage.initImage(hgtFile, 'write', referenceTrack.numberOfSamples, 'DOUBLE')
|
||||
heightImage.createImage()
|
||||
|
||||
demImage = isceobj.createDemImage()
|
||||
|
@ -141,8 +141,8 @@ def topoGPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile,
|
|||
demImage.createImage()
|
||||
|
||||
#compute a few things
|
||||
t0 = masterTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*masterTrack.azimuthLineInterval)
|
||||
orb = masterTrack.orbit
|
||||
t0 = referenceTrack.sensingStart + datetime.timedelta(seconds=(numberAzimuthLooks-1.0)/2.0*referenceTrack.azimuthLineInterval)
|
||||
orb = referenceTrack.orbit
|
||||
pegHdg = np.radians( orb.getENUHeading(t0))
|
||||
elp = Planet(pname='Earth').ellipsoid
|
||||
|
||||
|
@ -154,12 +154,12 @@ def topoGPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile,
|
|||
topo.set_deltalon(demImage.getDeltaLongitude())
|
||||
topo.set_major(elp.a)
|
||||
topo.set_eccentricitySquared(elp.e2)
|
||||
topo.set_rSpace(numberRangeLooks * masterTrack.rangePixelSize)
|
||||
topo.set_r0(masterTrack.startingRange + (numberRangeLooks-1.0)/2.0*masterTrack.rangePixelSize)
|
||||
topo.set_rSpace(numberRangeLooks * referenceTrack.rangePixelSize)
|
||||
topo.set_r0(referenceTrack.startingRange + (numberRangeLooks-1.0)/2.0*referenceTrack.rangePixelSize)
|
||||
topo.set_pegHdg(pegHdg)
|
||||
topo.set_prf(1.0 / (numberAzimuthLooks*masterTrack.azimuthLineInterval))
|
||||
topo.set_prf(1.0 / (numberAzimuthLooks*referenceTrack.azimuthLineInterval))
|
||||
topo.set_t0(DTU.seconds_since_midnight(t0))
|
||||
topo.set_wvl(masterTrack.radarWavelength)
|
||||
topo.set_wvl(referenceTrack.radarWavelength)
|
||||
topo.set_thresh(.05)
|
||||
topo.set_demAccessor(demImage.getImagePointer())
|
||||
topo.set_dopAccessor(polyDoppler.getPointer())
|
||||
|
@ -173,10 +173,10 @@ def topoGPU(masterTrack, numberRangeLooks, numberAzimuthLooks, demFile, latFile,
|
|||
topo.set_numIter(25)
|
||||
topo.set_idemWidth(demImage.getWidth())
|
||||
topo.set_idemLength(demImage.getLength())
|
||||
topo.set_ilrl(pointingDirection[masterTrack.pointingDirection])
|
||||
topo.set_ilrl(pointingDirection[referenceTrack.pointingDirection])
|
||||
topo.set_extraIter(10)
|
||||
topo.set_length(masterTrack.numberOfLines)
|
||||
topo.set_width(masterTrack.numberOfSamples)
|
||||
topo.set_length(referenceTrack.numberOfLines)
|
||||
topo.set_width(referenceTrack.numberOfSamples)
|
||||
topo.set_nRngLooks(1)
|
||||
topo.set_nAzLooks(1)
|
||||
topo.set_demMethod(5) # BIQUINTIC METHOD
|
||||
|
|
|
@ -23,7 +23,7 @@ def runRdrDemOffset(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
demFile = os.path.abspath(self._insar.dem)
|
||||
|
||||
insarDir = 'insar'
|
||||
|
@ -44,16 +44,16 @@ def runRdrDemOffset(self):
|
|||
|
||||
#number of looks to take in range
|
||||
if self._insar.numberRangeLooksSim == None:
|
||||
if self._insar.numberRangeLooks1 * masterTrack.rangePixelSize > demDeltaLon:
|
||||
if self._insar.numberRangeLooks1 * referenceTrack.rangePixelSize > demDeltaLon:
|
||||
self._insar.numberRangeLooksSim = 1
|
||||
else:
|
||||
self._insar.numberRangeLooksSim = int(demDeltaLon / (self._insar.numberRangeLooks1 * masterTrack.rangePixelSize) + 0.5)
|
||||
self._insar.numberRangeLooksSim = int(demDeltaLon / (self._insar.numberRangeLooks1 * referenceTrack.rangePixelSize) + 0.5)
|
||||
#number of looks to take in azimuth
|
||||
if self._insar.numberAzimuthLooksSim == None:
|
||||
if self._insar.numberAzimuthLooks1 * masterTrack.azimuthPixelSize > demDeltaLat:
|
||||
if self._insar.numberAzimuthLooks1 * referenceTrack.azimuthPixelSize > demDeltaLat:
|
||||
self._insar.numberAzimuthLooksSim = 1
|
||||
else:
|
||||
self._insar.numberAzimuthLooksSim = int(demDeltaLat / (self._insar.numberAzimuthLooks1 * masterTrack.azimuthPixelSize) + 0.5)
|
||||
self._insar.numberAzimuthLooksSim = int(demDeltaLat / (self._insar.numberAzimuthLooks1 * referenceTrack.azimuthPixelSize) + 0.5)
|
||||
|
||||
#simulate a radar image using dem
|
||||
simulateRadar(os.path.join('../', self._insar.height), self._insar.sim, scale=3.0, offset=100.0)
|
||||
|
@ -150,8 +150,8 @@ def runRdrDemOffset(self):
|
|||
ampcor.setImageDataType1('real')
|
||||
ampcor.setImageDataType2('real')
|
||||
|
||||
ampcor.setMasterSlcImage(mMag)
|
||||
ampcor.setSlaveSlcImage(sMag)
|
||||
ampcor.setReferenceSlcImage(mMag)
|
||||
ampcor.setSecondarySlcImage(sMag)
|
||||
|
||||
#MATCH REGION
|
||||
rgoff = 0
|
||||
|
|
|
@ -18,8 +18,8 @@ def runRectRangeOffset(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
insarDir = 'insar'
|
||||
os.makedirs(insarDir, exist_ok=True)
|
||||
|
|
|
@ -40,8 +40,8 @@ def runSlcMatch(self):
|
|||
os.makedirs(denseOffsetDir, exist_ok=True)
|
||||
os.chdir(denseOffsetDir)
|
||||
|
||||
masterTrack = self._insar.loadProduct(self._insar.masterTrackParameter)
|
||||
slaveTrack = self._insar.loadProduct(self._insar.slaveTrackParameter)
|
||||
referenceTrack = self._insar.loadProduct(self._insar.referenceTrackParameter)
|
||||
secondaryTrack = self._insar.loadProduct(self._insar.secondaryTrackParameter)
|
||||
|
||||
#########################################################################################
|
||||
|
||||
|
@ -50,34 +50,34 @@ def runSlcMatch(self):
|
|||
# compute geometric offsets
|
||||
##################################################
|
||||
if self.useGPU and self._insar.hasGPU():
|
||||
topoGPU(masterTrack, 1, 1, demFile,
|
||||
topoGPU(referenceTrack, 1, 1, demFile,
|
||||
'lat.rdr', 'lon.rdr', 'hgt.rdr', 'los.rdr')
|
||||
geo2RdrGPU(slaveTrack, 1, 1,
|
||||
geo2RdrGPU(secondaryTrack, 1, 1,
|
||||
'lat.rdr', 'lon.rdr', 'hgt.rdr', 'rg.off', 'az.off')
|
||||
else:
|
||||
topoCPU(masterTrack, 1, 1, demFile,
|
||||
topoCPU(referenceTrack, 1, 1, demFile,
|
||||
'lat.rdr', 'lon.rdr', 'hgt.rdr', 'los.rdr')
|
||||
geo2RdrCPU(slaveTrack, 1, 1,
|
||||
geo2RdrCPU(secondaryTrack, 1, 1,
|
||||
'lat.rdr', 'lon.rdr', 'hgt.rdr', 'rg.off', 'az.off')
|
||||
|
||||
|
||||
##################################################
|
||||
# resample SLC
|
||||
##################################################
|
||||
#SlaveSlcResampled = os.path.splitext(self._insar.slaveSlc)[0]+'_resamp'+os.path.splitext(self._insar.slaveSlc)[1]
|
||||
SlaveSlcResampled = self._insar.slaveSlcCoregistered
|
||||
#SecondarySlcResampled = os.path.splitext(self._insar.secondarySlc)[0]+'_resamp'+os.path.splitext(self._insar.secondarySlc)[1]
|
||||
SecondarySlcResampled = self._insar.secondarySlcCoregistered
|
||||
rangeOffsets2Frac = 0.0
|
||||
azimuthOffsets2Frac = 0.0
|
||||
resamp(self._insar.slaveSlc,
|
||||
SlaveSlcResampled,
|
||||
resamp(self._insar.secondarySlc,
|
||||
SecondarySlcResampled,
|
||||
'rg.off',
|
||||
'az.off',
|
||||
masterTrack.numberOfSamples, masterTrack.numberOfLines,
|
||||
slaveTrack.prf,
|
||||
slaveTrack.dopplerVsPixel,
|
||||
referenceTrack.numberOfSamples, referenceTrack.numberOfLines,
|
||||
secondaryTrack.prf,
|
||||
secondaryTrack.dopplerVsPixel,
|
||||
[rangeOffsets2Frac, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[azimuthOffsets2Frac, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
|
||||
create_xml(SlaveSlcResampled, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'slc')
|
||||
create_xml(SecondarySlcResampled, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'slc')
|
||||
|
||||
|
||||
if self.estimateResidualOffset:
|
||||
|
@ -85,8 +85,8 @@ def runSlcMatch(self):
|
|||
numberOfOffsets = 800
|
||||
rangeStep = 50
|
||||
|
||||
length = masterTrack.numberOfLines
|
||||
width = masterTrack.numberOfSamples
|
||||
length = referenceTrack.numberOfLines
|
||||
width = referenceTrack.numberOfSamples
|
||||
waterBodyRadar('lat.rdr', 'lon.rdr', wbdFile, 'wbd.rdr')
|
||||
wbd=np.memmap('wbd.rdr', dtype=np.int8, mode='r', shape=(length, width))
|
||||
azimuthStep = int(length/width*rangeStep+0.5)
|
||||
|
@ -119,20 +119,20 @@ def runSlcMatch(self):
|
|||
ampcor.configure()
|
||||
|
||||
mSLC = isceobj.createSlcImage()
|
||||
mSLC.load(self._insar.masterSlc+'.xml')
|
||||
mSLC.load(self._insar.referenceSlc+'.xml')
|
||||
mSLC.setAccessMode('read')
|
||||
mSLC.createImage()
|
||||
|
||||
sSLC = isceobj.createSlcImage()
|
||||
sSLC.load(SlaveSlcResampled+'.xml')
|
||||
sSLC.load(SecondarySlcResampled+'.xml')
|
||||
sSLC.setAccessMode('read')
|
||||
sSLC.createImage()
|
||||
|
||||
ampcor.setImageDataType1('complex')
|
||||
ampcor.setImageDataType2('complex')
|
||||
|
||||
ampcor.setMasterSlcImage(mSLC)
|
||||
ampcor.setSlaveSlcImage(sSLC)
|
||||
ampcor.setReferenceSlcImage(mSLC)
|
||||
ampcor.setSecondarySlcImage(sSLC)
|
||||
|
||||
#MATCH REGION
|
||||
#compute an offset at image center to use
|
||||
|
@ -220,22 +220,22 @@ def runSlcMatch(self):
|
|||
catalog.addItem('warning message', 'too few offsets left for slc residual offset estimation', 'runSlcMatch')
|
||||
else:
|
||||
rangeOffset, azimuthOffset = meanOffset(refinedOffsets)
|
||||
os.remove(SlaveSlcResampled)
|
||||
os.remove(SlaveSlcResampled+'.vrt')
|
||||
os.remove(SlaveSlcResampled+'.xml')
|
||||
os.remove(SecondarySlcResampled)
|
||||
os.remove(SecondarySlcResampled+'.vrt')
|
||||
os.remove(SecondarySlcResampled+'.xml')
|
||||
|
||||
rangeOffsets2Frac = rangeOffset
|
||||
azimuthOffsets2Frac = azimuthOffset
|
||||
resamp(self._insar.slaveSlc,
|
||||
SlaveSlcResampled,
|
||||
resamp(self._insar.secondarySlc,
|
||||
SecondarySlcResampled,
|
||||
'rg.off',
|
||||
'az.off',
|
||||
masterTrack.numberOfSamples, masterTrack.numberOfLines,
|
||||
slaveTrack.prf,
|
||||
slaveTrack.dopplerVsPixel,
|
||||
referenceTrack.numberOfSamples, referenceTrack.numberOfLines,
|
||||
secondaryTrack.prf,
|
||||
secondaryTrack.dopplerVsPixel,
|
||||
[rangeOffsets2Frac, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
||||
[azimuthOffsets2Frac, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
|
||||
create_xml(SlaveSlcResampled, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'slc')
|
||||
create_xml(SecondarySlcResampled, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'slc')
|
||||
|
||||
catalog.addItem('number of offsets range', numberOfOffsetsRange, 'runSlcMatch')
|
||||
catalog.addItem('number of offsets azimuth', numberOfOffsetsAzimuth, 'runSlcMatch')
|
||||
|
|
|
@ -26,8 +26,8 @@ def runSlcMosaic(self):
|
|||
|
||||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
denseOffsetDir = 'dense_offset'
|
||||
os.makedirs(denseOffsetDir, exist_ok=True)
|
||||
|
@ -35,127 +35,127 @@ def runSlcMosaic(self):
|
|||
|
||||
|
||||
##################################################
|
||||
# estimate master and slave frame offsets
|
||||
# estimate reference and secondary frame offsets
|
||||
##################################################
|
||||
if len(masterTrack.frames) > 1:
|
||||
if len(referenceTrack.frames) > 1:
|
||||
matchingMode=1
|
||||
|
||||
#if master offsets from matching are not already computed
|
||||
#if reference offsets from matching are not already computed
|
||||
if self.frameOffsetMatching == False:
|
||||
offsetMaster = frameOffset(masterTrack, self._insar.masterSlc, self._insar.masterFrameOffset,
|
||||
offsetReference = frameOffset(referenceTrack, self._insar.referenceSlc, self._insar.referenceFrameOffset,
|
||||
crossCorrelation=True, matchingMode=matchingMode)
|
||||
offsetSlave = frameOffset(slaveTrack, self._insar.slaveSlc, self._insar.slaveFrameOffset,
|
||||
offsetSecondary = frameOffset(secondaryTrack, self._insar.secondarySlc, self._insar.secondaryFrameOffset,
|
||||
crossCorrelation=True, matchingMode=matchingMode)
|
||||
if self.frameOffsetMatching == False:
|
||||
self._insar.frameRangeOffsetMatchingMaster = offsetMaster[2]
|
||||
self._insar.frameAzimuthOffsetMatchingMaster = offsetMaster[3]
|
||||
self._insar.frameRangeOffsetMatchingSlave = offsetSlave[2]
|
||||
self._insar.frameAzimuthOffsetMatchingSlave = offsetSlave[3]
|
||||
self._insar.frameRangeOffsetMatchingReference = offsetReference[2]
|
||||
self._insar.frameAzimuthOffsetMatchingReference = offsetReference[3]
|
||||
self._insar.frameRangeOffsetMatchingSecondary = offsetSecondary[2]
|
||||
self._insar.frameAzimuthOffsetMatchingSecondary = offsetSecondary[3]
|
||||
|
||||
|
||||
##################################################
|
||||
# mosaic slc
|
||||
##################################################
|
||||
numberOfFrames = len(masterTrack.frames)
|
||||
numberOfFrames = len(referenceTrack.frames)
|
||||
if numberOfFrames == 1:
|
||||
import shutil
|
||||
#frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.masterFrames[0]))
|
||||
frameDir = os.path.join('f1_{}/s{}'.format(self._insar.masterFrames[0], self._insar.startingSwath))
|
||||
if not os.path.isfile(self._insar.masterSlc):
|
||||
if os.path.isfile(os.path.join('../', frameDir, self._insar.masterSlc)):
|
||||
os.symlink(os.path.join('../', frameDir, self._insar.masterSlc), self._insar.masterSlc)
|
||||
#frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.referenceFrames[0]))
|
||||
frameDir = os.path.join('f1_{}/s{}'.format(self._insar.referenceFrames[0], self._insar.startingSwath))
|
||||
if not os.path.isfile(self._insar.referenceSlc):
|
||||
if os.path.isfile(os.path.join('../', frameDir, self._insar.referenceSlc)):
|
||||
os.symlink(os.path.join('../', frameDir, self._insar.referenceSlc), self._insar.referenceSlc)
|
||||
#shutil.copy2() can overwrite
|
||||
shutil.copy2(os.path.join('../', frameDir, self._insar.masterSlc+'.vrt'), self._insar.masterSlc+'.vrt')
|
||||
shutil.copy2(os.path.join('../', frameDir, self._insar.masterSlc+'.xml'), self._insar.masterSlc+'.xml')
|
||||
if not os.path.isfile(self._insar.slaveSlc):
|
||||
if os.path.isfile(os.path.join('../', frameDir, self._insar.slaveSlc)):
|
||||
os.symlink(os.path.join('../', frameDir, self._insar.slaveSlc), self._insar.slaveSlc)
|
||||
shutil.copy2(os.path.join('../', frameDir, self._insar.slaveSlc+'.vrt'), self._insar.slaveSlc+'.vrt')
|
||||
shutil.copy2(os.path.join('../', frameDir, self._insar.slaveSlc+'.xml'), self._insar.slaveSlc+'.xml')
|
||||
shutil.copy2(os.path.join('../', frameDir, self._insar.referenceSlc+'.vrt'), self._insar.referenceSlc+'.vrt')
|
||||
shutil.copy2(os.path.join('../', frameDir, self._insar.referenceSlc+'.xml'), self._insar.referenceSlc+'.xml')
|
||||
if not os.path.isfile(self._insar.secondarySlc):
|
||||
if os.path.isfile(os.path.join('../', frameDir, self._insar.secondarySlc)):
|
||||
os.symlink(os.path.join('../', frameDir, self._insar.secondarySlc), self._insar.secondarySlc)
|
||||
shutil.copy2(os.path.join('../', frameDir, self._insar.secondarySlc+'.vrt'), self._insar.secondarySlc+'.vrt')
|
||||
shutil.copy2(os.path.join('../', frameDir, self._insar.secondarySlc+'.xml'), self._insar.secondarySlc+'.xml')
|
||||
|
||||
#update track parameters
|
||||
#########################################################
|
||||
#mosaic size
|
||||
masterTrack.numberOfSamples = masterTrack.frames[0].swaths[0].numberOfSamples
|
||||
masterTrack.numberOfLines = masterTrack.frames[0].swaths[0].numberOfLines
|
||||
referenceTrack.numberOfSamples = referenceTrack.frames[0].swaths[0].numberOfSamples
|
||||
referenceTrack.numberOfLines = referenceTrack.frames[0].swaths[0].numberOfLines
|
||||
#NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE
|
||||
#range parameters
|
||||
masterTrack.startingRange = masterTrack.frames[0].swaths[0].startingRange
|
||||
masterTrack.rangeSamplingRate = masterTrack.frames[0].swaths[0].rangeSamplingRate
|
||||
masterTrack.rangePixelSize = masterTrack.frames[0].swaths[0].rangePixelSize
|
||||
referenceTrack.startingRange = referenceTrack.frames[0].swaths[0].startingRange
|
||||
referenceTrack.rangeSamplingRate = referenceTrack.frames[0].swaths[0].rangeSamplingRate
|
||||
referenceTrack.rangePixelSize = referenceTrack.frames[0].swaths[0].rangePixelSize
|
||||
#azimuth parameters
|
||||
masterTrack.sensingStart = masterTrack.frames[0].swaths[0].sensingStart
|
||||
masterTrack.prf = masterTrack.frames[0].swaths[0].prf
|
||||
masterTrack.azimuthPixelSize = masterTrack.frames[0].swaths[0].azimuthPixelSize
|
||||
masterTrack.azimuthLineInterval = masterTrack.frames[0].swaths[0].azimuthLineInterval
|
||||
referenceTrack.sensingStart = referenceTrack.frames[0].swaths[0].sensingStart
|
||||
referenceTrack.prf = referenceTrack.frames[0].swaths[0].prf
|
||||
referenceTrack.azimuthPixelSize = referenceTrack.frames[0].swaths[0].azimuthPixelSize
|
||||
referenceTrack.azimuthLineInterval = referenceTrack.frames[0].swaths[0].azimuthLineInterval
|
||||
|
||||
masterTrack.dopplerVsPixel = masterTrack.frames[0].swaths[0].dopplerVsPixel
|
||||
referenceTrack.dopplerVsPixel = referenceTrack.frames[0].swaths[0].dopplerVsPixel
|
||||
|
||||
#update track parameters, slave
|
||||
#update track parameters, secondary
|
||||
#########################################################
|
||||
#mosaic size
|
||||
slaveTrack.numberOfSamples = slaveTrack.frames[0].swaths[0].numberOfSamples
|
||||
slaveTrack.numberOfLines = slaveTrack.frames[0].swaths[0].numberOfLines
|
||||
secondaryTrack.numberOfSamples = secondaryTrack.frames[0].swaths[0].numberOfSamples
|
||||
secondaryTrack.numberOfLines = secondaryTrack.frames[0].swaths[0].numberOfLines
|
||||
#NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE
|
||||
#range parameters
|
||||
slaveTrack.startingRange = slaveTrack.frames[0].swaths[0].startingRange
|
||||
slaveTrack.rangeSamplingRate = slaveTrack.frames[0].swaths[0].rangeSamplingRate
|
||||
slaveTrack.rangePixelSize = slaveTrack.frames[0].swaths[0].rangePixelSize
|
||||
secondaryTrack.startingRange = secondaryTrack.frames[0].swaths[0].startingRange
|
||||
secondaryTrack.rangeSamplingRate = secondaryTrack.frames[0].swaths[0].rangeSamplingRate
|
||||
secondaryTrack.rangePixelSize = secondaryTrack.frames[0].swaths[0].rangePixelSize
|
||||
#azimuth parameters
|
||||
slaveTrack.sensingStart = slaveTrack.frames[0].swaths[0].sensingStart
|
||||
slaveTrack.prf = slaveTrack.frames[0].swaths[0].prf
|
||||
slaveTrack.azimuthPixelSize = slaveTrack.frames[0].swaths[0].azimuthPixelSize
|
||||
slaveTrack.azimuthLineInterval = slaveTrack.frames[0].swaths[0].azimuthLineInterval
|
||||
secondaryTrack.sensingStart = secondaryTrack.frames[0].swaths[0].sensingStart
|
||||
secondaryTrack.prf = secondaryTrack.frames[0].swaths[0].prf
|
||||
secondaryTrack.azimuthPixelSize = secondaryTrack.frames[0].swaths[0].azimuthPixelSize
|
||||
secondaryTrack.azimuthLineInterval = secondaryTrack.frames[0].swaths[0].azimuthLineInterval
|
||||
|
||||
slaveTrack.dopplerVsPixel = slaveTrack.frames[0].swaths[0].dopplerVsPixel
|
||||
secondaryTrack.dopplerVsPixel = secondaryTrack.frames[0].swaths[0].dopplerVsPixel
|
||||
|
||||
else:
|
||||
#mosaic master slc
|
||||
#mosaic reference slc
|
||||
#########################################################
|
||||
#choose offsets
|
||||
rangeOffsets = self._insar.frameRangeOffsetMatchingMaster
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingMaster
|
||||
rangeOffsets = self._insar.frameRangeOffsetMatchingReference
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingReference
|
||||
|
||||
#list of input files
|
||||
slcs = []
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
swathDir = 's{}'.format(self._insar.startingSwath)
|
||||
slcs.append(os.path.join('../', frameDir, swathDir, self._insar.masterSlc))
|
||||
slcs.append(os.path.join('../', frameDir, swathDir, self._insar.referenceSlc))
|
||||
|
||||
#note that track parameters are updated after mosaicking
|
||||
#parameters update is checked, it is OK.
|
||||
frameMosaic(masterTrack, slcs, self._insar.masterSlc,
|
||||
frameMosaic(referenceTrack, slcs, self._insar.referenceSlc,
|
||||
rangeOffsets, azimuthOffsets, 1, 1,
|
||||
updateTrack=True, phaseCompensation=True, resamplingMethod=2)
|
||||
create_xml(self._insar.masterSlc, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'slc')
|
||||
masterTrack.dopplerVsPixel = computeTrackDoppler(masterTrack)
|
||||
create_xml(self._insar.referenceSlc, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'slc')
|
||||
referenceTrack.dopplerVsPixel = computeTrackDoppler(referenceTrack)
|
||||
|
||||
#mosaic slave slc
|
||||
#mosaic secondary slc
|
||||
#########################################################
|
||||
#choose offsets
|
||||
rangeOffsets = self._insar.frameRangeOffsetMatchingSlave
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingSlave
|
||||
rangeOffsets = self._insar.frameRangeOffsetMatchingSecondary
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingSecondary
|
||||
|
||||
#list of input files
|
||||
slcs = []
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
swathDir = 's{}'.format(self._insar.startingSwath)
|
||||
slcs.append(os.path.join('../', frameDir, swathDir, self._insar.slaveSlc))
|
||||
slcs.append(os.path.join('../', frameDir, swathDir, self._insar.secondarySlc))
|
||||
|
||||
#note that track parameters are updated after mosaicking
|
||||
#parameters update is checked, it is OK.
|
||||
frameMosaic(slaveTrack, slcs, self._insar.slaveSlc,
|
||||
frameMosaic(secondaryTrack, slcs, self._insar.secondarySlc,
|
||||
rangeOffsets, azimuthOffsets, 1, 1,
|
||||
updateTrack=True, phaseCompensation=True, resamplingMethod=2)
|
||||
create_xml(self._insar.slaveSlc, slaveTrack.numberOfSamples, slaveTrack.numberOfLines, 'slc')
|
||||
slaveTrack.dopplerVsPixel = computeTrackDoppler(slaveTrack)
|
||||
create_xml(self._insar.secondarySlc, secondaryTrack.numberOfSamples, secondaryTrack.numberOfLines, 'slc')
|
||||
secondaryTrack.dopplerVsPixel = computeTrackDoppler(secondaryTrack)
|
||||
|
||||
|
||||
#save parameter file inside denseoffset directory
|
||||
self._insar.saveProduct(masterTrack, self._insar.masterTrackParameter)
|
||||
self._insar.saveProduct(slaveTrack, self._insar.slaveTrackParameter)
|
||||
self._insar.saveProduct(referenceTrack, self._insar.referenceTrackParameter)
|
||||
self._insar.saveProduct(secondaryTrack, self._insar.secondaryTrackParameter)
|
||||
|
||||
|
||||
os.chdir('../')
|
||||
|
|
|
@ -28,13 +28,13 @@ def runSlcOffset(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
demFile = os.path.abspath(self._insar.dem)
|
||||
wbdFile = os.path.abspath(self._insar.wbd)
|
||||
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
|
@ -43,8 +43,8 @@ def runSlcOffset(self):
|
|||
|
||||
print('estimating offset frame {}, swath {}'.format(frameNumber, swathNumber))
|
||||
|
||||
masterSwath = masterTrack.frames[i].swaths[j]
|
||||
slaveSwath = slaveTrack.frames[i].swaths[j]
|
||||
referenceSwath = referenceTrack.frames[i].swaths[j]
|
||||
secondarySwath = secondaryTrack.frames[i].swaths[j]
|
||||
|
||||
##########################################
|
||||
#1. set number of matching points
|
||||
|
@ -62,7 +62,7 @@ def runSlcOffset(self):
|
|||
numberRangeLooks=100
|
||||
numberAzimuthLooks=100
|
||||
#compute land ratio using topo module
|
||||
topo(masterSwath, masterTrack, demFile, 'lat.rdr', 'lon.rdr', 'hgt.rdr', losFile='los.rdr',
|
||||
topo(referenceSwath, referenceTrack, demFile, 'lat.rdr', 'lon.rdr', 'hgt.rdr', losFile='los.rdr',
|
||||
incFile=None, mskFile=None,
|
||||
numberRangeLooks=numberRangeLooks, numberAzimuthLooks=numberAzimuthLooks, multilookTimeOffset=False)
|
||||
waterBodyRadar('lat.rdr', 'lon.rdr', wbdFile, 'wbd.rdr')
|
||||
|
@ -82,7 +82,7 @@ def runSlcOffset(self):
|
|||
catalog.addItem('warning message', 'land too small for estimating slc offsets at frame {}, swath {}, use geometric offsets'.format(frameNumber, swathNumber), 'runSlcOffset')
|
||||
|
||||
#compute geomtricla offsets
|
||||
geo2rdr(slaveSwath, slaveTrack, 'lat.rdr', 'lon.rdr', 'hgt.rdr', 'rg.rdr', 'az.rdr', numberRangeLooks=numberRangeLooks, numberAzimuthLooks=numberAzimuthLooks, multilookTimeOffset=False)
|
||||
geo2rdr(secondarySwath, secondaryTrack, 'lat.rdr', 'lon.rdr', 'hgt.rdr', 'rg.rdr', 'az.rdr', numberRangeLooks=numberRangeLooks, numberAzimuthLooks=numberAzimuthLooks, multilookTimeOffset=False)
|
||||
reformatGeometricalOffset('rg.rdr', 'az.rdr', 'cull.off', rangeStep=numberRangeLooks, azimuthStep=numberAzimuthLooks, maximumNumberOfOffsets=2000)
|
||||
|
||||
os.remove('lat.rdr')
|
||||
|
@ -155,26 +155,26 @@ def runSlcOffset(self):
|
|||
ampcor.configure()
|
||||
|
||||
mSLC = isceobj.createSlcImage()
|
||||
mSLC.load(self._insar.masterSlc+'.xml')
|
||||
mSLC.load(self._insar.referenceSlc+'.xml')
|
||||
mSLC.setAccessMode('read')
|
||||
mSLC.createImage()
|
||||
|
||||
sSLC = isceobj.createSlcImage()
|
||||
sSLC.load(self._insar.slaveSlc+'.xml')
|
||||
sSLC.load(self._insar.secondarySlc+'.xml')
|
||||
sSLC.setAccessMode('read')
|
||||
sSLC.createImage()
|
||||
|
||||
ampcor.setImageDataType1('complex')
|
||||
ampcor.setImageDataType2('complex')
|
||||
|
||||
ampcor.setMasterSlcImage(mSLC)
|
||||
ampcor.setSlaveSlcImage(sSLC)
|
||||
ampcor.setReferenceSlcImage(mSLC)
|
||||
ampcor.setSecondarySlcImage(sSLC)
|
||||
|
||||
#MATCH REGION
|
||||
#compute an offset at image center to use
|
||||
rgoff, azoff = computeOffsetFromOrbit(masterSwath, masterTrack, slaveSwath, slaveTrack,
|
||||
masterSwath.numberOfSamples * 0.5,
|
||||
masterSwath.numberOfLines * 0.5)
|
||||
rgoff, azoff = computeOffsetFromOrbit(referenceSwath, referenceTrack, secondarySwath, secondaryTrack,
|
||||
referenceSwath.numberOfSamples * 0.5,
|
||||
referenceSwath.numberOfLines * 0.5)
|
||||
#it seems that we cannot use 0, haven't look into the problem
|
||||
if rgoff == 0:
|
||||
rgoff = 1
|
||||
|
|
|
@ -20,10 +20,10 @@ def runSwathMosaic(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
|
||||
|
@ -40,7 +40,7 @@ def runSwathMosaic(self):
|
|||
(self._insar.endingSwath-self._insar.startingSwath+1 > 1)
|
||||
):
|
||||
import shutil
|
||||
swathDir = 's{}'.format(masterTrack.frames[i].swaths[0].swathNumber)
|
||||
swathDir = 's{}'.format(referenceTrack.frames[i].swaths[0].swathNumber)
|
||||
|
||||
if not os.path.isfile(self._insar.interferogram):
|
||||
os.symlink(os.path.join('../', swathDir, self._insar.interferogram), self._insar.interferogram)
|
||||
|
@ -60,7 +60,7 @@ def runSwathMosaic(self):
|
|||
|
||||
#update frame parameters
|
||||
#########################################################
|
||||
frame = masterTrack.frames[i]
|
||||
frame = referenceTrack.frames[i]
|
||||
infImg = isceobj.createImage()
|
||||
infImg.load(self._insar.interferogram+'.xml')
|
||||
#mosaic size
|
||||
|
@ -77,9 +77,9 @@ def runSwathMosaic(self):
|
|||
frame.azimuthPixelSize = frame.swaths[0].azimuthPixelSize
|
||||
frame.azimuthLineInterval = frame.swaths[0].azimuthLineInterval
|
||||
|
||||
#update frame parameters, slave
|
||||
#update frame parameters, secondary
|
||||
#########################################################
|
||||
frame = slaveTrack.frames[i]
|
||||
frame = secondaryTrack.frames[i]
|
||||
#mosaic size
|
||||
frame.numberOfSamples = int(frame.swaths[0].numberOfSamples/self._insar.numberRangeLooks1)
|
||||
frame.numberOfLines = int(frame.swaths[0].numberOfLines/self._insar.numberAzimuthLooks1)
|
||||
|
@ -97,28 +97,28 @@ def runSwathMosaic(self):
|
|||
os.chdir('../')
|
||||
|
||||
#save parameter file
|
||||
self._insar.saveProduct(masterTrack.frames[i], self._insar.masterFrameParameter)
|
||||
self._insar.saveProduct(slaveTrack.frames[i], self._insar.slaveFrameParameter)
|
||||
self._insar.saveProduct(referenceTrack.frames[i], self._insar.referenceFrameParameter)
|
||||
self._insar.saveProduct(secondaryTrack.frames[i], self._insar.secondaryFrameParameter)
|
||||
|
||||
os.chdir('../')
|
||||
|
||||
continue
|
||||
|
||||
#choose offsets
|
||||
numberOfFrames = len(masterTrack.frames)
|
||||
numberOfSwaths = len(masterTrack.frames[i].swaths)
|
||||
numberOfFrames = len(referenceTrack.frames)
|
||||
numberOfSwaths = len(referenceTrack.frames[i].swaths)
|
||||
if self.swathOffsetMatching:
|
||||
#no need to do this as the API support 2-d list
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetMatchingMaster
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingMaster
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetMatchingReference
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingReference
|
||||
|
||||
else:
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetGeometricalMaster
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalMaster
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetGeometricalReference
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalReference
|
||||
|
||||
rangeOffsets = rangeOffsets[i]
|
||||
azimuthOffsets = azimuthOffsets[i]
|
||||
|
@ -133,28 +133,28 @@ def runSwathMosaic(self):
|
|||
|
||||
#note that frame parameters are updated after mosaicking
|
||||
#mosaic amplitudes
|
||||
swathMosaic(masterTrack.frames[i], inputAmplitudes, self._insar.amplitude,
|
||||
swathMosaic(referenceTrack.frames[i], inputAmplitudes, self._insar.amplitude,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, resamplingMethod=0)
|
||||
#mosaic interferograms
|
||||
swathMosaic(masterTrack.frames[i], inputInterferograms, self._insar.interferogram,
|
||||
swathMosaic(referenceTrack.frames[i], inputInterferograms, self._insar.interferogram,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, updateFrame=True, resamplingMethod=1)
|
||||
|
||||
create_xml(self._insar.amplitude, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'int')
|
||||
create_xml(self._insar.amplitude, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'int')
|
||||
|
||||
#update slave frame parameters here
|
||||
#no matching for slave, always use geometry
|
||||
rangeOffsets = self._insar.swathRangeOffsetGeometricalSlave
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalSlave
|
||||
#update secondary frame parameters here
|
||||
#no matching for secondary, always use geometry
|
||||
rangeOffsets = self._insar.swathRangeOffsetGeometricalSecondary
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalSecondary
|
||||
rangeOffsets = rangeOffsets[i]
|
||||
azimuthOffsets = azimuthOffsets[i]
|
||||
swathMosaicParameters(slaveTrack.frames[i], rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
|
||||
swathMosaicParameters(secondaryTrack.frames[i], rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
|
||||
|
||||
os.chdir('../')
|
||||
|
||||
#save parameter file
|
||||
self._insar.saveProduct(masterTrack.frames[i], self._insar.masterFrameParameter)
|
||||
self._insar.saveProduct(slaveTrack.frames[i], self._insar.slaveFrameParameter)
|
||||
self._insar.saveProduct(referenceTrack.frames[i], self._insar.referenceFrameParameter)
|
||||
self._insar.saveProduct(secondaryTrack.frames[i], self._insar.secondaryFrameParameter)
|
||||
|
||||
os.chdir('../')
|
||||
|
||||
|
|
|
@ -21,10 +21,10 @@ def runSwathOffset(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
|
||||
|
@ -46,34 +46,34 @@ def runSwathOffset(self):
|
|||
continue
|
||||
|
||||
#compute swath offset
|
||||
offsetMaster = swathOffset(masterTrack.frames[i], self._insar.masterSlc, self._insar.masterSwathOffset,
|
||||
offsetReference = swathOffset(referenceTrack.frames[i], self._insar.referenceSlc, self._insar.referenceSwathOffset,
|
||||
crossCorrelation=self.swathOffsetMatching, numberOfAzimuthLooks=10)
|
||||
#only use geometrical offset for slave
|
||||
offsetSlave = swathOffset(slaveTrack.frames[i], self._insar.slaveSlc, self._insar.slaveSwathOffset,
|
||||
#only use geometrical offset for secondary
|
||||
offsetSecondary = swathOffset(secondaryTrack.frames[i], self._insar.secondarySlc, self._insar.secondarySwathOffset,
|
||||
crossCorrelation=False, numberOfAzimuthLooks=10)
|
||||
|
||||
#initialization
|
||||
if i == 0:
|
||||
self._insar.swathRangeOffsetGeometricalMaster = []
|
||||
self._insar.swathAzimuthOffsetGeometricalMaster = []
|
||||
self._insar.swathRangeOffsetGeometricalSlave = []
|
||||
self._insar.swathAzimuthOffsetGeometricalSlave = []
|
||||
self._insar.swathRangeOffsetGeometricalReference = []
|
||||
self._insar.swathAzimuthOffsetGeometricalReference = []
|
||||
self._insar.swathRangeOffsetGeometricalSecondary = []
|
||||
self._insar.swathAzimuthOffsetGeometricalSecondary = []
|
||||
if self.swathOffsetMatching:
|
||||
self._insar.swathRangeOffsetMatchingMaster = []
|
||||
self._insar.swathAzimuthOffsetMatchingMaster = []
|
||||
#self._insar.swathRangeOffsetMatchingSlave = []
|
||||
#self._insar.swathAzimuthOffsetMatchingSlave = []
|
||||
self._insar.swathRangeOffsetMatchingReference = []
|
||||
self._insar.swathAzimuthOffsetMatchingReference = []
|
||||
#self._insar.swathRangeOffsetMatchingSecondary = []
|
||||
#self._insar.swathAzimuthOffsetMatchingSecondary = []
|
||||
|
||||
#append list directly, as the API support 2-d list
|
||||
self._insar.swathRangeOffsetGeometricalMaster.append(offsetMaster[0])
|
||||
self._insar.swathAzimuthOffsetGeometricalMaster.append(offsetMaster[1])
|
||||
self._insar.swathRangeOffsetGeometricalSlave.append(offsetSlave[0])
|
||||
self._insar.swathAzimuthOffsetGeometricalSlave.append(offsetSlave[1])
|
||||
self._insar.swathRangeOffsetGeometricalReference.append(offsetReference[0])
|
||||
self._insar.swathAzimuthOffsetGeometricalReference.append(offsetReference[1])
|
||||
self._insar.swathRangeOffsetGeometricalSecondary.append(offsetSecondary[0])
|
||||
self._insar.swathAzimuthOffsetGeometricalSecondary.append(offsetSecondary[1])
|
||||
if self.swathOffsetMatching:
|
||||
self._insar.swathRangeOffsetMatchingMaster.append(offsetMaster[2])
|
||||
self._insar.swathAzimuthOffsetMatchingMaster.append(offsetMaster[3])
|
||||
#self._insar.swathRangeOffsetMatchingSlave.append(offsetSlave[2])
|
||||
#self._insar.swathAzimuthOffsetMatchingSlave.append(offsetSlave[3])
|
||||
self._insar.swathRangeOffsetMatchingReference.append(offsetReference[2])
|
||||
self._insar.swathAzimuthOffsetMatchingReference.append(offsetReference[3])
|
||||
#self._insar.swathRangeOffsetMatchingSecondary.append(offsetSecondary[2])
|
||||
#self._insar.swathAzimuthOffsetMatchingSecondary.append(offsetSecondary[3])
|
||||
|
||||
os.chdir('../../')
|
||||
|
||||
|
@ -300,8 +300,8 @@ def estimateSwathOffset(swath1, swath2, image1, image2, rangeScale1=1, azimuthSc
|
|||
ampcor.setImageDataType1('real')
|
||||
ampcor.setImageDataType2('real')
|
||||
|
||||
ampcor.setMasterSlcImage(mMag)
|
||||
ampcor.setSlaveSlcImage(sMag)
|
||||
ampcor.setReferenceSlcImage(mMag)
|
||||
ampcor.setSecondarySlcImage(sMag)
|
||||
|
||||
#MATCH REGION
|
||||
rgoff = 0
|
||||
|
|
|
@ -22,8 +22,8 @@ def runUnwrapSnaphu(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
#slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
#secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
insarDir = 'insar'
|
||||
os.makedirs(insarDir, exist_ok=True)
|
||||
|
@ -43,9 +43,9 @@ def runUnwrapSnaphu(self):
|
|||
costMode = 's',
|
||||
initMethod = 'mcf')
|
||||
else:
|
||||
tmid = masterTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*masterTrack.azimuthLineInterval+
|
||||
masterTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*masterTrack.azimuthLineInterval)
|
||||
snaphuUnwrap(masterTrack, tmid,
|
||||
tmid = referenceTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*referenceTrack.azimuthLineInterval+
|
||||
referenceTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*referenceTrack.azimuthLineInterval)
|
||||
snaphuUnwrap(referenceTrack, tmid,
|
||||
self._insar.filteredInterferogram,
|
||||
self._insar.multilookPhsig,
|
||||
self._insar.unwrappedInterferogram,
|
||||
|
|
|
@ -11,19 +11,19 @@ from iscesys.DateTimeUtil.DateTimeUtil import DateTimeUtil as DTU
|
|||
from iscesys.Compatibility import Compatibility
|
||||
|
||||
|
||||
MASTER_DATE = Component.Parameter('masterDate',
|
||||
public_name='master date',
|
||||
REFERENCE_DATE = Component.Parameter('referenceDate',
|
||||
public_name='reference date',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=True,
|
||||
doc='master acquistion date')
|
||||
doc='reference acquistion date')
|
||||
|
||||
SLAVE_DATE = Component.Parameter('slaveDate',
|
||||
public_name='slave date',
|
||||
SECONDARY_DATE = Component.Parameter('secondaryDate',
|
||||
public_name='secondary date',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=True,
|
||||
doc='slave acquistion date')
|
||||
doc='secondary acquistion date')
|
||||
|
||||
MODE_COMBINATION = Component.Parameter('modeCombination',
|
||||
public_name='mode combination',
|
||||
|
@ -32,21 +32,21 @@ MODE_COMBINATION = Component.Parameter('modeCombination',
|
|||
mandatory=True,
|
||||
doc='mode combination')
|
||||
|
||||
MASTER_FRAMES = Component.Parameter('masterFrames',
|
||||
public_name = 'master frames',
|
||||
REFERENCE_FRAMES = Component.Parameter('referenceFrames',
|
||||
public_name = 'reference frames',
|
||||
default = None,
|
||||
type=str,
|
||||
container=list,
|
||||
mandatory=False,
|
||||
doc = 'master frames to process')
|
||||
doc = 'reference frames to process')
|
||||
|
||||
SLAVE_FRAMES = Component.Parameter('slaveFrames',
|
||||
public_name = 'slave frames',
|
||||
SECONDARY_FRAMES = Component.Parameter('secondaryFrames',
|
||||
public_name = 'secondary frames',
|
||||
default = None,
|
||||
type=str,
|
||||
container=list,
|
||||
mandatory=False,
|
||||
doc = 'slave frames to process')
|
||||
doc = 'secondary frames to process')
|
||||
|
||||
STARTING_SWATH = Component.Parameter('startingSwath',
|
||||
public_name='starting swath',
|
||||
|
@ -108,135 +108,135 @@ AZIMUTH_RESIDUAL_OFFSET_SD = Component.Parameter('azimuthResidualOffsetSd',
|
|||
container = list,
|
||||
doc = 'azimuth residual offset estimated by spectral diversity')
|
||||
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('swathRangeOffsetGeometricalMaster',
|
||||
public_name = 'swath range offset from geometry master',
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('swathRangeOffsetGeometricalReference',
|
||||
public_name = 'swath range offset from geometry reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath range offset from geometry master')
|
||||
doc = 'swath range offset from geometry reference')
|
||||
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('swathAzimuthOffsetGeometricalMaster',
|
||||
public_name = 'swath azimuth offset from geometry master',
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('swathAzimuthOffsetGeometricalReference',
|
||||
public_name = 'swath azimuth offset from geometry reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath azimuth offset from geometry master')
|
||||
doc = 'swath azimuth offset from geometry reference')
|
||||
|
||||
SWATH_RANGE_OFFSET_MATCHING_MASTER = Component.Parameter('swathRangeOffsetMatchingMaster',
|
||||
public_name = 'swath range offset from matching master',
|
||||
SWATH_RANGE_OFFSET_MATCHING_REFERENCE = Component.Parameter('swathRangeOffsetMatchingReference',
|
||||
public_name = 'swath range offset from matching reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath range offset from matching master')
|
||||
doc = 'swath range offset from matching reference')
|
||||
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_MASTER = Component.Parameter('swathAzimuthOffsetMatchingMaster',
|
||||
public_name = 'swath azimuth offset from matching master',
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_REFERENCE = Component.Parameter('swathAzimuthOffsetMatchingReference',
|
||||
public_name = 'swath azimuth offset from matching reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath azimuth offset from matching master')
|
||||
doc = 'swath azimuth offset from matching reference')
|
||||
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('swathRangeOffsetGeometricalSlave',
|
||||
public_name = 'swath range offset from geometry slave',
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('swathRangeOffsetGeometricalSecondary',
|
||||
public_name = 'swath range offset from geometry secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath range offset from geometry slave')
|
||||
doc = 'swath range offset from geometry secondary')
|
||||
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('swathAzimuthOffsetGeometricalSlave',
|
||||
public_name = 'swath azimuth offset from geometry slave',
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('swathAzimuthOffsetGeometricalSecondary',
|
||||
public_name = 'swath azimuth offset from geometry secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath azimuth offset from geometry slave')
|
||||
doc = 'swath azimuth offset from geometry secondary')
|
||||
|
||||
SWATH_RANGE_OFFSET_MATCHING_SLAVE = Component.Parameter('swathRangeOffsetMatchingSlave',
|
||||
public_name = 'swath range offset from matching slave',
|
||||
SWATH_RANGE_OFFSET_MATCHING_SECONDARY = Component.Parameter('swathRangeOffsetMatchingSecondary',
|
||||
public_name = 'swath range offset from matching secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath range offset from matching slave')
|
||||
doc = 'swath range offset from matching secondary')
|
||||
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_SLAVE = Component.Parameter('swathAzimuthOffsetMatchingSlave',
|
||||
public_name = 'swath azimuth offset from matching slave',
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_SECONDARY = Component.Parameter('swathAzimuthOffsetMatchingSecondary',
|
||||
public_name = 'swath azimuth offset from matching secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'swath azimuth offset from matching slave')
|
||||
doc = 'swath azimuth offset from matching secondary')
|
||||
|
||||
|
||||
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('frameRangeOffsetGeometricalMaster',
|
||||
public_name = 'frame range offset from geometry master',
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('frameRangeOffsetGeometricalReference',
|
||||
public_name = 'frame range offset from geometry reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame range offset from geometry master')
|
||||
doc = 'frame range offset from geometry reference')
|
||||
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_MASTER = Component.Parameter('frameAzimuthOffsetGeometricalMaster',
|
||||
public_name = 'frame azimuth offset from geometry master',
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE = Component.Parameter('frameAzimuthOffsetGeometricalReference',
|
||||
public_name = 'frame azimuth offset from geometry reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame azimuth offset from geometry master')
|
||||
doc = 'frame azimuth offset from geometry reference')
|
||||
|
||||
FRAME_RANGE_OFFSET_MATCHING_MASTER = Component.Parameter('frameRangeOffsetMatchingMaster',
|
||||
public_name = 'frame range offset from matching master',
|
||||
FRAME_RANGE_OFFSET_MATCHING_REFERENCE = Component.Parameter('frameRangeOffsetMatchingReference',
|
||||
public_name = 'frame range offset from matching reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame range offset from matching master')
|
||||
doc = 'frame range offset from matching reference')
|
||||
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_MASTER = Component.Parameter('frameAzimuthOffsetMatchingMaster',
|
||||
public_name = 'frame azimuth offset from matching master',
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_REFERENCE = Component.Parameter('frameAzimuthOffsetMatchingReference',
|
||||
public_name = 'frame azimuth offset from matching reference',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame azimuth offset from matching master')
|
||||
doc = 'frame azimuth offset from matching reference')
|
||||
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('frameRangeOffsetGeometricalSlave',
|
||||
public_name = 'frame range offset from geometry slave',
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('frameRangeOffsetGeometricalSecondary',
|
||||
public_name = 'frame range offset from geometry secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame range offset from geometry slave')
|
||||
doc = 'frame range offset from geometry secondary')
|
||||
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE = Component.Parameter('frameAzimuthOffsetGeometricalSlave',
|
||||
public_name = 'frame azimuth offset from geometry slave',
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY = Component.Parameter('frameAzimuthOffsetGeometricalSecondary',
|
||||
public_name = 'frame azimuth offset from geometry secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame azimuth offset from geometry slave')
|
||||
doc = 'frame azimuth offset from geometry secondary')
|
||||
|
||||
FRAME_RANGE_OFFSET_MATCHING_SLAVE = Component.Parameter('frameRangeOffsetMatchingSlave',
|
||||
public_name = 'frame range offset from matching slave',
|
||||
FRAME_RANGE_OFFSET_MATCHING_SECONDARY = Component.Parameter('frameRangeOffsetMatchingSecondary',
|
||||
public_name = 'frame range offset from matching secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame range offset from matching slave')
|
||||
doc = 'frame range offset from matching secondary')
|
||||
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_SLAVE = Component.Parameter('frameAzimuthOffsetMatchingSlave',
|
||||
public_name = 'frame azimuth offset from matching slave',
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_SECONDARY = Component.Parameter('frameAzimuthOffsetMatchingSecondary',
|
||||
public_name = 'frame azimuth offset from matching secondary',
|
||||
default = None,
|
||||
type = float,
|
||||
mandatory = True,
|
||||
container = list,
|
||||
doc = 'frame azimuth offset from matching slave')
|
||||
doc = 'frame azimuth offset from matching secondary')
|
||||
|
||||
NUMBER_RANGE_LOOKS1 = Component.Parameter('numberRangeLooks1',
|
||||
public_name='number of range looks 1',
|
||||
|
@ -324,103 +324,103 @@ RADAR_DEM_AFFINE_TRANSFORM = Component.Parameter('radarDemAffineTransform',
|
|||
container = list,
|
||||
doc = 'radar dem affine transform parameters')
|
||||
|
||||
MASTER_SLC = Component.Parameter('masterSlc',
|
||||
public_name='master slc',
|
||||
REFERENCE_SLC = Component.Parameter('referenceSlc',
|
||||
public_name='reference slc',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='master slc file')
|
||||
doc='reference slc file')
|
||||
|
||||
SLAVE_SLC = Component.Parameter('slaveSlc',
|
||||
public_name='slave slc',
|
||||
SECONDARY_SLC = Component.Parameter('secondarySlc',
|
||||
public_name='secondary slc',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='slave slc file')
|
||||
doc='secondary slc file')
|
||||
|
||||
MASTER_BURST_PREFIX = Component.Parameter('masterBurstPrefix',
|
||||
public_name='master burst prefix',
|
||||
REFERENCE_BURST_PREFIX = Component.Parameter('referenceBurstPrefix',
|
||||
public_name='reference burst prefix',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='master burst prefix')
|
||||
doc='reference burst prefix')
|
||||
|
||||
SLAVE_BURST_PREFIX = Component.Parameter('slaveBurstPrefix',
|
||||
public_name='slave burst prefix',
|
||||
SECONDARY_BURST_PREFIX = Component.Parameter('secondaryBurstPrefix',
|
||||
public_name='secondary burst prefix',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='slave burst prefix')
|
||||
doc='secondary burst prefix')
|
||||
|
||||
MASTER_MAGNITUDE = Component.Parameter('masterMagnitude',
|
||||
public_name='master magnitude',
|
||||
REFERENCE_MAGNITUDE = Component.Parameter('referenceMagnitude',
|
||||
public_name='reference magnitude',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='master magnitude file')
|
||||
doc='reference magnitude file')
|
||||
|
||||
SLAVE_MAGNITUDE = Component.Parameter('slaveMagnitude',
|
||||
public_name='slave magnitude',
|
||||
SECONDARY_MAGNITUDE = Component.Parameter('secondaryMagnitude',
|
||||
public_name='secondary magnitude',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='slave magnitude file')
|
||||
doc='secondary magnitude file')
|
||||
|
||||
MASTER_SWATH_OFFSET = Component.Parameter('masterSwathOffset',
|
||||
public_name='master swath offset',
|
||||
REFERENCE_SWATH_OFFSET = Component.Parameter('referenceSwathOffset',
|
||||
public_name='reference swath offset',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='master swath offset file')
|
||||
doc='reference swath offset file')
|
||||
|
||||
SLAVE_SWATH_OFFSET = Component.Parameter('slaveSwathOffset',
|
||||
public_name='slave swath offset',
|
||||
SECONDARY_SWATH_OFFSET = Component.Parameter('secondarySwathOffset',
|
||||
public_name='secondary swath offset',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='slave swath offset file')
|
||||
doc='secondary swath offset file')
|
||||
|
||||
MASTER_FRAME_OFFSET = Component.Parameter('masterFrameOffset',
|
||||
public_name='master frame offset',
|
||||
REFERENCE_FRAME_OFFSET = Component.Parameter('referenceFrameOffset',
|
||||
public_name='reference frame offset',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='master frame offset file')
|
||||
doc='reference frame offset file')
|
||||
|
||||
SLAVE_FRAME_OFFSET = Component.Parameter('slaveFrameOffset',
|
||||
public_name='slave frame offset',
|
||||
SECONDARY_FRAME_OFFSET = Component.Parameter('secondaryFrameOffset',
|
||||
public_name='secondary frame offset',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='slave frame offset file')
|
||||
doc='secondary frame offset file')
|
||||
|
||||
MASTER_FRAME_PARAMETER = Component.Parameter('masterFrameParameter',
|
||||
public_name='master frame parameter',
|
||||
REFERENCE_FRAME_PARAMETER = Component.Parameter('referenceFrameParameter',
|
||||
public_name='reference frame parameter',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='master frame parameter file')
|
||||
doc='reference frame parameter file')
|
||||
|
||||
SLAVE_FRAME_PARAMETER = Component.Parameter('slaveFrameParameter',
|
||||
public_name='slave frame parameter',
|
||||
SECONDARY_FRAME_PARAMETER = Component.Parameter('secondaryFrameParameter',
|
||||
public_name='secondary frame parameter',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='slave frame parameter file')
|
||||
doc='secondary frame parameter file')
|
||||
|
||||
MASTER_TRACK_PARAMETER = Component.Parameter('masterTrackParameter',
|
||||
public_name='master track parameter',
|
||||
REFERENCE_TRACK_PARAMETER = Component.Parameter('referenceTrackParameter',
|
||||
public_name='reference track parameter',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='master track parameter file')
|
||||
doc='reference track parameter file')
|
||||
|
||||
SLAVE_TRACK_PARAMETER = Component.Parameter('slaveTrackParameter',
|
||||
public_name='slave track parameter',
|
||||
SECONDARY_TRACK_PARAMETER = Component.Parameter('secondaryTrackParameter',
|
||||
public_name='secondary track parameter',
|
||||
default=None,
|
||||
type=str,
|
||||
mandatory=False,
|
||||
doc='slave track parameter file')
|
||||
doc='secondary track parameter file')
|
||||
|
||||
DEM = Component.Parameter('dem',
|
||||
public_name='dem for coregistration',
|
||||
|
@ -793,11 +793,11 @@ class Alos2burstProc(Component):
|
|||
to modify and return their values.
|
||||
"""
|
||||
|
||||
parameter_list = (MASTER_DATE,
|
||||
SLAVE_DATE,
|
||||
parameter_list = (REFERENCE_DATE,
|
||||
SECONDARY_DATE,
|
||||
MODE_COMBINATION,
|
||||
MASTER_FRAMES,
|
||||
SLAVE_FRAMES,
|
||||
REFERENCE_FRAMES,
|
||||
SECONDARY_FRAMES,
|
||||
STARTING_SWATH,
|
||||
ENDING_SWATH,
|
||||
BURST_UNSYNCHRONIZED_TIME,
|
||||
|
@ -806,22 +806,22 @@ class Alos2burstProc(Component):
|
|||
AZIMUTH_RESIDUAL_OFFSET_CC,
|
||||
RANGE_RESIDUAL_OFFSET_SD,
|
||||
AZIMUTH_RESIDUAL_OFFSET_SD,
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_MASTER,
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_MASTER,
|
||||
SWATH_RANGE_OFFSET_MATCHING_MASTER,
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_MASTER,
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_SLAVE,
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE,
|
||||
SWATH_RANGE_OFFSET_MATCHING_SLAVE,
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_SLAVE,
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_MASTER,
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_MASTER,
|
||||
FRAME_RANGE_OFFSET_MATCHING_MASTER,
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_MASTER,
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_SLAVE,
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SLAVE,
|
||||
FRAME_RANGE_OFFSET_MATCHING_SLAVE,
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_SLAVE,
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_REFERENCE,
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE,
|
||||
SWATH_RANGE_OFFSET_MATCHING_REFERENCE,
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_REFERENCE,
|
||||
SWATH_RANGE_OFFSET_GEOMETRICAL_SECONDARY,
|
||||
SWATH_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY,
|
||||
SWATH_RANGE_OFFSET_MATCHING_SECONDARY,
|
||||
SWATH_AZIMUTH_OFFSET_MATCHING_SECONDARY,
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_REFERENCE,
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_REFERENCE,
|
||||
FRAME_RANGE_OFFSET_MATCHING_REFERENCE,
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_REFERENCE,
|
||||
FRAME_RANGE_OFFSET_GEOMETRICAL_SECONDARY,
|
||||
FRAME_AZIMUTH_OFFSET_GEOMETRICAL_SECONDARY,
|
||||
FRAME_RANGE_OFFSET_MATCHING_SECONDARY,
|
||||
FRAME_AZIMUTH_OFFSET_MATCHING_SECONDARY,
|
||||
NUMBER_RANGE_LOOKS1,
|
||||
NUMBER_AZIMUTH_LOOKS1,
|
||||
NUMBER_RANGE_LOOKS2,
|
||||
|
@ -834,20 +834,20 @@ class Alos2burstProc(Component):
|
|||
NUMBER_AZIMUTH_LOOKS_SD,
|
||||
SUBBAND_RADAR_WAVLENGTH,
|
||||
RADAR_DEM_AFFINE_TRANSFORM,
|
||||
MASTER_SLC,
|
||||
SLAVE_SLC,
|
||||
MASTER_BURST_PREFIX,
|
||||
SLAVE_BURST_PREFIX,
|
||||
MASTER_MAGNITUDE,
|
||||
SLAVE_MAGNITUDE,
|
||||
MASTER_SWATH_OFFSET,
|
||||
SLAVE_SWATH_OFFSET,
|
||||
MASTER_FRAME_OFFSET,
|
||||
SLAVE_FRAME_OFFSET,
|
||||
MASTER_FRAME_PARAMETER,
|
||||
SLAVE_FRAME_PARAMETER,
|
||||
MASTER_TRACK_PARAMETER,
|
||||
SLAVE_TRACK_PARAMETER,
|
||||
REFERENCE_SLC,
|
||||
SECONDARY_SLC,
|
||||
REFERENCE_BURST_PREFIX,
|
||||
SECONDARY_BURST_PREFIX,
|
||||
REFERENCE_MAGNITUDE,
|
||||
SECONDARY_MAGNITUDE,
|
||||
REFERENCE_SWATH_OFFSET,
|
||||
SECONDARY_SWATH_OFFSET,
|
||||
REFERENCE_FRAME_OFFSET,
|
||||
SECONDARY_FRAME_OFFSET,
|
||||
REFERENCE_FRAME_PARAMETER,
|
||||
SECONDARY_FRAME_PARAMETER,
|
||||
REFERENCE_TRACK_PARAMETER,
|
||||
SECONDARY_TRACK_PARAMETER,
|
||||
DEM,
|
||||
DEM_GEO,
|
||||
WBD,
|
||||
|
@ -912,12 +912,12 @@ class Alos2burstProc(Component):
|
|||
self.procDoc = procDoc
|
||||
return None
|
||||
|
||||
def setFilename(self, masterDate, slaveDate, nrlks1, nalks1, nrlks2, nalks2):
|
||||
def setFilename(self, referenceDate, secondaryDate, nrlks1, nalks1, nrlks2, nalks2):
|
||||
|
||||
# if masterDate == None:
|
||||
# masterDate = self.masterDate
|
||||
# if slaveDate == None:
|
||||
# slaveDate = self.slaveDate
|
||||
# if referenceDate == None:
|
||||
# referenceDate = self.referenceDate
|
||||
# if secondaryDate == None:
|
||||
# secondaryDate = self.secondaryDate
|
||||
# if nrlks1 == None:
|
||||
# nrlks1 = self.numberRangeLooks1
|
||||
# if nalks1 == None:
|
||||
|
@ -927,24 +927,24 @@ class Alos2burstProc(Component):
|
|||
# if nalks2 == None:
|
||||
# nalks2 = self.numberAzimuthLooks2
|
||||
|
||||
ms = masterDate + '-' + slaveDate
|
||||
ms = referenceDate + '-' + secondaryDate
|
||||
ml1 = '_{}rlks_{}alks'.format(nrlks1, nalks1)
|
||||
ml2 = '_{}rlks_{}alks'.format(nrlks1*nrlks2, nalks1*nalks2)
|
||||
|
||||
self.masterSlc = masterDate + '.slc'
|
||||
self.slaveSlc = slaveDate + '.slc'
|
||||
self.masterBurstPrefix = masterDate
|
||||
self.slaveBurstPrefix = slaveDate
|
||||
self.masterMagnitude = masterDate + '.mag'
|
||||
self.slaveMagnitude = slaveDate + '.mag'
|
||||
self.masterSwathOffset = 'swath_offset_' + masterDate + '.txt'
|
||||
self.slaveSwathOffset = 'swath_offset_' + slaveDate + '.txt'
|
||||
self.masterFrameOffset = 'frame_offset_' + masterDate + '.txt'
|
||||
self.slaveFrameOffset = 'frame_offset_' + slaveDate + '.txt'
|
||||
self.masterFrameParameter = masterDate + '.frame.xml'
|
||||
self.slaveFrameParameter = slaveDate + '.frame.xml'
|
||||
self.masterTrackParameter = masterDate + '.track.xml'
|
||||
self.slaveTrackParameter = slaveDate + '.track.xml'
|
||||
self.referenceSlc = referenceDate + '.slc'
|
||||
self.secondarySlc = secondaryDate + '.slc'
|
||||
self.referenceBurstPrefix = referenceDate
|
||||
self.secondaryBurstPrefix = secondaryDate
|
||||
self.referenceMagnitude = referenceDate + '.mag'
|
||||
self.secondaryMagnitude = secondaryDate + '.mag'
|
||||
self.referenceSwathOffset = 'swath_offset_' + referenceDate + '.txt'
|
||||
self.secondarySwathOffset = 'swath_offset_' + secondaryDate + '.txt'
|
||||
self.referenceFrameOffset = 'frame_offset_' + referenceDate + '.txt'
|
||||
self.secondaryFrameOffset = 'frame_offset_' + secondaryDate + '.txt'
|
||||
self.referenceFrameParameter = referenceDate + '.frame.xml'
|
||||
self.secondaryFrameParameter = secondaryDate + '.frame.xml'
|
||||
self.referenceTrackParameter = referenceDate + '.track.xml'
|
||||
self.secondaryTrackParameter = secondaryDate + '.track.xml'
|
||||
#self.dem =
|
||||
#self.demGeo =
|
||||
#self.wbd =
|
||||
|
@ -983,12 +983,12 @@ class Alos2burstProc(Component):
|
|||
self.geoIon = ms + ml2 + '.ion.geo'
|
||||
|
||||
|
||||
def setFilenameSd(self, masterDate, slaveDate, nrlks1, nalks1, nrlks_sd, nalks_sd, nsd=3):
|
||||
def setFilenameSd(self, referenceDate, secondaryDate, nrlks1, nalks1, nrlks_sd, nalks_sd, nsd=3):
|
||||
#spectral diversity
|
||||
# if masterDate == None:
|
||||
# masterDate = self.masterDate
|
||||
# if slaveDate == None:
|
||||
# slaveDate = self.slaveDate
|
||||
# if referenceDate == None:
|
||||
# referenceDate = self.referenceDate
|
||||
# if secondaryDate == None:
|
||||
# secondaryDate = self.secondaryDate
|
||||
# if nrlks1 == None:
|
||||
# nrlks1 = self.numberRangeLooks1
|
||||
# if nalks1 == None:
|
||||
|
@ -998,7 +998,7 @@ class Alos2burstProc(Component):
|
|||
# if nalks_sd == None:
|
||||
# nalks_sd = self.numberAzimuthLooksSd
|
||||
|
||||
ms = masterDate + '-' + slaveDate
|
||||
ms = referenceDate + '-' + secondaryDate
|
||||
ml1 = '_{}rlks_{}alks'.format(nrlks1, nalks1)
|
||||
ml2sd = '_{}rlks_{}alks'.format(nrlks1*nrlks_sd, nalks1*nalks_sd)
|
||||
self.interferogramSd = ['sd_{}_'.format(i+1) + ms + ml1 + '.int' for i in range(nsd)]
|
||||
|
@ -1051,42 +1051,42 @@ class Alos2burstProc(Component):
|
|||
return None
|
||||
|
||||
|
||||
def loadTrack(self, master=True):
|
||||
def loadTrack(self, reference=True):
|
||||
'''
|
||||
Load the track using Product Manager.
|
||||
'''
|
||||
if master:
|
||||
track = self.loadProduct(self.masterTrackParameter)
|
||||
if reference:
|
||||
track = self.loadProduct(self.referenceTrackParameter)
|
||||
else:
|
||||
track = self.loadProduct(self.slaveTrackParameter)
|
||||
track = self.loadProduct(self.secondaryTrackParameter)
|
||||
|
||||
track.frames = []
|
||||
for i, frameNumber in enumerate(self.masterFrames):
|
||||
for i, frameNumber in enumerate(self.referenceFrames):
|
||||
os.chdir('f{}_{}'.format(i+1, frameNumber))
|
||||
if master:
|
||||
track.frames.append(self.loadProduct(self.masterFrameParameter))
|
||||
if reference:
|
||||
track.frames.append(self.loadProduct(self.referenceFrameParameter))
|
||||
else:
|
||||
track.frames.append(self.loadProduct(self.slaveFrameParameter))
|
||||
track.frames.append(self.loadProduct(self.secondaryFrameParameter))
|
||||
os.chdir('../')
|
||||
|
||||
return track
|
||||
|
||||
|
||||
def saveTrack(self, track, master=True):
|
||||
def saveTrack(self, track, reference=True):
|
||||
'''
|
||||
Save the track to XML files using Product Manager.
|
||||
'''
|
||||
if master:
|
||||
self.saveProduct(track, self.masterTrackParameter)
|
||||
if reference:
|
||||
self.saveProduct(track, self.referenceTrackParameter)
|
||||
else:
|
||||
self.saveProduct(track, self.slaveTrackParameter)
|
||||
self.saveProduct(track, self.secondaryTrackParameter)
|
||||
|
||||
for i, frameNumber in enumerate(self.masterFrames):
|
||||
for i, frameNumber in enumerate(self.referenceFrames):
|
||||
os.chdir('f{}_{}'.format(i+1, frameNumber))
|
||||
if master:
|
||||
self.saveProduct(track.frames[i], self.masterFrameParameter)
|
||||
if reference:
|
||||
self.saveProduct(track.frames[i], self.referenceFrameParameter)
|
||||
else:
|
||||
self.saveProduct(track.frames[i], self.slaveFrameParameter)
|
||||
self.saveProduct(track.frames[i], self.secondaryFrameParameter)
|
||||
os.chdir('../')
|
||||
|
||||
return None
|
||||
|
|
|
@ -26,15 +26,15 @@ def runCoregCc(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
#demFile = os.path.abspath(self._insar.dem)
|
||||
#wbdFile = os.path.abspath(self._insar.wbd)
|
||||
###############################################################################
|
||||
self._insar.rangeResidualOffsetCc = [[] for i in range(len(masterTrack.frames))]
|
||||
self._insar.azimuthResidualOffsetCc = [[] for i in range(len(masterTrack.frames))]
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
self._insar.rangeResidualOffsetCc = [[] for i in range(len(referenceTrack.frames))]
|
||||
self._insar.azimuthResidualOffsetCc = [[] for i in range(len(referenceTrack.frames))]
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
|
@ -43,8 +43,8 @@ def runCoregCc(self):
|
|||
|
||||
print('processing frame {}, swath {}'.format(frameNumber, swathNumber))
|
||||
|
||||
masterSwath = masterTrack.frames[i].swaths[j]
|
||||
slaveSwath = slaveTrack.frames[i].swaths[j]
|
||||
referenceSwath = referenceTrack.frames[i].swaths[j]
|
||||
secondarySwath = secondaryTrack.frames[i].swaths[j]
|
||||
|
||||
##################################################
|
||||
# estimate cross-correlation offsets
|
||||
|
@ -64,11 +64,11 @@ def runCoregCc(self):
|
|||
landRatio = np.sum(wbd==0) / length / width
|
||||
del wbd
|
||||
if (landRatio <= 0.00125):
|
||||
print('\n\nWARNING: land area too small for estimating offsets between master and slave magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber))
|
||||
print('\n\nWARNING: land area too small for estimating offsets between reference and secondary magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber))
|
||||
print('set offsets to zero\n\n')
|
||||
self._insar.rangeResidualOffsetCc[i].append(0.0)
|
||||
self._insar.azimuthResidualOffsetCc[i].append(0.0)
|
||||
catalog.addItem('warning message', 'land area too small for estimating offsets between master and slave magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber), 'runCoregCc')
|
||||
catalog.addItem('warning message', 'land area too small for estimating offsets between reference and secondary magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber), 'runCoregCc')
|
||||
continue
|
||||
#total number of offsets to use
|
||||
numberOfOffsets /= landRatio
|
||||
|
@ -102,37 +102,37 @@ def runCoregCc(self):
|
|||
catalog.addItem('number of azimuth offsets at frame {}, swath {}'.format(frameNumber, swathNumber), '{}'.format(numberOfOffsetsAzimuth), 'runCoregCc')
|
||||
|
||||
#need to cp to current directory to make it (gdal) work
|
||||
if not os.path.isfile(self._insar.masterMagnitude):
|
||||
os.symlink(os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude), self._insar.masterMagnitude)
|
||||
if not os.path.isfile(self._insar.referenceMagnitude):
|
||||
os.symlink(os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude), self._insar.referenceMagnitude)
|
||||
#shutil.copy2() can overwrite
|
||||
shutil.copy2(os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude+'.vrt'), self._insar.masterMagnitude+'.vrt')
|
||||
shutil.copy2(os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude+'.xml'), self._insar.masterMagnitude+'.xml')
|
||||
shutil.copy2(os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude+'.vrt'), self._insar.referenceMagnitude+'.vrt')
|
||||
shutil.copy2(os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude+'.xml'), self._insar.referenceMagnitude+'.xml')
|
||||
|
||||
if not os.path.isfile(self._insar.slaveMagnitude):
|
||||
os.symlink(os.path.join(self._insar.slaveBurstPrefix + '_1_coreg_geom', self._insar.slaveMagnitude), self._insar.slaveMagnitude)
|
||||
if not os.path.isfile(self._insar.secondaryMagnitude):
|
||||
os.symlink(os.path.join(self._insar.secondaryBurstPrefix + '_1_coreg_geom', self._insar.secondaryMagnitude), self._insar.secondaryMagnitude)
|
||||
#shutil.copy2() can overwrite
|
||||
shutil.copy2(os.path.join(self._insar.slaveBurstPrefix + '_1_coreg_geom', self._insar.slaveMagnitude+'.vrt'), self._insar.slaveMagnitude+'.vrt')
|
||||
shutil.copy2(os.path.join(self._insar.slaveBurstPrefix + '_1_coreg_geom', self._insar.slaveMagnitude+'.xml'), self._insar.slaveMagnitude+'.xml')
|
||||
shutil.copy2(os.path.join(self._insar.secondaryBurstPrefix + '_1_coreg_geom', self._insar.secondaryMagnitude+'.vrt'), self._insar.secondaryMagnitude+'.vrt')
|
||||
shutil.copy2(os.path.join(self._insar.secondaryBurstPrefix + '_1_coreg_geom', self._insar.secondaryMagnitude+'.xml'), self._insar.secondaryMagnitude+'.xml')
|
||||
|
||||
#matching
|
||||
ampcor = Ampcor(name='insarapp_slcs_ampcor')
|
||||
ampcor.configure()
|
||||
|
||||
mMag = isceobj.createImage()
|
||||
mMag.load(self._insar.masterMagnitude+'.xml')
|
||||
mMag.load(self._insar.referenceMagnitude+'.xml')
|
||||
mMag.setAccessMode('read')
|
||||
mMag.createImage()
|
||||
|
||||
sMag = isceobj.createImage()
|
||||
sMag.load(self._insar.slaveMagnitude+'.xml')
|
||||
sMag.load(self._insar.secondaryMagnitude+'.xml')
|
||||
sMag.setAccessMode('read')
|
||||
sMag.createImage()
|
||||
|
||||
ampcor.setImageDataType1('real')
|
||||
ampcor.setImageDataType2('real')
|
||||
|
||||
ampcor.setMasterSlcImage(mMag)
|
||||
ampcor.setSlaveSlcImage(sMag)
|
||||
ampcor.setReferenceSlcImage(mMag)
|
||||
ampcor.setSecondarySlcImage(sMag)
|
||||
|
||||
#MATCH REGION
|
||||
rgoff = 0
|
||||
|
@ -201,12 +201,12 @@ def runCoregCc(self):
|
|||
sMag.finalizeImage()
|
||||
|
||||
#clear up
|
||||
os.remove(self._insar.masterMagnitude)
|
||||
os.remove(self._insar.masterMagnitude+'.vrt')
|
||||
os.remove(self._insar.masterMagnitude+'.xml')
|
||||
os.remove(self._insar.slaveMagnitude)
|
||||
os.remove(self._insar.slaveMagnitude+'.vrt')
|
||||
os.remove(self._insar.slaveMagnitude+'.xml')
|
||||
os.remove(self._insar.referenceMagnitude)
|
||||
os.remove(self._insar.referenceMagnitude+'.vrt')
|
||||
os.remove(self._insar.referenceMagnitude+'.xml')
|
||||
os.remove(self._insar.secondaryMagnitude)
|
||||
os.remove(self._insar.secondaryMagnitude+'.vrt')
|
||||
os.remove(self._insar.secondaryMagnitude+'.xml')
|
||||
|
||||
#compute average offsets to use in resampling
|
||||
if refinedOffsets == None:
|
||||
|
@ -214,9 +214,9 @@ def runCoregCc(self):
|
|||
azimuthOffset = 0
|
||||
self._insar.rangeResidualOffsetCc[i].append(rangeOffset)
|
||||
self._insar.azimuthResidualOffsetCc[i].append(azimuthOffset)
|
||||
print('\n\nWARNING: too few offsets left in matching master and slave magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber))
|
||||
print('\n\nWARNING: too few offsets left in matching reference and secondary magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber))
|
||||
print('set offsets to zero\n\n')
|
||||
catalog.addItem('warning message', 'too few offsets left in matching master and slave magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber), 'runCoregCc')
|
||||
catalog.addItem('warning message', 'too few offsets left in matching reference and secondary magnitudes at frame {}, swath {}'.format(frameNumber, swathNumber), 'runCoregCc')
|
||||
else:
|
||||
rangeOffset, azimuthOffset = meanOffset(refinedOffsets)
|
||||
#for range offset, need to compute from a polynomial
|
||||
|
@ -258,38 +258,38 @@ def runCoregCc(self):
|
|||
##################################################
|
||||
# resample bursts
|
||||
##################################################
|
||||
slaveBurstResampledDir = self._insar.slaveBurstPrefix + '_2_coreg_cc'
|
||||
#interferogramDir = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix + '_coreg_geom'
|
||||
secondaryBurstResampledDir = self._insar.secondaryBurstPrefix + '_2_coreg_cc'
|
||||
#interferogramDir = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix + '_coreg_geom'
|
||||
interferogramDir = 'burst_interf_2_coreg_cc'
|
||||
interferogramPrefix = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix
|
||||
resampleBursts(masterSwath, slaveSwath,
|
||||
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, slaveBurstResampledDir, interferogramDir,
|
||||
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, self._insar.slaveBurstPrefix, interferogramPrefix,
|
||||
interferogramPrefix = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix
|
||||
resampleBursts(referenceSwath, secondarySwath,
|
||||
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, secondaryBurstResampledDir, interferogramDir,
|
||||
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, self._insar.secondaryBurstPrefix, interferogramPrefix,
|
||||
self._insar.rangeOffset, self._insar.azimuthOffset, rangeOffsetResidual=rangeOffset, azimuthOffsetResidual=azimuthOffset)
|
||||
|
||||
|
||||
##################################################
|
||||
# mosaic burst amplitudes and interferograms
|
||||
##################################################
|
||||
os.chdir(slaveBurstResampledDir)
|
||||
mosaicBurstAmplitude(masterSwath, self._insar.slaveBurstPrefix, self._insar.slaveMagnitude, numberOfLooksThreshold=4)
|
||||
os.chdir(secondaryBurstResampledDir)
|
||||
mosaicBurstAmplitude(referenceSwath, self._insar.secondaryBurstPrefix, self._insar.secondaryMagnitude, numberOfLooksThreshold=4)
|
||||
os.chdir('../')
|
||||
|
||||
os.chdir(interferogramDir)
|
||||
mosaicBurstInterferogram(masterSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
|
||||
mosaicBurstInterferogram(referenceSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
|
||||
os.chdir('../')
|
||||
|
||||
|
||||
##################################################
|
||||
# final amplitude and interferogram
|
||||
##################################################
|
||||
amp = np.zeros((masterSwath.numberOfLines, 2*masterSwath.numberOfSamples), dtype=np.float32)
|
||||
amp[0:, 1:masterSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(slaveBurstResampledDir, self._insar.slaveMagnitude), \
|
||||
dtype=np.float32).reshape(masterSwath.numberOfLines, masterSwath.numberOfSamples)
|
||||
amp[0:, 0:masterSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude), \
|
||||
dtype=np.float32).reshape(masterSwath.numberOfLines, masterSwath.numberOfSamples)
|
||||
amp = np.zeros((referenceSwath.numberOfLines, 2*referenceSwath.numberOfSamples), dtype=np.float32)
|
||||
amp[0:, 1:referenceSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(secondaryBurstResampledDir, self._insar.secondaryMagnitude), \
|
||||
dtype=np.float32).reshape(referenceSwath.numberOfLines, referenceSwath.numberOfSamples)
|
||||
amp[0:, 0:referenceSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude), \
|
||||
dtype=np.float32).reshape(referenceSwath.numberOfLines, referenceSwath.numberOfSamples)
|
||||
amp.astype(np.float32).tofile(self._insar.amplitude)
|
||||
create_xml(self._insar.amplitude, masterSwath.numberOfSamples, masterSwath.numberOfLines, 'amp')
|
||||
create_xml(self._insar.amplitude, referenceSwath.numberOfSamples, referenceSwath.numberOfLines, 'amp')
|
||||
|
||||
os.rename(os.path.join(interferogramDir, self._insar.interferogram), self._insar.interferogram)
|
||||
os.rename(os.path.join(interferogramDir, self._insar.interferogram+'.vrt'), self._insar.interferogram+'.vrt')
|
||||
|
|
|
@ -24,14 +24,14 @@ def runCoregGeom(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
demFile = os.path.abspath(self._insar.dem)
|
||||
wbdFile = os.path.abspath(self._insar.wbd)
|
||||
###############################################################################
|
||||
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
|
@ -40,8 +40,8 @@ def runCoregGeom(self):
|
|||
|
||||
print('processing frame {}, swath {}'.format(frameNumber, swathNumber))
|
||||
|
||||
masterSwath = masterTrack.frames[i].swaths[j]
|
||||
slaveSwath = slaveTrack.frames[i].swaths[j]
|
||||
referenceSwath = referenceTrack.frames[i].swaths[j]
|
||||
secondarySwath = secondaryTrack.frames[i].swaths[j]
|
||||
|
||||
|
||||
##################################################
|
||||
|
@ -49,41 +49,41 @@ def runCoregGeom(self):
|
|||
##################################################
|
||||
#set up track parameters just for computing offsets
|
||||
#ALL track parameters are listed here
|
||||
#master
|
||||
#masterTrack.passDirection =
|
||||
#masterTrack.pointingDirection =
|
||||
#masterTrack.operationMode =
|
||||
#masterTrack.radarWavelength =
|
||||
masterTrack.numberOfSamples = masterSwath.numberOfSamples
|
||||
masterTrack.numberOfLines = masterSwath.numberOfLines
|
||||
masterTrack.startingRange = masterSwath.startingRange
|
||||
#masterTrack.rangeSamplingRate =
|
||||
masterTrack.rangePixelSize = masterSwath.rangePixelSize
|
||||
masterTrack.sensingStart = masterSwath.sensingStart
|
||||
#masterTrack.prf =
|
||||
#masterTrack.azimuthPixelSize =
|
||||
masterTrack.azimuthLineInterval = masterSwath.azimuthLineInterval
|
||||
#masterTrack.dopplerVsPixel =
|
||||
#masterTrack.frames =
|
||||
#masterTrack.orbit =
|
||||
#reference
|
||||
#referenceTrack.passDirection =
|
||||
#referenceTrack.pointingDirection =
|
||||
#referenceTrack.operationMode =
|
||||
#referenceTrack.radarWavelength =
|
||||
referenceTrack.numberOfSamples = referenceSwath.numberOfSamples
|
||||
referenceTrack.numberOfLines = referenceSwath.numberOfLines
|
||||
referenceTrack.startingRange = referenceSwath.startingRange
|
||||
#referenceTrack.rangeSamplingRate =
|
||||
referenceTrack.rangePixelSize = referenceSwath.rangePixelSize
|
||||
referenceTrack.sensingStart = referenceSwath.sensingStart
|
||||
#referenceTrack.prf =
|
||||
#referenceTrack.azimuthPixelSize =
|
||||
referenceTrack.azimuthLineInterval = referenceSwath.azimuthLineInterval
|
||||
#referenceTrack.dopplerVsPixel =
|
||||
#referenceTrack.frames =
|
||||
#referenceTrack.orbit =
|
||||
|
||||
#slave
|
||||
slaveTrack.numberOfSamples = slaveSwath.numberOfSamples
|
||||
slaveTrack.numberOfLines = slaveSwath.numberOfLines
|
||||
slaveTrack.startingRange = slaveSwath.startingRange
|
||||
slaveTrack.rangePixelSize = slaveSwath.rangePixelSize
|
||||
slaveTrack.sensingStart = slaveSwath.sensingStart
|
||||
slaveTrack.azimuthLineInterval = slaveSwath.azimuthLineInterval
|
||||
#secondary
|
||||
secondaryTrack.numberOfSamples = secondarySwath.numberOfSamples
|
||||
secondaryTrack.numberOfLines = secondarySwath.numberOfLines
|
||||
secondaryTrack.startingRange = secondarySwath.startingRange
|
||||
secondaryTrack.rangePixelSize = secondarySwath.rangePixelSize
|
||||
secondaryTrack.sensingStart = secondarySwath.sensingStart
|
||||
secondaryTrack.azimuthLineInterval = secondarySwath.azimuthLineInterval
|
||||
|
||||
if self.useGPU and self._insar.hasGPU():
|
||||
topoGPU(masterTrack, 1, 1, demFile,
|
||||
topoGPU(referenceTrack, 1, 1, demFile,
|
||||
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.los)
|
||||
geo2RdrGPU(slaveTrack, 1, 1,
|
||||
geo2RdrGPU(secondaryTrack, 1, 1,
|
||||
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.rangeOffset, self._insar.azimuthOffset)
|
||||
else:
|
||||
topoCPU(masterTrack, 1, 1, demFile,
|
||||
topoCPU(referenceTrack, 1, 1, demFile,
|
||||
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.los)
|
||||
geo2RdrCPU(slaveTrack, 1, 1,
|
||||
geo2RdrCPU(secondaryTrack, 1, 1,
|
||||
self._insar.latitude, self._insar.longitude, self._insar.height, self._insar.rangeOffset, self._insar.azimuthOffset)
|
||||
|
||||
waterBodyRadar(self._insar.latitude, self._insar.longitude, wbdFile, self._insar.wbdOut)
|
||||
|
@ -106,28 +106,28 @@ def runCoregGeom(self):
|
|||
##################################################
|
||||
# resample bursts
|
||||
##################################################
|
||||
slaveBurstResampledDir = self._insar.slaveBurstPrefix + '_1_coreg_geom'
|
||||
#interferogramDir = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix + '_coreg_geom'
|
||||
secondaryBurstResampledDir = self._insar.secondaryBurstPrefix + '_1_coreg_geom'
|
||||
#interferogramDir = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix + '_coreg_geom'
|
||||
interferogramDir = 'burst_interf_1_coreg_geom'
|
||||
interferogramPrefix = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix
|
||||
resampleBursts(masterSwath, slaveSwath,
|
||||
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, slaveBurstResampledDir, interferogramDir,
|
||||
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, self._insar.slaveBurstPrefix, interferogramPrefix,
|
||||
interferogramPrefix = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix
|
||||
resampleBursts(referenceSwath, secondarySwath,
|
||||
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, secondaryBurstResampledDir, interferogramDir,
|
||||
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, self._insar.secondaryBurstPrefix, interferogramPrefix,
|
||||
self._insar.rangeOffset, self._insar.azimuthOffset, rangeOffsetResidual=0, azimuthOffsetResidual=0)
|
||||
|
||||
|
||||
##################################################
|
||||
# mosaic burst amplitudes and interferograms
|
||||
##################################################
|
||||
os.chdir(slaveBurstResampledDir)
|
||||
mosaicBurstAmplitude(masterSwath, self._insar.slaveBurstPrefix, self._insar.slaveMagnitude, numberOfLooksThreshold=4)
|
||||
os.chdir(secondaryBurstResampledDir)
|
||||
mosaicBurstAmplitude(referenceSwath, self._insar.secondaryBurstPrefix, self._insar.secondaryMagnitude, numberOfLooksThreshold=4)
|
||||
os.chdir('../')
|
||||
|
||||
#the interferogram is not good enough, do not mosaic
|
||||
mosaic=False
|
||||
if mosaic:
|
||||
os.chdir(interferogramDir)
|
||||
mosaicBurstInterferogram(masterSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
|
||||
mosaicBurstInterferogram(referenceSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
|
||||
os.chdir('../')
|
||||
|
||||
|
||||
|
|
|
@ -20,15 +20,15 @@ def runCoregSd(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
#demFile = os.path.abspath(self._insar.dem)
|
||||
#wbdFile = os.path.abspath(self._insar.wbd)
|
||||
###############################################################################
|
||||
#self._insar.rangeResidualOffsetSd = [[] for i in range(len(masterTrack.frames))]
|
||||
self._insar.azimuthResidualOffsetSd = [[] for i in range(len(masterTrack.frames))]
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
#self._insar.rangeResidualOffsetSd = [[] for i in range(len(referenceTrack.frames))]
|
||||
self._insar.azimuthResidualOffsetSd = [[] for i in range(len(referenceTrack.frames))]
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
|
@ -37,8 +37,8 @@ def runCoregSd(self):
|
|||
|
||||
print('processing frame {}, swath {}'.format(frameNumber, swathNumber))
|
||||
|
||||
masterSwath = masterTrack.frames[i].swaths[j]
|
||||
slaveSwath = slaveTrack.frames[i].swaths[j]
|
||||
referenceSwath = referenceTrack.frames[i].swaths[j]
|
||||
secondarySwath = secondaryTrack.frames[i].swaths[j]
|
||||
|
||||
##################################################
|
||||
# spectral diversity or mai
|
||||
|
@ -48,8 +48,8 @@ def runCoregSd(self):
|
|||
os.chdir(sdDir)
|
||||
|
||||
interferogramDir = 'burst_interf_2_coreg_cc'
|
||||
interferogramPrefix = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix
|
||||
offsetSd = spectralDiversity(masterSwath, os.path.join('../', interferogramDir), interferogramPrefix, self._insar.interferogramSd,
|
||||
interferogramPrefix = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix
|
||||
offsetSd = spectralDiversity(referenceSwath, os.path.join('../', interferogramDir), interferogramPrefix, self._insar.interferogramSd,
|
||||
numberLooksScanSAR=4, numberRangeLooks=28, numberAzimuthLooks=8, coherenceThreshold=0.85,
|
||||
keep=True, filt=True, filtWinSizeRange=5, filtWinSizeAzimuth=5)
|
||||
#here use the number of looks for sd as filtWinSizeRange and filtWinSizeAzimuth to get the best filtering result?
|
||||
|
@ -60,31 +60,31 @@ def runCoregSd(self):
|
|||
catalog.addItem('azimuth residual offset at frame {}, swath {}'.format(frameNumber, swathNumber), '{}'.format(offsetSd), 'runCoregSd')
|
||||
|
||||
|
||||
#this small residual azimuth offset has small impact, it's not worth the time to resample slave bursts again.
|
||||
#this small residual azimuth offset has small impact, it's not worth the time to resample secondary bursts again.
|
||||
formInterferogram=False
|
||||
if formInterferogram:
|
||||
##################################################
|
||||
# resample bursts
|
||||
##################################################
|
||||
slaveBurstResampledDir = self._insar.slaveBurstPrefix + '_3_coreg_sd'
|
||||
#interferogramDir = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix + '_coreg_geom'
|
||||
secondaryBurstResampledDir = self._insar.secondaryBurstPrefix + '_3_coreg_sd'
|
||||
#interferogramDir = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix + '_coreg_geom'
|
||||
interferogramDir = 'burst_interf_3_coreg_sd'
|
||||
interferogramPrefix = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix
|
||||
resampleBursts(masterSwath, slaveSwath,
|
||||
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, slaveBurstResampledDir, interferogramDir,
|
||||
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, self._insar.slaveBurstPrefix, interferogramPrefix,
|
||||
interferogramPrefix = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix
|
||||
resampleBursts(referenceSwath, secondarySwath,
|
||||
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, secondaryBurstResampledDir, interferogramDir,
|
||||
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, self._insar.secondaryBurstPrefix, interferogramPrefix,
|
||||
self._insar.rangeOffset, self._insar.azimuthOffset, rangeOffsetResidual=self._insar.rangeResidualOffsetCc[i][j], azimuthOffsetResidual=self._insar.azimuthResidualOffsetCc[i][j]+offsetSd)
|
||||
|
||||
|
||||
##################################################
|
||||
# mosaic burst amplitudes and interferograms
|
||||
##################################################
|
||||
os.chdir(slaveBurstResampledDir)
|
||||
mosaicBurstAmplitude(masterSwath, self._insar.slaveBurstPrefix, self._insar.slaveMagnitude, numberOfLooksThreshold=4)
|
||||
os.chdir(secondaryBurstResampledDir)
|
||||
mosaicBurstAmplitude(referenceSwath, self._insar.secondaryBurstPrefix, self._insar.secondaryMagnitude, numberOfLooksThreshold=4)
|
||||
os.chdir('../')
|
||||
|
||||
os.chdir(interferogramDir)
|
||||
mosaicBurstInterferogram(masterSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
|
||||
mosaicBurstInterferogram(referenceSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
|
||||
os.chdir('../')
|
||||
|
||||
|
||||
|
@ -96,7 +96,7 @@ def runCoregSd(self):
|
|||
self._insar.procDoc.addAllFromCatalog(catalog)
|
||||
|
||||
|
||||
def spectralDiversity(masterSwath, interferogramDir, interferogramPrefix, outputList, numberLooksScanSAR=None, numberRangeLooks=20, numberAzimuthLooks=10, coherenceThreshold=0.85, keep=False, filt=False, filtWinSizeRange=5, filtWinSizeAzimuth=5):
|
||||
def spectralDiversity(referenceSwath, interferogramDir, interferogramPrefix, outputList, numberLooksScanSAR=None, numberRangeLooks=20, numberAzimuthLooks=10, coherenceThreshold=0.85, keep=False, filt=False, filtWinSizeRange=5, filtWinSizeAzimuth=5):
|
||||
'''
|
||||
numberLooksScanSAR: number of looks of the ScanSAR system
|
||||
numberRangeLooks: number of range looks to take
|
||||
|
@ -110,21 +110,21 @@ def spectralDiversity(masterSwath, interferogramDir, interferogramPrefix, output
|
|||
from isceobj.Alos2Proc.Alos2ProcPublic import multilook
|
||||
from isceobj.Alos2Proc.Alos2ProcPublic import cal_coherence_1
|
||||
|
||||
width = masterSwath.numberOfSamples
|
||||
length = masterSwath.numberOfLines
|
||||
lengthBurst = masterSwath.burstSlcNumberOfLines
|
||||
nBurst = masterSwath.numberOfBursts
|
||||
azsi = masterSwath.azimuthLineInterval
|
||||
tc = masterSwath.burstCycleLength / masterSwath.prf
|
||||
width = referenceSwath.numberOfSamples
|
||||
length = referenceSwath.numberOfLines
|
||||
lengthBurst = referenceSwath.burstSlcNumberOfLines
|
||||
nBurst = referenceSwath.numberOfBursts
|
||||
azsi = referenceSwath.azimuthLineInterval
|
||||
tc = referenceSwath.burstCycleLength / referenceSwath.prf
|
||||
|
||||
bursts = [os.path.join(interferogramDir, interferogramPrefix+'_%02d.int'%(i+1)) for i in range(masterSwath.numberOfBursts)]
|
||||
bursts = [os.path.join(interferogramDir, interferogramPrefix+'_%02d.int'%(i+1)) for i in range(referenceSwath.numberOfBursts)]
|
||||
|
||||
####################################################
|
||||
#input parameters
|
||||
rgl = numberRangeLooks
|
||||
azl = numberAzimuthLooks
|
||||
cor_th = coherenceThreshold
|
||||
nls0 = lengthBurst / (masterSwath.burstSlcFirstLineOffsets[nBurst-1] / (nBurst-1.0))
|
||||
nls0 = lengthBurst / (referenceSwath.burstSlcFirstLineOffsets[nBurst-1] / (nBurst-1.0))
|
||||
print('number of looks of the ScanSAR system: {}'.format(nls0))
|
||||
if numberLooksScanSAR != None:
|
||||
nls = numberLooksScanSAR
|
||||
|
@ -143,8 +143,8 @@ def spectralDiversity(masterSwath, interferogramDir, interferogramPrefix, output
|
|||
burst = np.fromfile(bursts[i], dtype=np.complex64).reshape(lengthBurst, width)
|
||||
|
||||
#subset for the burst
|
||||
cntBurst = cnt[0+masterSwath.burstSlcFirstLineOffsets[i]:lengthBurst+masterSwath.burstSlcFirstLineOffsets[i], :]
|
||||
infBurst = inf[0+masterSwath.burstSlcFirstLineOffsets[i]:lengthBurst+masterSwath.burstSlcFirstLineOffsets[i], :, :]
|
||||
cntBurst = cnt[0+referenceSwath.burstSlcFirstLineOffsets[i]:lengthBurst+referenceSwath.burstSlcFirstLineOffsets[i], :]
|
||||
infBurst = inf[0+referenceSwath.burstSlcFirstLineOffsets[i]:lengthBurst+referenceSwath.burstSlcFirstLineOffsets[i], :, :]
|
||||
|
||||
#set number of non-zero pixels
|
||||
cntBurst[np.nonzero(burst)] += 1
|
||||
|
@ -178,7 +178,7 @@ def spectralDiversity(masterSwath, interferogramDir, interferogramPrefix, output
|
|||
widthm = int(width/rgl)
|
||||
lengthm = int(length/azl)
|
||||
#use the convention that ka > 0
|
||||
ka = -np.polyval(masterSwath.azimuthFmrateVsPixel[::-1], create_multi_index(width, rgl))
|
||||
ka = -np.polyval(referenceSwath.azimuthFmrateVsPixel[::-1], create_multi_index(width, rgl))
|
||||
|
||||
#get spectral diversity inteferogram
|
||||
offset_sd=[]
|
||||
|
|
|
@ -23,13 +23,13 @@ def runExtractBurst(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
#demFile = os.path.abspath(self._insar.dem)
|
||||
#wbdFile = os.path.abspath(self._insar.wbd)
|
||||
###############################################################################
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
|
@ -41,21 +41,21 @@ def runExtractBurst(self):
|
|||
az_ratio1 = 20.0
|
||||
for k in range(2):
|
||||
if k==0:
|
||||
#master
|
||||
swath = masterTrack.frames[i].swaths[j]
|
||||
#reference
|
||||
swath = referenceTrack.frames[i].swaths[j]
|
||||
unsynLines = self._insar.burstUnsynchronizedTime * swath.prf
|
||||
extractDir = self._insar.masterBurstPrefix
|
||||
burstPrefix = self._insar.masterBurstPrefix
|
||||
fullApertureSlc = self._insar.masterSlc
|
||||
magnitude = self._insar.masterMagnitude
|
||||
extractDir = self._insar.referenceBurstPrefix
|
||||
burstPrefix = self._insar.referenceBurstPrefix
|
||||
fullApertureSlc = self._insar.referenceSlc
|
||||
magnitude = self._insar.referenceMagnitude
|
||||
else:
|
||||
#slave
|
||||
swath = slaveTrack.frames[i].swaths[j]
|
||||
#secondary
|
||||
swath = secondaryTrack.frames[i].swaths[j]
|
||||
unsynLines = -self._insar.burstUnsynchronizedTime * swath.prf
|
||||
extractDir = self._insar.slaveBurstPrefix
|
||||
burstPrefix = self._insar.slaveBurstPrefix
|
||||
fullApertureSlc = self._insar.slaveSlc
|
||||
magnitude = self._insar.slaveMagnitude
|
||||
extractDir = self._insar.secondaryBurstPrefix
|
||||
burstPrefix = self._insar.secondaryBurstPrefix
|
||||
fullApertureSlc = self._insar.secondarySlc
|
||||
magnitude = self._insar.secondaryMagnitude
|
||||
|
||||
#UPDATE SWATH PARAMETERS 1
|
||||
#########################################################################################
|
||||
|
@ -125,8 +125,8 @@ def runExtractBurst(self):
|
|||
|
||||
os.chdir('../')
|
||||
os.chdir('../')
|
||||
self._insar.saveProduct(masterTrack.frames[i], self._insar.masterFrameParameter)
|
||||
self._insar.saveProduct(slaveTrack.frames[i], self._insar.slaveFrameParameter)
|
||||
self._insar.saveProduct(referenceTrack.frames[i], self._insar.referenceFrameParameter)
|
||||
self._insar.saveProduct(secondaryTrack.frames[i], self._insar.secondaryFrameParameter)
|
||||
os.chdir('../')
|
||||
|
||||
###############################################################################
|
||||
|
|
|
@ -25,8 +25,8 @@ def runFiltSd(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
#masterTrack = self._insar.loadTrack(master=True)
|
||||
#slaveTrack = self._insar.loadTrack(master=False)
|
||||
#referenceTrack = self._insar.loadTrack(reference=True)
|
||||
#secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
sdDir = 'sd'
|
||||
os.makedirs(sdDir, exist_ok=True)
|
||||
|
|
|
@ -19,17 +19,17 @@ def runFrameMosaic(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
mosaicDir = 'insar'
|
||||
os.makedirs(mosaicDir, exist_ok=True)
|
||||
os.chdir(mosaicDir)
|
||||
|
||||
numberOfFrames = len(masterTrack.frames)
|
||||
numberOfFrames = len(referenceTrack.frames)
|
||||
if numberOfFrames == 1:
|
||||
import shutil
|
||||
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.masterFrames[0]))
|
||||
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.referenceFrames[0]))
|
||||
if not os.path.isfile(self._insar.interferogram):
|
||||
os.symlink(os.path.join('../', frameDir, self._insar.interferogram), self._insar.interferogram)
|
||||
#shutil.copy2() can overwrite
|
||||
|
@ -50,75 +50,75 @@ def runFrameMosaic(self):
|
|||
#update track parameters
|
||||
#########################################################
|
||||
#mosaic size
|
||||
masterTrack.numberOfSamples = masterTrack.frames[0].numberOfSamples
|
||||
masterTrack.numberOfLines = masterTrack.frames[0].numberOfLines
|
||||
referenceTrack.numberOfSamples = referenceTrack.frames[0].numberOfSamples
|
||||
referenceTrack.numberOfLines = referenceTrack.frames[0].numberOfLines
|
||||
#NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE
|
||||
#range parameters
|
||||
masterTrack.startingRange = masterTrack.frames[0].startingRange
|
||||
masterTrack.rangeSamplingRate = masterTrack.frames[0].rangeSamplingRate
|
||||
masterTrack.rangePixelSize = masterTrack.frames[0].rangePixelSize
|
||||
referenceTrack.startingRange = referenceTrack.frames[0].startingRange
|
||||
referenceTrack.rangeSamplingRate = referenceTrack.frames[0].rangeSamplingRate
|
||||
referenceTrack.rangePixelSize = referenceTrack.frames[0].rangePixelSize
|
||||
#azimuth parameters
|
||||
masterTrack.sensingStart = masterTrack.frames[0].sensingStart
|
||||
masterTrack.prf = masterTrack.frames[0].prf
|
||||
masterTrack.azimuthPixelSize = masterTrack.frames[0].azimuthPixelSize
|
||||
masterTrack.azimuthLineInterval = masterTrack.frames[0].azimuthLineInterval
|
||||
referenceTrack.sensingStart = referenceTrack.frames[0].sensingStart
|
||||
referenceTrack.prf = referenceTrack.frames[0].prf
|
||||
referenceTrack.azimuthPixelSize = referenceTrack.frames[0].azimuthPixelSize
|
||||
referenceTrack.azimuthLineInterval = referenceTrack.frames[0].azimuthLineInterval
|
||||
|
||||
#update track parameters, slave
|
||||
#update track parameters, secondary
|
||||
#########################################################
|
||||
#mosaic size
|
||||
slaveTrack.numberOfSamples = slaveTrack.frames[0].numberOfSamples
|
||||
slaveTrack.numberOfLines = slaveTrack.frames[0].numberOfLines
|
||||
secondaryTrack.numberOfSamples = secondaryTrack.frames[0].numberOfSamples
|
||||
secondaryTrack.numberOfLines = secondaryTrack.frames[0].numberOfLines
|
||||
#NOTE THAT WE ARE STILL USING SINGLE LOOK PARAMETERS HERE
|
||||
#range parameters
|
||||
slaveTrack.startingRange = slaveTrack.frames[0].startingRange
|
||||
slaveTrack.rangeSamplingRate = slaveTrack.frames[0].rangeSamplingRate
|
||||
slaveTrack.rangePixelSize = slaveTrack.frames[0].rangePixelSize
|
||||
secondaryTrack.startingRange = secondaryTrack.frames[0].startingRange
|
||||
secondaryTrack.rangeSamplingRate = secondaryTrack.frames[0].rangeSamplingRate
|
||||
secondaryTrack.rangePixelSize = secondaryTrack.frames[0].rangePixelSize
|
||||
#azimuth parameters
|
||||
slaveTrack.sensingStart = slaveTrack.frames[0].sensingStart
|
||||
slaveTrack.prf = slaveTrack.frames[0].prf
|
||||
slaveTrack.azimuthPixelSize = slaveTrack.frames[0].azimuthPixelSize
|
||||
slaveTrack.azimuthLineInterval = slaveTrack.frames[0].azimuthLineInterval
|
||||
secondaryTrack.sensingStart = secondaryTrack.frames[0].sensingStart
|
||||
secondaryTrack.prf = secondaryTrack.frames[0].prf
|
||||
secondaryTrack.azimuthPixelSize = secondaryTrack.frames[0].azimuthPixelSize
|
||||
secondaryTrack.azimuthLineInterval = secondaryTrack.frames[0].azimuthLineInterval
|
||||
|
||||
else:
|
||||
#choose offsets
|
||||
if self.frameOffsetMatching:
|
||||
rangeOffsets = self._insar.frameRangeOffsetMatchingMaster
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingMaster
|
||||
rangeOffsets = self._insar.frameRangeOffsetMatchingReference
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingReference
|
||||
else:
|
||||
rangeOffsets = self._insar.frameRangeOffsetGeometricalMaster
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalMaster
|
||||
rangeOffsets = self._insar.frameRangeOffsetGeometricalReference
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalReference
|
||||
|
||||
#list of input files
|
||||
inputInterferograms = []
|
||||
inputAmplitudes = []
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
inputInterferograms.append(os.path.join('../', frameDir, 'mosaic', self._insar.interferogram))
|
||||
inputAmplitudes.append(os.path.join('../', frameDir, 'mosaic', self._insar.amplitude))
|
||||
|
||||
#note that track parameters are updated after mosaicking
|
||||
#mosaic amplitudes
|
||||
frameMosaic(masterTrack, inputAmplitudes, self._insar.amplitude,
|
||||
frameMosaic(referenceTrack, inputAmplitudes, self._insar.amplitude,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
|
||||
updateTrack=False, phaseCompensation=False, resamplingMethod=0)
|
||||
#mosaic interferograms
|
||||
frameMosaic(masterTrack, inputInterferograms, self._insar.interferogram,
|
||||
frameMosaic(referenceTrack, inputInterferograms, self._insar.interferogram,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
|
||||
updateTrack=True, phaseCompensation=True, resamplingMethod=1)
|
||||
|
||||
create_xml(self._insar.amplitude, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'int')
|
||||
create_xml(self._insar.amplitude, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'int')
|
||||
|
||||
#update slave parameters here
|
||||
#do not match for slave, always use geometrical
|
||||
rangeOffsets = self._insar.frameRangeOffsetGeometricalSlave
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalSlave
|
||||
frameMosaicParameters(slaveTrack, rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
|
||||
#update secondary parameters here
|
||||
#do not match for secondary, always use geometrical
|
||||
rangeOffsets = self._insar.frameRangeOffsetGeometricalSecondary
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalSecondary
|
||||
frameMosaicParameters(secondaryTrack, rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
|
||||
|
||||
os.chdir('../')
|
||||
#save parameter file
|
||||
self._insar.saveProduct(masterTrack, self._insar.masterTrackParameter)
|
||||
self._insar.saveProduct(slaveTrack, self._insar.slaveTrackParameter)
|
||||
self._insar.saveProduct(referenceTrack, self._insar.referenceTrackParameter)
|
||||
self._insar.saveProduct(secondaryTrack, self._insar.secondaryTrackParameter)
|
||||
|
||||
|
||||
|
||||
|
@ -127,10 +127,10 @@ def runFrameMosaic(self):
|
|||
os.makedirs(mosaicDir, exist_ok=True)
|
||||
os.chdir(mosaicDir)
|
||||
|
||||
numberOfFrames = len(masterTrack.frames)
|
||||
numberOfFrames = len(referenceTrack.frames)
|
||||
if numberOfFrames == 1:
|
||||
import shutil
|
||||
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.masterFrames[0]))
|
||||
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.referenceFrames[0]))
|
||||
for sdFile in self._insar.interferogramSd:
|
||||
if not os.path.isfile(sdFile):
|
||||
os.symlink(os.path.join('../', frameDir, sdFile), sdFile)
|
||||
|
@ -139,27 +139,27 @@ def runFrameMosaic(self):
|
|||
else:
|
||||
#choose offsets
|
||||
if self.frameOffsetMatching:
|
||||
rangeOffsets = self._insar.frameRangeOffsetMatchingMaster
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingMaster
|
||||
rangeOffsets = self._insar.frameRangeOffsetMatchingReference
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingReference
|
||||
else:
|
||||
rangeOffsets = self._insar.frameRangeOffsetGeometricalMaster
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalMaster
|
||||
rangeOffsets = self._insar.frameRangeOffsetGeometricalReference
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalReference
|
||||
|
||||
#list of input files
|
||||
inputSd = [[], [], []]
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
for k, sdFile in enumerate(self._insar.interferogramSd):
|
||||
inputSd[k].append(os.path.join('../', frameDir, 'mosaic', sdFile))
|
||||
|
||||
#mosaic spectral diversity interferograms
|
||||
for inputSdList, outputSdFile in zip(inputSd, self._insar.interferogramSd):
|
||||
frameMosaic(masterTrack, inputSdList, outputSdFile,
|
||||
frameMosaic(referenceTrack, inputSdList, outputSdFile,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
|
||||
updateTrack=False, phaseCompensation=True, resamplingMethod=1)
|
||||
|
||||
for sdFile in self._insar.interferogramSd:
|
||||
create_xml(sdFile, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'int')
|
||||
create_xml(sdFile, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'int')
|
||||
|
||||
os.chdir('../')
|
||||
|
||||
|
|
|
@ -17,33 +17,33 @@ def runFrameOffset(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
mosaicDir = 'insar'
|
||||
os.makedirs(mosaicDir, exist_ok=True)
|
||||
os.chdir(mosaicDir)
|
||||
|
||||
if len(masterTrack.frames) > 1:
|
||||
#here we use master amplitude image mosaicked from extracted bursts.
|
||||
if len(referenceTrack.frames) > 1:
|
||||
#here we use reference amplitude image mosaicked from extracted bursts.
|
||||
matchingMode=1
|
||||
|
||||
#compute swath offset
|
||||
offsetMaster = frameOffset(masterTrack, os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude), self._insar.masterFrameOffset,
|
||||
offsetReference = frameOffset(referenceTrack, os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude), self._insar.referenceFrameOffset,
|
||||
crossCorrelation=self.frameOffsetMatching, matchingMode=matchingMode)
|
||||
#only use geometrical offset for slave
|
||||
offsetSlave = frameOffset(slaveTrack, os.path.join(self._insar.slaveBurstPrefix, self._insar.slaveMagnitude), self._insar.slaveFrameOffset,
|
||||
#only use geometrical offset for secondary
|
||||
offsetSecondary = frameOffset(secondaryTrack, os.path.join(self._insar.secondaryBurstPrefix, self._insar.secondaryMagnitude), self._insar.secondaryFrameOffset,
|
||||
crossCorrelation=False, matchingMode=matchingMode)
|
||||
|
||||
self._insar.frameRangeOffsetGeometricalMaster = offsetMaster[0]
|
||||
self._insar.frameAzimuthOffsetGeometricalMaster = offsetMaster[1]
|
||||
self._insar.frameRangeOffsetGeometricalSlave = offsetSlave[0]
|
||||
self._insar.frameAzimuthOffsetGeometricalSlave = offsetSlave[1]
|
||||
self._insar.frameRangeOffsetGeometricalReference = offsetReference[0]
|
||||
self._insar.frameAzimuthOffsetGeometricalReference = offsetReference[1]
|
||||
self._insar.frameRangeOffsetGeometricalSecondary = offsetSecondary[0]
|
||||
self._insar.frameAzimuthOffsetGeometricalSecondary = offsetSecondary[1]
|
||||
if self.frameOffsetMatching:
|
||||
self._insar.frameRangeOffsetMatchingMaster = offsetMaster[2]
|
||||
self._insar.frameAzimuthOffsetMatchingMaster = offsetMaster[3]
|
||||
#self._insar.frameRangeOffsetMatchingSlave = offsetSlave[2]
|
||||
#self._insar.frameAzimuthOffsetMatchingSlave = offsetSlave[3]
|
||||
self._insar.frameRangeOffsetMatchingReference = offsetReference[2]
|
||||
self._insar.frameAzimuthOffsetMatchingReference = offsetReference[3]
|
||||
#self._insar.frameRangeOffsetMatchingSecondary = offsetSecondary[2]
|
||||
#self._insar.frameAzimuthOffsetMatchingSecondary = offsetSecondary[3]
|
||||
|
||||
|
||||
os.chdir('../')
|
||||
|
|
|
@ -20,8 +20,8 @@ def runGeocodeSd(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
#slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
#secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
demFile = os.path.abspath(self._insar.demGeo)
|
||||
|
||||
|
@ -37,7 +37,7 @@ def runGeocodeSd(self):
|
|||
geocodeList += glob.glob(xxx)
|
||||
|
||||
if self.bbox == None:
|
||||
bbox = getBboxGeo(masterTrack)
|
||||
bbox = getBboxGeo(referenceTrack)
|
||||
else:
|
||||
bbox = self.bbox
|
||||
catalog.addItem('geocode bounding box', bbox, 'runGeocodeSd')
|
||||
|
@ -56,7 +56,7 @@ def runGeocodeSd(self):
|
|||
else:
|
||||
interpMethod = self.geocodeInterpMethodSd.lower()
|
||||
|
||||
geocode(masterTrack, demFile, inputFile, bbox, numberRangeLooks, numberAzimuthLooks, interpMethod, 0, 0)
|
||||
geocode(referenceTrack, demFile, inputFile, bbox, numberRangeLooks, numberAzimuthLooks, interpMethod, 0, 0)
|
||||
|
||||
|
||||
os.chdir('../')
|
||||
|
|
|
@ -23,13 +23,13 @@ def runIonSubband(self):
|
|||
self._insar.procDoc.addAllFromCatalog(catalog)
|
||||
return
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
#using 1/3, 1/3, 1/3 band split
|
||||
radarWavelength = masterTrack.radarWavelength
|
||||
rangeBandwidth = masterTrack.frames[0].swaths[0].rangeBandwidth
|
||||
rangeSamplingRate = masterTrack.frames[0].swaths[0].rangeSamplingRate
|
||||
radarWavelength = referenceTrack.radarWavelength
|
||||
rangeBandwidth = referenceTrack.frames[0].swaths[0].rangeBandwidth
|
||||
rangeSamplingRate = referenceTrack.frames[0].swaths[0].rangeSamplingRate
|
||||
radarWavelengthLower = SPEED_OF_LIGHT/(SPEED_OF_LIGHT / radarWavelength - rangeBandwidth / 3.0)
|
||||
radarWavelengthUpper = SPEED_OF_LIGHT/(SPEED_OF_LIGHT / radarWavelength + rangeBandwidth / 3.0)
|
||||
subbandRadarWavelength = [radarWavelengthLower, radarWavelengthUpper]
|
||||
|
@ -65,7 +65,7 @@ def runIonSubband(self):
|
|||
#create insar processing directories
|
||||
for k in range(2):
|
||||
subbandDir = ionDir['subband'][k]
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
swathDir = 's{}'.format(swathNumber)
|
||||
|
@ -87,13 +87,13 @@ def runIonSubband(self):
|
|||
from isceobj.Alos2Proc.Alos2ProcPublic import mosaicBurstInterferogram
|
||||
from isceobj.Alos2Proc.Alos2ProcPublic import create_xml
|
||||
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
swathDir = 's{}'.format(swathNumber)
|
||||
#filter master and slave images
|
||||
for burstPrefix, swath in zip([self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix],
|
||||
[masterTrack.frames[i].swaths[j], slaveTrack.frames[i].swaths[j]]):
|
||||
#filter reference and secondary images
|
||||
for burstPrefix, swath in zip([self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix],
|
||||
[referenceTrack.frames[i].swaths[j], secondaryTrack.frames[i].swaths[j]]):
|
||||
slcDir = os.path.join('../', frameDir, swathDir, burstPrefix)
|
||||
slcLowerDir = os.path.join(ionDir['subband'][0], frameDir, swathDir, burstPrefix)
|
||||
slcUpperDir = os.path.join(ionDir['subband'][1], frameDir, swathDir, burstPrefix)
|
||||
|
@ -114,8 +114,8 @@ def runIonSubband(self):
|
|||
os.chdir(os.path.join(ionDir['subband'][l], frameDir, swathDir))
|
||||
#recreate xml file to remove the file path
|
||||
#can also use fixImageXml.py?
|
||||
for burstPrefix, swath in zip([self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix],
|
||||
[masterTrack.frames[i].swaths[j], slaveTrack.frames[i].swaths[j]]):
|
||||
for burstPrefix, swath in zip([self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix],
|
||||
[referenceTrack.frames[i].swaths[j], secondaryTrack.frames[i].swaths[j]]):
|
||||
os.chdir(burstPrefix)
|
||||
for k in range(swath.numberOfBursts):
|
||||
slc = burstPrefix+'_%02d.slc'%(k+1)
|
||||
|
@ -130,12 +130,12 @@ def runIonSubband(self):
|
|||
#############################################
|
||||
#1. form interferogram
|
||||
#############################################
|
||||
masterSwath = masterTrack.frames[i].swaths[j]
|
||||
slaveSwath = slaveTrack.frames[i].swaths[j]
|
||||
referenceSwath = referenceTrack.frames[i].swaths[j]
|
||||
secondarySwath = secondaryTrack.frames[i].swaths[j]
|
||||
|
||||
#set up resampling parameters
|
||||
width = masterSwath.numberOfSamples
|
||||
length = masterSwath.numberOfLines
|
||||
width = referenceSwath.numberOfSamples
|
||||
length = referenceSwath.numberOfLines
|
||||
polyCoeff = self._insar.rangeResidualOffsetCc[i][j]
|
||||
rgIndex = (np.arange(width)-polyCoeff[-1][0])/polyCoeff[-1][1]
|
||||
azIndex = (np.arange(length)-polyCoeff[-1][2])/polyCoeff[-1][3]
|
||||
|
@ -144,36 +144,36 @@ def runIonSubband(self):
|
|||
polyCoeff[2][0] * azIndex[:, None]**2
|
||||
azimuthOffset = self._insar.azimuthResidualOffsetCc[i][j]
|
||||
|
||||
slaveBurstResampledDir = self._insar.slaveBurstPrefix + '_2_coreg_cc'
|
||||
secondaryBurstResampledDir = self._insar.secondaryBurstPrefix + '_2_coreg_cc'
|
||||
interferogramDir = 'burst_interf_2_coreg_cc'
|
||||
interferogramPrefix = self._insar.masterBurstPrefix + '-' + self._insar.slaveBurstPrefix
|
||||
resampleBursts(masterSwath, slaveSwath,
|
||||
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, slaveBurstResampledDir, interferogramDir,
|
||||
self._insar.masterBurstPrefix, self._insar.slaveBurstPrefix, self._insar.slaveBurstPrefix, interferogramPrefix,
|
||||
interferogramPrefix = self._insar.referenceBurstPrefix + '-' + self._insar.secondaryBurstPrefix
|
||||
resampleBursts(referenceSwath, secondarySwath,
|
||||
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, secondaryBurstResampledDir, interferogramDir,
|
||||
self._insar.referenceBurstPrefix, self._insar.secondaryBurstPrefix, self._insar.secondaryBurstPrefix, interferogramPrefix,
|
||||
os.path.join('../../../../{}/{}'.format(frameDir, swathDir), self._insar.rangeOffset),
|
||||
os.path.join('../../../../{}/{}'.format(frameDir, swathDir), self._insar.azimuthOffset),
|
||||
rangeOffsetResidual=rangeOffset, azimuthOffsetResidual=azimuthOffset)
|
||||
|
||||
os.chdir(self._insar.masterBurstPrefix)
|
||||
mosaicBurstAmplitude(masterSwath, self._insar.masterBurstPrefix, self._insar.masterMagnitude, numberOfLooksThreshold=4)
|
||||
os.chdir(self._insar.referenceBurstPrefix)
|
||||
mosaicBurstAmplitude(referenceSwath, self._insar.referenceBurstPrefix, self._insar.referenceMagnitude, numberOfLooksThreshold=4)
|
||||
os.chdir('../')
|
||||
|
||||
os.chdir(slaveBurstResampledDir)
|
||||
mosaicBurstAmplitude(masterSwath, self._insar.slaveBurstPrefix, self._insar.slaveMagnitude, numberOfLooksThreshold=4)
|
||||
os.chdir(secondaryBurstResampledDir)
|
||||
mosaicBurstAmplitude(referenceSwath, self._insar.secondaryBurstPrefix, self._insar.secondaryMagnitude, numberOfLooksThreshold=4)
|
||||
os.chdir('../')
|
||||
|
||||
os.chdir(interferogramDir)
|
||||
mosaicBurstInterferogram(masterSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
|
||||
mosaicBurstInterferogram(referenceSwath, interferogramPrefix, self._insar.interferogram, numberOfLooksThreshold=4)
|
||||
os.chdir('../')
|
||||
|
||||
|
||||
amp = np.zeros((masterSwath.numberOfLines, 2*masterSwath.numberOfSamples), dtype=np.float32)
|
||||
amp[0:, 1:masterSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(slaveBurstResampledDir, self._insar.slaveMagnitude), \
|
||||
dtype=np.float32).reshape(masterSwath.numberOfLines, masterSwath.numberOfSamples)
|
||||
amp[0:, 0:masterSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude), \
|
||||
dtype=np.float32).reshape(masterSwath.numberOfLines, masterSwath.numberOfSamples)
|
||||
amp = np.zeros((referenceSwath.numberOfLines, 2*referenceSwath.numberOfSamples), dtype=np.float32)
|
||||
amp[0:, 1:referenceSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(secondaryBurstResampledDir, self._insar.secondaryMagnitude), \
|
||||
dtype=np.float32).reshape(referenceSwath.numberOfLines, referenceSwath.numberOfSamples)
|
||||
amp[0:, 0:referenceSwath.numberOfSamples*2:2] = np.fromfile(os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude), \
|
||||
dtype=np.float32).reshape(referenceSwath.numberOfLines, referenceSwath.numberOfSamples)
|
||||
amp.astype(np.float32).tofile(self._insar.amplitude)
|
||||
create_xml(self._insar.amplitude, masterSwath.numberOfSamples, masterSwath.numberOfLines, 'amp')
|
||||
create_xml(self._insar.amplitude, referenceSwath.numberOfSamples, referenceSwath.numberOfLines, 'amp')
|
||||
|
||||
os.rename(os.path.join(interferogramDir, self._insar.interferogram), self._insar.interferogram)
|
||||
os.rename(os.path.join(interferogramDir, self._insar.interferogram+'.vrt'), self._insar.interferogram+'.vrt')
|
||||
|
@ -182,9 +182,9 @@ def runIonSubband(self):
|
|||
#############################################
|
||||
#2. delete subband slcs
|
||||
#############################################
|
||||
shutil.rmtree(self._insar.masterBurstPrefix)
|
||||
shutil.rmtree(self._insar.slaveBurstPrefix)
|
||||
shutil.rmtree(slaveBurstResampledDir)
|
||||
shutil.rmtree(self._insar.referenceBurstPrefix)
|
||||
shutil.rmtree(self._insar.secondaryBurstPrefix)
|
||||
shutil.rmtree(secondaryBurstResampledDir)
|
||||
shutil.rmtree(interferogramDir)
|
||||
|
||||
os.chdir('../../../')
|
||||
|
@ -198,7 +198,7 @@ def runIonSubband(self):
|
|||
|
||||
for k in range(2):
|
||||
os.chdir(ionDir['subband'][k])
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
|
||||
|
@ -208,7 +208,7 @@ def runIonSubband(self):
|
|||
|
||||
if self._insar.endingSwath-self._insar.startingSwath+1 == 1:
|
||||
import shutil
|
||||
swathDir = 's{}'.format(masterTrack.frames[i].swaths[0].swathNumber)
|
||||
swathDir = 's{}'.format(referenceTrack.frames[i].swaths[0].swathNumber)
|
||||
|
||||
# if not os.path.isfile(self._insar.interferogram):
|
||||
# os.symlink(os.path.join('../', swathDir, self._insar.interferogram), self._insar.interferogram)
|
||||
|
@ -231,20 +231,20 @@ def runIonSubband(self):
|
|||
continue
|
||||
|
||||
#choose offsets
|
||||
numberOfFrames = len(masterTrack.frames)
|
||||
numberOfSwaths = len(masterTrack.frames[i].swaths)
|
||||
numberOfFrames = len(referenceTrack.frames)
|
||||
numberOfSwaths = len(referenceTrack.frames[i].swaths)
|
||||
if self.swathOffsetMatching:
|
||||
#no need to do this as the API support 2-d list
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetMatchingMaster
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingMaster
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetMatchingReference
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingReference
|
||||
|
||||
else:
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetGeometricalMaster
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalMaster
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetGeometricalReference
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalReference
|
||||
|
||||
rangeOffsets = rangeOffsets[i]
|
||||
azimuthOffsets = azimuthOffsets[i]
|
||||
|
@ -260,16 +260,16 @@ def runIonSubband(self):
|
|||
|
||||
#compute phase needed to be compensated using startingRange
|
||||
if j >= 1:
|
||||
#phaseDiffSwath1 = -4.0 * np.pi * (masterTrack.frames[i].swaths[j-1].startingRange - slaveTrack.frames[i].swaths[j-1].startingRange)/subbandRadarWavelength[k]
|
||||
#phaseDiffSwath2 = -4.0 * np.pi * (masterTrack.frames[i].swaths[j].startingRange - slaveTrack.frames[i].swaths[j].startingRange)/subbandRadarWavelength[k]
|
||||
phaseDiffSwath1 = +4.0 * np.pi * masterTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
|
||||
-4.0 * np.pi * slaveTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
|
||||
phaseDiffSwath2 = +4.0 * np.pi * masterTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
|
||||
-4.0 * np.pi * slaveTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
|
||||
if masterTrack.frames[i].swaths[j-1].startingRange - slaveTrack.frames[i].swaths[j-1].startingRange == \
|
||||
masterTrack.frames[i].swaths[j].startingRange - slaveTrack.frames[i].swaths[j].startingRange:
|
||||
#phaseDiffSwath1 = -4.0 * np.pi * (referenceTrack.frames[i].swaths[j-1].startingRange - secondaryTrack.frames[i].swaths[j-1].startingRange)/subbandRadarWavelength[k]
|
||||
#phaseDiffSwath2 = -4.0 * np.pi * (referenceTrack.frames[i].swaths[j].startingRange - secondaryTrack.frames[i].swaths[j].startingRange)/subbandRadarWavelength[k]
|
||||
phaseDiffSwath1 = +4.0 * np.pi * referenceTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
|
||||
-4.0 * np.pi * secondaryTrack.frames[i].swaths[j-1].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
|
||||
phaseDiffSwath2 = +4.0 * np.pi * referenceTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k]) \
|
||||
-4.0 * np.pi * secondaryTrack.frames[i].swaths[j].startingRange * (1.0/radarWavelength - 1.0/subbandRadarWavelength[k])
|
||||
if referenceTrack.frames[i].swaths[j-1].startingRange - secondaryTrack.frames[i].swaths[j-1].startingRange == \
|
||||
referenceTrack.frames[i].swaths[j].startingRange - secondaryTrack.frames[i].swaths[j].startingRange:
|
||||
#phaseDiff.append(phaseDiffSwath2 - phaseDiffSwath1)
|
||||
#if master and slave versions are all before or after version 2.025 (starting range error < 0.5 m),
|
||||
#if reference and secondary versions are all before or after version 2.025 (starting range error < 0.5 m),
|
||||
#it should be OK to do the above.
|
||||
#see results in neom where it meets the above requirement, but there is still phase diff
|
||||
#to be less risky, we do not input values here
|
||||
|
@ -279,7 +279,7 @@ def runIonSubband(self):
|
|||
|
||||
#note that frame parameters are updated after mosaicking
|
||||
#mosaic amplitudes
|
||||
swathMosaic(masterTrack.frames[i], inputAmplitudes, self._insar.amplitude,
|
||||
swathMosaic(referenceTrack.frames[i], inputAmplitudes, self._insar.amplitude,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, resamplingMethod=0)
|
||||
#mosaic interferograms
|
||||
#These are for ALOS-2, may need to change for ALOS-4!
|
||||
|
@ -294,7 +294,7 @@ def runIonSubband(self):
|
|||
phaseDiffFixed = None
|
||||
snapThreshold = None
|
||||
|
||||
(phaseDiffEst, phaseDiffUsed, phaseDiffSource) = swathMosaic(masterTrack.frames[i], inputInterferograms, self._insar.interferogram,
|
||||
(phaseDiffEst, phaseDiffUsed, phaseDiffSource) = swathMosaic(referenceTrack.frames[i], inputInterferograms, self._insar.interferogram,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, updateFrame=False,
|
||||
phaseCompensation=True, phaseDiff=phaseDiff, phaseDiffFixed=phaseDiffFixed, snapThreshold=snapThreshold, pcRangeLooks=1, pcAzimuthLooks=3,
|
||||
filt=False, resamplingMethod=1)
|
||||
|
@ -313,8 +313,8 @@ def runIonSubband(self):
|
|||
phaseDiffUnstableExist = True
|
||||
catalog.addItem('{} subswath phase difference unstable exists'.format(ionDir['subband'][k]), phaseDiffUnstableExist, 'runIonSubband')
|
||||
|
||||
create_xml(self._insar.amplitude, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'int')
|
||||
create_xml(self._insar.amplitude, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'int')
|
||||
|
||||
os.chdir('../')
|
||||
os.chdir('../')
|
||||
|
@ -334,10 +334,10 @@ def runIonSubband(self):
|
|||
os.makedirs(mosaicDir, exist_ok=True)
|
||||
os.chdir(mosaicDir)
|
||||
|
||||
numberOfFrames = len(masterTrack.frames)
|
||||
numberOfFrames = len(referenceTrack.frames)
|
||||
if numberOfFrames == 1:
|
||||
import shutil
|
||||
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.masterFrames[0]))
|
||||
frameDir = os.path.join('f1_{}/mosaic'.format(self._insar.referenceFrames[0]))
|
||||
# if not os.path.isfile(self._insar.interferogram):
|
||||
# os.symlink(os.path.join('../', frameDir, self._insar.interferogram), self._insar.interferogram)
|
||||
# #shutil.copy2() can overwrite
|
||||
|
@ -358,32 +358,32 @@ def runIonSubband(self):
|
|||
else:
|
||||
#choose offsets
|
||||
if self.frameOffsetMatching:
|
||||
rangeOffsets = self._insar.frameRangeOffsetMatchingMaster
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingMaster
|
||||
rangeOffsets = self._insar.frameRangeOffsetMatchingReference
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetMatchingReference
|
||||
else:
|
||||
rangeOffsets = self._insar.frameRangeOffsetGeometricalMaster
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalMaster
|
||||
rangeOffsets = self._insar.frameRangeOffsetGeometricalReference
|
||||
azimuthOffsets = self._insar.frameAzimuthOffsetGeometricalReference
|
||||
|
||||
#list of input files
|
||||
inputInterferograms = []
|
||||
inputAmplitudes = []
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
inputInterferograms.append(os.path.join('../', frameDir, 'mosaic', self._insar.interferogram))
|
||||
inputAmplitudes.append(os.path.join('../', frameDir, 'mosaic', self._insar.amplitude))
|
||||
|
||||
#note that track parameters are updated after mosaicking
|
||||
#mosaic amplitudes
|
||||
frameMosaic(masterTrack, inputAmplitudes, self._insar.amplitude,
|
||||
frameMosaic(referenceTrack, inputAmplitudes, self._insar.amplitude,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
|
||||
updateTrack=False, phaseCompensation=False, resamplingMethod=0)
|
||||
#mosaic interferograms
|
||||
frameMosaic(masterTrack, inputInterferograms, self._insar.interferogram,
|
||||
frameMosaic(referenceTrack, inputInterferograms, self._insar.interferogram,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1,
|
||||
updateTrack=False, phaseCompensation=True, resamplingMethod=1)
|
||||
|
||||
create_xml(self._insar.amplitude, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, masterTrack.numberOfSamples, masterTrack.numberOfLines, 'int')
|
||||
create_xml(self._insar.amplitude, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, referenceTrack.numberOfSamples, referenceTrack.numberOfLines, 'int')
|
||||
|
||||
os.chdir('../')
|
||||
os.chdir('../')
|
||||
|
@ -397,7 +397,7 @@ def runIonSubband(self):
|
|||
|
||||
for k in range(2):
|
||||
os.chdir(ionDir['subband'][k])
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
shutil.rmtree(frameDir)
|
||||
#cmd = 'rm -rf {}'.format(frameDir)
|
||||
|
@ -418,7 +418,7 @@ def runIonSubband(self):
|
|||
os.makedirs(insarDir, exist_ok=True)
|
||||
os.chdir(insarDir)
|
||||
|
||||
rangePixelSize = self._insar.numberRangeLooks1 * masterTrack.rangePixelSize
|
||||
rangePixelSize = self._insar.numberRangeLooks1 * referenceTrack.rangePixelSize
|
||||
radarWavelength = subbandRadarWavelength[k]
|
||||
rectRangeOffset = os.path.join('../../../', insarDir, self._insar.rectRangeOffset)
|
||||
|
||||
|
|
|
@ -19,8 +19,8 @@ def runLookSd(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
#masterTrack = self._insar.loadTrack(master=True)
|
||||
#slaveTrack = self._insar.loadTrack(master=False)
|
||||
#referenceTrack = self._insar.loadTrack(reference=True)
|
||||
#secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
wbdFile = os.path.abspath(self._insar.wbd)
|
||||
|
||||
sdDir = 'sd'
|
||||
|
|
|
@ -27,24 +27,24 @@ def runPreprocessor(self):
|
|||
#find files
|
||||
#actually no need to use absolute path any longer, since we are able to find file from vrt now. 27-JAN-2020, CRL.
|
||||
#denseoffset may still need absolute path when making links
|
||||
self.masterDir = os.path.abspath(self.masterDir)
|
||||
self.slaveDir = os.path.abspath(self.slaveDir)
|
||||
self.referenceDir = os.path.abspath(self.referenceDir)
|
||||
self.secondaryDir = os.path.abspath(self.secondaryDir)
|
||||
|
||||
ledFilesMaster = sorted(glob.glob(os.path.join(self.masterDir, 'LED-ALOS2*-*-*')))
|
||||
imgFilesMaster = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*-*-*'.format(self.masterPolarization.upper()))))
|
||||
ledFilesReference = sorted(glob.glob(os.path.join(self.referenceDir, 'LED-ALOS2*-*-*')))
|
||||
imgFilesReference = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*-*-*'.format(self.referencePolarization.upper()))))
|
||||
|
||||
ledFilesSlave = sorted(glob.glob(os.path.join(self.slaveDir, 'LED-ALOS2*-*-*')))
|
||||
imgFilesSlave = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*-*-*'.format(self.slavePolarization.upper()))))
|
||||
ledFilesSecondary = sorted(glob.glob(os.path.join(self.secondaryDir, 'LED-ALOS2*-*-*')))
|
||||
imgFilesSecondary = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*-*-*'.format(self.secondaryPolarization.upper()))))
|
||||
|
||||
firstFrameMaster = ledFilesMaster[0].split('-')[-3][-4:]
|
||||
firstFrameSlave = ledFilesSlave[0].split('-')[-3][-4:]
|
||||
firstFrameImagesMaster = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.masterPolarization.upper(), firstFrameMaster))))
|
||||
firstFrameImagesSlave = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.slavePolarization.upper(), firstFrameSlave))))
|
||||
firstFrameReference = ledFilesReference[0].split('-')[-3][-4:]
|
||||
firstFrameSecondary = ledFilesSecondary[0].split('-')[-3][-4:]
|
||||
firstFrameImagesReference = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.referencePolarization.upper(), firstFrameReference))))
|
||||
firstFrameImagesSecondary = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.secondaryPolarization.upper(), firstFrameSecondary))))
|
||||
|
||||
|
||||
#determin operation mode
|
||||
masterMode = os.path.basename(ledFilesMaster[0]).split('-')[-1][0:3]
|
||||
slaveMode = os.path.basename(ledFilesSlave[0]).split('-')[-1][0:3]
|
||||
referenceMode = os.path.basename(ledFilesReference[0]).split('-')[-1][0:3]
|
||||
secondaryMode = os.path.basename(ledFilesSecondary[0]).split('-')[-1][0:3]
|
||||
spotlightModes = ['SBS']
|
||||
stripmapModes = ['UBS', 'UBD', 'HBS', 'HBD', 'HBQ', 'FBS', 'FBD', 'FBQ']
|
||||
scansarNominalModes = ['WBS', 'WBD', 'WWS', 'WWD']
|
||||
|
@ -52,21 +52,21 @@ def runPreprocessor(self):
|
|||
scansarModes = ['WBS', 'WBD', 'WWS', 'WWD', 'VBS', 'VBD']
|
||||
|
||||
#usable combinations
|
||||
if (masterMode in spotlightModes) and (slaveMode in spotlightModes):
|
||||
if (referenceMode in spotlightModes) and (secondaryMode in spotlightModes):
|
||||
self._insar.modeCombination = 0
|
||||
elif (masterMode in stripmapModes) and (slaveMode in stripmapModes):
|
||||
elif (referenceMode in stripmapModes) and (secondaryMode in stripmapModes):
|
||||
self._insar.modeCombination = 1
|
||||
elif (masterMode in scansarNominalModes) and (slaveMode in scansarNominalModes):
|
||||
elif (referenceMode in scansarNominalModes) and (secondaryMode in scansarNominalModes):
|
||||
self._insar.modeCombination = 21
|
||||
elif (masterMode in scansarWideModes) and (slaveMode in scansarWideModes):
|
||||
elif (referenceMode in scansarWideModes) and (secondaryMode in scansarWideModes):
|
||||
self._insar.modeCombination = 22
|
||||
elif (masterMode in scansarNominalModes) and (slaveMode in stripmapModes):
|
||||
elif (referenceMode in scansarNominalModes) and (secondaryMode in stripmapModes):
|
||||
self._insar.modeCombination = 31
|
||||
elif (masterMode in scansarWideModes) and (slaveMode in stripmapModes):
|
||||
elif (referenceMode in scansarWideModes) and (secondaryMode in stripmapModes):
|
||||
self._insar.modeCombination = 32
|
||||
else:
|
||||
print('\n\nthis mode combination is not possible')
|
||||
print('note that for ScanSAR-stripmap, ScanSAR must be master\n\n')
|
||||
print('note that for ScanSAR-stripmap, ScanSAR must be reference\n\n')
|
||||
raise Exception('mode combination not supported')
|
||||
|
||||
|
||||
|
@ -107,39 +107,39 @@ def runPreprocessor(self):
|
|||
self._insar.numberAzimuthLooksSd = 4
|
||||
|
||||
#define processing file names
|
||||
self._insar.masterDate = os.path.basename(ledFilesMaster[0]).split('-')[2]
|
||||
self._insar.slaveDate = os.path.basename(ledFilesSlave[0]).split('-')[2]
|
||||
self._insar.setFilename(masterDate=self._insar.masterDate, slaveDate=self._insar.slaveDate,
|
||||
self._insar.referenceDate = os.path.basename(ledFilesReference[0]).split('-')[2]
|
||||
self._insar.secondaryDate = os.path.basename(ledFilesSecondary[0]).split('-')[2]
|
||||
self._insar.setFilename(referenceDate=self._insar.referenceDate, secondaryDate=self._insar.secondaryDate,
|
||||
nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1,
|
||||
nrlks2=self._insar.numberRangeLooks2, nalks2=self._insar.numberAzimuthLooks2)
|
||||
self._insar.setFilenameSd(masterDate=self._insar.masterDate, slaveDate=self._insar.slaveDate,
|
||||
self._insar.setFilenameSd(referenceDate=self._insar.referenceDate, secondaryDate=self._insar.secondaryDate,
|
||||
nrlks1=self._insar.numberRangeLooks1, nalks1=self._insar.numberAzimuthLooks1,
|
||||
nrlks_sd=self._insar.numberRangeLooksSd, nalks_sd=self._insar.numberAzimuthLooksSd, nsd=3)
|
||||
|
||||
#find frame numbers
|
||||
if (self._insar.modeCombination == 31) or (self._insar.modeCombination == 32):
|
||||
if (self.masterFrames == None) or (self.slaveFrames == None):
|
||||
raise Exception('for ScanSAR-stripmap inteferometry, you must set master and slave frame numbers')
|
||||
if (self.referenceFrames == None) or (self.secondaryFrames == None):
|
||||
raise Exception('for ScanSAR-stripmap inteferometry, you must set reference and secondary frame numbers')
|
||||
#if not set, find frames automatically
|
||||
if self.masterFrames == None:
|
||||
self.masterFrames = []
|
||||
for led in ledFilesMaster:
|
||||
if self.referenceFrames == None:
|
||||
self.referenceFrames = []
|
||||
for led in ledFilesReference:
|
||||
frameNumber = os.path.basename(led).split('-')[1][-4:]
|
||||
if frameNumber not in self.masterFrames:
|
||||
self.masterFrames.append(frameNumber)
|
||||
if self.slaveFrames == None:
|
||||
self.slaveFrames = []
|
||||
for led in ledFilesSlave:
|
||||
if frameNumber not in self.referenceFrames:
|
||||
self.referenceFrames.append(frameNumber)
|
||||
if self.secondaryFrames == None:
|
||||
self.secondaryFrames = []
|
||||
for led in ledFilesSecondary:
|
||||
frameNumber = os.path.basename(led).split('-')[1][-4:]
|
||||
if frameNumber not in self.slaveFrames:
|
||||
self.slaveFrames.append(frameNumber)
|
||||
if frameNumber not in self.secondaryFrames:
|
||||
self.secondaryFrames.append(frameNumber)
|
||||
#sort frames
|
||||
self.masterFrames = sorted(self.masterFrames)
|
||||
self.slaveFrames = sorted(self.slaveFrames)
|
||||
self.referenceFrames = sorted(self.referenceFrames)
|
||||
self.secondaryFrames = sorted(self.secondaryFrames)
|
||||
#check number of frames
|
||||
if len(self.masterFrames) != len(self.slaveFrames):
|
||||
raise Exception('number of frames in master dir is not equal to number of frames \
|
||||
in slave dir. please set frame number manually')
|
||||
if len(self.referenceFrames) != len(self.secondaryFrames):
|
||||
raise Exception('number of frames in reference dir is not equal to number of frames \
|
||||
in secondary dir. please set frame number manually')
|
||||
|
||||
|
||||
#find swath numbers (if not ScanSAR-ScanSAR, compute valid swaths)
|
||||
|
@ -168,7 +168,7 @@ def runPreprocessor(self):
|
|||
numberOfSwaths = 7
|
||||
overlapSubswaths = []
|
||||
for i in range(numberOfSwaths):
|
||||
overlapRatio = check_overlap(ledFilesMaster[0], firstFrameImagesMaster[i], ledFilesSlave[0], firstFrameImagesSlave[0])
|
||||
overlapRatio = check_overlap(ledFilesReference[0], firstFrameImagesReference[i], ledFilesSecondary[0], firstFrameImagesSecondary[0])
|
||||
if overlapRatio > 1.0 / 4.0:
|
||||
overlapSubswaths.append(i+1)
|
||||
if overlapSubswaths == []:
|
||||
|
@ -177,8 +177,8 @@ def runPreprocessor(self):
|
|||
self.endingSwath = int(overlapSubswaths[-1])
|
||||
|
||||
#save the valid frames and swaths for future processing
|
||||
self._insar.masterFrames = self.masterFrames
|
||||
self._insar.slaveFrames = self.slaveFrames
|
||||
self._insar.referenceFrames = self.referenceFrames
|
||||
self._insar.secondaryFrames = self.secondaryFrames
|
||||
self._insar.startingSwath = self.startingSwath
|
||||
self._insar.endingSwath = self.endingSwath
|
||||
|
||||
|
@ -186,76 +186,76 @@ def runPreprocessor(self):
|
|||
##################################################
|
||||
#1. create directories and read data
|
||||
##################################################
|
||||
self.master.configure()
|
||||
self.slave.configure()
|
||||
self.master.track.configure()
|
||||
self.slave.track.configure()
|
||||
for i, (masterFrame, slaveFrame) in enumerate(zip(self._insar.masterFrames, self._insar.slaveFrames)):
|
||||
self.reference.configure()
|
||||
self.secondary.configure()
|
||||
self.reference.track.configure()
|
||||
self.secondary.track.configure()
|
||||
for i, (referenceFrame, secondaryFrame) in enumerate(zip(self._insar.referenceFrames, self._insar.secondaryFrames)):
|
||||
#frame number starts with 1
|
||||
frameDir = 'f{}_{}'.format(i+1, masterFrame)
|
||||
frameDir = 'f{}_{}'.format(i+1, referenceFrame)
|
||||
os.makedirs(frameDir, exist_ok=True)
|
||||
os.chdir(frameDir)
|
||||
|
||||
#attach a frame to master and slave
|
||||
frameObjMaster = MultiMode.createFrame()
|
||||
frameObjSlave = MultiMode.createFrame()
|
||||
frameObjMaster.configure()
|
||||
frameObjSlave.configure()
|
||||
self.master.track.frames.append(frameObjMaster)
|
||||
self.slave.track.frames.append(frameObjSlave)
|
||||
#attach a frame to reference and secondary
|
||||
frameObjReference = MultiMode.createFrame()
|
||||
frameObjSecondary = MultiMode.createFrame()
|
||||
frameObjReference.configure()
|
||||
frameObjSecondary.configure()
|
||||
self.reference.track.frames.append(frameObjReference)
|
||||
self.secondary.track.frames.append(frameObjSecondary)
|
||||
|
||||
#swath number starts with 1
|
||||
for j in range(self._insar.startingSwath, self._insar.endingSwath+1):
|
||||
print('processing frame {} swath {}'.format(masterFrame, j))
|
||||
print('processing frame {} swath {}'.format(referenceFrame, j))
|
||||
|
||||
swathDir = 's{}'.format(j)
|
||||
os.makedirs(swathDir, exist_ok=True)
|
||||
os.chdir(swathDir)
|
||||
|
||||
#attach a swath to master and slave
|
||||
swathObjMaster = MultiMode.createSwath()
|
||||
swathObjSlave = MultiMode.createSwath()
|
||||
swathObjMaster.configure()
|
||||
swathObjSlave.configure()
|
||||
self.master.track.frames[-1].swaths.append(swathObjMaster)
|
||||
self.slave.track.frames[-1].swaths.append(swathObjSlave)
|
||||
#attach a swath to reference and secondary
|
||||
swathObjReference = MultiMode.createSwath()
|
||||
swathObjSecondary = MultiMode.createSwath()
|
||||
swathObjReference.configure()
|
||||
swathObjSecondary.configure()
|
||||
self.reference.track.frames[-1].swaths.append(swathObjReference)
|
||||
self.secondary.track.frames[-1].swaths.append(swathObjSecondary)
|
||||
|
||||
#setup master
|
||||
self.master.leaderFile = sorted(glob.glob(os.path.join(self.masterDir, 'LED-ALOS2*{}-*-*'.format(masterFrame))))[0]
|
||||
if masterMode in scansarModes:
|
||||
self.master.imageFile = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.masterPolarization.upper(), masterFrame, j))))[0]
|
||||
#setup reference
|
||||
self.reference.leaderFile = sorted(glob.glob(os.path.join(self.referenceDir, 'LED-ALOS2*{}-*-*'.format(referenceFrame))))[0]
|
||||
if referenceMode in scansarModes:
|
||||
self.reference.imageFile = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.referencePolarization.upper(), referenceFrame, j))))[0]
|
||||
else:
|
||||
self.master.imageFile = sorted(glob.glob(os.path.join(self.masterDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.masterPolarization.upper(), masterFrame))))[0]
|
||||
self.master.outputFile = self._insar.masterSlc
|
||||
self.master.useVirtualFile = self.useVirtualFile
|
||||
#read master
|
||||
(imageFDR, imageData)=self.master.readImage()
|
||||
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.master.readLeader()
|
||||
self.master.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.master.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.master.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.reference.imageFile = sorted(glob.glob(os.path.join(self.referenceDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.referencePolarization.upper(), referenceFrame))))[0]
|
||||
self.reference.outputFile = self._insar.referenceSlc
|
||||
self.reference.useVirtualFile = self.useVirtualFile
|
||||
#read reference
|
||||
(imageFDR, imageData)=self.reference.readImage()
|
||||
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.reference.readLeader()
|
||||
self.reference.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.reference.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.reference.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
|
||||
#setup slave
|
||||
self.slave.leaderFile = sorted(glob.glob(os.path.join(self.slaveDir, 'LED-ALOS2*{}-*-*'.format(slaveFrame))))[0]
|
||||
if slaveMode in scansarModes:
|
||||
self.slave.imageFile = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.slavePolarization.upper(), slaveFrame, j))))[0]
|
||||
#setup secondary
|
||||
self.secondary.leaderFile = sorted(glob.glob(os.path.join(self.secondaryDir, 'LED-ALOS2*{}-*-*'.format(secondaryFrame))))[0]
|
||||
if secondaryMode in scansarModes:
|
||||
self.secondary.imageFile = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*{}-*-*-F{}'.format(self.secondaryPolarization.upper(), secondaryFrame, j))))[0]
|
||||
else:
|
||||
self.slave.imageFile = sorted(glob.glob(os.path.join(self.slaveDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.slavePolarization.upper(), slaveFrame))))[0]
|
||||
self.slave.outputFile = self._insar.slaveSlc
|
||||
self.slave.useVirtualFile = self.useVirtualFile
|
||||
#read slave
|
||||
(imageFDR, imageData)=self.slave.readImage()
|
||||
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.slave.readLeader()
|
||||
self.slave.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.slave.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.slave.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.secondary.imageFile = sorted(glob.glob(os.path.join(self.secondaryDir, 'IMG-{}-ALOS2*{}-*-*'.format(self.secondaryPolarization.upper(), secondaryFrame))))[0]
|
||||
self.secondary.outputFile = self._insar.secondarySlc
|
||||
self.secondary.useVirtualFile = self.useVirtualFile
|
||||
#read secondary
|
||||
(imageFDR, imageData)=self.secondary.readImage()
|
||||
(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord)=self.secondary.readLeader()
|
||||
self.secondary.setSwath(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.secondary.setFrame(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
self.secondary.setTrack(leaderFDR, sceneHeaderRecord, platformPositionRecord, facilityRecord, imageFDR, imageData)
|
||||
|
||||
os.chdir('../')
|
||||
self._insar.saveProduct(self.master.track.frames[-1], self._insar.masterFrameParameter)
|
||||
self._insar.saveProduct(self.slave.track.frames[-1], self._insar.slaveFrameParameter)
|
||||
self._insar.saveProduct(self.reference.track.frames[-1], self._insar.referenceFrameParameter)
|
||||
self._insar.saveProduct(self.secondary.track.frames[-1], self._insar.secondaryFrameParameter)
|
||||
os.chdir('../')
|
||||
self._insar.saveProduct(self.master.track, self._insar.masterTrackParameter)
|
||||
self._insar.saveProduct(self.slave.track, self._insar.slaveTrackParameter)
|
||||
self._insar.saveProduct(self.reference.track, self._insar.referenceTrackParameter)
|
||||
self._insar.saveProduct(self.secondary.track, self._insar.secondaryTrackParameter)
|
||||
|
||||
|
||||
##################################################
|
||||
|
@ -268,53 +268,53 @@ def runPreprocessor(self):
|
|||
#synTime = 0
|
||||
synPercentage = 0
|
||||
|
||||
numberOfFrames = len(self._insar.masterFrames)
|
||||
numberOfFrames = len(self._insar.referenceFrames)
|
||||
numberOfSwaths = self._insar.endingSwath - self._insar.startingSwath + 1
|
||||
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
for j, swathNumber in enumerate(range(self._insar.startingSwath, self._insar.endingSwath + 1)):
|
||||
masterSwath = self.master.track.frames[i].swaths[j]
|
||||
slaveSwath = self.slave.track.frames[i].swaths[j]
|
||||
referenceSwath = self.reference.track.frames[i].swaths[j]
|
||||
secondarySwath = self.secondary.track.frames[i].swaths[j]
|
||||
#using Piyush's code for computing range and azimuth offsets
|
||||
midRange = masterSwath.startingRange + masterSwath.rangePixelSize * masterSwath.numberOfSamples * 0.5
|
||||
midSensingStart = masterSwath.sensingStart + datetime.timedelta(seconds = masterSwath.numberOfLines * 0.5 / masterSwath.prf)
|
||||
llh = self.master.track.orbit.rdr2geo(midSensingStart, midRange)
|
||||
slvaz, slvrng = self.slave.track.orbit.geo2rdr(llh)
|
||||
midRange = referenceSwath.startingRange + referenceSwath.rangePixelSize * referenceSwath.numberOfSamples * 0.5
|
||||
midSensingStart = referenceSwath.sensingStart + datetime.timedelta(seconds = referenceSwath.numberOfLines * 0.5 / referenceSwath.prf)
|
||||
llh = self.reference.track.orbit.rdr2geo(midSensingStart, midRange)
|
||||
slvaz, slvrng = self.secondary.track.orbit.geo2rdr(llh)
|
||||
###Translate to offsets
|
||||
#note that slave range pixel size and prf might be different from master, here we assume there is a virtual slave with same
|
||||
#note that secondary range pixel size and prf might be different from reference, here we assume there is a virtual secondary with same
|
||||
#range pixel size and prf
|
||||
rgoff = ((slvrng - slaveSwath.startingRange) / masterSwath.rangePixelSize) - masterSwath.numberOfSamples * 0.5
|
||||
azoff = ((slvaz - slaveSwath.sensingStart).total_seconds() * masterSwath.prf) - masterSwath.numberOfLines * 0.5
|
||||
rgoff = ((slvrng - secondarySwath.startingRange) / referenceSwath.rangePixelSize) - referenceSwath.numberOfSamples * 0.5
|
||||
azoff = ((slvaz - secondarySwath.sensingStart).total_seconds() * referenceSwath.prf) - referenceSwath.numberOfLines * 0.5
|
||||
|
||||
#compute burst synchronization
|
||||
#burst parameters for ScanSAR wide mode not estimed yet
|
||||
if self._insar.modeCombination == 21:
|
||||
scburstStartLine = (masterSwath.burstStartTime - masterSwath.sensingStart).total_seconds() * masterSwath.prf + azoff
|
||||
#slave burst start times corresponding to master burst start times (100% synchronization)
|
||||
scburstStartLines = np.arange(scburstStartLine - 100000*masterSwath.burstCycleLength, \
|
||||
scburstStartLine + 100000*masterSwath.burstCycleLength, \
|
||||
masterSwath.burstCycleLength)
|
||||
dscburstStartLines = -((slaveSwath.burstStartTime - slaveSwath.sensingStart).total_seconds() * slaveSwath.prf - scburstStartLines)
|
||||
scburstStartLine = (referenceSwath.burstStartTime - referenceSwath.sensingStart).total_seconds() * referenceSwath.prf + azoff
|
||||
#secondary burst start times corresponding to reference burst start times (100% synchronization)
|
||||
scburstStartLines = np.arange(scburstStartLine - 100000*referenceSwath.burstCycleLength, \
|
||||
scburstStartLine + 100000*referenceSwath.burstCycleLength, \
|
||||
referenceSwath.burstCycleLength)
|
||||
dscburstStartLines = -((secondarySwath.burstStartTime - secondarySwath.sensingStart).total_seconds() * secondarySwath.prf - scburstStartLines)
|
||||
#find the difference with minimum absolute value
|
||||
unsynLines = dscburstStartLines[np.argmin(np.absolute(dscburstStartLines))]
|
||||
if np.absolute(unsynLines) >= slaveSwath.burstLength:
|
||||
if np.absolute(unsynLines) >= secondarySwath.burstLength:
|
||||
synLines = 0
|
||||
if unsynLines > 0:
|
||||
unsynLines = slaveSwath.burstLength
|
||||
unsynLines = secondarySwath.burstLength
|
||||
else:
|
||||
unsynLines = -slaveSwath.burstLength
|
||||
unsynLines = -secondarySwath.burstLength
|
||||
else:
|
||||
synLines = slaveSwath.burstLength - np.absolute(unsynLines)
|
||||
synLines = secondarySwath.burstLength - np.absolute(unsynLines)
|
||||
|
||||
unsynTime += unsynLines / masterSwath.prf
|
||||
synPercentage += synLines / masterSwath.burstLength * 100.0
|
||||
unsynTime += unsynLines / referenceSwath.prf
|
||||
synPercentage += synLines / referenceSwath.burstLength * 100.0
|
||||
|
||||
catalog.addItem('burst synchronization of frame {} swath {}'.format(frameNumber, swathNumber), '%.1f%%'%(synLines / masterSwath.burstLength * 100.0), 'runPreprocessor')
|
||||
catalog.addItem('burst synchronization of frame {} swath {}'.format(frameNumber, swathNumber), '%.1f%%'%(synLines / referenceSwath.burstLength * 100.0), 'runPreprocessor')
|
||||
|
||||
############################################################################################
|
||||
#illustration of the sign of the number of unsynchronized lines (unsynLines)
|
||||
#The convention is the same as ampcor offset, that is,
|
||||
# slaveLineNumber = masterLineNumber + unsynLines
|
||||
# secondaryLineNumber = referenceLineNumber + unsynLines
|
||||
#
|
||||
# |-----------------------| ------------
|
||||
# | | ^
|
||||
|
@ -326,35 +326,35 @@ def runPreprocessor(self):
|
|||
# | | | |
|
||||
# | | | |
|
||||
# |-----------------------| | |
|
||||
# Master Burst | |
|
||||
# Reference Burst | |
|
||||
# | |
|
||||
# | |
|
||||
# | |
|
||||
# | |
|
||||
# |-----------------------|
|
||||
# Slave Burst
|
||||
# Secondary Burst
|
||||
#
|
||||
#
|
||||
############################################################################################
|
||||
|
||||
##burst parameters for ScanSAR wide mode not estimed yet
|
||||
elif self._insar.modeCombination == 31:
|
||||
#scansar is master
|
||||
scburstStartLine = (masterSwath.burstStartTime - masterSwath.sensingStart).total_seconds() * masterSwath.prf + azoff
|
||||
#slave burst start times corresponding to master burst start times (100% synchronization)
|
||||
#scansar is reference
|
||||
scburstStartLine = (referenceSwath.burstStartTime - referenceSwath.sensingStart).total_seconds() * referenceSwath.prf + azoff
|
||||
#secondary burst start times corresponding to reference burst start times (100% synchronization)
|
||||
for k in range(-100000, 100000):
|
||||
saz_burstx = scburstStartLine + masterSwath.burstCycleLength * k
|
||||
st_burstx = slaveSwath.sensingStart + datetime.timedelta(seconds=saz_burstx / masterSwath.prf)
|
||||
if saz_burstx >= 0.0 and saz_burstx <= slaveSwath.numberOfLines -1:
|
||||
slaveSwath.burstStartTime = st_burstx
|
||||
slaveSwath.burstLength = masterSwath.burstLength
|
||||
slaveSwath.burstCycleLength = masterSwath.burstCycleLength
|
||||
slaveSwath.swathNumber = masterSwath.swathNumber
|
||||
saz_burstx = scburstStartLine + referenceSwath.burstCycleLength * k
|
||||
st_burstx = secondarySwath.sensingStart + datetime.timedelta(seconds=saz_burstx / referenceSwath.prf)
|
||||
if saz_burstx >= 0.0 and saz_burstx <= secondarySwath.numberOfLines -1:
|
||||
secondarySwath.burstStartTime = st_burstx
|
||||
secondarySwath.burstLength = referenceSwath.burstLength
|
||||
secondarySwath.burstCycleLength = referenceSwath.burstCycleLength
|
||||
secondarySwath.swathNumber = referenceSwath.swathNumber
|
||||
break
|
||||
#unsynLines = 0
|
||||
#synLines = masterSwath.burstLength
|
||||
#unsynTime += unsynLines / masterSwath.prf
|
||||
#synPercentage += synLines / masterSwath.burstLength * 100.0
|
||||
#synLines = referenceSwath.burstLength
|
||||
#unsynTime += unsynLines / referenceSwath.prf
|
||||
#synPercentage += synLines / referenceSwath.burstLength * 100.0
|
||||
catalog.addItem('burst synchronization of frame {} swath {}'.format(frameNumber, swathNumber), '%.1f%%'%(100.0), 'runPreprocessor')
|
||||
else:
|
||||
pass
|
||||
|
@ -362,7 +362,7 @@ def runPreprocessor(self):
|
|||
#overwrite original frame parameter file
|
||||
if self._insar.modeCombination == 31:
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
self._insar.saveProduct(self.slave.track.frames[i], os.path.join(frameDir, self._insar.slaveFrameParameter))
|
||||
self._insar.saveProduct(self.secondary.track.frames[i], os.path.join(frameDir, self._insar.secondaryFrameParameter))
|
||||
|
||||
#getting average
|
||||
if self._insar.modeCombination == 21:
|
||||
|
@ -384,8 +384,8 @@ def runPreprocessor(self):
|
|||
##################################################
|
||||
#3. compute baseline
|
||||
##################################################
|
||||
#only compute baseline at four corners and center of the master track
|
||||
bboxRdr = getBboxRdr(self.master.track)
|
||||
#only compute baseline at four corners and center of the reference track
|
||||
bboxRdr = getBboxRdr(self.reference.track)
|
||||
|
||||
rangeMin = bboxRdr[0]
|
||||
rangeMax = bboxRdr[1]
|
||||
|
@ -406,16 +406,16 @@ def runPreprocessor(self):
|
|||
#modify Piyush's code for computing baslines
|
||||
refElp = Planet(pname='Earth').ellipsoid
|
||||
for x in points:
|
||||
masterSV = self.master.track.orbit.interpolate(x[0], method='hermite')
|
||||
target = self.master.track.orbit.rdr2geo(x[0], x[1])
|
||||
referenceSV = self.reference.track.orbit.interpolate(x[0], method='hermite')
|
||||
target = self.reference.track.orbit.rdr2geo(x[0], x[1])
|
||||
|
||||
slvTime, slvrng = self.slave.track.orbit.geo2rdr(target)
|
||||
slaveSV = self.slave.track.orbit.interpolateOrbit(slvTime, method='hermite')
|
||||
slvTime, slvrng = self.secondary.track.orbit.geo2rdr(target)
|
||||
secondarySV = self.secondary.track.orbit.interpolateOrbit(slvTime, method='hermite')
|
||||
|
||||
targxyz = np.array(refElp.LLH(target[0], target[1], target[2]).ecef().tolist())
|
||||
mxyz = np.array(masterSV.getPosition())
|
||||
mvel = np.array(masterSV.getVelocity())
|
||||
sxyz = np.array(slaveSV.getPosition())
|
||||
mxyz = np.array(referenceSV.getPosition())
|
||||
mvel = np.array(referenceSV.getVelocity())
|
||||
sxyz = np.array(secondarySV.getPosition())
|
||||
|
||||
#to fix abrupt change near zero in baseline grid. JUN-05-2020
|
||||
mvelunit = mvel / np.linalg.norm(mvel)
|
||||
|
@ -430,27 +430,27 @@ def runPreprocessor(self):
|
|||
direction = np.sign(np.dot( np.cross(targxyz-mxyz, sxyz-mxyz), mvel))
|
||||
Bperp.append(direction*perp)
|
||||
|
||||
catalog.addItem('parallel baseline at upperleft of master track', Bpar[0], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at upperright of master track', Bpar[1], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at lowerleft of master track', Bpar[2], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at lowerright of master track', Bpar[3], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at center of master track', Bpar[4], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at upperleft of reference track', Bpar[0], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at upperright of reference track', Bpar[1], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at lowerleft of reference track', Bpar[2], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at lowerright of reference track', Bpar[3], 'runPreprocessor')
|
||||
catalog.addItem('parallel baseline at center of reference track', Bpar[4], 'runPreprocessor')
|
||||
|
||||
catalog.addItem('perpendicular baseline at upperleft of master track', Bperp[0], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at upperright of master track', Bperp[1], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at lowerleft of master track', Bperp[2], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at lowerright of master track', Bperp[3], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at center of master track', Bperp[4], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at upperleft of reference track', Bperp[0], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at upperright of reference track', Bperp[1], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at lowerleft of reference track', Bperp[2], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at lowerright of reference track', Bperp[3], 'runPreprocessor')
|
||||
catalog.addItem('perpendicular baseline at center of reference track', Bperp[4], 'runPreprocessor')
|
||||
|
||||
|
||||
##################################################
|
||||
#4. compute bounding box
|
||||
##################################################
|
||||
masterBbox = getBboxGeo(self.master.track)
|
||||
slaveBbox = getBboxGeo(self.slave.track)
|
||||
referenceBbox = getBboxGeo(self.reference.track)
|
||||
secondaryBbox = getBboxGeo(self.secondary.track)
|
||||
|
||||
catalog.addItem('master bounding box', masterBbox, 'runPreprocessor')
|
||||
catalog.addItem('slave bounding box', slaveBbox, 'runPreprocessor')
|
||||
catalog.addItem('reference bounding box', referenceBbox, 'runPreprocessor')
|
||||
catalog.addItem('secondary bounding box', secondaryBbox, 'runPreprocessor')
|
||||
|
||||
|
||||
catalog.printToLog(logger, "runPreprocessor")
|
||||
|
@ -461,22 +461,22 @@ def runPreprocessor(self):
|
|||
def check_overlap(ldr_m, img_m, ldr_s, img_s):
|
||||
from isceobj.Constants import SPEED_OF_LIGHT
|
||||
|
||||
rangeSamplingRateMaster, widthMaster, nearRangeMaster = read_param_for_checking_overlap(ldr_m, img_m)
|
||||
rangeSamplingRateSlave, widthSlave, nearRangeSlave = read_param_for_checking_overlap(ldr_s, img_s)
|
||||
rangeSamplingRateReference, widthReference, nearRangeReference = read_param_for_checking_overlap(ldr_m, img_m)
|
||||
rangeSamplingRateSecondary, widthSecondary, nearRangeSecondary = read_param_for_checking_overlap(ldr_s, img_s)
|
||||
|
||||
farRangeMaster = nearRangeMaster + (widthMaster-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateMaster
|
||||
farRangeSlave = nearRangeSlave + (widthSlave-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateSlave
|
||||
farRangeReference = nearRangeReference + (widthReference-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateReference
|
||||
farRangeSecondary = nearRangeSecondary + (widthSecondary-1) * 0.5 * SPEED_OF_LIGHT / rangeSamplingRateSecondary
|
||||
|
||||
#This should be good enough, although precise image offsets are not used.
|
||||
if farRangeMaster <= nearRangeSlave:
|
||||
if farRangeReference <= nearRangeSecondary:
|
||||
overlapRatio = 0.0
|
||||
elif farRangeSlave <= nearRangeMaster:
|
||||
elif farRangeSecondary <= nearRangeReference:
|
||||
overlapRatio = 0.0
|
||||
else:
|
||||
# 0 1 2 3
|
||||
ranges = np.array([nearRangeMaster, farRangeMaster, nearRangeSlave, farRangeSlave])
|
||||
ranges = np.array([nearRangeReference, farRangeReference, nearRangeSecondary, farRangeSecondary])
|
||||
rangesIndex = np.argsort(ranges)
|
||||
overlapRatio = ranges[rangesIndex[2]]-ranges[rangesIndex[1]] / (farRangeMaster-nearRangeMaster)
|
||||
overlapRatio = ranges[rangesIndex[2]]-ranges[rangesIndex[1]] / (farRangeReference-nearRangeReference)
|
||||
|
||||
return overlapRatio
|
||||
|
||||
|
|
|
@ -19,11 +19,11 @@ def runSwathMosaic(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
|
||||
|
@ -33,7 +33,7 @@ def runSwathMosaic(self):
|
|||
|
||||
if self._insar.endingSwath-self._insar.startingSwath+1 == 1:
|
||||
import shutil
|
||||
swathDir = 's{}'.format(masterTrack.frames[i].swaths[0].swathNumber)
|
||||
swathDir = 's{}'.format(referenceTrack.frames[i].swaths[0].swathNumber)
|
||||
|
||||
if not os.path.isfile(self._insar.interferogram):
|
||||
os.symlink(os.path.join('../', swathDir, self._insar.interferogram), self._insar.interferogram)
|
||||
|
@ -53,7 +53,7 @@ def runSwathMosaic(self):
|
|||
|
||||
#update frame parameters
|
||||
#########################################################
|
||||
frame = masterTrack.frames[i]
|
||||
frame = referenceTrack.frames[i]
|
||||
infImg = isceobj.createImage()
|
||||
infImg.load(self._insar.interferogram+'.xml')
|
||||
#mosaic size
|
||||
|
@ -70,9 +70,9 @@ def runSwathMosaic(self):
|
|||
frame.azimuthPixelSize = frame.swaths[0].azimuthPixelSize
|
||||
frame.azimuthLineInterval = frame.swaths[0].azimuthLineInterval
|
||||
|
||||
#update frame parameters, slave
|
||||
#update frame parameters, secondary
|
||||
#########################################################
|
||||
frame = slaveTrack.frames[i]
|
||||
frame = secondaryTrack.frames[i]
|
||||
#mosaic size
|
||||
frame.numberOfSamples = int(frame.swaths[0].numberOfSamples/self._insar.numberRangeLooks1)
|
||||
frame.numberOfLines = int(frame.swaths[0].numberOfLines/self._insar.numberAzimuthLooks1)
|
||||
|
@ -90,28 +90,28 @@ def runSwathMosaic(self):
|
|||
os.chdir('../')
|
||||
|
||||
#save parameter file
|
||||
self._insar.saveProduct(masterTrack.frames[i], self._insar.masterFrameParameter)
|
||||
self._insar.saveProduct(slaveTrack.frames[i], self._insar.slaveFrameParameter)
|
||||
self._insar.saveProduct(referenceTrack.frames[i], self._insar.referenceFrameParameter)
|
||||
self._insar.saveProduct(secondaryTrack.frames[i], self._insar.secondaryFrameParameter)
|
||||
|
||||
os.chdir('../')
|
||||
|
||||
continue
|
||||
|
||||
#choose offsets
|
||||
numberOfFrames = len(masterTrack.frames)
|
||||
numberOfSwaths = len(masterTrack.frames[i].swaths)
|
||||
numberOfFrames = len(referenceTrack.frames)
|
||||
numberOfSwaths = len(referenceTrack.frames[i].swaths)
|
||||
if self.swathOffsetMatching:
|
||||
#no need to do this as the API support 2-d list
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetMatchingMaster
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingMaster
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetMatchingReference
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingReference
|
||||
|
||||
else:
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetGeometricalMaster
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalMaster
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetGeometricalReference
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalReference
|
||||
|
||||
rangeOffsets = rangeOffsets[i]
|
||||
azimuthOffsets = azimuthOffsets[i]
|
||||
|
@ -126,34 +126,34 @@ def runSwathMosaic(self):
|
|||
|
||||
#note that frame parameters are updated after mosaicking
|
||||
#mosaic amplitudes
|
||||
swathMosaic(masterTrack.frames[i], inputAmplitudes, self._insar.amplitude,
|
||||
swathMosaic(referenceTrack.frames[i], inputAmplitudes, self._insar.amplitude,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, resamplingMethod=0)
|
||||
#mosaic interferograms
|
||||
swathMosaic(masterTrack.frames[i], inputInterferograms, self._insar.interferogram,
|
||||
swathMosaic(referenceTrack.frames[i], inputInterferograms, self._insar.interferogram,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, updateFrame=True, resamplingMethod=1)
|
||||
|
||||
create_xml(self._insar.amplitude, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'int')
|
||||
create_xml(self._insar.amplitude, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'amp')
|
||||
create_xml(self._insar.interferogram, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'int')
|
||||
|
||||
#update slave frame parameters here
|
||||
#no matching for slave, always use geometry
|
||||
rangeOffsets = self._insar.swathRangeOffsetGeometricalSlave
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalSlave
|
||||
#update secondary frame parameters here
|
||||
#no matching for secondary, always use geometry
|
||||
rangeOffsets = self._insar.swathRangeOffsetGeometricalSecondary
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalSecondary
|
||||
rangeOffsets = rangeOffsets[i]
|
||||
azimuthOffsets = azimuthOffsets[i]
|
||||
swathMosaicParameters(slaveTrack.frames[i], rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
|
||||
swathMosaicParameters(secondaryTrack.frames[i], rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1)
|
||||
|
||||
os.chdir('../')
|
||||
|
||||
#save parameter file
|
||||
self._insar.saveProduct(masterTrack.frames[i], self._insar.masterFrameParameter)
|
||||
self._insar.saveProduct(slaveTrack.frames[i], self._insar.slaveFrameParameter)
|
||||
self._insar.saveProduct(referenceTrack.frames[i], self._insar.referenceFrameParameter)
|
||||
self._insar.saveProduct(secondaryTrack.frames[i], self._insar.secondaryFrameParameter)
|
||||
|
||||
os.chdir('../')
|
||||
|
||||
|
||||
#mosaic spectral diversity interferograms
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
|
||||
|
@ -163,7 +163,7 @@ def runSwathMosaic(self):
|
|||
|
||||
if self._insar.endingSwath-self._insar.startingSwath+1 == 1:
|
||||
import shutil
|
||||
swathDir = 's{}'.format(masterTrack.frames[i].swaths[0].swathNumber)
|
||||
swathDir = 's{}'.format(referenceTrack.frames[i].swaths[0].swathNumber)
|
||||
|
||||
for sdFile in self._insar.interferogramSd:
|
||||
if not os.path.isfile(sdFile):
|
||||
|
@ -176,20 +176,20 @@ def runSwathMosaic(self):
|
|||
continue
|
||||
|
||||
#choose offsets
|
||||
numberOfFrames = len(masterTrack.frames)
|
||||
numberOfSwaths = len(masterTrack.frames[i].swaths)
|
||||
numberOfFrames = len(referenceTrack.frames)
|
||||
numberOfSwaths = len(referenceTrack.frames[i].swaths)
|
||||
if self.swathOffsetMatching:
|
||||
#no need to do this as the API support 2-d list
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetMatchingMaster
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingMaster
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetMatchingReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetMatchingReference
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetMatchingReference
|
||||
|
||||
else:
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalMaster)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetGeometricalMaster
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalMaster
|
||||
#rangeOffsets = (np.array(self._insar.swathRangeOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
#azimuthOffsets = (np.array(self._insar.swathAzimuthOffsetGeometricalReference)).reshape(numberOfFrames, numberOfSwaths)
|
||||
rangeOffsets = self._insar.swathRangeOffsetGeometricalReference
|
||||
azimuthOffsets = self._insar.swathAzimuthOffsetGeometricalReference
|
||||
|
||||
rangeOffsets = rangeOffsets[i]
|
||||
azimuthOffsets = azimuthOffsets[i]
|
||||
|
@ -203,11 +203,11 @@ def runSwathMosaic(self):
|
|||
|
||||
#mosaic spectral diversity interferograms
|
||||
for inputSdList, outputSdFile in zip(inputSd, self._insar.interferogramSd):
|
||||
swathMosaic(masterTrack.frames[i], inputSdList, outputSdFile,
|
||||
swathMosaic(referenceTrack.frames[i], inputSdList, outputSdFile,
|
||||
rangeOffsets, azimuthOffsets, self._insar.numberRangeLooks1, self._insar.numberAzimuthLooks1, updateFrame=False, phaseCompensation=True, pcRangeLooks=5, pcAzimuthLooks=5, filt=True, resamplingMethod=1)
|
||||
|
||||
for sdFile in self._insar.interferogramSd:
|
||||
create_xml(sdFile, masterTrack.frames[i].numberOfSamples, masterTrack.frames[i].numberOfLines, 'int')
|
||||
create_xml(sdFile, referenceTrack.frames[i].numberOfSamples, referenceTrack.frames[i].numberOfLines, 'int')
|
||||
|
||||
os.chdir('../')
|
||||
os.chdir('../')
|
||||
|
|
|
@ -17,12 +17,12 @@ def runSwathOffset(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
|
||||
|
||||
for i, frameNumber in enumerate(self._insar.masterFrames):
|
||||
for i, frameNumber in enumerate(self._insar.referenceFrames):
|
||||
frameDir = 'f{}_{}'.format(i+1, frameNumber)
|
||||
os.chdir(frameDir)
|
||||
|
||||
|
@ -35,34 +35,34 @@ def runSwathOffset(self):
|
|||
continue
|
||||
|
||||
#compute swath offset
|
||||
offsetMaster = swathOffset(masterTrack.frames[i], os.path.join(self._insar.masterBurstPrefix, self._insar.masterMagnitude), self._insar.masterSwathOffset,
|
||||
offsetReference = swathOffset(referenceTrack.frames[i], os.path.join(self._insar.referenceBurstPrefix, self._insar.referenceMagnitude), self._insar.referenceSwathOffset,
|
||||
crossCorrelation=self.swathOffsetMatching, numberOfAzimuthLooks=1)
|
||||
#only use geometrical offset for slave
|
||||
offsetSlave = swathOffset(slaveTrack.frames[i], os.path.join(self._insar.slaveBurstPrefix, self._insar.slaveMagnitude), self._insar.slaveSwathOffset,
|
||||
#only use geometrical offset for secondary
|
||||
offsetSecondary = swathOffset(secondaryTrack.frames[i], os.path.join(self._insar.secondaryBurstPrefix, self._insar.secondaryMagnitude), self._insar.secondarySwathOffset,
|
||||
crossCorrelation=False, numberOfAzimuthLooks=1)
|
||||
|
||||
#initialization
|
||||
if i == 0:
|
||||
self._insar.swathRangeOffsetGeometricalMaster = []
|
||||
self._insar.swathAzimuthOffsetGeometricalMaster = []
|
||||
self._insar.swathRangeOffsetGeometricalSlave = []
|
||||
self._insar.swathAzimuthOffsetGeometricalSlave = []
|
||||
self._insar.swathRangeOffsetGeometricalReference = []
|
||||
self._insar.swathAzimuthOffsetGeometricalReference = []
|
||||
self._insar.swathRangeOffsetGeometricalSecondary = []
|
||||
self._insar.swathAzimuthOffsetGeometricalSecondary = []
|
||||
if self.swathOffsetMatching:
|
||||
self._insar.swathRangeOffsetMatchingMaster = []
|
||||
self._insar.swathAzimuthOffsetMatchingMaster = []
|
||||
#self._insar.swathRangeOffsetMatchingSlave = []
|
||||
#self._insar.swathAzimuthOffsetMatchingSlave = []
|
||||
self._insar.swathRangeOffsetMatchingReference = []
|
||||
self._insar.swathAzimuthOffsetMatchingReference = []
|
||||
#self._insar.swathRangeOffsetMatchingSecondary = []
|
||||
#self._insar.swathAzimuthOffsetMatchingSecondary = []
|
||||
|
||||
#append list directly, as the API support 2-d list
|
||||
self._insar.swathRangeOffsetGeometricalMaster.append(offsetMaster[0])
|
||||
self._insar.swathAzimuthOffsetGeometricalMaster.append(offsetMaster[1])
|
||||
self._insar.swathRangeOffsetGeometricalSlave.append(offsetSlave[0])
|
||||
self._insar.swathAzimuthOffsetGeometricalSlave.append(offsetSlave[1])
|
||||
self._insar.swathRangeOffsetGeometricalReference.append(offsetReference[0])
|
||||
self._insar.swathAzimuthOffsetGeometricalReference.append(offsetReference[1])
|
||||
self._insar.swathRangeOffsetGeometricalSecondary.append(offsetSecondary[0])
|
||||
self._insar.swathAzimuthOffsetGeometricalSecondary.append(offsetSecondary[1])
|
||||
if self.swathOffsetMatching:
|
||||
self._insar.swathRangeOffsetMatchingMaster.append(offsetMaster[2])
|
||||
self._insar.swathAzimuthOffsetMatchingMaster.append(offsetMaster[3])
|
||||
#self._insar.swathRangeOffsetMatchingSlave.append(offsetSlave[2])
|
||||
#self._insar.swathAzimuthOffsetMatchingSlave.append(offsetSlave[3])
|
||||
self._insar.swathRangeOffsetMatchingReference.append(offsetReference[2])
|
||||
self._insar.swathAzimuthOffsetMatchingReference.append(offsetReference[3])
|
||||
#self._insar.swathRangeOffsetMatchingSecondary.append(offsetSecondary[2])
|
||||
#self._insar.swathAzimuthOffsetMatchingSecondary.append(offsetSecondary[3])
|
||||
|
||||
os.chdir('../../')
|
||||
|
||||
|
|
|
@ -24,8 +24,8 @@ def runUnwrapSnaphuSd(self):
|
|||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
self.updateParamemetersFromUser()
|
||||
|
||||
masterTrack = self._insar.loadTrack(master=True)
|
||||
#slaveTrack = self._insar.loadTrack(master=False)
|
||||
referenceTrack = self._insar.loadTrack(reference=True)
|
||||
#secondaryTrack = self._insar.loadTrack(reference=False)
|
||||
|
||||
sdDir = 'sd'
|
||||
os.makedirs(sdDir, exist_ok=True)
|
||||
|
@ -68,9 +68,9 @@ def runUnwrapSnaphuSd(self):
|
|||
os.remove(amplitudeMultilook+'.vrt')
|
||||
os.remove(amplitudeMultilook+'.xml')
|
||||
else:
|
||||
tmid = masterTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*masterTrack.azimuthLineInterval+
|
||||
masterTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*masterTrack.azimuthLineInterval)
|
||||
snaphuUnwrap(masterTrack, tmid,
|
||||
tmid = referenceTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*referenceTrack.azimuthLineInterval+
|
||||
referenceTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*referenceTrack.azimuthLineInterval)
|
||||
snaphuUnwrap(referenceTrack, tmid,
|
||||
sdInterferogramFilt,
|
||||
sdCoherence,
|
||||
sdInterferogramUnwrap,
|
||||
|
@ -109,17 +109,17 @@ def runUnwrapSnaphuSd(self):
|
|||
# STEP 4. convert to azimuth deformation
|
||||
############################################################
|
||||
#burst cycle in s
|
||||
burstCycleLength = masterTrack.frames[0].swaths[0].burstCycleLength / masterTrack.frames[0].swaths[0].prf
|
||||
burstCycleLength = referenceTrack.frames[0].swaths[0].burstCycleLength / referenceTrack.frames[0].swaths[0].prf
|
||||
|
||||
#compute azimuth fmrate
|
||||
#stack all azimuth fmrates
|
||||
index = np.array([], dtype=np.float64)
|
||||
ka = np.array([], dtype=np.float64)
|
||||
for frame in masterTrack.frames:
|
||||
for frame in referenceTrack.frames:
|
||||
for swath in frame.swaths:
|
||||
startingRangeMultilook = masterTrack.frames[0].swaths[0].startingRange + \
|
||||
(self._insar.numberRangeLooks1*self._insar.numberRangeLooksSd-1.0)/2.0*masterTrack.frames[0].swaths[0].rangePixelSize
|
||||
rangePixelSizeMultilook = self._insar.numberRangeLooks1 * self._insar.numberRangeLooksSd * masterTrack.frames[0].swaths[0].rangePixelSize
|
||||
startingRangeMultilook = referenceTrack.frames[0].swaths[0].startingRange + \
|
||||
(self._insar.numberRangeLooks1*self._insar.numberRangeLooksSd-1.0)/2.0*referenceTrack.frames[0].swaths[0].rangePixelSize
|
||||
rangePixelSizeMultilook = self._insar.numberRangeLooks1 * self._insar.numberRangeLooksSd * referenceTrack.frames[0].swaths[0].rangePixelSize
|
||||
index0 = (swath.startingRange + np.arange(swath.numberOfSamples) * swath.rangePixelSize - startingRangeMultilook) / rangePixelSizeMultilook
|
||||
ka0 = np.polyval(swath.azimuthFmrateVsPixel[::-1], np.arange(swath.numberOfSamples))
|
||||
index = np.concatenate((index, index0))
|
||||
|
@ -129,9 +129,9 @@ def runUnwrapSnaphuSd(self):
|
|||
ka = np.polyval(p, np.arange(width))
|
||||
|
||||
#compute radar beam footprint velocity at middle track
|
||||
tmid = masterTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*masterTrack.azimuthLineInterval+
|
||||
masterTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*masterTrack.azimuthLineInterval)
|
||||
svmid = masterTrack.orbit.interpolateOrbit(tmid, method='hermite')
|
||||
tmid = referenceTrack.sensingStart + datetime.timedelta(seconds=(self._insar.numberAzimuthLooks1-1.0)/2.0*referenceTrack.azimuthLineInterval+
|
||||
referenceTrack.numberOfLines/2.0*self._insar.numberAzimuthLooks1*referenceTrack.azimuthLineInterval)
|
||||
svmid = referenceTrack.orbit.interpolateOrbit(tmid, method='hermite')
|
||||
#earth radius in meters
|
||||
r = 6371 * 1000.0
|
||||
#radar footprint velocity
|
||||
|
|
|
@ -8,4 +8,4 @@ def getFactoriesInfo():
|
|||
'factory':'createAttitude'
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -108,4 +108,4 @@ class IntImage(Image):
|
|||
return
|
||||
|
||||
|
||||
#end class
|
||||
#end class
|
||||
|
|
|
@ -36,8 +36,8 @@ from iscesys.DateTimeUtil.DateTimeUtil import DateTimeUtil as DTU
|
|||
from iscesys.Compatibility import Compatibility
|
||||
from isceobj.Scene.Frame import FrameMixin
|
||||
|
||||
## Master Slave Hash Table
|
||||
MASTER_SLAVE = {0:'master', 1:'slave', 'master':'master', 'slave':'slave'}
|
||||
## Reference Secondary Hash Table
|
||||
REFERENCE_SECONDARY = {0:'reference', 1:'secondary', 'reference':'reference', 'secondary':'secondary'}
|
||||
|
||||
PROCEED_IF_ZERO_DEM = Component.Parameter(
|
||||
'_proceedIfZeroDem',
|
||||
|
@ -419,16 +419,16 @@ SHADE_FACTOR = Component.Parameter('_shadeFactor',
|
|||
doc='')
|
||||
|
||||
#ask
|
||||
MASTER_SQUINT = Component.Parameter('_masterSquint',
|
||||
public_name='masterSquint',
|
||||
REFERENCE_SQUINT = Component.Parameter('_referenceSquint',
|
||||
public_name='referenceSquint',
|
||||
default=0.,
|
||||
type=float,
|
||||
mandatory=False,
|
||||
doc='')
|
||||
|
||||
#ask
|
||||
SLAVE_SQUINT = Component.Parameter('_slaveSquint',
|
||||
public_name='slaveSquint',
|
||||
SECONDARY_SQUINT = Component.Parameter('_secondarySquint',
|
||||
public_name='secondarySquint',
|
||||
default=0.,
|
||||
type=float,
|
||||
mandatory=False,
|
||||
|
@ -510,8 +510,8 @@ class InsarProc(Component, FrameMixin):
|
|||
NUMBER_AZIMUTH_LOOKS,
|
||||
NUMBER_RANGE_LOOKS,
|
||||
SHADE_FACTOR,
|
||||
MASTER_SQUINT,
|
||||
SLAVE_SQUINT,
|
||||
REFERENCE_SQUINT,
|
||||
SECONDARY_SQUINT,
|
||||
GEOCODE_LIST,
|
||||
UNMASKED_PREFIX,
|
||||
UNWRAPPED_2STAGE_FILENAME,
|
||||
|
@ -562,11 +562,11 @@ class InsarProc(Component, FrameMixin):
|
|||
def getLookSide(self):
|
||||
return self._lookSide
|
||||
|
||||
def getMasterSquint(self):
|
||||
return self._masterSquint
|
||||
def getReferenceSquint(self):
|
||||
return self._referenceSquint
|
||||
|
||||
def getSlaveSquint(self):
|
||||
return self._slaveSquint
|
||||
def getSecondarySquint(self):
|
||||
return self._secondarySquint
|
||||
|
||||
def getFormSLC1(self):
|
||||
return self._formSLC1
|
||||
|
@ -619,38 +619,38 @@ class InsarProc(Component, FrameMixin):
|
|||
def getSecondProcVelocity(self):
|
||||
return self._pegV2
|
||||
|
||||
def getMasterFrame(self):
|
||||
return self._masterFrame
|
||||
def getReferenceFrame(self):
|
||||
return self._referenceFrame
|
||||
|
||||
def getSlaveFrame(self):
|
||||
return self._slaveFrame
|
||||
def getSecondaryFrame(self):
|
||||
return self._secondaryFrame
|
||||
|
||||
def getMasterOrbit(self):
|
||||
return self._masterOrbit
|
||||
def getReferenceOrbit(self):
|
||||
return self._referenceOrbit
|
||||
|
||||
def getSlaveOrbit(self):
|
||||
return self._slaveOrbit
|
||||
def getSecondaryOrbit(self):
|
||||
return self._secondaryOrbit
|
||||
|
||||
def getMasterDoppler(self):
|
||||
return self._masterDoppler
|
||||
def getReferenceDoppler(self):
|
||||
return self._referenceDoppler
|
||||
|
||||
def getSlaveDoppler(self):
|
||||
return self._slaveDoppler
|
||||
def getSecondaryDoppler(self):
|
||||
return self._secondaryDoppler
|
||||
|
||||
def getPeg(self):
|
||||
return self._peg
|
||||
|
||||
def getMasterRawImage(self):
|
||||
return self._masterRawImage
|
||||
def getReferenceRawImage(self):
|
||||
return self._referenceRawImage
|
||||
|
||||
def getSlaveRawImage(self):
|
||||
return self._slaveRawImage
|
||||
def getSecondaryRawImage(self):
|
||||
return self._secondaryRawImage
|
||||
|
||||
def getMasterSlcImage(self):
|
||||
return self._masterSlcImage
|
||||
def getReferenceSlcImage(self):
|
||||
return self._referenceSlcImage
|
||||
|
||||
def getSlaveSlcImage(self):
|
||||
return self._slaveSlcImage
|
||||
def getSecondarySlcImage(self):
|
||||
return self._secondarySlcImage
|
||||
|
||||
def getSimAmpImage(self):
|
||||
return self._simAmpImage
|
||||
|
@ -852,11 +852,11 @@ class InsarProc(Component, FrameMixin):
|
|||
def getGeocodeList(self):
|
||||
return self._geocode_list
|
||||
|
||||
def getRawMasterIQImage(self):
|
||||
return self._rawMasterIQImage
|
||||
def getRawReferenceIQImage(self):
|
||||
return self._rawReferenceIQImage
|
||||
|
||||
def getRawSlaveIQImage(self):
|
||||
return self._rawSlaveIQImage
|
||||
def getRawSecondaryIQImage(self):
|
||||
return self._rawSecondaryIQImage
|
||||
@property
|
||||
def azResFactor(self):
|
||||
return self._azResFactor
|
||||
|
@ -877,11 +877,11 @@ class InsarProc(Component, FrameMixin):
|
|||
def setLookSide(self, lookSide):
|
||||
self._lookSide = lookSide
|
||||
|
||||
def setMasterSquint(self, squint):
|
||||
self._masterSquint = squint
|
||||
def setReferenceSquint(self, squint):
|
||||
self._referenceSquint = squint
|
||||
|
||||
def setSlaveSquint(self, squint):
|
||||
self._slaveSquint = squint
|
||||
def setSecondarySquint(self, squint):
|
||||
self._secondarySquint = squint
|
||||
|
||||
def setFormSLC1(self, fslc):
|
||||
self._formSLC1 = fslc
|
||||
|
@ -917,38 +917,38 @@ class InsarProc(Component, FrameMixin):
|
|||
self._pegV2 = v2
|
||||
|
||||
|
||||
def setMasterFrame(self, frame):
|
||||
self._masterFrame = frame
|
||||
def setReferenceFrame(self, frame):
|
||||
self._referenceFrame = frame
|
||||
|
||||
def setSlaveFrame(self, frame):
|
||||
self._slaveFrame = frame
|
||||
def setSecondaryFrame(self, frame):
|
||||
self._secondaryFrame = frame
|
||||
|
||||
def setMasterOrbit(self, orbit):
|
||||
self._masterOrbit = orbit
|
||||
def setReferenceOrbit(self, orbit):
|
||||
self._referenceOrbit = orbit
|
||||
|
||||
def setSlaveOrbit(self, orbit):
|
||||
self._slaveOrbit = orbit
|
||||
def setSecondaryOrbit(self, orbit):
|
||||
self._secondaryOrbit = orbit
|
||||
|
||||
def setMasterDoppler(self, doppler):
|
||||
self._masterDoppler = doppler
|
||||
def setReferenceDoppler(self, doppler):
|
||||
self._referenceDoppler = doppler
|
||||
|
||||
def setSlaveDoppler(self, doppler):
|
||||
self._slaveDoppler = doppler
|
||||
def setSecondaryDoppler(self, doppler):
|
||||
self._secondaryDoppler = doppler
|
||||
|
||||
def setPeg(self, peg):
|
||||
self._peg = peg
|
||||
|
||||
def setMasterRawImage(self, image):
|
||||
self._masterRawImage = image
|
||||
def setReferenceRawImage(self, image):
|
||||
self._referenceRawImage = image
|
||||
|
||||
def setSlaveRawImage(self, image):
|
||||
self._slaveRawImage = image
|
||||
def setSecondaryRawImage(self, image):
|
||||
self._secondaryRawImage = image
|
||||
|
||||
def setMasterSlcImage(self, image):
|
||||
self._masterSlcImage = image
|
||||
def setReferenceSlcImage(self, image):
|
||||
self._referenceSlcImage = image
|
||||
|
||||
def setSlaveSlcImage(self, image):
|
||||
self._slaveSlcImage = image
|
||||
def setSecondarySlcImage(self, image):
|
||||
self._secondarySlcImage = image
|
||||
|
||||
def setSimAmpImage(self, image):
|
||||
self._simAmpImage = image
|
||||
|
@ -1162,11 +1162,11 @@ class InsarProc(Component, FrameMixin):
|
|||
def setGeocodeList(self,prd):
|
||||
self._geocode_list = prd
|
||||
|
||||
def setRawMasterIQImage(self,im):
|
||||
self._rawMasterIQImage = im
|
||||
def setRawReferenceIQImage(self,im):
|
||||
self._rawReferenceIQImage = im
|
||||
|
||||
def setRawSlaveIQImage(self,im):
|
||||
self._rawSlaveIQImage = im
|
||||
def setRawSecondaryIQImage(self,im):
|
||||
self._rawSecondaryIQImage = im
|
||||
|
||||
@azResFactor.setter
|
||||
def azResFactor(self,val):
|
||||
|
@ -1182,7 +1182,7 @@ class InsarProc(Component, FrameMixin):
|
|||
self._unmaskedPrefix = val
|
||||
## folowing are tbd to split formSLC.
|
||||
def _hasher(self, index, Attr):
|
||||
return getattr(self, MASTER_SLAVE[index] + Attr)
|
||||
return getattr(self, REFERENCE_SECONDARY[index] + Attr)
|
||||
|
||||
def select_frame(self, index): return self._hasher(index, 'Frame')
|
||||
def select_orbit(self, index): return self._hasher(index, 'Orbit')
|
||||
|
@ -1205,19 +1205,19 @@ class InsarProc(Component, FrameMixin):
|
|||
## This overides the _FrameMixin.frame
|
||||
@property
|
||||
def frame(self):
|
||||
return self.masterFrame
|
||||
return self.referenceFrame
|
||||
|
||||
# Some line violate PEP008 in order to facilitate using "grep"
|
||||
# for development
|
||||
refinedOffsetField = property(getRefinedOffsetField, setRefinedOffsetField)
|
||||
offsetField = property(getOffsetField, setOffsetField)
|
||||
demCropFilename = property(getDemCropFilename, setDemCropFilename)
|
||||
masterFrame = property(getMasterFrame, setMasterFrame)
|
||||
slaveFrame = property(getSlaveFrame, setSlaveFrame)
|
||||
masterOrbit = property(getMasterOrbit, setMasterOrbit)
|
||||
slaveOrbit = property(getSlaveOrbit, setSlaveOrbit)
|
||||
masterDoppler = property(getMasterDoppler, setMasterDoppler)
|
||||
slaveDoppler = property(getSlaveDoppler, setSlaveDoppler)
|
||||
referenceFrame = property(getReferenceFrame, setReferenceFrame)
|
||||
secondaryFrame = property(getSecondaryFrame, setSecondaryFrame)
|
||||
referenceOrbit = property(getReferenceOrbit, setReferenceOrbit)
|
||||
secondaryOrbit = property(getSecondaryOrbit, setSecondaryOrbit)
|
||||
referenceDoppler = property(getReferenceDoppler, setReferenceDoppler)
|
||||
secondaryDoppler = property(getSecondaryDoppler, setSecondaryDoppler)
|
||||
peg = property(getPeg, setPeg)
|
||||
pegH1 = property(getFirstAverageHeight, setFirstAverageHeight)
|
||||
pegH2 = property(getSecondAverageHeight, setSecondAverageHeight)
|
||||
|
@ -1225,10 +1225,10 @@ class InsarProc(Component, FrameMixin):
|
|||
fdH2 = property(getSecondFdHeight, setSecondFdHeight)
|
||||
pegV1 = property(getFirstProcVelocity, setFirstProcVelocity)
|
||||
pegV2 = property(getSecondProcVelocity, setSecondProcVelocity)
|
||||
masterRawImage = property(getMasterRawImage, setMasterRawImage)
|
||||
slaveRawImage = property(getSlaveRawImage, setSlaveRawImage)
|
||||
masterSlcImage = property(getMasterSlcImage, setMasterSlcImage)
|
||||
slaveSlcImage = property(getSlaveSlcImage, setSlaveSlcImage)
|
||||
referenceRawImage = property(getReferenceRawImage, setReferenceRawImage)
|
||||
secondaryRawImage = property(getSecondaryRawImage, setSecondaryRawImage)
|
||||
referenceSlcImage = property(getReferenceSlcImage, setReferenceSlcImage)
|
||||
secondarySlcImage = property(getSecondarySlcImage, setSecondarySlcImage)
|
||||
simAmpImage = property(getSimAmpImage, setSimAmpImage)
|
||||
demImage = property(getDemImage, setDemImage)
|
||||
demInitFile = property(getDemInitFile, setDemInitFile)
|
||||
|
@ -1294,16 +1294,16 @@ class InsarProc(Component, FrameMixin):
|
|||
mocompBaseline = property(getMocompBaseline, setMocompBaseline)
|
||||
topocorrect = property(getTopocorrect, setTopocorrect)
|
||||
topo = property(getTopo, setTopo)
|
||||
masterSquint = property(getMasterSquint, setMasterSquint)
|
||||
slaveSquint = property(getSlaveSquint, setSlaveSquint)
|
||||
referenceSquint = property(getReferenceSquint, setReferenceSquint)
|
||||
secondarySquint = property(getSecondarySquint, setSecondarySquint)
|
||||
geocode_list = property(getGeocodeList, setGeocodeList)
|
||||
rawMasterIQImage = property(getRawMasterIQImage, setRawMasterIQImage)
|
||||
rawSlaveIQImage = property(getRawSlaveIQImage, setRawSlaveIQImage)
|
||||
rawReferenceIQImage = property(getRawReferenceIQImage, setRawReferenceIQImage)
|
||||
rawSecondaryIQImage = property(getRawSecondaryIQImage, setRawSecondaryIQImage)
|
||||
|
||||
pass
|
||||
|
||||
|
||||
## Why this: the code bloat with master this and slave that indicates the
|
||||
## Why this: the code bloat with reference this and secondary that indicates the
|
||||
## design princple does not use composition, this is an attempt to
|
||||
## fix that
|
||||
class RadarSwath(object):
|
||||
|
|
|
@ -62,4 +62,4 @@ envInsarProc.Install(install,listFiles)
|
|||
envInsarProc.Alias('install',install)
|
||||
helpList,installHelp = envInsarProc['HELP_BUILDER'](envInsarProc,'__init__.py',install)
|
||||
envInsarProc.Install(installHelp,helpList)
|
||||
envInsarProc.Alias('install',installHelp)
|
||||
envInsarProc.Alias('install',installHelp)
|
||||
|
|
|
@ -117,36 +117,36 @@ LOOK_SIDE = Component.Parameter('_lookSide',
|
|||
private=True,
|
||||
doc='')
|
||||
|
||||
MASTER_FRAME = Component.Facility('_masterFrame',
|
||||
public_name='masterFrame',
|
||||
REFERENCE_FRAME = Component.Facility('_referenceFrame',
|
||||
public_name='referenceFrame',
|
||||
factory='default',
|
||||
mandatory=True,
|
||||
private=True,
|
||||
doc='Master frame')
|
||||
doc='Reference frame')
|
||||
|
||||
|
||||
SLAVE_FRAME = Component.Facility('_slaveFrame',
|
||||
public_name='slaveFrame',
|
||||
SECONDARY_FRAME = Component.Facility('_secondaryFrame',
|
||||
public_name='secondaryFrame',
|
||||
factory='default',
|
||||
mandatory=True,
|
||||
private=True,
|
||||
doc='Slave frame')
|
||||
doc='Secondary frame')
|
||||
|
||||
|
||||
MASTER_ORBIT = Component.Facility('_masterOrbit',
|
||||
public_name='masterOrbit',
|
||||
REFERENCE_ORBIT = Component.Facility('_referenceOrbit',
|
||||
public_name='referenceOrbit',
|
||||
factory='default',
|
||||
mandatory=True,
|
||||
private=True,
|
||||
doc='Master orbit')
|
||||
doc='Reference orbit')
|
||||
|
||||
|
||||
SLAVE_ORBIT = Component.Facility('_slaveOrbit',
|
||||
public_name='slaveOrbit',
|
||||
SECONDARY_ORBIT = Component.Facility('_secondaryOrbit',
|
||||
public_name='secondaryOrbit',
|
||||
factory='default',
|
||||
mandatory=True,
|
||||
private=True,
|
||||
doc='Slave orbit')
|
||||
doc='Secondary orbit')
|
||||
|
||||
#ask
|
||||
DOPPLER_CENTROID = Component.Facility('_dopplerCentroid',
|
||||
|
@ -156,47 +156,47 @@ DOPPLER_CENTROID = Component.Facility('_dopplerCentroid',
|
|||
private=True,
|
||||
doc='')
|
||||
|
||||
MASTER_DOPPLER = Component.Facility('_masterDoppler',
|
||||
public_name='masterDoppler',
|
||||
REFERENCE_DOPPLER = Component.Facility('_referenceDoppler',
|
||||
public_name='referenceDoppler',
|
||||
factory='default',
|
||||
mandatory=True,
|
||||
private=True,
|
||||
doc='')
|
||||
|
||||
|
||||
SLAVE_DOPPLER = Component.Facility('_slaveDoppler',
|
||||
public_name='slaveDoppler',
|
||||
SECONDARY_DOPPLER = Component.Facility('_secondaryDoppler',
|
||||
public_name='secondaryDoppler',
|
||||
factory='default',
|
||||
mandatory=True,
|
||||
private=True,
|
||||
doc='')
|
||||
|
||||
MASTER_RAW_IMAGE = Component.Facility('_masterRawImage',
|
||||
public_name='masterRawImage',
|
||||
REFERENCE_RAW_IMAGE = Component.Facility('_referenceRawImage',
|
||||
public_name='referenceRawImage',
|
||||
factory='default',
|
||||
mandatory=True,
|
||||
private=True,
|
||||
doc='')
|
||||
|
||||
|
||||
SLAVE_RAW_IMAGE = Component.Facility('_slaveRawImage',
|
||||
public_name='slaveRawImage',
|
||||
SECONDARY_RAW_IMAGE = Component.Facility('_secondaryRawImage',
|
||||
public_name='secondaryRawImage',
|
||||
factory='default',
|
||||
mandatory=True,
|
||||
private=True,
|
||||
doc='')
|
||||
|
||||
|
||||
MASTER_SLC_IMAGE = Component.Facility('_masterSlcImage',
|
||||
public_name='masterSlcImage',
|
||||
REFERENCE_SLC_IMAGE = Component.Facility('_referenceSlcImage',
|
||||
public_name='referenceSlcImage',
|
||||
factory='default',
|
||||
mandatory=True,
|
||||
private=True,
|
||||
doc='')
|
||||
|
||||
|
||||
SLAVE_SLC_IMAGE = Component.Facility('_slaveSlcImage',
|
||||
public_name='slaveSlcImage',
|
||||
SECONDARY_SLC_IMAGE = Component.Facility('_secondarySlcImage',
|
||||
public_name='secondarySlcImage',
|
||||
factory='default',
|
||||
mandatory=True,
|
||||
private=True,
|
||||
|
@ -334,16 +334,16 @@ TOPO = Component.Facility('_topo',
|
|||
private=True,
|
||||
doc='')
|
||||
|
||||
RAW_MASTER_IQ_IMAGE = Component.Facility('_rawMasterIQImage',
|
||||
public_name='rawMasterIQImage',
|
||||
RAW_REFERENCE_IQ_IMAGE = Component.Facility('_rawReferenceIQImage',
|
||||
public_name='rawReferenceIQImage',
|
||||
factory='default',
|
||||
mandatory=True,
|
||||
private=True,
|
||||
doc='')
|
||||
|
||||
|
||||
RAW_SLAVE_IQ_IMAGE = Component.Facility('_rawSlaveIQImage',
|
||||
public_name='rawSlaveIQImage',
|
||||
RAW_SECONDARY_IQ_IMAGE = Component.Facility('_rawSecondaryIQImage',
|
||||
public_name='rawSecondaryIQImage',
|
||||
factory='default',
|
||||
mandatory=True,
|
||||
private=True,
|
||||
|
@ -403,17 +403,17 @@ parameter_list = (
|
|||
NUMBER_RESAMP_LINES
|
||||
)
|
||||
facility_list = (
|
||||
MASTER_FRAME,
|
||||
SLAVE_FRAME,
|
||||
MASTER_ORBIT,
|
||||
SLAVE_ORBIT,
|
||||
MASTER_DOPPLER,
|
||||
SLAVE_DOPPLER,
|
||||
REFERENCE_FRAME,
|
||||
SECONDARY_FRAME,
|
||||
REFERENCE_ORBIT,
|
||||
SECONDARY_ORBIT,
|
||||
REFERENCE_DOPPLER,
|
||||
SECONDARY_DOPPLER,
|
||||
DOPPLER_CENTROID,
|
||||
MASTER_RAW_IMAGE,
|
||||
SLAVE_RAW_IMAGE,
|
||||
MASTER_SLC_IMAGE,
|
||||
SLAVE_SLC_IMAGE,
|
||||
REFERENCE_RAW_IMAGE,
|
||||
SECONDARY_RAW_IMAGE,
|
||||
REFERENCE_SLC_IMAGE,
|
||||
SECONDARY_SLC_IMAGE,
|
||||
OFFSET_AZIMUTH_IMAGE,
|
||||
OFFSET_RANGE_IMAGE,
|
||||
RESAMP_AMP_IMAGE,
|
||||
|
@ -430,8 +430,8 @@ facility_list = (
|
|||
MOCOMP_BASELINE,
|
||||
TOPOCORRECT,
|
||||
TOPO,
|
||||
RAW_MASTER_IQ_IMAGE,
|
||||
RAW_SLAVE_IQ_IMAGE,
|
||||
RAW_REFERENCE_IQ_IMAGE,
|
||||
RAW_SECONDARY_IQ_IMAGE,
|
||||
TOPOCORRECT_FLAT_IMAGE,
|
||||
OFFSET_FIELD,
|
||||
REFINED_OFFSET_FIELD,
|
||||
|
|
|
@ -43,4 +43,4 @@ def getFactoriesInfo():
|
|||
|
||||
def createInsarProc(name=None, procDoc= None):
|
||||
from .InsarProc import InsarProc
|
||||
return InsarProc(name = name,procDoc = procDoc)
|
||||
return InsarProc(name = name,procDoc = procDoc)
|
||||
|
|
|
@ -31,16 +31,16 @@ import isceobj.Catalog
|
|||
import logging
|
||||
logger = logging.getLogger('isce.insar.extractInfo')
|
||||
|
||||
def extractInfo(self, master, slave):
|
||||
def extractInfo(self, reference, secondary):
|
||||
from contrib.frameUtils.FrameInfoExtractor import FrameInfoExtractor
|
||||
FIE = FrameInfoExtractor()
|
||||
masterInfo = FIE.extractInfoFromFrame(master)
|
||||
slaveInfo = FIE.extractInfoFromFrame(slave)
|
||||
masterInfo.sensingStart = [masterInfo.sensingStart, slaveInfo.sensingStart]
|
||||
masterInfo.sensingStop = [masterInfo.sensingStop, slaveInfo.sensingStop]
|
||||
referenceInfo = FIE.extractInfoFromFrame(reference)
|
||||
secondaryInfo = FIE.extractInfoFromFrame(secondary)
|
||||
referenceInfo.sensingStart = [referenceInfo.sensingStart, secondaryInfo.sensingStart]
|
||||
referenceInfo.sensingStop = [referenceInfo.sensingStop, secondaryInfo.sensingStop]
|
||||
# for stitched frames do not make sense anymore
|
||||
mbb = masterInfo.getBBox()
|
||||
sbb = slaveInfo.getBBox()
|
||||
mbb = referenceInfo.getBBox()
|
||||
sbb = secondaryInfo.getBBox()
|
||||
latEarlyNear = mbb[0][0]
|
||||
latLateNear = mbb[2][0]
|
||||
|
||||
|
@ -62,7 +62,7 @@ def extractInfo(self, master, slave):
|
|||
ret.append([min(mbb[2][0], sbb[2][0]), max(mbb[2][1], sbb[2][1])])
|
||||
ret.append([min(mbb[3][0], sbb[3][0]), min(mbb[3][1], sbb[3][1])])
|
||||
|
||||
masterInfo.bbox = ret
|
||||
return masterInfo
|
||||
referenceInfo.bbox = ret
|
||||
return referenceInfo
|
||||
# the track should be the same for both
|
||||
|
||||
|
|
|
@ -52,14 +52,14 @@ def runCorrect(self):
|
|||
posIndx = 1
|
||||
mocompPosition1 = objFormSlc1.mocompPosition
|
||||
|
||||
planet = self.insar.masterFrame.instrument.platform.planet
|
||||
prf1 = self.insar.masterFrame.instrument.PRF
|
||||
planet = self.insar.referenceFrame.instrument.platform.planet
|
||||
prf1 = self.insar.referenceFrame.instrument.PRF
|
||||
objCorrect = stdproc.createCorrect()
|
||||
objCorrect.wireInputPort(name='peg', object=self.insar.peg)
|
||||
objCorrect.wireInputPort(name='frame', object=self.insar.masterFrame)
|
||||
objCorrect.wireInputPort(name='frame', object=self.insar.referenceFrame)
|
||||
objCorrect.wireInputPort(name='planet', object=planet)
|
||||
objCorrect.wireInputPort(name='interferogram', object=intImage)
|
||||
objCorrect.wireInputPort(name='masterslc', object=self.insar.formSLC1) #Piyush
|
||||
objCorrect.wireInputPort(name='referenceslc', object=self.insar.formSLC1) #Piyush
|
||||
# Average velocity and height measurements
|
||||
v = self.insar.procVelocity
|
||||
h = self.insar.averageHeight
|
||||
|
|
|
@ -36,11 +36,11 @@ logger = logging.getLogger('isce.insar.runEstimateHeights')
|
|||
def runEstimateHeights(self):
|
||||
from isceobj.Catalog import recordInputsAndOutputs
|
||||
chv = []
|
||||
for frame, orbit, tag in zip((self._insar.getMasterFrame(),
|
||||
self._insar.getSlaveFrame()),
|
||||
(self.insar.masterOrbit,
|
||||
self.insar.slaveOrbit),
|
||||
('master', 'slave')):
|
||||
for frame, orbit, tag in zip((self._insar.getReferenceFrame(),
|
||||
self._insar.getSecondaryFrame()),
|
||||
(self.insar.referenceOrbit,
|
||||
self.insar.secondaryOrbit),
|
||||
('reference', 'secondary')):
|
||||
chv.append(stdproc.createCalculateFdHeights())
|
||||
chv[-1](frame=frame, orbit=orbit, planet=self.planet)
|
||||
|
||||
|
|
|
@ -37,11 +37,11 @@ logger = logging.getLogger('isce.isceProc.runEstimateHeights')
|
|||
def runEstimateHeights(self):
|
||||
from isceobj.Catalog import recordInputsAndOutputs
|
||||
chv = []
|
||||
for frame, orbit, tag in zip((self._insar.getMasterFrame(),
|
||||
self._insar.getSlaveFrame()),
|
||||
(self.insar.masterOrbit,
|
||||
self.insar.slaveOrbit),
|
||||
('master', 'slave')):
|
||||
for frame, orbit, tag in zip((self._insar.getReferenceFrame(),
|
||||
self._insar.getSecondaryFrame()),
|
||||
(self.insar.referenceOrbit,
|
||||
self.insar.secondaryOrbit),
|
||||
('reference', 'secondary')):
|
||||
|
||||
(time, position, velocity, offset) = orbit._unpackOrbit()
|
||||
|
||||
|
|
|
@ -32,10 +32,10 @@ import stdproc
|
|||
import sys
|
||||
logger = logging.getLogger('isce.insar.runFdMocomp')
|
||||
|
||||
## Mapping from use_dop kewword to f(masterDop, slaveDrop)
|
||||
## Mapping from use_dop kewword to f(referenceDop, secondaryDrop)
|
||||
USE_DOP = {'AVERAGE' : lambda x, y: (x+y)/2.,
|
||||
'MASTER': lambda x, y: x,
|
||||
'SLAVE': lambda x, y: y}
|
||||
'REFERENCE': lambda x, y: x,
|
||||
'SECONDARY': lambda x, y: y}
|
||||
|
||||
def runFdMocomp(self, use_dop="average"):
|
||||
"""
|
||||
|
@ -45,27 +45,27 @@ def runFdMocomp(self, use_dop="average"):
|
|||
H2 = self.insar.fdH2
|
||||
peg = self.insar.peg
|
||||
lookSide = self.insar._lookSide
|
||||
masterOrbit = self.insar.masterOrbit
|
||||
slaveOrbit = self.insar.slaveOrbit
|
||||
referenceOrbit = self.insar.referenceOrbit
|
||||
secondaryOrbit = self.insar.secondaryOrbit
|
||||
rangeSamplingRate = (
|
||||
self.insar.getMasterFrame().instrument.rangeSamplingRate)
|
||||
self.insar.getReferenceFrame().instrument.rangeSamplingRate)
|
||||
rangePulseDuration = (
|
||||
self.insar.getSlaveFrame().instrument.pulseLength)
|
||||
self.insar.getSecondaryFrame().instrument.pulseLength)
|
||||
chirpExtension = self.insar.chirpExtension
|
||||
chirpSize = int(rangeSamplingRate * rangePulseDuration)
|
||||
|
||||
number_range_bins = self.insar.numberRangeBins
|
||||
|
||||
masterCentroid = self.insar.masterDoppler.fractionalCentroid
|
||||
slaveCentroid = self.insar.slaveDoppler.fractionalCentroid
|
||||
referenceCentroid = self.insar.referenceDoppler.fractionalCentroid
|
||||
secondaryCentroid = self.insar.secondaryDoppler.fractionalCentroid
|
||||
logger.info("Correcting Doppler centroid for motion compensation")
|
||||
|
||||
|
||||
result = []
|
||||
for centroid, frame, orbit, H in zip((masterCentroid, slaveCentroid),
|
||||
(self.insar.masterFrame,
|
||||
self.insar.slaveFrame),
|
||||
(masterOrbit, slaveOrbit),
|
||||
for centroid, frame, orbit, H in zip((referenceCentroid, secondaryCentroid),
|
||||
(self.insar.referenceFrame,
|
||||
self.insar.secondaryFrame),
|
||||
(referenceOrbit, secondaryOrbit),
|
||||
(H1, H2)
|
||||
):
|
||||
fdmocomp = stdproc.createFdMocomp()
|
||||
|
@ -80,13 +80,13 @@ def runFdMocomp(self, use_dop="average"):
|
|||
result.append( fdmocomp.dopplerCentroid )
|
||||
pass
|
||||
|
||||
masterDopplerCorrection, slaveDopplerCorrection = result
|
||||
referenceDopplerCorrection, secondaryDopplerCorrection = result
|
||||
|
||||
# print masterDopplerCorrection, slaveDopplerCorrection
|
||||
# print referenceDopplerCorrection, secondaryDopplerCorrection
|
||||
# use_dop = "F"
|
||||
try:
|
||||
fd = USE_DOP[use_dop.upper()](masterDopplerCorrection,
|
||||
slaveDopplerCorrection)
|
||||
fd = USE_DOP[use_dop.upper()](referenceDopplerCorrection,
|
||||
secondaryDopplerCorrection)
|
||||
except KeyError:
|
||||
print("Unrecognized use_dop option. use_dop = ",use_dop)
|
||||
print("Not found in dictionary:",USE_DOP.keys())
|
||||
|
|
|
@ -35,8 +35,8 @@ from isceobj.Util.decorators import use_api
|
|||
|
||||
logger = logging.getLogger('isce.insar.runFormSLC')
|
||||
|
||||
#Run FormSLC for master
|
||||
def master(self, deltaf=None):
|
||||
#Run FormSLC for reference
|
||||
def reference(self, deltaf=None):
|
||||
from isceobj.Catalog import recordInputsAndOutputs
|
||||
from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
|
||||
|
||||
|
@ -45,9 +45,9 @@ def master(self, deltaf=None):
|
|||
|
||||
v,h = self.insar.vh()
|
||||
|
||||
objRaw = self.insar.rawMasterIQImage.clone()
|
||||
objRaw = self.insar.rawReferenceIQImage.clone()
|
||||
objRaw.accessMode = 'read'
|
||||
objFormSlc = stdproc.createFormSLC(name='insarapp_formslc_master')
|
||||
objFormSlc = stdproc.createFormSLC(name='insarapp_formslc_reference')
|
||||
objFormSlc.setBodyFixedVelocity(v)
|
||||
objFormSlc.setSpacecraftHeight(h)
|
||||
objFormSlc.setAzimuthPatchSize(self.patchSize)
|
||||
|
@ -55,18 +55,18 @@ def master(self, deltaf=None):
|
|||
objFormSlc.setNumberPatches(self.numPatches)
|
||||
objFormSlc.setLookSide(self.insar._lookSide)
|
||||
objFormSlc.setNumberAzimuthLooks(self.insar.numberAzimuthLooks)
|
||||
logger.info("Focusing Master image")
|
||||
logger.info("Focusing Reference image")
|
||||
objFormSlc.stdWriter = self.stdWriter
|
||||
|
||||
if (deltaf is not None) and (objFormSlc.azimuthResolution is None):
|
||||
ins = self.insar.masterFrame.getInstrument()
|
||||
ins = self.insar.referenceFrame.getInstrument()
|
||||
prf = ins.getPulseRepetitionFrequency()
|
||||
res = ins.getPlatform().getAntennaLength() / 2.0
|
||||
azbw = min(v/res, prf)
|
||||
res = v/azbw
|
||||
|
||||
factor = 1.0 - (abs(deltaf)/azbw)
|
||||
logger.info('MASTER AZIMUTH BANDWIDTH FACTOR = %f'%(factor))
|
||||
logger.info('REFERENCE AZIMUTH BANDWIDTH FACTOR = %f'%(factor))
|
||||
azres = res / factor
|
||||
#jng This is a temporary solution seems it looks that same banding problem
|
||||
#can be resolved by doubling the azres. The default azResFactor is still one.
|
||||
|
@ -74,9 +74,9 @@ def master(self, deltaf=None):
|
|||
|
||||
####newInputs
|
||||
objSlc = objFormSlc(rawImage=objRaw,
|
||||
orbit=self.insar.masterOrbit,
|
||||
frame=self.insar.masterFrame,
|
||||
planet=self.insar.masterFrame.instrument.platform.planet,
|
||||
orbit=self.insar.referenceOrbit,
|
||||
frame=self.insar.referenceFrame,
|
||||
planet=self.insar.referenceFrame.instrument.platform.planet,
|
||||
doppler=self.insar.dopplerCentroid,
|
||||
peg=self.insar.peg)
|
||||
|
||||
|
@ -86,23 +86,23 @@ def master(self, deltaf=None):
|
|||
objSlc.finalizeImage()
|
||||
objRaw.finalizeImage()
|
||||
recordInputsAndOutputs(self.insar.procDoc, objFormSlc,
|
||||
"runFormSLC.master", logger, "runFormSLC.master")
|
||||
"runFormSLC.reference", logger, "runFormSLC.reference")
|
||||
|
||||
logger.info('New Width = %d'%(imageSlc.getWidth()))
|
||||
self.insar.masterSlcImage = imageSlc
|
||||
self.insar.referenceSlcImage = imageSlc
|
||||
self.insar.formSLC1 = objFormSlc
|
||||
return objFormSlc.numberPatches
|
||||
|
||||
#Run FormSLC on slave
|
||||
def slave(self, deltaf=None):
|
||||
#Run FormSLC on secondary
|
||||
def secondary(self, deltaf=None):
|
||||
from isceobj.Catalog import recordInputsAndOutputs
|
||||
from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
|
||||
|
||||
v,h = self.insar.vh()
|
||||
|
||||
objRaw = self.insar.rawSlaveIQImage.clone()
|
||||
objRaw = self.insar.rawSecondaryIQImage.clone()
|
||||
objRaw.accessMode = 'read'
|
||||
objFormSlc = stdproc.createFormSLC(name='insarapp_formslc_slave')
|
||||
objFormSlc = stdproc.createFormSLC(name='insarapp_formslc_secondary')
|
||||
objFormSlc.setBodyFixedVelocity(v)
|
||||
objFormSlc.setSpacecraftHeight(h)
|
||||
objFormSlc.setAzimuthPatchSize(self.patchSize)
|
||||
|
@ -110,24 +110,24 @@ def slave(self, deltaf=None):
|
|||
objFormSlc.setNumberPatches(self.numPatches)
|
||||
objFormSlc.setNumberAzimuthLooks(self.insar.numberAzimuthLooks)
|
||||
objFormSlc.setLookSide(self.insar._lookSide)
|
||||
logger.info("Focusing Master image")
|
||||
logger.info("Focusing Reference image")
|
||||
objFormSlc.stdWriter = self.stdWriter
|
||||
|
||||
if (deltaf is not None) and (objFormSlc.azimuthResolution is None):
|
||||
ins = self.insar.slaveFrame.getInstrument()
|
||||
ins = self.insar.secondaryFrame.getInstrument()
|
||||
prf = ins.getPulseRepetitionFrequency()
|
||||
res = ins.getPlatform().getAntennaLength()/2.0
|
||||
azbw = min(v / res, prf)
|
||||
res = v / azbw
|
||||
factor = 1.0 - (abs(deltaf) / azbw)
|
||||
logger.info('SLAVE AZIMUTH BANDWIDTH FACTOR = %f'%(factor))
|
||||
logger.info('SECONDARY AZIMUTH BANDWIDTH FACTOR = %f'%(factor))
|
||||
azres = res/factor
|
||||
objFormSlc.setAzimuthResolution(azres)
|
||||
|
||||
objSlc = objFormSlc(rawImage=objRaw,
|
||||
orbit=self.insar.slaveOrbit,
|
||||
frame=self.insar.slaveFrame,
|
||||
planet=self.insar.slaveFrame.instrument.platform.planet,
|
||||
orbit=self.insar.secondaryOrbit,
|
||||
frame=self.insar.secondaryFrame,
|
||||
planet=self.insar.secondaryFrame.instrument.platform.planet,
|
||||
doppler=self.insar.dopplerCentroid,
|
||||
peg=self.insar.peg)
|
||||
|
||||
|
@ -137,22 +137,22 @@ def slave(self, deltaf=None):
|
|||
objSlc.finalizeImage()
|
||||
objRaw.finalizeImage()
|
||||
recordInputsAndOutputs(self.insar.procDoc, objFormSlc,
|
||||
"runFormSLC.slave", logger, "runFormSLC.slave")
|
||||
"runFormSLC.secondary", logger, "runFormSLC.secondary")
|
||||
|
||||
logger.info('New Width = %d'%(imageSlc.getWidth()))
|
||||
self.insar.slaveSlcImage = imageSlc
|
||||
self.insar.secondarySlcImage = imageSlc
|
||||
self.insar.formSLC2 = objFormSlc
|
||||
return objFormSlc.numberPatches
|
||||
|
||||
@use_api
|
||||
def runFormSLC(self):
|
||||
|
||||
mDoppler = self.insar.masterDoppler.getDopplerCoefficients(inHz=True)
|
||||
sDoppler = self.insar.slaveDoppler.getDopplerCoefficients(inHz=True)
|
||||
mDoppler = self.insar.referenceDoppler.getDopplerCoefficients(inHz=True)
|
||||
sDoppler = self.insar.secondaryDoppler.getDopplerCoefficients(inHz=True)
|
||||
deltaf = abs(mDoppler[0] - sDoppler[0])
|
||||
n_master = master(self, deltaf=deltaf)
|
||||
n_slave = slave(self, deltaf=deltaf)
|
||||
self.insar.setNumberPatches(min(n_master, n_slave))
|
||||
n_reference = reference(self, deltaf=deltaf)
|
||||
n_secondary = secondary(self, deltaf=deltaf)
|
||||
self.insar.setNumberPatches(min(n_reference, n_secondary))
|
||||
self.is_mocomp = int(
|
||||
(self.insar.formSLC1.azimuthPatchSize -
|
||||
self.insar.formSLC1.numberValidPulses)/2
|
||||
|
|
|
@ -49,7 +49,7 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
|
|||
|
||||
v = self.insar.procVelocity
|
||||
h = self.insar.averageHeight
|
||||
imageSlc1 = self.insar.masterRawImage
|
||||
imageSlc1 = self.insar.referenceRawImage
|
||||
imSlc1 = isceobj.createSlcImage()
|
||||
IU.copyAttributes(imageSlc1, imSlc1)
|
||||
imSlc1.setAccessMode('read')
|
||||
|
@ -61,11 +61,11 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
|
|||
formSlc1.wireInputPort(name='doppler',
|
||||
object = self.insar.dopplerCentroid)
|
||||
formSlc1.wireInputPort(name='peg', object=self.insar.peg)
|
||||
formSlc1.wireInputPort(name='frame', object=self.insar.masterFrame)
|
||||
formSlc1.wireInputPort(name='orbit', object=self.insar.masterOrbit)
|
||||
formSlc1.wireInputPort(name='frame', object=self.insar.referenceFrame)
|
||||
formSlc1.wireInputPort(name='orbit', object=self.insar.referenceOrbit)
|
||||
formSlc1.wireInputPort(name='slcInImage', object=imSlc1)
|
||||
formSlc1.wireInputPort(name='planet',
|
||||
object=self.insar.masterFrame.instrument.platform.planet)
|
||||
object=self.insar.referenceFrame.instrument.platform.planet)
|
||||
self._stdWriter.setFileTag("formslcTSX", "log")
|
||||
self._stdWriter.setFileTag("formslcTSX", "err")
|
||||
self._stdWriter.setFileTag("formslcTSX", "out")
|
||||
|
@ -73,10 +73,10 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
|
|||
formSlc1.setLookSide(self.insar._lookSide)
|
||||
|
||||
|
||||
# self.insar.setMasterSlcImage(formSlc1.formslc())
|
||||
self.insar.masterSlcImage = formSlc1()
|
||||
# self.insar.setReferenceSlcImage(formSlc1.formslc())
|
||||
self.insar.referenceSlcImage = formSlc1()
|
||||
|
||||
imageSlc2 = self.insar.slaveRawImage
|
||||
imageSlc2 = self.insar.secondaryRawImage
|
||||
imSlc2 = isceobj.createSlcImage()
|
||||
IU.copyAttributes(imageSlc2, imSlc2)
|
||||
imSlc2.setAccessMode('read')
|
||||
|
@ -88,19 +88,19 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
|
|||
formSlc2.wireInputPort(name='doppler',
|
||||
object=self.insar.dopplerCentroid)
|
||||
formSlc2.wireInputPort(name='peg', object=self.insar.peg)
|
||||
formSlc2.wireInputPort(name='frame', object=self.insar.slaveFrame)
|
||||
formSlc2.wireInputPort(name='orbit', object=self.insar.slaveOrbit)
|
||||
formSlc2.wireInputPort(name='frame', object=self.insar.secondaryFrame)
|
||||
formSlc2.wireInputPort(name='orbit', object=self.insar.secondaryOrbit)
|
||||
formSlc2.wireInputPort(name='slcInImage', object=imSlc2)
|
||||
formSlc2.wireInputPort(name='planet',
|
||||
object=self.insar.slaveFrame.instrument.platform.planet)
|
||||
object=self.insar.secondaryFrame.instrument.platform.planet)
|
||||
|
||||
self._stdWriter.setFileTag("formslcTSX", "log")
|
||||
self._stdWriter.setFileTag("formslcTSX", "err")
|
||||
self._stdWriter.setFileTag("formslcTSX", "out")
|
||||
formSlc2.setStdWriter(self._stdWriter)
|
||||
formSlc2.setLookSide(self.insar._lookSide)
|
||||
# self.insar.setSlaveSlcImage(formSlc2.formslc())
|
||||
self.insar.slaveSlcImage = formSlc2()
|
||||
# self.insar.setSecondarySlcImage(formSlc2.formslc())
|
||||
self.insar.secondarySlcImage = formSlc2()
|
||||
self.insar.setNumberPatches(
|
||||
imSlc1.getLength()/float(self.insar.numberValidPulses)
|
||||
)
|
||||
|
|
|
@ -50,7 +50,7 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
|
|||
|
||||
v = self.insar.getFirstProcVelocity()
|
||||
h = self.insar.averageHeight
|
||||
imageSlc1 = self.insar.masterRawImage
|
||||
imageSlc1 = self.insar.referenceRawImage
|
||||
imSlc1 = isceobj.createSlcImage()
|
||||
IU.copyAttributes(imageSlc1, imSlc1)
|
||||
imSlc1.setAccessMode('read')
|
||||
|
@ -62,18 +62,18 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
|
|||
formSlc1.wireInputPort(name='doppler',
|
||||
object = self.insar.dopplerCentroid)
|
||||
formSlc1.wireInputPort(name='peg', object=self.insar.peg)
|
||||
formSlc1.wireInputPort(name='frame', object=self.insar.masterFrame)
|
||||
formSlc1.wireInputPort(name='orbit', object=self.insar.masterOrbit)
|
||||
formSlc1.wireInputPort(name='frame', object=self.insar.referenceFrame)
|
||||
formSlc1.wireInputPort(name='orbit', object=self.insar.referenceOrbit)
|
||||
formSlc1.wireInputPort(name='rawImage', object=None)
|
||||
formSlc1.wireInputPort(name='planet',
|
||||
object=self.insar.masterFrame.instrument.platform.planet)
|
||||
object=self.insar.referenceFrame.instrument.platform.planet)
|
||||
for item in formSlc1.inputPorts:
|
||||
item()
|
||||
formSlc1.slcWidth = imSlc1.getWidth()
|
||||
formSlc1.startingRange = formSlc1.rangeFirstSample
|
||||
formSlc1.rangeChirpExtensionPoints = 0
|
||||
formSlc1.slcSensingStart = self.insar.masterFrame.getSensingStart()
|
||||
formSlc1.outOrbit = self.insar.masterOrbit
|
||||
formSlc1.slcSensingStart = self.insar.referenceFrame.getSensingStart()
|
||||
formSlc1.outOrbit = self.insar.referenceOrbit
|
||||
|
||||
self._stdWriter.setFileTag("formslcISCE", "log")
|
||||
self._stdWriter.setFileTag("formslcISCE", "err")
|
||||
|
@ -81,11 +81,11 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
|
|||
formSlc1.setStdWriter(self._stdWriter)
|
||||
formSlc1.setLookSide(self.insar._lookSide)
|
||||
|
||||
# self.insar.setMasterSlcImage(formSlc1.formslc())
|
||||
# self.insar.masterSlcImage = formSlc1()
|
||||
# self.insar.setReferenceSlcImage(formSlc1.formslc())
|
||||
# self.insar.referenceSlcImage = formSlc1()
|
||||
self.insar.formSLC1 = formSlc1
|
||||
self.insar.masterSlcImage = imSlc1
|
||||
time, position, velocity, relTo = self.insar.masterOrbit._unpackOrbit()
|
||||
self.insar.referenceSlcImage = imSlc1
|
||||
time, position, velocity, relTo = self.insar.referenceOrbit._unpackOrbit()
|
||||
mocomp_array = [[],[]]
|
||||
for (t, p) in zip(time, position):
|
||||
mocomp_array[0].append(t-time[0])
|
||||
|
@ -97,7 +97,7 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
|
|||
formSlc1.dim2_mocompPosition = len(time)
|
||||
formSlc1.dim1_mocompIndx = len(time)
|
||||
|
||||
imageSlc2 = self.insar.slaveRawImage
|
||||
imageSlc2 = self.insar.secondaryRawImage
|
||||
imSlc2 = isceobj.createSlcImage()
|
||||
IU.copyAttributes(imageSlc2, imSlc2)
|
||||
imSlc2.setAccessMode('read')
|
||||
|
@ -109,28 +109,28 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
|
|||
formSlc2.wireInputPort(name='doppler',
|
||||
object=self.insar.dopplerCentroid)
|
||||
formSlc2.wireInputPort(name='peg', object=self.insar.peg)
|
||||
formSlc2.wireInputPort(name='frame', object=self.insar.slaveFrame)
|
||||
formSlc2.wireInputPort(name='orbit', object=self.insar.slaveOrbit)
|
||||
formSlc2.wireInputPort(name='frame', object=self.insar.secondaryFrame)
|
||||
formSlc2.wireInputPort(name='orbit', object=self.insar.secondaryOrbit)
|
||||
formSlc2.wireInputPort(name='rawImage', object=None)
|
||||
formSlc2.wireInputPort(name='planet',
|
||||
object=self.insar.slaveFrame.instrument.platform.planet)
|
||||
object=self.insar.secondaryFrame.instrument.platform.planet)
|
||||
for item in formSlc2.inputPorts:
|
||||
item()
|
||||
formSlc2.slcWidth = imSlc2.getWidth()
|
||||
formSlc2.startingRange = formSlc2.rangeFirstSample
|
||||
formSlc2.rangeChirpExtensionPoints = 0
|
||||
formSlc2.slcSensingStart = self.insar.slaveFrame.getSensingStart()
|
||||
formSlc2.outOrbit = self.insar.slaveOrbit
|
||||
formSlc2.slcSensingStart = self.insar.secondaryFrame.getSensingStart()
|
||||
formSlc2.outOrbit = self.insar.secondaryOrbit
|
||||
|
||||
self._stdWriter.setFileTag("formslcISCE", "log")
|
||||
self._stdWriter.setFileTag("formslcISCE", "err")
|
||||
self._stdWriter.setFileTag("formslcISCE", "out")
|
||||
formSlc2.setStdWriter(self._stdWriter)
|
||||
formSlc2.setLookSide(self.insar._lookSide)
|
||||
# self.insar.setSlaveSlcImage(formSlc2.formslc())
|
||||
# self.insar.setSecondarySlcImage(formSlc2.formslc())
|
||||
self.insar.formSLC2 = formSlc2
|
||||
self.insar.slaveSlcImage = imSlc2
|
||||
time, position, velocity, relTo = self.insar.slaveOrbit._unpackOrbit()
|
||||
self.insar.secondarySlcImage = imSlc2
|
||||
time, position, velocity, relTo = self.insar.secondaryOrbit._unpackOrbit()
|
||||
mocomp_array = [[],[]]
|
||||
for (t, p) in zip(time, position):
|
||||
mocomp_array[0].append(t-time[0])
|
||||
|
@ -148,9 +148,9 @@ def runFormSLC(self, patchSize=None, goodLines=None, numPatches=None):
|
|||
imSlc1.finalizeImage()
|
||||
imSlc2.finalizeImage()
|
||||
recordInputsAndOutputs(self.insar.procDoc, formSlc1,
|
||||
"runFormSLC.master", logger, "runFormSLC.master")
|
||||
"runFormSLC.reference", logger, "runFormSLC.reference")
|
||||
recordInputsAndOutputs(self.insar.procDoc, formSlc2,
|
||||
"runFormSLC.slave", logger, "runFormSLC.slave")
|
||||
"runFormSLC.secondary", logger, "runFormSLC.secondary")
|
||||
|
||||
self.insar.setFormSLC1(formSlc1)
|
||||
self.insar.setFormSLC2(formSlc2)
|
||||
|
|
|
@ -60,7 +60,7 @@ def runGeocode(self, prodlist, unwrapflag, bbox):
|
|||
stdWriter = create_writer("log", "", True, filename="geo.log")
|
||||
|
||||
v,h = insar.vh()
|
||||
planet = insar.masterFrame._instrument._platform._planet
|
||||
planet = insar.referenceFrame._instrument._platform._planet
|
||||
|
||||
|
||||
if bbox is None:
|
||||
|
@ -125,9 +125,9 @@ def runGeocode(self, prodlist, unwrapflag, bbox):
|
|||
#demImage = isceobj.createDemImage()
|
||||
#IU.copyAttributes(insar.demImage, demImage)
|
||||
demImage = insar.demImage.clone()
|
||||
objGeo(peg=insar.peg, frame=insar.masterFrame,
|
||||
objGeo(peg=insar.peg, frame=insar.referenceFrame,
|
||||
planet=planet, dem=demImage, tobegeocoded=inImage,
|
||||
geoPosting=None, masterslc=insar.formSLC1)
|
||||
geoPosting=None, referenceslc=insar.formSLC1)
|
||||
|
||||
|
||||
recordInputsAndOutputs(self._insar.procDoc, objGeo, "runGeocode",
|
||||
|
|
|
@ -81,4 +81,4 @@ def runMaskImages(self):
|
|||
wrapImage.filename = newWrapName
|
||||
wrapImage.dump(newWrapName+'.xml')
|
||||
ampImage.filename = newAmpName
|
||||
ampImage.dump(newAmpName+'.xml')
|
||||
ampImage.dump(newAmpName+'.xml')
|
||||
|
|
|
@ -39,7 +39,7 @@ posIndx = 1
|
|||
|
||||
def runMocompbaseline(self):
|
||||
logger.info("Calculating Baseline")
|
||||
ellipsoid = self._insar.getMasterFrame().getInstrument().getPlatform().getPlanet().get_elp()
|
||||
ellipsoid = self._insar.getReferenceFrame().getInstrument().getPlatform().getPlanet().get_elp()
|
||||
# schPositions computed in orbit2sch
|
||||
# objFormSlc's created during formSlc
|
||||
|
||||
|
@ -58,10 +58,10 @@ def runMocompbaseline(self):
|
|||
objMocompbaseline.setMocompPosition2(mocompPosition2[posIndx])
|
||||
objMocompbaseline.setMocompPositionIndex2(mocompIndex2)
|
||||
|
||||
objMocompbaseline.wireInputPort(name='masterOrbit',
|
||||
object=self.insar.masterOrbit)
|
||||
objMocompbaseline.wireInputPort(name='slaveOrbit',
|
||||
object=self.insar.slaveOrbit)
|
||||
objMocompbaseline.wireInputPort(name='referenceOrbit',
|
||||
object=self.insar.referenceOrbit)
|
||||
objMocompbaseline.wireInputPort(name='secondaryOrbit',
|
||||
object=self.insar.secondaryOrbit)
|
||||
objMocompbaseline.wireInputPort(name='ellipsoid', object=ellipsoid)
|
||||
objMocompbaseline.wireInputPort(name='peg', object=self.insar.peg)
|
||||
objMocompbaseline.setHeight(h)
|
||||
|
|
|
@ -41,15 +41,15 @@ def runOffsetprf(self):
|
|||
|
||||
logger.info("Calculate offset between slcs")
|
||||
|
||||
masterFrame = self._insar.getMasterFrame()
|
||||
slaveFrame = self._insar.getSlaveFrame()
|
||||
masterOrbit = self._insar.getMasterOrbit()
|
||||
slaveOrbit = self._insar.getSlaveOrbit()
|
||||
prf1 = masterFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
prf2 = slaveFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
referenceFrame = self._insar.getReferenceFrame()
|
||||
secondaryFrame = self._insar.getSecondaryFrame()
|
||||
referenceOrbit = self._insar.getReferenceOrbit()
|
||||
secondaryOrbit = self._insar.getSecondaryOrbit()
|
||||
prf1 = referenceFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
prf2 = secondaryFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
nearRange1 = self.insar.formSLC1.startingRange
|
||||
nearRange2 = self.insar.formSLC2.startingRange
|
||||
fs1 = masterFrame.getInstrument().getRangeSamplingRate()
|
||||
fs1 = referenceFrame.getInstrument().getRangeSamplingRate()
|
||||
|
||||
###There seems to be no other way of determining image length - Piyush
|
||||
patchSize = self._insar.getPatchSize()
|
||||
|
@ -59,10 +59,10 @@ def runOffsetprf(self):
|
|||
firstDown = self._insar.getFirstSampleDownPrf()
|
||||
numLocationAcross = self._insar.getNumberLocationAcrossPrf()
|
||||
numLocationDown = self._insar.getNumberLocationDownPrf()
|
||||
objSlc = self._insar.getMasterSlcImage()
|
||||
# widthSlc = max(self._insar.getMasterSlcImage().getWidth(),
|
||||
# self._insar.getSlaveSlcImage().getWidth())
|
||||
widthSlc = self._insar.getMasterSlcImage().getWidth()
|
||||
objSlc = self._insar.getReferenceSlcImage()
|
||||
# widthSlc = max(self._insar.getReferenceSlcImage().getWidth(),
|
||||
# self._insar.getSecondarySlcImage().getWidth())
|
||||
widthSlc = self._insar.getReferenceSlcImage().getWidth()
|
||||
|
||||
coarseRange = (nearRange1 - nearRange2) / (CN.SPEED_OF_LIGHT / (2 * fs1))
|
||||
coarseAcross = int(coarseRange + 0.5)
|
||||
|
@ -76,8 +76,8 @@ def runOffsetprf(self):
|
|||
coarseAcross = self.grossRg
|
||||
pass
|
||||
|
||||
time1, schPosition1, schVelocity1, offset1 = masterOrbit._unpackOrbit()
|
||||
time2, schPosition2, schVelocity2, offset2 = slaveOrbit._unpackOrbit()
|
||||
time1, schPosition1, schVelocity1, offset1 = referenceOrbit._unpackOrbit()
|
||||
time2, schPosition2, schVelocity2, offset2 = secondaryOrbit._unpackOrbit()
|
||||
s1 = schPosition1[0][0]
|
||||
s1_2 = schPosition1[1][0]
|
||||
s2 = schPosition2[0][0]
|
||||
|
@ -101,7 +101,7 @@ def runOffsetprf(self):
|
|||
coarseAcross = 0 + coarseAcross
|
||||
coarseDown = 0 + coarseDown
|
||||
|
||||
mSlcImage = self._insar.getMasterSlcImage()
|
||||
mSlcImage = self._insar.getReferenceSlcImage()
|
||||
mSlc = isceobj.createSlcImage()
|
||||
IU.copyAttributes(mSlcImage, mSlc)
|
||||
# scheme = 'BIL'
|
||||
|
@ -110,7 +110,7 @@ def runOffsetprf(self):
|
|||
mSlc.setAccessMode(accessMode)
|
||||
mSlc.createImage()
|
||||
|
||||
sSlcImage = self._insar.getSlaveSlcImage()
|
||||
sSlcImage = self._insar.getSecondarySlcImage()
|
||||
sSlc = isceobj.createSlcImage()
|
||||
IU.copyAttributes(sSlcImage, sSlc)
|
||||
# scheme = 'BIL'
|
||||
|
|
|
@ -41,16 +41,16 @@ def runOffsetprf(self):
|
|||
from isceobj.Catalog import recordInputs
|
||||
|
||||
logger.info("Calculate offset between slcs using ampcor")
|
||||
masterFrame = self._insar.getMasterFrame()
|
||||
slaveFrame = self._insar.getSlaveFrame()
|
||||
masterOrbit = self._insar.getMasterOrbit()
|
||||
slaveOrbit = self._insar.getSlaveOrbit()
|
||||
prf1 = masterFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
prf2 = slaveFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
referenceFrame = self._insar.getReferenceFrame()
|
||||
secondaryFrame = self._insar.getSecondaryFrame()
|
||||
referenceOrbit = self._insar.getReferenceOrbit()
|
||||
secondaryOrbit = self._insar.getSecondaryOrbit()
|
||||
prf1 = referenceFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
prf2 = secondaryFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
nearRange1 = self.insar.formSLC1.startingRange
|
||||
nearRange2 = self.insar.formSLC2.startingRange
|
||||
fs1 = masterFrame.getInstrument().getRangeSamplingRate()
|
||||
fs2 = slaveFrame.getInstrument().getRangeSamplingRate()
|
||||
fs1 = referenceFrame.getInstrument().getRangeSamplingRate()
|
||||
fs2 = secondaryFrame.getInstrument().getRangeSamplingRate()
|
||||
|
||||
###There seems to be no other way of determining image length - Piyush
|
||||
patchSize = self._insar.getPatchSize()
|
||||
|
@ -95,23 +95,23 @@ def runOffsetprf(self):
|
|||
coarseAcross = 0 + coarseAcross
|
||||
coarseDown = 0 + coarseDown
|
||||
|
||||
mSlcImage = self._insar.getMasterSlcImage()
|
||||
mSlcImage = self._insar.getReferenceSlcImage()
|
||||
mSlc = isceobj.createSlcImage()
|
||||
IU.copyAttributes(mSlcImage, mSlc)
|
||||
accessMode = 'read'
|
||||
mSlc.setAccessMode(accessMode)
|
||||
mSlc.createImage()
|
||||
masterWidth = mSlc.getWidth()
|
||||
masterLength = mSlc.getLength()
|
||||
referenceWidth = mSlc.getWidth()
|
||||
referenceLength = mSlc.getLength()
|
||||
|
||||
sSlcImage = self._insar.getSlaveSlcImage()
|
||||
sSlcImage = self._insar.getSecondarySlcImage()
|
||||
sSlc = isceobj.createSlcImage()
|
||||
IU.copyAttributes(sSlcImage, sSlc)
|
||||
accessMode = 'read'
|
||||
sSlc.setAccessMode(accessMode)
|
||||
sSlc.createImage()
|
||||
slaveWidth = sSlc.getWidth()
|
||||
slaveLength = sSlc.getLength()
|
||||
secondaryWidth = sSlc.getWidth()
|
||||
secondaryLength = sSlc.getLength()
|
||||
|
||||
objAmpcor = Ampcor(name='insarapp_slcs_ampcor')
|
||||
objAmpcor.configure()
|
||||
|
@ -134,13 +134,13 @@ def runOffsetprf(self):
|
|||
offAc = max(firstAc,-coarseAcross)+xMargin
|
||||
offDn = max(firstDown,-coarseDown)+yMargin
|
||||
|
||||
offAcmax = int(coarseAcross + ((fs2/fs1)-1)*masterWidth)
|
||||
offAcmax = int(coarseAcross + ((fs2/fs1)-1)*referenceWidth)
|
||||
logger.debug("Gross Max Across: %s" % (offAcmax))
|
||||
lastAc = int(min(masterWidth, slaveWidth- offAcmax) - xMargin)
|
||||
lastAc = int(min(referenceWidth, secondaryWidth- offAcmax) - xMargin)
|
||||
|
||||
offDnmax = int(coarseDown + ((prf2/prf1)-1)*masterLength)
|
||||
offDnmax = int(coarseDown + ((prf2/prf1)-1)*referenceLength)
|
||||
logger.debug("Gross Max Down: %s" % (offDnmax))
|
||||
lastDown = int( min(masterLength, slaveLength-offDnmax) - yMargin)
|
||||
lastDown = int( min(referenceLength, secondaryLength-offDnmax) - yMargin)
|
||||
|
||||
|
||||
if not objAmpcor.firstSampleAcross:
|
||||
|
|
|
@ -40,16 +40,16 @@ logger = logging.getLogger('isce.insar.runOffsetprf')
|
|||
def runOffsetprf(self):
|
||||
from isceobj.Catalog import recordInputs, recordOutputs
|
||||
|
||||
masterFrame = self._insar.getMasterFrame()
|
||||
slaveFrame = self._insar.getSlaveFrame()
|
||||
masterOrbit = self._insar.getMasterOrbit()
|
||||
slaveOrbit = self._insar.getSlaveOrbit()
|
||||
prf1 = masterFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
prf2 = slaveFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
referenceFrame = self._insar.getReferenceFrame()
|
||||
secondaryFrame = self._insar.getSecondaryFrame()
|
||||
referenceOrbit = self._insar.getReferenceOrbit()
|
||||
secondaryOrbit = self._insar.getSecondaryOrbit()
|
||||
prf1 = referenceFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
prf2 = secondaryFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
nearRange1 = self.insar.formSLC1.startingRange
|
||||
nearRange2 = self.insar.formSLC2.startingRange
|
||||
fs1 = masterFrame.getInstrument().getRangeSamplingRate()
|
||||
fs2 = slaveFrame.getInstrument().getRangeSamplingRate()
|
||||
fs1 = referenceFrame.getInstrument().getRangeSamplingRate()
|
||||
fs2 = secondaryFrame.getInstrument().getRangeSamplingRate()
|
||||
|
||||
###There seems to be no other way of determining image length - Piyush
|
||||
patchSize = self._insar.getPatchSize()
|
||||
|
@ -98,23 +98,23 @@ def runOffsetprf(self):
|
|||
coarseAcross = 0 + coarseAcross
|
||||
coarseDown = 0 + coarseDown
|
||||
|
||||
mSlcImage = self._insar.getMasterSlcImage()
|
||||
mSlcImage = self._insar.getReferenceSlcImage()
|
||||
mSlc = isceobj.createSlcImage()
|
||||
IU.copyAttributes(mSlcImage, mSlc)
|
||||
accessMode = 'read'
|
||||
mSlc.setAccessMode(accessMode)
|
||||
mSlc.createImage()
|
||||
masterWidth = mSlc.getWidth()
|
||||
masterLength = mSlc.getLength()
|
||||
referenceWidth = mSlc.getWidth()
|
||||
referenceLength = mSlc.getLength()
|
||||
|
||||
sSlcImage = self._insar.getSlaveSlcImage()
|
||||
sSlcImage = self._insar.getSecondarySlcImage()
|
||||
sSlc = isceobj.createSlcImage()
|
||||
IU.copyAttributes(sSlcImage, sSlc)
|
||||
accessMode = 'read'
|
||||
sSlc.setAccessMode(accessMode)
|
||||
sSlc.createImage()
|
||||
slaveWidth = sSlc.getWidth()
|
||||
slaveLength = sSlc.getLength()
|
||||
secondaryWidth = sSlc.getWidth()
|
||||
secondaryLength = sSlc.getLength()
|
||||
|
||||
|
||||
nStageObj = NStage(name='insarapp_slcs_nstage')
|
||||
|
|
|
@ -47,17 +47,17 @@ def runOrbit2sch(self):
|
|||
pegHavg = self.insar.averageHeight
|
||||
planet = self.insar.planet
|
||||
|
||||
# if self.pegSelect.upper() == 'MASTER':
|
||||
# if self.pegSelect.upper() == 'REFERENCE':
|
||||
# pegHavg = self.insar.getFirstAverageHeight()
|
||||
# elif self.pegSelect.upper() == 'SLAVE':
|
||||
# elif self.pegSelect.upper() == 'SECONDARY':
|
||||
# pegHavg = self.insar.getSecondAverageHeight()
|
||||
# elif self.pegSelect.upper() == 'AVERAGE':
|
||||
# pegHavg = self.insar.averageHeight
|
||||
# else:
|
||||
# raise Exception('Unknown peg selection method: ', self.pegSelect)
|
||||
|
||||
masterOrbit = self.insar.masterOrbit
|
||||
slaveOrbit = self.insar.slaveOrbit
|
||||
referenceOrbit = self.insar.referenceOrbit
|
||||
secondaryOrbit = self.insar.secondaryOrbit
|
||||
|
||||
objOrbit2sch1 = stdproc.createOrbit2sch(averageHeight=pegHavg)
|
||||
objOrbit2sch1.stdWriter = self.stdWriter.set_file_tags("orbit2sch",
|
||||
|
@ -67,10 +67,10 @@ def runOrbit2sch(self):
|
|||
objOrbit2sch2 = stdproc.createOrbit2sch(averageHeight=pegHavg)
|
||||
objOrbit2sch2.stdWriter = self.stdWriter
|
||||
|
||||
## loop over master/slave orbits
|
||||
## loop over reference/secondary orbits
|
||||
for obj, orb, tag, order in zip((objOrbit2sch1, objOrbit2sch2),
|
||||
(self.insar.masterOrbit, self.insar.slaveOrbit),
|
||||
('master', 'slave'),
|
||||
(self.insar.referenceOrbit, self.insar.secondaryOrbit),
|
||||
('reference', 'secondary'),
|
||||
('First', 'Second')):
|
||||
obj(planet=planet, orbit=orb, peg=peg)
|
||||
recordInputsAndOutputs(self.insar.procDoc, obj,
|
||||
|
@ -78,7 +78,7 @@ def runOrbit2sch(self):
|
|||
logger,
|
||||
"runOrbit2sch." + tag)
|
||||
|
||||
#equivalent to self.insar.masterOrbit =
|
||||
#equivalent to self.insar.referenceOrbit =
|
||||
setattr(self.insar,'%sOrbit'%(tag), obj.orbit)
|
||||
|
||||
#Piyush
|
||||
|
|
|
@ -36,11 +36,11 @@ logger = logging.getLogger('isce.insar.runPrepareResamps')
|
|||
|
||||
def runPrepareResamps(self, rangeLooks=None, azLooks=None):
|
||||
import math
|
||||
slaveOrbit = self.insar.slaveOrbit
|
||||
masterFrame = self.insar.masterFrame
|
||||
secondaryOrbit = self.insar.secondaryOrbit
|
||||
referenceFrame = self.insar.referenceFrame
|
||||
peg = self.insar.peg
|
||||
masterSlcImage = self.insar.masterSlcImage
|
||||
time2, schPosition2, schVelocity2, offset2 = slaveOrbit._unpackOrbit()
|
||||
referenceSlcImage = self.insar.referenceSlcImage
|
||||
time2, schPosition2, schVelocity2, offset2 = secondaryOrbit._unpackOrbit()
|
||||
|
||||
s2 = schPosition2[0][0]
|
||||
s2_2 = schPosition2[1][0]
|
||||
|
@ -49,19 +49,19 @@ def runPrepareResamps(self, rangeLooks=None, azLooks=None):
|
|||
numPatches = self.insar.numberPatches
|
||||
lines = numPatches * valid_az_samples
|
||||
|
||||
fs = masterFrame.getInstrument().getRangeSamplingRate()
|
||||
fs = referenceFrame.getInstrument().getRangeSamplingRate()
|
||||
dr = (SPEED_OF_LIGHT / (2 * fs))
|
||||
|
||||
self._insar.setSlantRangePixelSpacing(dr)
|
||||
|
||||
# widthSlc = max(self._insar.getMasterSlcImage().getWidth(), self._insar.getSlaveSlcImage().getWidth())
|
||||
widthSlc = self._insar.getMasterSlcImage().getWidth()
|
||||
# widthSlc = max(self._insar.getReferenceSlcImage().getWidth(), self._insar.getSecondarySlcImage().getWidth())
|
||||
widthSlc = self._insar.getReferenceSlcImage().getWidth()
|
||||
|
||||
radarWavelength = masterFrame.getInstrument().getRadarWavelength()
|
||||
radarWavelength = referenceFrame.getInstrument().getRadarWavelength()
|
||||
|
||||
rc = peg.getRadiusOfCurvature()
|
||||
ht = self._insar.getAverageHeight()
|
||||
r0 = masterFrame.getStartingRange()
|
||||
r0 = referenceFrame.getStartingRange()
|
||||
|
||||
range = r0 + (widthSlc / 2 * dr)
|
||||
|
||||
|
|
|
@ -35,35 +35,35 @@ from isceobj.Util.decorators import use_api
|
|||
logger = logging.getLogger('isce.insar.runPreprocessor')
|
||||
@use_api
|
||||
def runPreprocessor(self):
|
||||
master = make_raw(self.master, self.masterdop)
|
||||
self.insar.rawMasterIQImage = master.iqImage
|
||||
slave = make_raw(self.slave, self.slavedop)
|
||||
self.insar.rawSlaveIQImage = slave.iqImage
|
||||
self._insar.numberRangeBins = master.frame.numberRangeBins
|
||||
reference = make_raw(self.reference, self.referencedop)
|
||||
self.insar.rawReferenceIQImage = reference.iqImage
|
||||
secondary = make_raw(self.secondary, self.secondarydop)
|
||||
self.insar.rawSecondaryIQImage = secondary.iqImage
|
||||
self._insar.numberRangeBins = reference.frame.numberRangeBins
|
||||
#add raw images to main object
|
||||
masterRaw = initRawImage(master)
|
||||
self._insar.setMasterRawImage(masterRaw)
|
||||
slaveRaw = initRawImage(slave)
|
||||
self._insar.setSlaveRawImage(slaveRaw)
|
||||
referenceRaw = initRawImage(reference)
|
||||
self._insar.setReferenceRawImage(referenceRaw)
|
||||
secondaryRaw = initRawImage(secondary)
|
||||
self._insar.setSecondaryRawImage(secondaryRaw)
|
||||
|
||||
#add frames to main object
|
||||
self._insar.setMasterFrame(master.frame)
|
||||
self._insar.setSlaveFrame(slave.frame)
|
||||
self._insar.setReferenceFrame(reference.frame)
|
||||
self._insar.setSecondaryFrame(secondary.frame)
|
||||
|
||||
#add doppler to main object
|
||||
self._insar.setMasterDoppler(master.getDopplerValues())
|
||||
self._insar.setSlaveDoppler(slave.getDopplerValues())
|
||||
self._insar.setReferenceDoppler(reference.getDopplerValues())
|
||||
self._insar.setSecondaryDoppler(secondary.getDopplerValues())
|
||||
|
||||
#add squints to main object
|
||||
self._insar.setMasterSquint(master.getSquint())
|
||||
self._insar.setSlaveSquint(slave.getSquint())
|
||||
self._insar.setReferenceSquint(reference.getSquint())
|
||||
self._insar.setSecondarySquint(secondary.getSquint())
|
||||
|
||||
#add look direction
|
||||
self._insar.setLookSide(master.frame.getInstrument().getPlatform().pointingDirection)
|
||||
self._insar.setLookSide(reference.frame.getInstrument().getPlatform().pointingDirection)
|
||||
|
||||
catalog = isceobj.Catalog.createCatalog(self._insar.procDoc.name)
|
||||
|
||||
frame = self._insar.getMasterFrame()
|
||||
frame = self._insar.getReferenceFrame()
|
||||
instrument = frame.getInstrument()
|
||||
platform = instrument.getPlatform()
|
||||
|
||||
|
@ -71,43 +71,43 @@ def runPreprocessor(self):
|
|||
catalog.addInputsFrom(planet, 'planet')
|
||||
catalog.addInputsFrom(planet.get_elp(), 'planet.ellipsoid')
|
||||
|
||||
catalog.addInputsFrom(master.sensor, 'master.sensor')
|
||||
catalog.addItem('width', masterRaw.getWidth(), 'master')
|
||||
catalog.addItem('xmin', masterRaw.getXmin(), 'master')
|
||||
catalog.addItem('iBias', instrument.getInPhaseValue(), 'master')
|
||||
catalog.addItem('qBias', instrument.getQuadratureValue(), 'master')
|
||||
catalog.addItem('range_sampling_rate', instrument.getRangeSamplingRate(), 'master')
|
||||
catalog.addItem('prf', instrument.getPulseRepetitionFrequency(), 'master')
|
||||
catalog.addItem('pri', 1.0/instrument.getPulseRepetitionFrequency(), 'master')
|
||||
catalog.addItem('pulse_length', instrument.getPulseLength(), 'master')
|
||||
catalog.addItem('chirp_slope', instrument.getChirpSlope(), 'master')
|
||||
catalog.addItem('wavelength', instrument.getRadarWavelength(), 'master')
|
||||
catalog.addItem('lookSide', platform.pointingDirection, 'master')
|
||||
catalog.addInputsFrom(frame, 'master.frame')
|
||||
catalog.addInputsFrom(instrument, 'master.instrument')
|
||||
catalog.addInputsFrom(platform, 'master.platform')
|
||||
catalog.addInputsFrom(frame.orbit, 'master.orbit')
|
||||
catalog.addInputsFrom(reference.sensor, 'reference.sensor')
|
||||
catalog.addItem('width', referenceRaw.getWidth(), 'reference')
|
||||
catalog.addItem('xmin', referenceRaw.getXmin(), 'reference')
|
||||
catalog.addItem('iBias', instrument.getInPhaseValue(), 'reference')
|
||||
catalog.addItem('qBias', instrument.getQuadratureValue(), 'reference')
|
||||
catalog.addItem('range_sampling_rate', instrument.getRangeSamplingRate(), 'reference')
|
||||
catalog.addItem('prf', instrument.getPulseRepetitionFrequency(), 'reference')
|
||||
catalog.addItem('pri', 1.0/instrument.getPulseRepetitionFrequency(), 'reference')
|
||||
catalog.addItem('pulse_length', instrument.getPulseLength(), 'reference')
|
||||
catalog.addItem('chirp_slope', instrument.getChirpSlope(), 'reference')
|
||||
catalog.addItem('wavelength', instrument.getRadarWavelength(), 'reference')
|
||||
catalog.addItem('lookSide', platform.pointingDirection, 'reference')
|
||||
catalog.addInputsFrom(frame, 'reference.frame')
|
||||
catalog.addInputsFrom(instrument, 'reference.instrument')
|
||||
catalog.addInputsFrom(platform, 'reference.platform')
|
||||
catalog.addInputsFrom(frame.orbit, 'reference.orbit')
|
||||
|
||||
frame = self._insar.getSlaveFrame()
|
||||
frame = self._insar.getSecondaryFrame()
|
||||
instrument = frame.getInstrument()
|
||||
platform = instrument.getPlatform()
|
||||
|
||||
catalog.addInputsFrom(slave.sensor, 'slave.sensor')
|
||||
catalog.addItem('width', slaveRaw.getWidth(), 'slave')
|
||||
catalog.addItem('xmin', slaveRaw.getXmin(), 'slave')
|
||||
catalog.addItem('iBias', instrument.getInPhaseValue(), 'slave')
|
||||
catalog.addItem('qBias', instrument.getQuadratureValue(), 'slave')
|
||||
catalog.addItem('range_sampling_rate', instrument.getRangeSamplingRate(), 'slave')
|
||||
catalog.addItem('prf', instrument.getPulseRepetitionFrequency(), 'slave')
|
||||
catalog.addItem('pri', 1.0/instrument.getPulseRepetitionFrequency(), 'slave')
|
||||
catalog.addItem('pulse_length', instrument.getPulseLength(), 'slave')
|
||||
catalog.addItem('chirp_slope', instrument.getChirpSlope(), 'slave')
|
||||
catalog.addItem('wavelength', instrument.getRadarWavelength(), 'slave')
|
||||
catalog.addItem('lookSide', platform.pointingDirection, 'slave')
|
||||
catalog.addInputsFrom(frame, 'slave.frame')
|
||||
catalog.addInputsFrom(instrument, 'slave.instrument')
|
||||
catalog.addInputsFrom(platform, 'slave.platform')
|
||||
catalog.addInputsFrom(frame.orbit, 'slave.orbit')
|
||||
catalog.addInputsFrom(secondary.sensor, 'secondary.sensor')
|
||||
catalog.addItem('width', secondaryRaw.getWidth(), 'secondary')
|
||||
catalog.addItem('xmin', secondaryRaw.getXmin(), 'secondary')
|
||||
catalog.addItem('iBias', instrument.getInPhaseValue(), 'secondary')
|
||||
catalog.addItem('qBias', instrument.getQuadratureValue(), 'secondary')
|
||||
catalog.addItem('range_sampling_rate', instrument.getRangeSamplingRate(), 'secondary')
|
||||
catalog.addItem('prf', instrument.getPulseRepetitionFrequency(), 'secondary')
|
||||
catalog.addItem('pri', 1.0/instrument.getPulseRepetitionFrequency(), 'secondary')
|
||||
catalog.addItem('pulse_length', instrument.getPulseLength(), 'secondary')
|
||||
catalog.addItem('chirp_slope', instrument.getChirpSlope(), 'secondary')
|
||||
catalog.addItem('wavelength', instrument.getRadarWavelength(), 'secondary')
|
||||
catalog.addItem('lookSide', platform.pointingDirection, 'secondary')
|
||||
catalog.addInputsFrom(frame, 'secondary.frame')
|
||||
catalog.addInputsFrom(instrument, 'secondary.instrument')
|
||||
catalog.addInputsFrom(platform, 'secondary.platform')
|
||||
catalog.addInputsFrom(frame.orbit, 'secondary.orbit')
|
||||
|
||||
|
||||
optlist = ['all', 'top', 'middle', 'bottom']
|
||||
|
@ -118,8 +118,8 @@ def runPreprocessor(self):
|
|||
baseObj = Baseline()
|
||||
baseObj.configure()
|
||||
baseObj.baselineLocation = option
|
||||
baseObj.wireInputPort(name='masterFrame',object=self._insar.getMasterFrame())
|
||||
baseObj.wireInputPort(name='slaveFrame',object=self._insar.getSlaveFrame())
|
||||
baseObj.wireInputPort(name='referenceFrame',object=self._insar.getReferenceFrame())
|
||||
baseObj.wireInputPort(name='secondaryFrame',object=self._insar.getSecondaryFrame())
|
||||
try:
|
||||
baseObj.baseline()
|
||||
success=True
|
||||
|
|
|
@ -35,11 +35,11 @@ from isceobj.Orbit.Orbit import Orbit
|
|||
logger = logging.getLogger('isce.insar.runPulseTiming')
|
||||
|
||||
def runPulseTiming(self):
|
||||
master = self.insar.masterFrame
|
||||
slave = self.insar.slaveFrame
|
||||
reference = self.insar.referenceFrame
|
||||
secondary = self.insar.secondaryFrame
|
||||
# add orbits to main object -law of demeter pls.
|
||||
self.insar.masterOrbit = pulseTiming(master, self.insar.procDoc, 'master')
|
||||
self.insar.slaveOrbit = pulseTiming(slave, self.insar.procDoc, 'slave')
|
||||
self.insar.referenceOrbit = pulseTiming(reference, self.insar.procDoc, 'reference')
|
||||
self.insar.secondaryOrbit = pulseTiming(secondary, self.insar.procDoc, 'secondary')
|
||||
return None
|
||||
|
||||
def pulseTiming(frame, catalog, which):
|
||||
|
|
|
@ -38,8 +38,8 @@ logger = logging.getLogger('isce.insar.runResamp')
|
|||
def runResamp(self):
|
||||
logger.info("Resampling interferogram")
|
||||
|
||||
imageSlc1 = self.insar.masterSlcImage
|
||||
imageSlc2 = self.insar.slaveSlcImage
|
||||
imageSlc1 = self.insar.referenceSlcImage
|
||||
imageSlc2 = self.insar.secondarySlcImage
|
||||
|
||||
|
||||
resampName = self.insar.resampImageName
|
||||
|
@ -86,21 +86,21 @@ def runResamp(self):
|
|||
self.insar.resampAmpImage = imageAmp
|
||||
|
||||
|
||||
instrument = self.insar.masterFrame.getInstrument()
|
||||
instrument = self.insar.referenceFrame.getInstrument()
|
||||
|
||||
offsetField = self.insar.refinedOffsetField
|
||||
|
||||
lines = self.insar.numberResampLines
|
||||
|
||||
####Modified to deal with slave PRF correctly
|
||||
####Modified to deal with secondary PRF correctly
|
||||
dopplerCoeff = self.insar.dopplerCentroid.getDopplerCoefficients(inHz=True)
|
||||
for num in range(len(dopplerCoeff)):
|
||||
dopplerCoeff[num] /= self.insar.slaveFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
dopplerCoeff[num] /= self.insar.secondaryFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
|
||||
numFitCoeff = self.insar.numberFitCoefficients
|
||||
|
||||
# pixelSpacing = self.insar.slantRangePixelSpacing
|
||||
fS = self._insar.getSlaveFrame().getInstrument().getRangeSamplingRate()
|
||||
fS = self._insar.getSecondaryFrame().getInstrument().getRangeSamplingRate()
|
||||
pixelSpacing = CN.SPEED_OF_LIGHT/(2.*fS)
|
||||
|
||||
objResamp = stdproc.createResamp()
|
||||
|
|
|
@ -37,11 +37,11 @@ from iscesys.ImageUtil.ImageUtil import ImageUtil as IU
|
|||
logger = logging.getLogger('isce.insar.runResamp_image')
|
||||
|
||||
def runResamp_image(self):
|
||||
imageSlc = self._insar.getMasterSlcImage()
|
||||
widthSlc = max(self._insar.getMasterSlcImage().getWidth(), self._insar.getSlaveSlcImage().getWidth())
|
||||
imageSlc = self._insar.getReferenceSlcImage()
|
||||
widthSlc = max(self._insar.getReferenceSlcImage().getWidth(), self._insar.getSecondarySlcImage().getWidth())
|
||||
offsetField = self._insar.getRefinedOffsetField()
|
||||
|
||||
instrument = self._insar.getMasterFrame().getInstrument()
|
||||
instrument = self._insar.getReferenceFrame().getInstrument()
|
||||
|
||||
dopplerCoeff = self._insar.getDopplerCentroid().getDopplerCoefficients(inHz=False)
|
||||
|
||||
|
|
|
@ -69,7 +69,7 @@ def runResamp_only(self):
|
|||
|
||||
numRangeBin = objInt.getWidth()
|
||||
lines = objInt.getLength()
|
||||
instrument = self._insar.getMasterFrame().getInstrument()
|
||||
instrument = self._insar.getReferenceFrame().getInstrument()
|
||||
|
||||
offsetField = self._insar.getRefinedOffsetField()
|
||||
|
||||
|
|
|
@ -106,7 +106,7 @@ def runRgoffset(self):
|
|||
self._stdWriter.setFileTag("rgoffset", "err")
|
||||
self._stdWriter.setFileTag("rgoffset", "out")
|
||||
objOffset.setStdWriter(self._stdWriter)
|
||||
prf = self._insar.getMasterFrame().getInstrument().getPulseRepetitionFrequency()
|
||||
prf = self._insar.getReferenceFrame().getInstrument().getPulseRepetitionFrequency()
|
||||
|
||||
objOffset.setFirstPRF(prf)
|
||||
objOffset.setSecondPRF(prf)
|
||||
|
|
|
@ -66,7 +66,7 @@ def runRgoffset(self):
|
|||
|
||||
simWidth = imageSim.getWidth()
|
||||
simLength = imageSim.getLength()
|
||||
fs1 = self._insar.getMasterFrame().getInstrument().getRangeSamplingRate() ##check
|
||||
fs1 = self._insar.getReferenceFrame().getInstrument().getRangeSamplingRate() ##check
|
||||
delRg1 = CN.SPEED_OF_LIGHT / (2*fs1) ## if it's correct
|
||||
|
||||
objAmpcor = Ampcor(name='insarapp_intsim_ampcor')
|
||||
|
@ -117,7 +117,7 @@ def runRgoffset(self):
|
|||
self._stdWriter.setFileTag("rgoffset", "err")
|
||||
self._stdWriter.setFileTag("rgoffset", "out")
|
||||
objAmpcor.setStdWriter(self._stdWriter)
|
||||
prf = self._insar.getMasterFrame().getInstrument().getPulseRepetitionFrequency()
|
||||
prf = self._insar.getReferenceFrame().getInstrument().getPulseRepetitionFrequency()
|
||||
|
||||
|
||||
objAmpcor.setFirstPRF(prf)
|
||||
|
|
|
@ -47,25 +47,25 @@ def runRgoffset(self):
|
|||
firstDn = self._insar.getFirstSampleDown()
|
||||
|
||||
ampImage = self._insar.getResampAmpImage()
|
||||
slaveWidth = ampImage.getWidth()
|
||||
slaveLength = ampImage.getLength()
|
||||
secondaryWidth = ampImage.getWidth()
|
||||
secondaryLength = ampImage.getLength()
|
||||
objAmp = isceobj.createSlcImage()
|
||||
objAmp.dataType = 'CFLOAT'
|
||||
objAmp.bands = 1
|
||||
objAmp.setFilename(ampImage.getFilename())
|
||||
objAmp.setAccessMode('read')
|
||||
objAmp.setWidth(slaveWidth)
|
||||
objAmp.setWidth(secondaryWidth)
|
||||
objAmp.createImage()
|
||||
|
||||
simImage = self._insar.getSimAmpImage()
|
||||
masterWidth = simImage.getWidth()
|
||||
referenceWidth = simImage.getWidth()
|
||||
objSim = isceobj.createImage()
|
||||
objSim.setFilename(simImage.getFilename())
|
||||
objSim.dataType = 'FLOAT'
|
||||
objSim.setWidth(masterWidth)
|
||||
objSim.setWidth(referenceWidth)
|
||||
objSim.setAccessMode('read')
|
||||
objSim.createImage()
|
||||
masterLength = simImage.getLength()
|
||||
referenceLength = simImage.getLength()
|
||||
|
||||
|
||||
nStageObj = NStage(name='insarapp_intsim_nstage')
|
||||
|
|
|
@ -60,28 +60,28 @@ def runSetmocomppath(self, peg=None):
|
|||
|
||||
logger.info("Selecting individual peg points")
|
||||
|
||||
planet = self._insar.getMasterFrame().getInstrument().getPlatform().getPlanet()
|
||||
masterOrbit = self._insar.getMasterOrbit()
|
||||
slaveOrbit = self._insar.getSlaveOrbit()
|
||||
planet = self._insar.getReferenceFrame().getInstrument().getPlatform().getPlanet()
|
||||
referenceOrbit = self._insar.getReferenceOrbit()
|
||||
secondaryOrbit = self._insar.getSecondaryOrbit()
|
||||
|
||||
if peg:
|
||||
self._insar.setPeg(peg)
|
||||
logger.info("Using the given peg = %r", peg)
|
||||
self._insar.setFirstAverageHeight(
|
||||
averageHeightAboveElp(planet, peg, masterOrbit))
|
||||
averageHeightAboveElp(planet, peg, referenceOrbit))
|
||||
self._insar.setSecondAverageHeight(
|
||||
averageHeightAboveElp(planet, peg, slaveOrbit))
|
||||
averageHeightAboveElp(planet, peg, secondaryOrbit))
|
||||
self._insar.setFirstProcVelocity(
|
||||
sVelocityAtMidOrbit(planet, peg, masterOrbit))
|
||||
sVelocityAtMidOrbit(planet, peg, referenceOrbit))
|
||||
self._insar.setSecondProcVelocity(
|
||||
sVelocityAtMidOrbit(planet, peg, slaveOrbit))
|
||||
sVelocityAtMidOrbit(planet, peg, secondaryOrbit))
|
||||
|
||||
return
|
||||
|
||||
|
||||
pegpts = []
|
||||
|
||||
for orbitObj, order in zip((masterOrbit, slaveOrbit)
|
||||
for orbitObj, order in zip((referenceOrbit, secondaryOrbit)
|
||||
,('First', 'Second')):
|
||||
objGetpeg = stdproc.createGetpeg()
|
||||
if peg:
|
||||
|
@ -109,11 +109,11 @@ def runSetmocomppath(self, peg=None):
|
|||
logger.info('Combining individual peg points.')
|
||||
peg = averagePeg(pegpts, planet)
|
||||
|
||||
if self.pegSelect.upper() == 'MASTER':
|
||||
logger.info('Using master info for peg point')
|
||||
if self.pegSelect.upper() == 'REFERENCE':
|
||||
logger.info('Using reference info for peg point')
|
||||
self._insar.setPeg(pegpts[0])
|
||||
elif self.pegSelect.upper() == 'SLAVE':
|
||||
logger.info('Using slave infor for peg point')
|
||||
elif self.pegSelect.upper() == 'SECONDARY':
|
||||
logger.info('Using secondary infor for peg point')
|
||||
self._insar.setPeg(pegpts[1])
|
||||
elif self.pegSelect.upper() == 'AVERAGE':
|
||||
logger.info('Using average peg point')
|
||||
|
|
|
@ -63,22 +63,22 @@ def runSetmocomppath(self, peg=None):
|
|||
"""
|
||||
|
||||
planet = (
|
||||
self._insar.getMasterFrame().getInstrument().getPlatform().getPlanet())
|
||||
masterOrbit = self._insar.getMasterOrbit()
|
||||
slaveOrbit = self._insar.getSlaveOrbit()
|
||||
self._insar.getReferenceFrame().getInstrument().getPlatform().getPlanet())
|
||||
referenceOrbit = self._insar.getReferenceOrbit()
|
||||
secondaryOrbit = self._insar.getSecondaryOrbit()
|
||||
|
||||
if peg:
|
||||
#If the input peg is set, then use it
|
||||
self._insar.setPeg(peg)
|
||||
logger.info("Using the given peg = %r", peg)
|
||||
self._insar.setFirstAverageHeight(
|
||||
averageHeightAboveElp(planet, peg, masterOrbit))
|
||||
averageHeightAboveElp(planet, peg, referenceOrbit))
|
||||
self._insar.setSecondAverageHeight(
|
||||
averageHeightAboveElp(planet, peg, slaveOrbit))
|
||||
averageHeightAboveElp(planet, peg, secondaryOrbit))
|
||||
self._insar.setFirstProcVelocity(
|
||||
sVelocityAtMidOrbit(planet, peg, masterOrbit))
|
||||
sVelocityAtMidOrbit(planet, peg, referenceOrbit))
|
||||
self._insar.setSecondProcVelocity(
|
||||
sVelocityAtMidOrbit(planet, peg, slaveOrbit))
|
||||
sVelocityAtMidOrbit(planet, peg, secondaryOrbit))
|
||||
# recordInputsAndOutputs(self._insar.procDoc, peg, "peg",
|
||||
# logger, "runSetmocomppath")
|
||||
return
|
||||
|
@ -86,17 +86,17 @@ def runSetmocomppath(self, peg=None):
|
|||
logger.info("Selecting peg points from frames")
|
||||
|
||||
pegpts = []
|
||||
pegpts.append(self._insar.getMasterFrame().peg)
|
||||
pegpts.append(self._insar.getMasterFrame().peg)
|
||||
pegpts.append(self._insar.getReferenceFrame().peg)
|
||||
pegpts.append(self._insar.getReferenceFrame().peg)
|
||||
peg = averagePeg(pegpts, planet)
|
||||
self._insar.setPeg(peg)
|
||||
|
||||
self._insar.setFirstAverageHeight(
|
||||
self._insar.getMasterFrame().platformHeight)
|
||||
self._insar.getReferenceFrame().platformHeight)
|
||||
self._insar.setSecondAverageHeight(
|
||||
self._insar.getSlaveFrame().platformHeight)
|
||||
self._insar.getSecondaryFrame().platformHeight)
|
||||
self._insar.setFirstProcVelocity(
|
||||
self._insar.getMasterFrame().procVelocity)
|
||||
self._insar.getReferenceFrame().procVelocity)
|
||||
self._insar.setSecondProcVelocity(
|
||||
self._insar.getSlaveFrame().procVelocity)
|
||||
self._insar.getSecondaryFrame().procVelocity)
|
||||
|
||||
|
|
|
@ -61,16 +61,16 @@ def runTopo(self):
|
|||
|
||||
|
||||
|
||||
planet = self.insar.masterFrame.getInstrument().getPlatform().getPlanet()
|
||||
prf1 = self.insar.masterFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
planet = self.insar.referenceFrame.getInstrument().getPlatform().getPlanet()
|
||||
prf1 = self.insar.referenceFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
|
||||
objTopo = stdproc.createTopo()
|
||||
objTopo.wireInputPort(name='peg', object=self.insar.peg)
|
||||
objTopo.wireInputPort(name='frame', object=self.insar.masterFrame)
|
||||
objTopo.wireInputPort(name='frame', object=self.insar.referenceFrame)
|
||||
objTopo.wireInputPort(name='planet', object=planet)
|
||||
objTopo.wireInputPort(name='dem', object=objDem)
|
||||
objTopo.wireInputPort(name='interferogram', object=intImage)
|
||||
objTopo.wireInputPort(name='masterslc', object = self.insar.formSLC1) #Piyush
|
||||
objTopo.wireInputPort(name='referenceslc', object = self.insar.formSLC1) #Piyush
|
||||
|
||||
centroid = self.insar.dopplerCentroid.getDopplerCoefficients(inHz=False)[0]
|
||||
objTopo.setDopplerCentroidConstantTerm(centroid)
|
||||
|
|
|
@ -50,7 +50,7 @@ def runUnwrap(self,costMode = None,initMethod = None, defomax = None, initOnly =
|
|||
wrapName = self.insar.topophaseFlatFilename
|
||||
unwrapName = self.insar.unwrappedIntFilename
|
||||
|
||||
wavelength = self.insar.masterFrame.getInstrument().getRadarWavelength()
|
||||
wavelength = self.insar.referenceFrame.getInstrument().getRadarWavelength()
|
||||
width = self.insar.resampIntImage.width
|
||||
earthRadius = self.insar.peg.radiusOfCurvature
|
||||
altitude = self.insar.averageHeight
|
||||
|
@ -58,10 +58,10 @@ def runUnwrap(self,costMode = None,initMethod = None, defomax = None, initOnly =
|
|||
rangeLooks = self.insar.topo.numberRangeLooks
|
||||
azimuthLooks = self.insar.topo.numberAzimuthLooks
|
||||
|
||||
azres = self.insar.masterFrame.platform.antennaLength/2.0
|
||||
azres = self.insar.referenceFrame.platform.antennaLength/2.0
|
||||
azfact = self.insar.topo.numberAzimuthLooks *azres / self.insar.topo.azimuthSpacing
|
||||
|
||||
rBW = self.insar.masterFrame.instrument.pulseLength * self.insar.masterFrame.instrument.chirpSlope
|
||||
rBW = self.insar.referenceFrame.instrument.pulseLength * self.insar.referenceFrame.instrument.chirpSlope
|
||||
rgres = abs(SPEED_OF_LIGHT / (2.0 * rBW))
|
||||
rngfact = rgres/self.insar.topo.slantRangePixelSpacing
|
||||
|
||||
|
|
|
@ -33,17 +33,17 @@ def runUpdatePreprocInfo(self, use_dop="average"):
|
|||
|
||||
peg = self.insar.peg
|
||||
pegRc = peg.radiusOfCurvature
|
||||
masterFrame = self.insar.masterFrame
|
||||
slaveFrame = self.insar.slaveFrame
|
||||
prf1 = masterFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
prf2 = slaveFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
masterDoppler = self.insar.masterDoppler
|
||||
slaveDoppler = self.insar.slaveDoppler
|
||||
referenceFrame = self.insar.referenceFrame
|
||||
secondaryFrame = self.insar.secondaryFrame
|
||||
prf1 = referenceFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
prf2 = secondaryFrame.getInstrument().getPulseRepetitionFrequency()
|
||||
referenceDoppler = self.insar.referenceDoppler
|
||||
secondaryDoppler = self.insar.secondaryDoppler
|
||||
|
||||
## red flag.
|
||||
fd = runFdMocomp(self, use_dop=use_dop)
|
||||
|
||||
averageDoppler = masterDoppler.average(slaveDoppler)
|
||||
averageDoppler = referenceDoppler.average(secondaryDoppler)
|
||||
averageDoppler.fractionalCentroid = fd
|
||||
self.insar.dopplerCentroid =averageDoppler
|
||||
return None
|
||||
|
|
|
@ -417,7 +417,7 @@ class IsceProc(Component, FrameMixin):
|
|||
|
||||
|
||||
|
||||
## Why this: the code bloat with master this and slave that indicates the
|
||||
## Why this: the code bloat with reference this and secondary that indicates the
|
||||
## design princple does not use composition, this is an attempt to
|
||||
## fix that
|
||||
class RadarSwath(object):
|
||||
|
|
|
@ -93,7 +93,7 @@ def run(frame1, objFormSLC1, objMocompbaseline, intImage, velocity, height, info
|
|||
objCorrect.wireInputPort(name='frame', object=frame1)
|
||||
objCorrect.wireInputPort(name='planet', object=planet)
|
||||
objCorrect.wireInputPort(name='interferogram', object=intImage)
|
||||
objCorrect.wireInputPort(name='masterslc', object=objFormSLC1) #Piyush
|
||||
objCorrect.wireInputPort(name='referenceslc', object=objFormSLC1) #Piyush
|
||||
#objCorrect.setDopplerCentroidConstantTerm(centroid) #ML 2014-08-05
|
||||
# Average velocity and height measurements
|
||||
objCorrect.setBodyFixedVelocity(velocity)
|
||||
|
|
|
@ -152,7 +152,7 @@ def run(tobeGeocoded, frame1, formSLC1, velocity, height, snwe, infos, catalog=N
|
|||
IU.copyAttributes(infos['demImage'], demImage)
|
||||
objGeo(peg=infos['peg'], frame=frame1,
|
||||
planet=planet, dem=demImage, tobegeocoded=inImage,
|
||||
geoPosting=None, masterslc=formSLC1)
|
||||
geoPosting=None, referenceslc=formSLC1)
|
||||
|
||||
if catalog is not None:
|
||||
isceobj.Catalog.recordInputsAndOutputs(catalog, objGeo,
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue