def design_matrix4deformation(inps): # Date Info ts_obj = timeseries(inps.timeseries_file) ts_obj.open() # Design matrix - temporal deformation model print('-'*50) print('correct topographic phase residual (DEM error) using Fattahi and Amelung (2013, IEEE-TGRS)') msg = 'ordinal least squares (OLS) inversion with L2-norm minimization on: phase' if inps.min_phase_velocity: msg += ' velocity' if inps.rangeDist.size != 1: msg += ' (pixel-wisely)' print(msg) tbase = np.array(ts_obj.tbase, np.float32) / 365.25 # 1. Polynomial - 2D matrix in size of (numDate, polyOrder+1) print("temporal deformation model: polynomial order = "+str(inps.poly_order)) A_def = np.ones((ts_obj.numDate, 1), np.float32) for i in range(inps.poly_order): Ai = np.array(tbase**(i+1) / gamma(i+2), np.float32).reshape(-1, 1) A_def = np.hstack((A_def, Ai)) # 2. Step function - 2D matrix in size of (numDate, len(inps.step_date)) if inps.step_date: print("temporal deformation model: step functions at "+str(inps.step_date)) t_steps = ptime.yyyymmdd2years(inps.step_date) t = np.array(ptime.yyyymmdd2years(ts_obj.dateList)) for t_step in t_steps: Ai = np.array(t > t_step, np.float32).reshape(-1, 1) A_def = np.hstack((A_def, Ai)) print('-'*50) return A_def
def correct_local_oscilator_drift(fname, rg_dist_file=None, out_file=None): print('-'*50) print('correct Local Oscilator Drift for Envisat using an empirical model (Marinkovic and Larsen, 2013)') print('-'*50) atr = readfile.read_attribute(fname) # Check Sensor Type platform = atr['PLATFORM'] print('platform: '+platform) if not platform.lower() in ['env', 'envisat']: print('No need to correct LOD for '+platform) return # output file name if not out_file: out_file = '{}_LODcor{}'.format(os.path.splitext(fname)[0], os.path.splitext(fname)[1]) # Get LOD ramp rate from empirical model if not rg_dist_file: print('calculate range distance from file metadata') rg_dist = get_relative_range_distance(atr) else: print('read range distance from file: %s' % (rg_dist_file)) rg_dist = readfile.read(rg_dist_file, datasetName='slantRangeDistance', print_msg=False)[0] rg_dist -= rg_dist[int(atr['REF_Y']), int(atr['REF_X'])] ramp_rate = np.array(rg_dist * 3.87e-7, np.float32) # Correct LOD Ramp for Input fname range2phase = -4*np.pi / float(atr['WAVELENGTH']) k = atr['FILE_TYPE'] if k == 'timeseries': # read obj = timeseries(fname) obj.open() data = obj.read() # correct LOD diff_year = np.array(obj.yearList) diff_year -= diff_year[obj.refIndex] for i in range(data.shape[0]): data[i, :, :] -= ramp_rate * diff_year[i] # write obj_out = timeseries(out_file) obj_out.write2hdf5(data, refFile=fname) elif k in ['.unw']: data, atr = readfile.read(fname) dates = ptime.yyyymmdd2years(ptime.yyyymmdd(atr['DATE12'].split('-'))) dt = dates[1] - dates[0] data -= ramp_rate * range2phase * dt writefile.write(data, out_file=out_file, metadata=atr) else: print('No need to correct for LOD for %s file' % (k)) return out_file
def read_exclude_date(inps, dateListAll): # Merge ex_date/startDate/endDate into ex_date yy_list_all = ptime.yyyymmdd2years(dateListAll) exDateList = [] # 1. template_file if inps.template_file: print('read option from template file: ' + inps.template_file) inps = read_template2inps(inps.template_file, inps) # 2. ex_date input_ex_date = list(inps.excludeDate) if input_ex_date: for ex_date in input_ex_date: if os.path.isfile(ex_date): ex_date = ptime.read_date_list(ex_date) else: ex_date = [ptime.yyyymmdd(ex_date)] exDateList += list(set(ex_date) - set(exDateList)) # delete dates not existed in input file exDateList = list(set(exDateList).intersection(dateListAll)) print('exclude date:' + str(exDateList)) # 3. startDate if inps.startDate: print('start date: ' + inps.startDate) yy_min = ptime.yyyymmdd2years(ptime.yyyymmdd(inps.startDate)) for i in range(len(dateListAll)): date = dateListAll[i] if yy_list_all[i] < yy_min and date not in exDateList: print(' remove date: ' + date) exDateList.append(date) # 4. endDate if inps.endDate: print('end date: ' + inps.endDate) yy_max = ptime.yyyymmdd2years(ptime.yyyymmdd(inps.endDate)) for i in range(len(dateListAll)): date = dateListAll[i] if yy_list_all[i] > yy_max and date not in exDateList: print(' remove date: ' + date) exDateList.append(date) exDateList = list(set(exDateList)) return exDateList
def read_exclude_date(inps, dateListAll): # Merge ex_date/startDate/endDate into ex_date yy_list_all = ptime.yyyymmdd2years(dateListAll) exDateList = [] # 1. template_file if inps.template_file: print('read option from template file: ' + inps.template_file) inps = read_template2inps(inps.template_file, inps) # 2. ex_date exDateList += ptime.read_date_list(list(inps.excludeDate), date_list_all=dateListAll) if exDateList: print('exclude date:' + str(exDateList)) # 3. startDate if inps.startDate: print('start date: ' + inps.startDate) yy_min = ptime.yyyymmdd2years(ptime.yyyymmdd(inps.startDate)) for i in range(len(dateListAll)): date = dateListAll[i] if yy_list_all[i] < yy_min and date not in exDateList: print(' remove date: ' + date) exDateList.append(date) # 4. endDate if inps.endDate: print('end date: ' + inps.endDate) yy_max = ptime.yyyymmdd2years(ptime.yyyymmdd(inps.endDate)) for i in range(len(dateListAll)): date = dateListAll[i] if yy_list_all[i] > yy_max and date not in exDateList: print(' remove date: ' + date) exDateList.append(date) exDateList = list(set(exDateList)) return exDateList