topsStack: ignore coreg_secondary images with inconsistent num of bursts (#195)
* ImageLib: fix str syntax * stackSentl: rename slc workflow merge for consistency rename the mergeSLC step in "slc" workflow, to be consistent with the other workflows. * topsStack: check inconsistent num of bursts in secondary images + extractCommonValidRegion.py: add dropSecondarysWithDifferentNumberOfBursts() to discard those acquisitions during the common region calculation + mergeBursts.py: skip secondarys with inconsistent num of bursts by raise exception and exit + s1a_isce_utils.adjustValidSampleLine_V2(): remove a redundant line Co-authored-by: Zhang Yunjun <yunjunz@users.noreply.github.com>LT1AB
parent
3fb325a51e
commit
55b9d2c037
|
@ -262,7 +262,7 @@ class memmap(object):
|
||||||
nyy = nbytes//(fsize*nchannels*nxx)
|
nyy = nbytes//(fsize*nchannels*nxx)
|
||||||
|
|
||||||
if (nxx*nyy*fsize*nchannels) != nbytes:
|
if (nxx*nyy*fsize*nchannels) != nbytes:
|
||||||
raise ValueError('File size mismatch for %s. Fractional number of lines'(fname))
|
raise ValueError('File size mismatch for %s. Fractional number of lines'%(fname))
|
||||||
elif (nxx*nyy*fsize*nchannels) > nbytes:
|
elif (nxx*nyy*fsize*nchannels) > nbytes:
|
||||||
raise ValueError('File size mismatch for %s. Number of bytes expected: %d'%(nbytes))
|
raise ValueError('File size mismatch for %s. Number of bytes expected: %d'%(nbytes))
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,7 @@ def updateValidRegion(topReference, secondaryPath, swath):
|
||||||
####Load relevant products
|
####Load relevant products
|
||||||
#topReference = ut.loadProduct(os.path.join(inps.reference , 'IW{0}.xml'.format(swath)))
|
#topReference = ut.loadProduct(os.path.join(inps.reference , 'IW{0}.xml'.format(swath)))
|
||||||
|
|
||||||
|
print(secondaryPath)
|
||||||
topCoreg = ut.loadProduct(os.path.join(secondaryPath , 'IW{0}.xml'.format(swath)))
|
topCoreg = ut.loadProduct(os.path.join(secondaryPath , 'IW{0}.xml'.format(swath)))
|
||||||
|
|
||||||
topIfg = ut.coregSwathSLCProduct()
|
topIfg = ut.coregSwathSLCProduct()
|
||||||
|
@ -67,6 +68,34 @@ def updateValidRegion(topReference, secondaryPath, swath):
|
||||||
|
|
||||||
return topReference
|
return topReference
|
||||||
|
|
||||||
|
def dropSecondarysWithDifferentNumberOfBursts(secondaryList, reference, swathList):
|
||||||
|
'''Drop secondary acquisitions that have different number of bursts
|
||||||
|
than the reference acquisition.
|
||||||
|
'''
|
||||||
|
print('checking the number of bursts in coreg_secondarys against the one in reference')
|
||||||
|
secondaryList2Drop = []
|
||||||
|
for swath in swathList:
|
||||||
|
prodReference = ut.loadProduct(os.path.join(reference, 'IW{0}.xml'.format(swath)))
|
||||||
|
numBursts = len(prodReference.bursts)
|
||||||
|
|
||||||
|
for secondary in secondaryList:
|
||||||
|
prodSecondary = ut.loadProduct(os.path.join(secondary, 'IW{0}.xml'.format(swath)))
|
||||||
|
if len(prodSecondary.bursts) != numBursts:
|
||||||
|
msg = 'WARNING: {} has different number of bursts ({}) than the reference {} ({}) for swath {}'.format(
|
||||||
|
os.path.basename(secondary), len(prodSecondary.bursts),
|
||||||
|
os.path.basename(reference), numBursts, swath)
|
||||||
|
msg += ' --> exclude it for common region calculation'
|
||||||
|
print(msg)
|
||||||
|
secondaryList2Drop.append(secondary)
|
||||||
|
|
||||||
|
secondaryList2Drop = list(sorted(set(secondaryList2Drop)))
|
||||||
|
if len(secondaryList2Drop) == 0:
|
||||||
|
print('all secondary images have the same number of bursts as the reference')
|
||||||
|
|
||||||
|
secondaryList = list(sorted(set(secondaryList) - set(secondaryList2Drop)))
|
||||||
|
|
||||||
|
return secondaryList
|
||||||
|
|
||||||
|
|
||||||
def main(iargs=None):
|
def main(iargs=None):
|
||||||
'''extract common valid overlap region for the stack.
|
'''extract common valid overlap region for the stack.
|
||||||
|
@ -88,6 +117,8 @@ def main(iargs=None):
|
||||||
secondaryList = glob.glob(os.path.join(inps.secondary,'2*'))
|
secondaryList = glob.glob(os.path.join(inps.secondary,'2*'))
|
||||||
secondarySwathList = ut.getSwathList(secondaryList[0]) # assuming all secondarys have the same swaths
|
secondarySwathList = ut.getSwathList(secondaryList[0]) # assuming all secondarys have the same swaths
|
||||||
swathList = list(sorted(set(referenceSwathList+secondarySwathList)))
|
swathList = list(sorted(set(referenceSwathList+secondarySwathList)))
|
||||||
|
# discard secondarys with different number of bursts than the reference
|
||||||
|
secondaryList = dropSecondarysWithDifferentNumberOfBursts(secondaryList, inps.reference, swathList)
|
||||||
|
|
||||||
for swath in swathList:
|
for swath in swathList:
|
||||||
print('******************')
|
print('******************')
|
||||||
|
|
|
@ -362,6 +362,12 @@ def main(iargs=None):
|
||||||
stack = ut.loadProduct(os.path.join(inps.stack , 'IW{0}.xml'.format(swath)))
|
stack = ut.loadProduct(os.path.join(inps.stack , 'IW{0}.xml'.format(swath)))
|
||||||
if inps.isaligned:
|
if inps.isaligned:
|
||||||
reference = ifg.reference
|
reference = ifg.reference
|
||||||
|
|
||||||
|
# checking inconsistent number of bursts in the secondary acquisitions
|
||||||
|
if reference.numberOfBursts != ifg.numberOfBursts:
|
||||||
|
raise ValueError('{} has different number of bursts ({}) than the reference ({})'.format(
|
||||||
|
inps.reference, ifg.numberOfBursts, reference.numberOfBursts))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
reference = ifg
|
reference = ifg
|
||||||
|
|
||||||
|
@ -376,9 +382,7 @@ def main(iargs=None):
|
||||||
if inps.stack:
|
if inps.stack:
|
||||||
minStack = stack.bursts[0].burstNumber
|
minStack = stack.bursts[0].burstNumber
|
||||||
print('Updating the valid region of each burst to the common valid region of the stack')
|
print('Updating the valid region of each burst to the common valid region of the stack')
|
||||||
####Updating the valid region of each burst to the common valid region of the stack
|
|
||||||
for ii in range(minBurst, maxBurst + 1):
|
for ii in range(minBurst, maxBurst + 1):
|
||||||
|
|
||||||
ifg.bursts[ii-minBurst].firstValidLine = stack.bursts[ii-minStack].firstValidLine
|
ifg.bursts[ii-minBurst].firstValidLine = stack.bursts[ii-minStack].firstValidLine
|
||||||
ifg.bursts[ii-minBurst].firstValidSample = stack.bursts[ii-minStack].firstValidSample
|
ifg.bursts[ii-minBurst].firstValidSample = stack.bursts[ii-minStack].firstValidSample
|
||||||
ifg.bursts[ii-minBurst].numValidLines = stack.bursts[ii-minStack].numValidLines
|
ifg.bursts[ii-minBurst].numValidLines = stack.bursts[ii-minStack].numValidLines
|
||||||
|
|
|
@ -161,7 +161,6 @@ def adjustValidSampleLine_V2(reference, secondary, minAz=0, maxAz=0, minRng=0, m
|
||||||
|
|
||||||
elif (minAz < 0) and (maxAz < 0):
|
elif (minAz < 0) and (maxAz < 0):
|
||||||
reference.firstValidLine = secondary.firstValidLine - int(np.floor(minAz) - 4)
|
reference.firstValidLine = secondary.firstValidLine - int(np.floor(minAz) - 4)
|
||||||
lastValidLine = reference.firstValidLine + secondary.numValidLines + int(np.floor(minAz) - 8)
|
|
||||||
lastValidLine = reference.firstValidLine + secondary.numValidLines - 8
|
lastValidLine = reference.firstValidLine + secondary.numValidLines - 8
|
||||||
if lastValidLine < reference.numberOfLines:
|
if lastValidLine < reference.numberOfLines:
|
||||||
reference.numValidLines = secondary.numValidLines - 8
|
reference.numValidLines = secondary.numValidLines - 8
|
||||||
|
|
|
@ -523,7 +523,7 @@ def slcStack(inps, acquisitionDates, stackReferenceDate, secondaryDates, safe_di
|
||||||
if mergeSLC:
|
if mergeSLC:
|
||||||
i+=1
|
i+=1
|
||||||
runObj = run()
|
runObj = run()
|
||||||
runObj.configure(inps, 'run_{:02d}_merge'.format(i))
|
runObj.configure(inps, 'run_{:02d}_merge_reference_secondary_slc'.format(i))
|
||||||
runObj.mergeReference(stackReferenceDate, virtual = 'False')
|
runObj.mergeReference(stackReferenceDate, virtual = 'False')
|
||||||
runObj.mergeSecondarySLC(secondaryDates, virtual = 'False')
|
runObj.mergeSecondarySLC(secondaryDates, virtual = 'False')
|
||||||
runObj.finalize()
|
runObj.finalize()
|
||||||
|
|
Loading…
Reference in New Issue