From 84946b6624a07dcd6cd5ba418b960deb64e57210 Mon Sep 17 00:00:00 2001 From: Sara Mirzaee Date: Sat, 14 Mar 2020 12:00:25 -0400 Subject: [PATCH 1/2] Separate master topo job from run_1_unpack --- contrib/stack/topsStack/stackSentinel.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/contrib/stack/topsStack/stackSentinel.py b/contrib/stack/topsStack/stackSentinel.py index 8e24db9..0103500 100755 --- a/contrib/stack/topsStack/stackSentinel.py +++ b/contrib/stack/topsStack/stackSentinel.py @@ -430,11 +430,16 @@ def slcStack(inps, acquisitionDates, stackMasterDate, slaveDates, safe_dict, upd ############################# i=0 + if not updateStack: + i += 1 + runObj = run() + runObj.configure(inps, 'run_' + str(i) + "_unpack_topo_master") + runObj.unpackStackMasterSLC(safe_dict) + runObj.finalize() + i+=1 runObj = run() - runObj.configure(inps, 'run_' + str(i) + "_unpack_slc_topo_master") - if not updateStack: - runObj.unpackStackMasterSLC(safe_dict) + runObj.configure(inps, 'run_' + str(i) + "_unpack_slave_slc") runObj.unpackSlavesSLC(stackMasterDate, slaveDates, safe_dict) runObj.finalize() From 1329a0b9612cfe7a525e9e6c31f0853b559760c3 Mon Sep 17 00:00:00 2001 From: Sara Mirzaee Date: Sat, 14 Mar 2020 13:55:13 -0400 Subject: [PATCH 2/2] parallel processing bursts --- contrib/stack/topsStack/topo.py | 91 +++++++++++++++++++-------------- 1 file changed, 54 insertions(+), 37 deletions(-) mode change 100644 => 100755 contrib/stack/topsStack/topo.py diff --git a/contrib/stack/topsStack/topo.py b/contrib/stack/topsStack/topo.py old mode 100644 new mode 100755 index 7b54fe8..3b4148d --- a/contrib/stack/topsStack/topo.py +++ b/contrib/stack/topsStack/topo.py @@ -10,6 +10,8 @@ import sys import s1a_isce_utils as ut from isceobj.Planet.Planet import Planet from zerodop.topozero import createTopozero +import multiprocessing as mp + def createParser(): parser = argparse.ArgumentParser( description='Generates lat/lon/h and los for each pixel') @@ -30,6 +32,49 @@ def cmdLineParse(iargs=None): return parser.parse_args(args=iargs) +def call_topo(input): + + (dirname, demImage, master, ind) = input + + burst = master.bursts[ind] + latname = os.path.join(dirname, 'lat_%02d.rdr' % (ind + 1)) + lonname = os.path.join(dirname, 'lon_%02d.rdr' % (ind + 1)) + hgtname = os.path.join(dirname, 'hgt_%02d.rdr' % (ind + 1)) + losname = os.path.join(dirname, 'los_%02d.rdr' % (ind + 1)) + maskname = os.path.join(dirname, 'shadowMask_%02d.rdr' % (ind + 1)) + incname = os.path.join(dirname, 'incLocal_%02d.rdr' % (ind + 1)) + #####Run Topo + planet = Planet(pname='Earth') + topo = createTopozero() + topo.slantRangePixelSpacing = burst.rangePixelSize + topo.prf = 1.0 / burst.azimuthTimeInterval + topo.radarWavelength = burst.radarWavelength + topo.orbit = burst.orbit + topo.width = burst.numberOfSamples + topo.length = burst.numberOfLines + topo.wireInputPort(name='dem', object=demImage) + topo.wireInputPort(name='planet', object=planet) + topo.numberRangeLooks = 1 + topo.numberAzimuthLooks = 1 + topo.lookSide = -1 + topo.sensingStart = burst.sensingStart + topo.rangeFirstSample = burst.startingRange + topo.demInterpolationMethod = 'BIQUINTIC' + topo.latFilename = latname + topo.lonFilename = lonname + topo.heightFilename = hgtname + topo.losFilename = losname + topo.maskFilename = maskname + topo.incFilename = incname + topo.topo() + + bbox = [topo.minimumLatitude, topo.maximumLatitude, topo.minimumLongitude, topo.maximumLongitude] + + topo = None + + return bbox + + def main(iargs=None): inps = cmdLineParse(iargs) @@ -40,6 +85,8 @@ def main(iargs=None): demImage.load(inps.dem + '.xml') boxes = [] + inputs = [] + for swath in swathList: master = ut.loadProduct(os.path.join(inps.master , 'IW{0}.xml'.format(swath))) @@ -51,50 +98,20 @@ def main(iargs=None): else: os.makedirs(dirname) - - ###For each burst for ind in range(master.numberOfBursts): - burst = master.bursts[ind] + inputs.append((dirname, demImage, master, ind)) - latname = os.path.join(dirname, 'lat_%02d.rdr'%(ind+1)) - lonname = os.path.join(dirname, 'lon_%02d.rdr'%(ind+1)) - hgtname = os.path.join(dirname, 'hgt_%02d.rdr'%(ind+1)) - losname = os.path.join(dirname, 'los_%02d.rdr'%(ind+1)) - maskname = os.path.join(dirname, 'shadowMask_%02d.rdr'%(ind+1)) - incname = os.path.join(dirname, 'incLocal_%02d.rdr'%(ind+1)) - #####Run Topo - planet = Planet(pname='Earth') - topo = createTopozero() - topo.slantRangePixelSpacing = burst.rangePixelSize - topo.prf = 1.0/burst.azimuthTimeInterval - topo.radarWavelength = burst.radarWavelength - topo.orbit = burst.orbit - topo.width = burst.numberOfSamples - topo.length = burst.numberOfLines - topo.wireInputPort(name='dem', object=demImage) - topo.wireInputPort(name='planet', object=planet) - topo.numberRangeLooks = 1 - topo.numberAzimuthLooks = 1 - topo.lookSide = -1 - topo.sensingStart = burst.sensingStart - topo.rangeFirstSample = burst.startingRange - topo.demInterpolationMethod='BIQUINTIC' - topo.latFilename = latname - topo.lonFilename = lonname - topo.heightFilename = hgtname - topo.losFilename = losname - topo.maskFilename = maskname - topo.incFilename = incname - topo.topo() + pool = mp.Pool(mp.cpu_count()) + results = pool.map(call_topo, inputs) + pool.close() - bbox = [topo.minimumLatitude, topo.maximumLatitude, topo.minimumLongitude, topo.maximumLongitude] - boxes.append(bbox) - - topo = None + for bbox in results: + boxes.append(bbox) boxes = np.array(boxes) bbox = [np.min(boxes[:,0]), np.max(boxes[:,1]), np.min(boxes[:,2]), np.max(boxes[:,3])] print ('bbox : ',bbox) + if __name__ == '__main__':