Files
insar-management-system-v2/third_party/PyINT/pyint/extract_s1_bursts_old.py
T

293 lines
9.5 KiB
Python

#! /usr/bin/env python
#################################################################
### This program is part of PyINT v2.1 ###
### Copy Right (c): 2017-2019, Yunmeng Cao ###
### Author: Yunmeng Cao ###
### Contact : ymcmrs@gmail.com ###
#################################################################
import numpy as np
import os
import sys
import glob
import argparse
from pyint import _utils as ut
def common_burst(La_M,La_S):
La_M = [float(i) for i in La_M]
La_S = [float(i) for i in La_S]
Min = max(min(La_M),min(La_S))
Max = min(max(La_M),max(La_S))
M_min = []
M_max = []
for xm in La_M:
k0_min = float(xm) - float(Min)
k0_max = float(xm) - float(Max)
M_min.append(abs(k0_min))
M_max.append(abs(k0_max))
M_Index_min = M_min.index(min(M_min)) + 1
M_Index_max = M_max.index(min(M_max)) + 1
Mindex =[M_Index_min,M_Index_max]
S_min = []
S_max = []
for xs in La_S:
k0_min = float(xs) - float(Min)
k0_max = float(xs) - float(Max)
S_min.append(abs(k0_min))
S_max.append(abs(k0_max))
S_Index_min = S_min.index(min(S_min)) + 1
S_Index_max = S_max.index(min(S_max)) + 1
Sindex =[S_Index_min,S_Index_max]
return min(Mindex) , max(Mindex), min(Sindex),max(Sindex)
def get_common_burst(Mslc_dir,Sslc_dir,common_burst_txt):
Mpar_list = sorted(glob.glob(Mslc_dir+'/*.IW*.burst.par'))
Spar_list = sorted(glob.glob(Sslc_dir+'/*.IW*.burst.par'))
if os.path.isfile(common_burst_txt):
os.remove(common_burst_txt)
for kk in range(len(Mpar_list)):
MBURST = Mpar_list[kk]
SBURST = Spar_list[kk]
Mtt = Sslc_dir + '/' + os.path.basename(MBURST.replace('burst.par','tt0'))
Stt = SBURST.replace('burst.par','tt0')
call_str = "grep 'Burst:' " + MBURST + ' >' + Mtt
os.system(call_str)
call_str = "grep 'Burst:' " + SBURST + ' >' + Stt
os.system(call_str)
MM = ut.read_txt2array(Mtt)
SM = ut.read_txt2array(Stt)
La_M = MM[:,2]
La_S = SM[:,2]
PP = common_burst_Ref(La_M,La_S)
print('Common bursts of swath' + str(kk+1) + ' : (master) ' + str(PP[0]) + ' ' + str(PP[1]) + ' (slave) ' + str(PP[2]) + ' ' + str(PP[3]))
call_str = 'echo ' + str(PP[0]) + ' ' + str(PP[1]) + ' ' + str(PP[2]) + ' ' + str(PP[3]) + ' >>' + common_burst_txt
os.system(call_str)
return
def common_burst_Ref(La_M,La_S):
Min = max(min(La_M),min(La_S))
Max = min(max(La_M),max(La_S))
M_min = []
M_max = []
for xm in La_M:
k0_min = float(xm) - float(Min)
k0_max = float(xm) - float(Max)
M_min.append(abs(k0_min))
M_max.append(abs(k0_max))
M_Index_min = M_min.index(min(M_min)) + 1
M_Index_max = M_max.index(min(M_max)) + 1
Mindex =[M_Index_min,M_Index_max]
S_min = []
S_max = []
for xs in La_S:
k0_min = float(xs) - float(Min)
k0_max = float(xs) - float(Max)
S_min.append(abs(k0_min))
S_max.append(abs(k0_max))
S_Index_min = S_min.index(min(S_min)) + 1
S_Index_max = S_max.index(min(S_max)) + 1
Sindex =[S_Index_min,S_Index_max]
#print La_M
#print La_S
#print min(M_min),min(M_max),min(S_min),min(S_max)
M1 = min(Mindex)
M2 = max(Mindex)
S1 = min(Sindex)
S2 = max(Sindex)
if M1==1: S1 = S1
else:
S1=1-M1+1
M1=1
if M2 ==len(La_M): S2 = S2
else:
S2 = S2 + len(La_M) - M2
M2 = len(La_M)
return M1 , M2, S1, S2
#########################################################################
INTRODUCTION = '''
#############################################################################
Extract the common bursts for S1 TOPs based on one master image.
'''
EXAMPLE = '''
Usage:
extract_s1_bursts.py projectName 170115
Examples:
extract_s1_bursts.py PacayaT163TsxHhA 170115
##############################################################################
'''
def cmdLineParse():
parser = argparse.ArgumentParser(description='Check common busrts for TOPS data.',\
formatter_class=argparse.RawTextHelpFormatter,\
epilog=INTRODUCTION+'\n'+EXAMPLE)
parser.add_argument('projectName',help='Name of project.')
parser.add_argument('Sdate',help='Slave date.')
inps = parser.parse_args()
return inps
################################################################################
def main(argv):
inps = cmdLineParse()
projectName = inps.projectName
Sdate = inps.Sdate
scratchDir = os.getenv('SCRATCHDIR')
templateDir = os.getenv('TEMPLATEDIR')
templateFile = templateDir + "/" + projectName + ".template"
templateDict=ut.update_template(templateFile)
rlks = templateDict['range_looks']
azlks = templateDict['azimuth_looks']
Mdate = templateDict['masterDate']
processDir = scratchDir + '/' + projectName + "/PROCESS"
slcDir = scratchDir + '/' + projectName + "/SLC"
rslcDir = scratchDir + '/' + projectName + "/RSLC"
workDir0 = rslcDir + '/' + Sdate
#if not os.path.isdir(rslcDir):
# os.mkdir(rslcDir)
MslcDir = slcDir + '/' + Mdate
SslcDir = slcDir + '/' + Sdate
#MBurst_Par = slcDir + '/' + Mdate + '/' +
workDir = slcDir + '/' + Sdate
BURST = workDir + '/' + Mdate + '_' + Sdate + '.common_burst_ref'
MslcImg = workDir + '/'+Mdate + '.slc'
MslcPar = workDir + '/'+Mdate + '.slc.par'
MamprlksImg = workDir + '/'+Mdate + '_' + rlks + 'rlks' + '.amp'
MamprlksPar = workDir + '/'+Mdate + '_' + rlks +'rlks' + '.amp.par'
SslcImg = workDir + '/'+ Sdate + '.slc'
SslcPar = workDir + '/'+ Sdate + '.slc.par'
SamprlksImg = workDir + '/'+ Sdate + '_' + rlks + 'rlks' + '.amp'
SamprlksPar = workDir + '/'+ Sdate + '_' + rlks + 'rlks' + '.amp.par'
if not os.path.isdir(workDir):
os.mkdir(workDir)
get_common_burst(MslcDir,SslcDir,BURST)
AA = ut.read_txt2array(BURST)
NL = ut.get_txt_lines(BURST)
if NL ==1:
AA = AA.reshape(1,len(AA))
SW = templateDict['start_swath']
EW = templateDict['end_swath']
SB = templateDict['start_burst']
EB = templateDict['end_burst']
SLC2_tab = workDir + '/' + Sdate + '_SLC_Tab0'
SLC2_INF_tab = workDir + '/' + Sdate + '_SLC_Tab'
SLC2_RSLC_tab = workDir + '/' + Sdate + '_RSLC_Tab'
BURST2_tab = workDir + '/' + Sdate + '_Burst_Tab'
if os.path.isfile(SLC2_tab):
os.remove(SLC2_tab)
if os.path.isfile(SLC2_INF_tab):
os.remove(SLC2_INF_tab)
if os.path.isfile(SLC2_RSLC_tab):
os.remove(SLC2_RSLC_tab)
if os.path.isfile(BURST2_tab):
os.remove(BURST2_tab)
for kk in range(int(EW)-int(SW)+1):
call_str = 'echo ' + SslcDir + '/' + Sdate+'.IW'+str(int(SW)+kk) + '.slc' + ' ' + SslcDir + '/'+ Sdate + '.IW'+str(int(SW)+kk) +'.slc.par' + ' ' + SslcDir + '/'+ Sdate+'.IW'+str(int(SW)+kk) + '.slc.TOPS_par >>' + SLC2_tab
os.system(call_str)
ii = int(SW) + kk
SB1=int(AA[ii-1,0])
EB1=int(AA[ii-1,1])
SB2=int(AA[ii-1,2])
EB2=int(AA[ii-1,3])
if not int(SB)==1:
SB2 = SB2 + int(SB) - int(SB1)
if not int(EB)==100:
EB2 = SB2 + int(EB) - int(SB)
call_str = 'echo ' + workDir + '/'+ Sdate+ '_'+ str(int(SB2)) + str(int(EB2)) +'.IW'+str(int(SW)+kk)+ '.slc' + ' ' + workDir + '/' + Sdate + '_'+ str(int(SB2)) + str(int(EB2)) +'.IW'+ str(int(SW)+kk)+ '.slc.par' + ' ' + workDir + '/'+ Sdate+'_'+ str(int(SB2)) + str(int(EB2)) + '.IW'+str(int(SW)+kk)+ '.slc.TOPS_par >>' + SLC2_INF_tab
os.system(call_str)
call_str = 'echo ' + workDir0 + '/'+ Sdate+ '_'+ str(int(SB2)) + str(int(EB2)) +'.IW'+str(int(SW)+kk)+ '.rslc' + ' ' + workDir + '/' + Sdate + '_'+ str(int(SB2)) + str(int(EB2)) +'.IW'+ str(int(SW)+kk)+ '.rslc.par' + ' ' + workDir + '/'+ Sdate+'_'+ str(int(SB2)) + str(int(EB2)) + '.IW'+str(int(SW)+kk)+ '.rslc.TOPS_par >>' + SLC2_RSLC_tab
os.system(call_str)
call_str = 'echo ' + str(int(SB2)) + ' ' + str(int(EB2)) + ' >>' + BURST2_tab
os.system(call_str)
TEST = SamprlksPar
k0 = 0
if os.path.isfile(TEST):
if os.path.getsize(TEST) > 0:
k0 = 1
if k0==0:
# call_str = 'SLC_copy_ScanSAR ' + SLC2_tab + ' ' + SLC2_INF_tab + ' ' + BURST2_tab
# os.system(call_str)
# call_str = 'SLC_mosaic_S1_TOPS ' + SLC2_INF_tab + ' ' + SslcImg + ' ' + SslcPar + ' ' + rlks + ' ' +azlks
call_str = 'SLC_mosaic_S1_TOPS ' + SLC2_tab + ' ' + SslcImg + ' ' + SslcPar + ' ' + rlks + ' ' +azlks
os.system(call_str)
call_str = 'multi_look ' + SslcImg + ' ' + SslcPar + ' ' + SamprlksImg + ' ' + SamprlksPar + ' ' + rlks + ' ' + azlks
os.system(call_str)
nWidth = ut.read_gamma_par(SamprlksPar, 'read', 'range_samples')
call_str = 'raspwr ' + SamprlksImg + ' ' + str(nWidth)
os.system(call_str)
sys.exit(1)
if __name__ == '__main__':
main(sys.argv[:])