def extract_metadata4geometry_radar(fname): """Read/extract attribute for .hgt_sim file from Gamma to ROI_PAC Input: sim_20070813_20080310.hgt_sim sim_20070813_20080310.rdc.dem Search for: sim_20070813_20080310.diff_par Output: sim_20070813_20080310.hgt_sim.rsc sim_20070813_20080310.rdc.dem.rsc """ # Get/read GAMMA par file # for loop to get rid of multiple dot in filename fname_base = os.path.splitext(fname)[0] for i in range(5): fname_base = os.path.splitext(fname_base)[0] par_file = fname_base+'.diff_par' par_dict = readfile.read_gamma_par(par_file) # Get/read LAT/LON_REF1/2/3/4 msg = 'grab LAT/LON_REF1/2/3/4 from par file: ' # get date of one acquisition try: m_date = str(re.findall('\d{8}', fname_base)[0]) except: m_date = str(re.findall('\d{6}', fname_base)[0]) # search existing par file geom_dir = os.path.dirname(fname) #PROJECT_DIR/geom_master ifg_dir = os.path.join(geom_dir, '../*/{}_*'.format(m_date)) #PROJECT_DIR/interferograms/{m_date}_20141225 m_par_files = [os.path.join(geom_dir, '*{}*{}'.format(m_date, ext)) for ext in PAR_EXT_LIST] m_par_files += [os.path.join(ifg_dir, '*{}*{}'.format(m_date, ext)) for ext in PAR_EXT_LIST] m_par_files = ut.get_file_list(m_par_files) # read par file if len(m_par_files) > 0: m_par_file = m_par_files[0] msg += m_par_file par_dict = get_lalo_ref(m_par_file, par_dict) else: msg += ' no par file found with date: {}'.format(m_date) print(msg) # initiate ROIPAC dict atr = {} atr['PROCESSOR'] = 'gamma' atr['FILE_TYPE'] = os.path.splitext(fname)[1] atr.update(par_dict) # Write to .rsc file rsc_file = fname+'.rsc' try: atr_orig = readfile.read_roipac_rsc(rsc_file) except: atr_orig = dict() if not set(atr.items()).issubset(set(atr_orig.items())): atr_out = {**atr_orig, **atr} print('writing >>> '+os.path.basename(rsc_file)) writefile.write_roipac_rsc(atr_out, out_file=rsc_file) return rsc_file
def check_exist_grib_file(gfile_list, print_msg=True): """Check input list of grib files, and return the existing ones with right size.""" gfile_exist = ut.get_file_list(gfile_list) if gfile_exist: file_sizes = [os.path.getsize(i) for i in gfile_exist if os.path.getsize(i) > 10e6] if file_sizes: comm_size = ut.most_common([i for i in file_sizes]) if print_msg: print('common file size: {} bytes'.format(comm_size)) print('number of grib files existed : {}'.format(len(gfile_exist))) gfile_corrupt = [] for gfile in gfile_exist: if os.path.getsize(gfile) < comm_size * 0.9: gfile_corrupt.append(gfile) else: gfile_corrupt = gfile_exist if gfile_corrupt: if print_msg: print('------------------------------------------------------------------------------') print('corrupted grib files detected! Delete them and re-download...') print('number of grib files corrupted : {}'.format(len(gfile_corrupt))) for i in gfile_corrupt: rmCmd = 'rm '+i print(rmCmd) os.system(rmCmd) gfile_exist.remove(i) if print_msg: print('------------------------------------------------------------------------------') return gfile_exist
def _check_inps(inps): inps.file = ut.get_file_list(inps.file) if not inps.file: raise Exception('ERROR: no input file found!') elif len(inps.file) > 1: inps.outfile = None atr = readfile.read_attribute(inps.file[0]) if 'Y_FIRST' in atr.keys() and inps.radar2geo: print('input file is already geocoded') print('to resample geocoded files into radar coordinates, use --geo2radar option') print('exit without doing anything.') sys.exit(0) elif 'Y_FIRST' not in atr.keys() and not inps.radar2geo: print('input file is already in radar coordinates, exit without doing anything') sys.exit(0) inps.lookupFile = ut.get_lookup_file(inps.lookupFile) if not inps.lookupFile: raise FileNotFoundError('No lookup table found! Can not geocode without it.') if inps.SNWE: inps.SNWE = tuple(inps.SNWE) inps.laloStep = [inps.latStep, inps.lonStep] if None in inps.laloStep: inps.laloStep = None inps.nprocs = check_num_processor(inps.nprocs) return inps
def cmd_line_parse(iargs=None): parser = create_parser() inps = parser.parse_args(args=iargs) inps.file = ut.get_file_list(inps.file) if len(inps.file) > 1 and inps.outfile: inps.outfile = None print('more than one file is input, disable custom output filename.') return inps
def main(iargs=None): inps = cmd_line_parse(iargs) inps.file = ut.get_file_list(inps.file)[0] inps = read_reference_input(inps) if inps.go_reference: reference_file(inps) print('Done.') return
def cmd_line_parse(iargs=None): parser = create_parser() inps = parser.parse_args(args=iargs) inps.file = ut.get_file_list(inps.file) #print('number of input files: ({})\n{}'.format(len(inps.file), inps.file)) if len(inps.file) > 1: inps.outfile = None return inps
def cmd_line_parse(iargs=None): parser = create_parser() inps = parser.parse_args(args=iargs) inps.file = ut.get_file_list(inps.file, abspath=True) inps.file_ext = os.path.splitext(inps.file[0])[1] # check input file extension ext_list = ['.unw', '.cor', '.int', '.dem', '.hgt_sim', '.UTM_TO_RDC'] if inps.file_ext not in ext_list: msg = 'unsupported input file extension: {}'.format(inps.file_ext) msg += '\nsupported file extensions: {}'.format(ext_list) raise ValueError() return inps
def set_mask(): global mask, inps, atr if not inps.mask_file: if os.path.basename(inps.timeseries_file).startswith('geo_'): file_list = ['geo_maskTempCoh.h5'] else: file_list = ['maskTempCoh.h5', 'maskConnComp.h5'] try: inps.mask_file = ut.get_file_list(file_list)[0] except: inps.mask_file = None try: mask = readfile.read(inps.mask_file, datasetName='mask')[0] mask[mask!=0] = 1 print(('load mask from file: '+inps.mask_file)) except: mask = None print('No mask used.')
def main(argv): inps = cmdLineParse() if inps.timeseries_file: inps.timeseries_file=ut.get_file_list([inps.timeseries_file])[0] atr=readfile.read_attribute(inps.timeseries_file) k = atr['FILE_TYPE'] if 'ref_y' not in list(atr.keys()) and inps.ref_yx: print('No reference info found in input file, use input ref_yx: '+str(inps.ref_yx)) atr['ref_y'] = inps.ref_yx[0] atr['ref_x'] = inps.ref_yx[1] #****reading incidence angle file***/ if os.path.isfile(inps.inc_angle): inps.inc_angle=readfile.read(inps.inc_angle, datasetName='incidenceAngle')[0] inps.inc_angle=np.nan_to_num(inps.inc_angle) else: inps.inps.inc_angle = float(inps.inc_angle) print('incidence angle: '+str(inps.inc_angle)) cinc=np.cos(inps.inc_angle*np.pi/180.0); #****look up file****/ if inps.lookup_file: inps.lookup_file = ut.get_file_list([inps.lookup_file])[0] #'geomap_32rlks_tight.trans' #****GACOS****/ delay_source = 'GACOS' # Get weather directory if not inps.GACOS_dir: if inps.timeseries_file: inps.GACOS_dir = os.path.dirname(os.path.abspath(inps.timeseries_file))+'/../WEATHER/GACOS' elif inps.lookup_file: inps.GACOS_dir = os.path.dirname(os.path.abspath(inps.lookup_file))+'/../WEATHER/GACOS' else: inps.GACOS_dir = os.path.abspath(os.getcwd()) print('Store weather data into directory: '+inps.GACOS_dir) #source_dir=os.path.dirname(os.path.abspath('timeseries_file'))+'/Agung/GACOS/data';print source_dir #os.makedirs(GACOS_dir) -----------------------------------------------add part to copy/download weather data------# #----get date list-----# if not inps.date_list_file: print('read date list info from: '+inps.timeseries_file) h5=h5py.File(inps.timeseries_file,'r') if 'timeseries' in list(h5.keys()): date_list=sorted(h5[k].keys()) elif k in ['interferograms','coherence','wrapped']: ifgram_list = sorted(h5[k].keys()) date12_list = pnet.get_date12_list(inps.timeseries_file) m_dates = [i.split('-')[0] for i in date12_list] s_dates = [i.split('-')[1] for i in date12_list] date_list = ptime.yyyymmdd(sorted(list(set(m_dates + s_dates)))) else: raise ValueError('Un-support input file type:'+k) h5.close() else: date_list = ptime.yyyymmdd(np.loadtxt(inps.date_list_file, dtype=str, usecols=(0,)).tolist()) print('read date list info from: '+inps.date_list_file) #****cheacking availability of delays****/ print('checking availability of delays') delay_file_list=[] for d in date_list: if delay_source == 'GACOS': delay_file = inps.GACOS_dir+'/'+d+'.ztd'; delay_file_list.append(delay_file) delay_file_existed = ut.get_file_list(delay_file_list) if len(delay_file_existed)==len(date_list): print('no missing files') else: print('no. of date files found:', len(delay_file_existed)); print('no. of dates:', len(date_list)) #*****Calculating delays***/ print('calculating delays') length=int(atr['FILE_LENGTH']) width=int(atr['WIDTH']) #initialise delay files date_num=len(date_list) trop_ts=np.zeros((date_num, length, width), np.float32) #reading wrf files for each epoch and getting delay for i in range(date_num): delay_file=delay_file_existed[i] date=date_list[i] print('calculating delay for date',date) trop_ts[i] =get_delay(delay_file,atr,inps.lookup_file,cinc) print('Delays Calculated') # Convert relative phase delay on reference date try: ref_date = atr['ref_date'] except: ref_date = date_list[0] print('convert to relative phase delay with reference date: '+ref_date) ref_idx = date_list.index(ref_date) trop_ts -= np.tile(trop_ts[ref_idx,:,:], (date_num, 1, 1)) ## Write tropospheric delay to HDF5 tropFile = 'GACOSdelays'+'.h5' print('writing >>> %s' % (tropFile)) h5trop = h5py.File(tropFile, 'w') group_trop = h5trop.create_group('timeseries') print('number of acquisitions: '+str(date_num)) prog_bar = ptime.progress_bar(maxValue=date_num) for i in range(date_num): date = date_list[i] group_trop.create_dataset(date, data=trop_ts[i], compression='gzip') prog_bar.update(i+1, suffix=date) prog_bar.close() # Write Attributes for key,value in atr.items(): group_trop.attrs[key] = value h5trop.close() ## Write corrected Time series to HDF5 if k == 'timeseries': if not inps.out_file: inps.out_file = os.path.splitext(inps.timeseries_file)[0]+'_'+'GACOS'+'.h5' print('writing trop corrected timeseries file %s' % (inps.out_file)) h5ts = h5py.File(inps.timeseries_file, 'r') h5tsCor = h5py.File(inps.out_file, 'w') group_tsCor = h5tsCor.create_group('timeseries') print('number of acquisitions: '+str(date_num)) prog_bar = ptime.progress_bar(maxValue=date_num) for i in range(date_num): date = date_list[i];print(date) ts = h5ts['timeseries'].get(date)[:] group_tsCor.create_dataset(date, data=ts-trop_ts[i], compression='gzip') prog_bar.update(i+1, suffix=date) prog_bar.close() h5ts.close() # Write Attributes for key,value in atr.items(): group_tsCor.attrs[key] = value h5tsCor.close() print('delays written to %s' % (inps.out_file)) print('finished') return inps.out_file
def extract_metadata4geometry_radar(fname): """Read/extract attribute for .hgt_sim file from Gamma to ROI_PAC Input: sim_20070813_20080310.hgt_sim sim_20070813_20080310.rdc.dem Search for: sim_20070813_20080310.diff_par Output: sim_20070813_20080310.hgt_sim.rsc sim_20070813_20080310.rdc.dem.rsc """ # Get/read GAMMA par file # for loop to get rid of multiple dot in filename fname_base = os.path.splitext(fname)[0] for i in range(5): fname_base = os.path.splitext(fname_base)[0] par_file = fname_base + '.diff_par' par_dict = readfile.read_gamma_par(par_file) # Get/read LAT/LON_REF1/2/3/4 msg = 'grab LAT/LON_REF1/2/3/4 from par file: ' # get date of one acquisition try: m_date = str(re.findall('\d{8}', fname_base)[0]) except: m_date = str(re.findall('\d{6}', fname_base)[0]) # search existing par file geom_dir = os.path.dirname(fname) #PROJECT_DIR/geom_master ifg_dir = os.path.join(geom_dir, '../*/{}_*'.format( m_date)) #PROJECT_DIR/interferograms/{m_date}_20141225 m_par_files = [ os.path.join(geom_dir, '*{}*{}'.format(m_date, ext)) for ext in PAR_EXT_LIST ] m_par_files += [ os.path.join(ifg_dir, '*{}*{}'.format(m_date, ext)) for ext in PAR_EXT_LIST ] m_par_files = ut.get_file_list(m_par_files) # read par file if len(m_par_files) > 0: m_par_file = m_par_files[0] msg += m_par_file par_dict = get_lalo_ref(m_par_file, par_dict) else: msg += ' no par file found with date: {}'.format(m_date) print(msg) # initiate ROIPAC dict atr = {} atr['PROCESSOR'] = 'gamma' atr['FILE_TYPE'] = os.path.splitext(fname)[1] atr.update(par_dict) # Write to .rsc file rsc_file = fname + '.rsc' try: atr_orig = readfile.read_roipac_rsc(rsc_file) except: atr_orig = dict() if not set(atr.items()).issubset(set(atr_orig.items())): atr_out = {**atr_orig, **atr} print('writing >>> ' + os.path.basename(rsc_file)) writefile.write_roipac_rsc(atr_out, out_file=rsc_file) return rsc_file
def extract_metadata4interferogram(fname): """Read/extract attributes from Gamma .unw, .cor and .int file Parameters: fname : str, Gamma interferogram filename or path, i.e. /PopoSLT143TsxD/diff_filt_HDR_130118-130129_4rlks.unw Returns: atr : dict, Attributes dictionary """ file_dir = os.path.dirname(fname) file_basename = os.path.basename(fname) rsc_file = fname + '.rsc' # if os.path.isfile(rsc_file): # return rsc_file atr = {} atr['PROCESSOR'] = 'gamma' atr['FILE_TYPE'] = os.path.splitext(fname)[1] # Get info: date12, num of loooks try: date12 = str(re.findall('\d{8}[-_]\d{8}', file_basename)[0]) except: date12 = str(re.findall('\d{6}[-_]\d{6}', file_basename)[0]) m_date, s_date = date12.replace('-', '_').split('_') atr['DATE12'] = ptime.yymmdd(m_date) + '-' + ptime.yymmdd(s_date) lks = os.path.splitext(file_basename)[0].split(date12)[1] #lks = os.path.splitext(file_basename.split(date12)[1])[0] # Read .off and .par file off_files = file_dir + '/*' + date12 + lks + '.off' m_par_files = [file_dir + '/*' + m_date + lks + i for i in PAR_EXT_LIST] s_par_files = [file_dir + '/*' + s_date + lks + i for i in PAR_EXT_LIST] try: m_par_file = ut.get_file_list(m_par_files)[0] except: m_par_file = None print( '\nERROR: Can not find master date .par file, it supposed to be like: ' + m_par_files) try: s_par_file = ut.get_file_list(s_par_files)[0] except: s_par_file = None print( '\nERROR: Can not find slave date .par file, it supposed to be like: ' + s_par_files) try: off_file = ut.get_file_list(off_files)[0] except: off_file = file_dir + '/' + date12 + lks + '.off' offCmd = 'create_offset {} {} {} 1 1 1 0'.format( m_par_file, s_par_file, off_file) print(offCmd) os.system(offCmd) par_dict = readfile.read_gamma_par(m_par_file) off_dict = readfile.read_gamma_par(off_file) atr.update(par_dict) atr.update(off_dict) # Perp Baseline Info atr = get_perp_baseline(m_par_file, s_par_file, off_file, atr) # LAT/LON_REF1/2/3/4 atr = get_lalo_ref(m_par_file, atr) # Write to .rsc file try: atr_orig = readfile.read_roipac_rsc(rsc_file) except: atr_orig = dict() if not set(atr.items()).issubset(set(atr_orig.items())): atr_out = {**atr_orig, **atr} print('merge %s, %s and %s into %s' % (os.path.basename(m_par_file), os.path.basename(s_par_file), os.path.basename(off_file), os.path.basename(rsc_file))) writefile.write_roipac_rsc(atr_out, out_file=rsc_file) return rsc_file
def cmd_line_parse(iargs=None): parser = create_parser() inps = parser.parse_args(args=iargs) inps.file = ut.get_file_list(inps.file, abspath=True) return inps
def read_subset_box(inpsDict): # Read subset info from template inpsDict['box'] = None inpsDict['box4geo_lut'] = None pix_box, geo_box = subset.read_subset_template2box(inpsDict['template_file'][0]) # Grab required info to read input geo_box into pix_box try: lookupFile = [glob.glob(str(inpsDict['mintpy.load.lookupYFile']))[0], glob.glob(str(inpsDict['mintpy.load.lookupXFile']))[0]] except: lookupFile = None try: pathKey = [i for i in datasetName2templateKey.values() if i in inpsDict.keys()][0] file = glob.glob(str(inpsDict[pathKey]))[0] atr = readfile.read_attribute(file) except: atr = dict() geocoded = None if 'Y_FIRST' in atr.keys(): geocoded = True else: geocoded = False # Check conflict if geo_box and not geocoded and lookupFile is None: geo_box = None print(('WARNING: mintpy.subset.lalo is not supported' ' if 1) no lookup file AND' ' 2) radar/unkonwn coded dataset')) print('\tignore it and continue.') if not geo_box and not pix_box: # adjust for the size inconsistency problem in SNAP geocoded products # ONLY IF there is no input subset # Use the min bbox if files size are different if inpsDict['processor'] == 'snap': fnames = ut.get_file_list(inpsDict['mintpy.load.unwFile']) pix_box = update_box4files_with_inconsistent_size(fnames) if not pix_box: return inpsDict # geo_box --> pix_box coord = ut.coordinate(atr, lookup_file=lookupFile) if geo_box is not None: pix_box = coord.bbox_geo2radar(geo_box) pix_box = coord.check_box_within_data_coverage(pix_box) print('input bounding box of interest in lalo: {}'.format(geo_box)) print('box to read for datasets in y/x: {}'.format(pix_box)) # Get box for geocoded lookup table (for gamma/roipac) box4geo_lut = None if lookupFile is not None: atrLut = readfile.read_attribute(lookupFile[0]) if not geocoded and 'Y_FIRST' in atrLut.keys(): geo_box = coord.bbox_radar2geo(pix_box) box4geo_lut = ut.coordinate(atrLut).bbox_geo2radar(geo_box) print('box to read for geocoded lookup file in y/x: {}'.format(box4geo_lut)) inpsDict['box'] = pix_box inpsDict['box4geo_lut'] = box4geo_lut return inpsDict
def cmd_line_parse(iargs=None): inps = create_parser().parse_args(args=iargs) # save argv (to check the manually specified arguments) # use iargs for python call # use sys.argv[1:] for command line call inps.argv = iargs if iargs else sys.argv[1:] if inps.outfile or not inps.disp_fig: inps.save_fig = True # input file info inps.file = ut.get_file_list(inps.file) inps.atr = readfile.read_attribute(inps.file[0]) inps.coord = ut.coordinate(inps.atr) inps.num_file = len(inps.file) if inps.num_file > 1: # a) one input: it's interval between adjacent files if len(inps.offset) == 1: inps.offset = np.ones(inps.num_file, dtype=np.float32) * inps.offset inps.offset[0] = 0. inps.offset = np.cumsum(inps.offset) # b) multiple input: it's exact offset of all files elif len(inps.offset) == inps.num_file: inps.offset = np.array(inps.offset, dtype=np.float32) # c) do not support any other numbers of inputs else: msg = 'input number of offsets: {}.'.format(len(inps.offset)) msg += '\nIt should be 1 or number of files: {}'.format( inps.num_file) raise ValueError(msg) else: # disable offset for single input file inps.offset = np.array([0], dtype=np.float32) if not inps.dset: inps.dset = readfile.get_slice_list(inps.file[0])[0] # lola_file --> start/end_lalo if inps.lola_file: inps.start_lalo, inps.end_lalo = read_lonlat_file(inps.lola_file) # start/end_lalo --> start/end_yx if inps.start_lalo and inps.end_lalo: [y0, y1] = inps.coord.lalo2yx([inps.start_lalo[0], inps.end_lalo[0]], coord_type='lat') [x0, x1] = inps.coord.lalo2yx([inps.start_lalo[1], inps.end_lalo[1]], coord_type='lon') inps.start_yx = [y0, x0] inps.end_yx = [y1, x1] # verbose print using --noverbose option global vprint vprint = print if inps.print_msg else lambda *args, **kwargs: None if not inps.disp_fig: plt.switch_backend('Agg') return inps
def extract_metadata4interferogram(fname, sensor_name=None): """Read/extract attributes from Gamma .unw, .cor and .int file Parameters: fname : str, Gamma interferogram filename or path, i.e. /PopoSLT143TsxD/diff_filt_HDR_130118-130129_4rlks.unw Returns: atr : dict, Attributes dictionary """ file_dir = os.path.dirname(fname) file_basename = os.path.basename(fname) rsc_file = fname + '.rsc' # if os.path.isfile(rsc_file): # return rsc_file atr = {} atr['PROCESSOR'] = 'gamma' atr['FILE_TYPE'] = os.path.splitext(fname)[1] # Get info: date12, num of loooks try: date12 = str(re.findall('\d{8}[-_]\d{8}', file_basename)[0]) except: date12 = str(re.findall('\d{6}[-_]\d{6}', file_basename)[0]) m_date, s_date = date12.replace('-', '_').split('_') atr['DATE12'] = ptime.yymmdd(m_date) + '-' + ptime.yymmdd(s_date) lks = os.path.splitext(file_basename)[0].split(date12)[1] #lks = os.path.splitext(file_basename.split(date12)[1])[0] # Read .off and .par file off_files = file_dir + '/*' + date12 + lks + '.off' m_par_files = [file_dir + '/*' + m_date + lks + i for i in PAR_EXT_LIST] s_par_files = [file_dir + '/*' + s_date + lks + i for i in PAR_EXT_LIST] try: m_par_file = ut.get_file_list(m_par_files)[0] except: m_par_file = None print( '\nERROR: Can not find reference date .par file, it supposed to be like: ' + m_par_files) try: s_par_file = ut.get_file_list(s_par_files)[0] except: s_par_file = None print( '\nERROR: Can not find secondary date .par file, it supposed to be like: ' + s_par_files) try: off_file = ut.get_file_list(off_files)[0] except: off_file = file_dir + '/' + date12 + lks + '.off' offCmd = 'create_offset {} {} {} 1 1 1 0'.format( m_par_file, s_par_file, off_file) print(offCmd) os.system(offCmd) par_dict = readfile.read_gamma_par(m_par_file) off_dict = readfile.read_gamma_par(off_file) atr.update(par_dict) atr.update(off_dict) # Perp Baseline Info atr = get_perp_baseline(m_par_file, s_par_file, off_file, atr) # LAT/LON_REF1/2/3/4 atr = get_lalo_ref(m_par_file, atr) # NCORRLOOKS if sensor_name: rg_bandwidth = float(atr['chirp_bandwidth']) rg_resolution = SPEED_OF_LIGHT / (2. * rg_bandwidth) rg_pixel_size = float(atr['RANGE_PIXEL_SIZE']) / float(atr['RLOOKS']) rg_fact = rg_resolution / rg_pixel_size antenna_length = sensor.SENSOR_DICT[sensor_name]['antenna_length'] az_resolution = antenna_length / 2 az_pixel_size = float(atr['AZIMUTH_PIXEL_SIZE']) / float(atr['ALOOKS']) az_fact = az_resolution / az_pixel_size ncorr_looks = float(atr['RLOOKS']) * float( atr['ALOOKS']) / (rg_fact * az_fact) atr['NCORRLOOKS'] = ncorr_looks # Write to .rsc file try: atr_orig = readfile.read_roipac_rsc(rsc_file) except: atr_orig = dict() if not set(atr.items()).issubset(set(atr_orig.items())): atr_out = {**atr_orig, **atr} print('merge %s, %s and %s into %s' % (os.path.basename(m_par_file), os.path.basename(s_par_file), os.path.basename(off_file), os.path.basename(rsc_file))) writefile.write_roipac_rsc(atr_out, out_file=rsc_file) return rsc_file
def cmd_line_parse(iargs=None): parser = create_parser() inps = parser.parse_args(args=iargs) inps.file = ut.get_file_list(inps.file, abspath=True) inps.outfile = os.path.abspath(inps.outfile) return inps
def extract_metadata4interferogram(fname): """Read/extract attributes from Gamma .unw, .cor and .int file Parameters: fname : str, Gamma interferogram filename or path, i.e. /PopoSLT143TsxD/diff_filt_HDR_130118-130129_4rlks.unw Returns: atr : dict, Attributes dictionary """ file_dir = os.path.dirname(fname) file_basename = os.path.basename(fname) rsc_file = fname+'.rsc' # if os.path.isfile(rsc_file): # return rsc_file atr = {} atr['PROCESSOR'] = 'gamma' atr['FILE_TYPE'] = os.path.splitext(fname)[1] # Get info: date12, num of loooks try: date12 = str(re.findall('\d{8}[-_]\d{8}', file_basename)[0]) except: date12 = str(re.findall('\d{6}[-_]\d{6}', file_basename)[0]) m_date, s_date = date12.replace('-', '_').split('_') atr['DATE12'] = ptime.yymmdd(m_date)+'-'+ptime.yymmdd(s_date) lks = os.path.splitext(file_basename)[0].split(date12)[1] #lks = os.path.splitext(file_basename.split(date12)[1])[0] # Read .off and .par file off_files = file_dir+'/*'+date12+lks+'.off' m_par_files = [file_dir+'/*'+m_date+lks+i for i in PAR_EXT_LIST] s_par_files = [file_dir+'/*'+s_date+lks+i for i in PAR_EXT_LIST] try: m_par_file = ut.get_file_list(m_par_files)[0] except: m_par_file = None print('\nERROR: Can not find master date .par file, it supposed to be like: '+m_par_files) try: s_par_file = ut.get_file_list(s_par_files)[0] except: s_par_file = None print('\nERROR: Can not find slave date .par file, it supposed to be like: '+s_par_files) try: off_file = ut.get_file_list(off_files)[0] except: off_file = file_dir+'/'+date12+lks+'.off' offCmd = 'create_offset {} {} {} 1 1 1 0'.format(m_par_file, s_par_file, off_file) print(offCmd) os.system(offCmd) par_dict = readfile.read_gamma_par(m_par_file) off_dict = readfile.read_gamma_par(off_file) atr.update(par_dict) atr.update(off_dict) # Perp Baseline Info atr = get_perp_baseline(m_par_file, s_par_file, off_file, atr) # LAT/LON_REF1/2/3/4 atr = get_lalo_ref(m_par_file, atr) # Write to .rsc file try: atr_orig = readfile.read_roipac_rsc(rsc_file) except: atr_orig = dict() if not set(atr.items()).issubset(set(atr_orig.items())): atr_out = {**atr_orig, **atr} print('merge %s, %s and %s into %s' % (os.path.basename(m_par_file), os.path.basename(s_par_file), os.path.basename(off_file), os.path.basename(rsc_file))) writefile.write_roipac_rsc(atr_out, out_file=rsc_file) return rsc_file