Apply current workspace changes
This commit is contained in:
+202
@@ -0,0 +1,202 @@
|
||||
#! /usr/bin/env python
|
||||
#################################################################
|
||||
### This program is part of PyINT v2.2 ###
|
||||
### Copy Right (c): 2017-2019, Chen Wei ###
|
||||
### Author: chenwei ###
|
||||
### Contact : ymcmrs@gmail.com ###
|
||||
#################################################################
|
||||
import numpy as np
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import getopt
|
||||
import time
|
||||
import glob
|
||||
import argparse
|
||||
import re
|
||||
|
||||
from pyint import _orbit_bridge as orbit_bridge
|
||||
from pyint import _utils as ut
|
||||
|
||||
|
||||
def get_LT1_date(raw_file):
|
||||
file0 = os.path.basename(raw_file)
|
||||
date = file0[41:48]
|
||||
return date
|
||||
|
||||
def get_satellite(raw_file):
|
||||
if 'LT1A_MONO_' in raw_file:
|
||||
s0 = 'A'
|
||||
else:
|
||||
s0 = 'B'
|
||||
return s0
|
||||
|
||||
|
||||
def discover_lt1_inputs(down_dir, date):
|
||||
candidates = []
|
||||
for pattern in (
|
||||
down_dir + '/LT1*' + date + '*.tar.gz',
|
||||
down_dir + '/LT1*' + date + '*.tiff',
|
||||
):
|
||||
candidates.extend(glob.glob(pattern))
|
||||
return sorted(set(candidates))
|
||||
|
||||
|
||||
def write_input_list(list_path, paths):
|
||||
with open(list_path, 'w') as f:
|
||||
for path in paths:
|
||||
f.write(path + '\n')
|
||||
|
||||
|
||||
def cmdLineParse():
|
||||
parser = argparse.ArgumentParser(description='Generate SLC from LT1 raw data with orbit correction using GAMMA.',\
|
||||
formatter_class=argparse.RawTextHelpFormatter,\
|
||||
epilog=INTRODUCTION+'\n'+EXAMPLE)
|
||||
|
||||
parser.add_argument('projectName', help='project name. e.g., ChangningT55S1A')
|
||||
parser.add_argument('date',help='date to be processed. e.g., 20180101')
|
||||
inps = parser.parse_args()
|
||||
|
||||
return inps
|
||||
|
||||
|
||||
INTRODUCTION = '''
|
||||
-------------------------------------------------------------------
|
||||
|
||||
Generate SLC from Sentinel-1 raw data using S1_import_SLC_from_zipfiles with orbit correction.
|
||||
[Precise orbit data will be downloaded automatically]
|
||||
'''
|
||||
|
||||
EXAMPLE = """Usage:
|
||||
|
||||
down2slc_LT1.py projectName date
|
||||
|
||||
down2slc_LT1.py ChangningT55S1A 20180517
|
||||
|
||||
-------------------------------------------------------------------
|
||||
"""
|
||||
|
||||
def main(argv):
|
||||
|
||||
inps = cmdLineParse()
|
||||
projectName = inps.projectName
|
||||
date = inps.date
|
||||
scratchDir = os.getenv('SCRATCHDIR')
|
||||
projectDir = scratchDir + '/' + projectName
|
||||
|
||||
templateDir = os.getenv('TEMPLATEDIR')
|
||||
templateFile = templateDir + "/" + projectName + ".template"
|
||||
templateDict=ut.update_template(templateFile)
|
||||
|
||||
slc_dir = projectDir + '/SLC'
|
||||
down_dir = projectDir + '/DOWNLOAD'
|
||||
|
||||
if not os.path.isdir(slc_dir):
|
||||
os.mkdir(slc_dir)
|
||||
|
||||
work_dir = slc_dir + '/' + date
|
||||
if not os.path.isdir(work_dir):
|
||||
os.mkdir(work_dir)
|
||||
|
||||
os.chdir(work_dir)
|
||||
|
||||
t_date = 't_' + date
|
||||
|
||||
input_files = discover_lt1_inputs(down_dir, date)
|
||||
write_input_list(t_date, input_files)
|
||||
raw_files = ut.read_txt2list(t_date)
|
||||
if len(raw_files) == 0:
|
||||
raise RuntimeError('No LT-1 inputs found for date: ' + date)
|
||||
satellite = get_satellite(str(raw_files[0]))
|
||||
raw_file_list = list(raw_files)
|
||||
|
||||
|
||||
|
||||
file_num=len(raw_files)
|
||||
for kk in range(file_num):
|
||||
|
||||
zipfile_ref=str(raw_files[kk])
|
||||
outfile_name=zipfile_ref.split('/')[-1]
|
||||
print(outfile_name)
|
||||
before_slc = set(glob.glob(work_dir + '/*.slc'))
|
||||
before_slc_par = set(glob.glob(work_dir + '/*.slc.par'))
|
||||
before_update = set(glob.glob(work_dir + '/*.slc.update'))
|
||||
before_update_par = set(glob.glob(work_dir + '/*.slc.update.par'))
|
||||
call_str = "echo " + zipfile_ref + " >date"
|
||||
if os.system(call_str) != 0:
|
||||
raise RuntimeError('Failed to materialize LT-1 input list for date: ' + date)
|
||||
call_str = 'LT1_import_SLC_from_zipfiles1 date 0 '
|
||||
rc = os.system(call_str)
|
||||
if rc != 0:
|
||||
raise RuntimeError('LT1_import_SLC_from_zipfiles1 failed for date %s with rc=%s' % (date, rc))
|
||||
after_slc = set(glob.glob(work_dir + '/*.slc'))
|
||||
after_slc_par = set(glob.glob(work_dir + '/*.slc.par'))
|
||||
after_update = set(glob.glob(work_dir + '/*.slc.update'))
|
||||
after_update_par = set(glob.glob(work_dir + '/*.slc.update.par'))
|
||||
new_slc = sorted(after_slc - before_slc)
|
||||
new_slc_par = sorted(after_slc_par - before_slc_par)
|
||||
new_update = sorted(after_update - before_update)
|
||||
new_update_par = sorted(after_update_par - before_update_par)
|
||||
if not new_slc or not new_slc_par:
|
||||
raise RuntimeError('LT-1 import produced no SLC outputs for date: ' + date)
|
||||
if len(new_update) != len(new_update_par):
|
||||
raise RuntimeError('LT-1 import produced mismatched update SLC outputs for date: ' + date)
|
||||
bridge_targets = sorted((after_slc_par - before_slc_par) | (after_update_par - before_update_par))
|
||||
if bridge_targets:
|
||||
bridge_result = orbit_bridge.apply_precise_orbit(
|
||||
date,
|
||||
bridge_targets,
|
||||
work_dir=work_dir,
|
||||
operation_tag='lt1_import',
|
||||
)
|
||||
if bridge_result.get('stdout'):
|
||||
print(bridge_result['stdout'])
|
||||
if bridge_result.get('stderr'):
|
||||
print(bridge_result['stderr'])
|
||||
|
||||
|
||||
SLC_Tab = work_dir + '/' + date+'_SLC_Tab'
|
||||
SLC_Tab_update = work_dir + '/' + date+'_update_SLC_Tab'
|
||||
SLC_update_list = sorted(glob.glob(work_dir + '/*.slc.update'))
|
||||
SLC_update_par_list = sorted(glob.glob(work_dir + '/*.slc.update.par'))
|
||||
SLC_list = sorted(glob.glob(work_dir + '/*.slc'))
|
||||
SLC_par_list = sorted(glob.glob(work_dir + '/*.slc.par'))
|
||||
if len(SLC_list) == 0 or len(SLC_par_list) == 0:
|
||||
raise RuntimeError('No LT-1 SLC outputs were generated for date: ' + date)
|
||||
if len(SLC_list) != len(SLC_par_list):
|
||||
raise RuntimeError('LT-1 SLC and SLC parameter counts do not match for date: ' + date)
|
||||
if len(SLC_update_list) != len(SLC_update_par_list):
|
||||
raise RuntimeError('LT-1 update SLC and parameter counts do not match for date: ' + date)
|
||||
|
||||
if os.path.isfile(SLC_Tab):
|
||||
os.remove(SLC_Tab)
|
||||
|
||||
for kk in range(len(SLC_list)):
|
||||
call_str = 'echo ' + SLC_list[kk] + ' ' + SLC_par_list[kk] + ' >> ' + SLC_Tab
|
||||
if os.system(call_str) != 0:
|
||||
raise RuntimeError('Failed to write SLC tab for date: ' + date)
|
||||
call_str = 'echo ' + SLC_update_list[kk] + ' ' + SLC_update_par_list[kk] + ' >> ' + SLC_Tab_update
|
||||
if os.system(call_str) != 0:
|
||||
raise RuntimeError('Failed to write update SLC tab for date: ' + date)
|
||||
call_str = 'SLC_cat_list.py ' + SLC_Tab_update + ' ' + date + '.slc ' + date + '.slc.par '
|
||||
if os.system(call_str) != 0:
|
||||
raise RuntimeError('SLC_cat_list.py failed for date: ' + date)
|
||||
if not os.path.isfile(work_dir + '/' + date + '.slc.par'):
|
||||
raise RuntimeError('Final LT-1 concatenated SLC parameter file is missing for date: ' + date)
|
||||
final_bridge_result = orbit_bridge.apply_precise_orbit(
|
||||
date,
|
||||
[work_dir + '/' + date + '.slc.par'],
|
||||
work_dir=work_dir,
|
||||
operation_tag='slc_cat_final',
|
||||
)
|
||||
if final_bridge_result.get('stdout'):
|
||||
print(final_bridge_result['stdout'])
|
||||
if final_bridge_result.get('stderr'):
|
||||
print(final_bridge_result['stderr'])
|
||||
with open(work_dir + '/down2slc.dat', 'w') as f:
|
||||
f.write('ok\n')
|
||||
print("Down to SLC for %s is done! " % date)
|
||||
sys.exit(0)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main(sys.argv[:])
|
||||
Reference in New Issue
Block a user