From 58f5044b92374a0cd471dd4e09908d3499f7421f Mon Sep 17 00:00:00 2001 From: Eric Jameson Fielding Date: Sun, 5 May 2019 23:31:27 -0700 Subject: [PATCH 1/6] modified prepareUAVSAR_coregStack to support segment of stack --- contrib/stack/README_stripmapStack.txt | 2 +- .../stripmapStack/prepareUAVSAR_coregStack.py | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/contrib/stack/README_stripmapStack.txt b/contrib/stack/README_stripmapStack.txt index e6ae915..fd6c377 100644 --- a/contrib/stack/README_stripmapStack.txt +++ b/contrib/stack/README_stripmapStack.txt @@ -31,7 +31,7 @@ fixImageXml.py -f -i demLat_S37_S31_Lon_W072_W069.dem.wgs84 mkdir download cd download -6- Download the data that that you want to process to the downlowd directory. +6- Download the data that that you want to process to the download directory. 7- once all data have been downloaded, we need to unzip them and move them to different folders and getting ready for unpacking and then SLC generation. This can be done by running the following command in a directory above "download": diff --git a/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py b/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py index 1c175b3..91571b8 100755 --- a/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py +++ b/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py @@ -1,4 +1,5 @@ #!/usr/bin/env python3 +# modified to work for different UAVSAR stack segments EJF 2019/05/04 import os import glob @@ -14,15 +15,15 @@ def createParser(): Create command line parser. ''' - parser = argparse.ArgumentParser(description='Unzip Alos zip files.') + parser = argparse.ArgumentParser(description='Prepare UAVSAR SLC Stack files.') parser.add_argument('-i', '--input', dest='input', type=str, required=True, - help='directory which has all dates as directories. Inside each date, zip files are expected.') + help='directory which has all dates.') parser.add_argument('-d', '--dop_file', dest='dopFile', type=str, required=True, - help='Doppler file for the stack.') + help='Doppler file for the stack. Needs to be in directory where command is run.') parser.add_argument('-o', '--output', dest='output', type=str, required=True, help='output directory which will be used for unpacking.') - parser.add_argument('-t', '--text_cmd', dest='text_cmd', type=str, default='source ~/.bash_profile;' - , help='text command to be added to the beginning of each line of the run files. Example : source ~/.bash_profile;') + parser.add_argument('-s', '--segment', dest='segment', type=str, default='1', + help='segment of the UAVSAR stack to prepare. For "s2" use "2", etc. Default is "1" ') return parser @@ -64,14 +65,13 @@ def main(iargs=None): inps = cmdLineParse(iargs) outputDir = os.path.abspath(inps.output) - run_unPack = 'run_unPackAlos' ####################################### - slc_files = glob.glob(os.path.join(inps.input, '*_s5_1x1.slc')) + slc_files = glob.glob(os.path.join(inps.input, '*_s'+segment+'_1x1.slc')) for file in slc_files: imgDate = get_Date(file) print (imgDate) - annFile = file.replace('_s5_1x1.slc','')+'.ann' + annFile = file.replace('_s'+segment+'_1x1.slc','')+'.ann' print (annFile) imgDir = os.path.join(outputDir,imgDate) if not os.path.exists(imgDir): From 9a947b3d14d92a893eb7c4f81f9c05125343e467 Mon Sep 17 00:00:00 2001 From: Eric Jameson Fielding Date: Sun, 5 May 2019 23:39:11 -0700 Subject: [PATCH 2/6] more changes to support segments of UAVSAR stack --- contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py b/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py index 91571b8..f42c3b4 100755 --- a/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py +++ b/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py @@ -67,11 +67,11 @@ def main(iargs=None): outputDir = os.path.abspath(inps.output) ####################################### - slc_files = glob.glob(os.path.join(inps.input, '*_s'+segment+'_1x1.slc')) + slc_files = glob.glob(os.path.join(inps.input, '*_s'+inps.segment+'_1x1.slc')) for file in slc_files: imgDate = get_Date(file) print (imgDate) - annFile = file.replace('_s'+segment+'_1x1.slc','')+'.ann' + annFile = file.replace('_s'+inps.segment+'_1x1.slc','')+'.ann' print (annFile) imgDir = os.path.join(outputDir,imgDate) if not os.path.exists(imgDir): From 8c2e0f94af68c16e1db3a1b3733f539602359893 Mon Sep 17 00:00:00 2001 From: Eric Jameson Fielding Date: Mon, 6 May 2019 00:06:10 -0700 Subject: [PATCH 3/6] changed prepareUAVSAR to rename SLCs --- contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py b/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py index f42c3b4..ec743ec 100755 --- a/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py +++ b/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py @@ -81,7 +81,8 @@ def main(iargs=None): print (cmd) os.system(cmd) - cmd = 'mv ' + file + ' ' + imgDir + slcFile = os.path.join(imgDir, imgDate+'.slc') + cmd = 'mv ' + file + ' ' + slcFile print(cmd) os.system(cmd) @@ -90,7 +91,6 @@ def main(iargs=None): os.system(cmd) shelveFile = os.path.join(imgDir, 'data') - slcFile = os.path.join(imgDir, os.path.basename(file)) write_xml(shelveFile, slcFile) if __name__ == '__main__': From 50703cb8172e1e2be9efcdcfe1f75f8509c78c42 Mon Sep 17 00:00:00 2001 From: Eric Jameson Fielding Date: Wed, 8 May 2019 15:05:08 -0700 Subject: [PATCH 4/6] Modified stackStripMap and Stack.py to work with UAVSAR_STACK data --- contrib/stack/stripmapStack/Stack.py | 13 ++++++++----- contrib/stack/stripmapStack/stackStripMap.py | 5 ++++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/contrib/stack/stripmapStack/Stack.py b/contrib/stack/stripmapStack/Stack.py index 74d0df4..f937884 100755 --- a/contrib/stack/stripmapStack/Stack.py +++ b/contrib/stack/stripmapStack/Stack.py @@ -658,7 +658,7 @@ def baselinePair(baselineDir, master, slave): print('Baseline at top/bottom: %f %f'%(bObj.pBaselineTop,bObj.pBaselineBottom)) return (bObj.pBaselineTop+bObj.pBaselineBottom)/2. -def baselineStack(inps,stackMaster,acqDates): +def baselineStack(inps,stackMaster,acqDates,doBaselines=True): from collections import OrderedDict baselineDir = os.path.join(inps.workDir,'baselines') if not os.path.exists(baselineDir): @@ -671,7 +671,10 @@ def baselineStack(inps,stackMaster,acqDates): for slv in acqDates: if slv != stackMaster: slave = os.path.join(inps.slcDir, slv) - baselineDict[slv]=baselinePair(baselineDir, master, slave) + if doBaselines: + baselineDict[slv]=baselinePair(baselineDir, master, slave) + else: + baselineDict[slv] = 0.0 # set slave baselines to zero if not calculated t = datetime.datetime.strptime(slv, datefmt) timeDict[slv] = t - t0 else: @@ -680,11 +683,11 @@ def baselineStack(inps,stackMaster,acqDates): return baselineDict, timeDict -def selectPairs(inps,stackMaster, slaveDates, acuisitionDates): - baselineDict, timeDict = baselineStack(inps, stackMaster, acuisitionDates) +def selectPairs(inps,stackMaster, slaveDates, acuisitionDates,doBaselines=True): + + baselineDict, timeDict = baselineStack(inps, stackMaster, acuisitionDates,doBaselines) for slave in slaveDates: print (slave,' : ' , baselineDict[slave]) - numDates = len(acuisitionDates) pairs = [] for i in range(numDates-1): diff --git a/contrib/stack/stripmapStack/stackStripMap.py b/contrib/stack/stripmapStack/stackStripMap.py index 07c1f68..b7495dd 100755 --- a/contrib/stack/stripmapStack/stackStripMap.py +++ b/contrib/stack/stripmapStack/stackStripMap.py @@ -318,7 +318,10 @@ def main(iargs=None): if not os.path.exists(runDir): os.makedirs(runDir) - pairs = selectPairs(inps,stackMasterDate, slaveDates, acquisitionDates) + if inps.sensor.lower() == 'uavsar_stack': # don't try to calculate baselines for UAVSAR_STACK data + pairs = selectPairs(inps,stackMasterDate, slaveDates, acquisitionDates,doBaselines=False) + else: + pairs = selectPairs(inps,stackMasterDate, slaveDates, acquisitionDates,doBaselines=True) print ('number of pairs: ', len(pairs)) ###If only a summary is requested quit after this From d267903d66bfe99ddf2f7f17e49ca352a4ba78e1 Mon Sep 17 00:00:00 2001 From: "Eric J. Fielding" Date: Wed, 8 May 2019 17:07:16 -0700 Subject: [PATCH 5/6] added back the "--text_cmd" command argument parsing --- contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py b/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py index ec743ec..95c28d6 100755 --- a/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py +++ b/contrib/stack/stripmapStack/prepareUAVSAR_coregStack.py @@ -24,6 +24,8 @@ def createParser(): help='output directory which will be used for unpacking.') parser.add_argument('-s', '--segment', dest='segment', type=str, default='1', help='segment of the UAVSAR stack to prepare. For "s2" use "2", etc. Default is "1" ') + parser.add_argument('-t', '--text_cmd', dest='text_cmd', type=str, default='source ~/.bash_profile;', + help='text command to be added to the beginning of each line of the run files. Default: source ~/.bash_profile;') return parser From 919ce84b9bb1124bd31fb5d04b1eb4e77ed9b0bd Mon Sep 17 00:00:00 2001 From: Eric Jameson Fielding Date: Wed, 22 May 2019 15:26:13 -0700 Subject: [PATCH 6/6] Modified the contrib/stack/stripmapStack/Stack.py code to write out baseline files with baselines set to 0.0 instead of skipping them. --- contrib/stack/stripmapStack/Stack.py | 48 +++++++++++++++------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/contrib/stack/stripmapStack/Stack.py b/contrib/stack/stripmapStack/Stack.py index f937884..8c736b8 100755 --- a/contrib/stack/stripmapStack/Stack.py +++ b/contrib/stack/stripmapStack/Stack.py @@ -632,31 +632,38 @@ class workflow(object): ############################## -def baselinePair(baselineDir, master, slave): +def baselinePair(baselineDir, master, slave,doBaselines=True): - try: - mdb = shelve.open( os.path.join(master, 'raw'), flag='r') - sdb = shelve.open( os.path.join(slave, 'raw'), flag='r') - except: - mdb = shelve.open( os.path.join(master, 'data'), flag='r') - sdb = shelve.open( os.path.join(slave, 'data'), flag='r') + if doBaselines: # open files to calculate baselines + try: + mdb = shelve.open( os.path.join(master, 'raw'), flag='r') + sdb = shelve.open( os.path.join(slave, 'raw'), flag='r') + except: + mdb = shelve.open( os.path.join(master, 'data'), flag='r') + sdb = shelve.open( os.path.join(slave, 'data'), flag='r') - mFrame = mdb['frame'] - sFrame = sdb['frame'] + mFrame = mdb['frame'] + sFrame = sdb['frame'] - bObj = Baseline() - bObj.configure() - bObj.wireInputPort(name='masterFrame', object=mFrame) - bObj.wireInputPort(name='slaveFrame', object=sFrame) - bObj.baseline() + bObj = Baseline() + bObj.configure() + bObj.wireInputPort(name='masterFrame', object=mFrame) + bObj.wireInputPort(name='slaveFrame', object=sFrame) + bObj.baseline() # calculate baseline from orbits + pBaselineBottom = bObj.pBaselineBottom + pBaselineTop = bObj.pBaselineTop + else: # set baselines to zero if not calculated + pBaselineBottom = 0.0 + pBaselineTop = 0.0 + baselineOutName = os.path.basename(master) + "_" + os.path.basename(slave) + ".txt" f = open(os.path.join(baselineDir, baselineOutName) , 'w') - f.write("PERP_BASELINE_BOTTOM " + str(bObj.pBaselineBottom) + '\n') - f.write("PERP_BASELINE_TOP " + str(bObj.pBaselineTop) + '\n') + f.write("PERP_BASELINE_BOTTOM " + str(pBaselineBottom) + '\n') + f.write("PERP_BASELINE_TOP " + str(pBaselineTop) + '\n') f.close() - print('Baseline at top/bottom: %f %f'%(bObj.pBaselineTop,bObj.pBaselineBottom)) - return (bObj.pBaselineTop+bObj.pBaselineBottom)/2. + print('Baseline at top/bottom: %f %f'%(pBaselineTop,pBaselineBottom)) + return (pBaselineTop+pBaselineBottom)/2. def baselineStack(inps,stackMaster,acqDates,doBaselines=True): from collections import OrderedDict @@ -671,10 +678,7 @@ def baselineStack(inps,stackMaster,acqDates,doBaselines=True): for slv in acqDates: if slv != stackMaster: slave = os.path.join(inps.slcDir, slv) - if doBaselines: - baselineDict[slv]=baselinePair(baselineDir, master, slave) - else: - baselineDict[slv] = 0.0 # set slave baselines to zero if not calculated + baselineDict[slv]=baselinePair(baselineDir, master, slave, doBaselines) t = datetime.datetime.strptime(slv, datefmt) timeDict[slv] = t - t0 else: