x = int((inps.ref_lalo[1] - ullon) / lon_step + 0.5) inps.ref_yx = [y, x] # Display Unit if inps.disp_unit == 'cm': inps.unit_fac = 100.0 elif inps.disp_unit == 'm': inps.unit_fac = 1.0 elif inps.disp_unit == 'dm': inps.unit_fac = 10.0 elif inps.disp_unit == 'mm': inps.unit_fac = 1000.0 elif inps.disp_unit == 'km': inps.unit_fac = 0.001 else: raise ValueError('Un-recognized unit: ' + inps.disp_unit) print 'data unit: m' print 'display unit: ' + inps.disp_unit # Flip up-down / left-right if inps.auto_flip: inps.flip_lr, inps.flip_ud = view.auto_flip_direction(atr) else: inps.flip_ud = False inps.left_lr = False # Mask file if not inps.mask_file: if 'X_FIRST' in atr.keys(): file_list = ['geo_maskTempCoh.h5'] else: file_list = ['maskTempCoh.h5', 'mask.h5'] try: inps.mask_file = ut.get_file_list(file_list)[0] except: inps.mask_file = None try:
def main(argv): ## Default settings contour_step = 200.0 contour_sigma = 3.0 demShade = 'yes' demContour = 'yes' global markerSize, markderSize2, markerColor, markerColor2, rectColor global lineWidth, lineWidth2, edgeWidth, fontSize #global markerColor_ref, markerColor_ref2 markerSize = 16 markerSize2 = 16 markerColor = 'crimson' # g markerColor2 = 'lightgray' markerColor_ref = 'white' markerColor_ref2 = 'lightgray' rectColor = 'black' lineWidth = 0 lineWidth2 = 0 edgeWidth = 1.5 fontSize = 16 global unit, radius, saveFig, dispFig, fig_dpi fig_dpi = 300 radius = 0 saveFig = 'no' dispFig = 'yes' unit = 'cm' dispDisplacement = 'no' dispOpposite = 'no' dispContour = 'only' smoothContour = 'no' contour_step = 200 showRef = 'yes' vel_alpha = 1.0 zero_start = 'yes' global ref_xsub, ref_ysub, ref_date global h5timeseries_2, dates_2, dateList_2 global lbound, hbound ############### Check Inputs ################## if len(sys.argv) < 2: usage() sys.exit(1) elif len(sys.argv) == 2: if argv[0] == '-h': usage() sys.exit(1) elif os.path.isfile(argv[0]): timeSeriesFile = argv[0] h5timeseries = h5py.File(timeSeriesFile) k = h5timeseries.keys() if not 'timeseries' in k: print 'ERROR: Input file is ' + k[ 0] + '.\n\tOnly timeseries is supported.\n' sys.exit(1) else: usage() sys.exit(1) elif len(sys.argv) > 2: try: opts, args = getopt.getopt(argv,"f:F:v:a:b:s:m:c:w:u:l:h:D:V:t:T:d:r:x:y:X:Y:o:E:", ['save','nodisplay','unit=','exclude=','ref-date=','rect-color=',\ 'zero-start=','zoom-x=','zoom-y=','zoom-lon','zoom-lat','lalo=',\ 'opposite','dem-nocontour','dem-noshade','displacement','contour-step=',\ 'contour-smooth=','LALO=']) except getopt.GetoptError: usage() sys.exit(1) for opt, arg in opts: if opt == '-f': timeSeriesFile = arg elif opt == '-F': timeSeriesFile_2 = arg elif opt == '-v': velocityFile = arg elif opt == '-a': vmin = float(arg) elif opt == '-b': vmax = float(arg) elif opt == '-s': fontSize = int(arg) elif opt == '-m': markerSize = int(arg) markerSize2 = int(arg) elif opt == '-c': markerColor = arg elif opt == '-w': lineWidth = int(arg) elif opt == '-u': unit = arg elif opt == '-l': lbound = float(arg) elif opt == '-h': hbound = float(arg) elif opt == '-D': demFile = arg elif opt == '-V': contour_step = float(arg) elif opt == '-t': minDate = arg elif opt == '-T': maxDate = arg elif opt == '-r': radius = abs(int(arg)) elif opt == '-x': xsub = sorted([int(i) for i in arg.split(':')]) elif opt == '-y': ysub = sorted([int(i) for i in arg.split(':')]) elif opt == '-X': ref_xsub = sorted([int(i) for i in arg.split(':')]) elif opt == '-Y': ref_ysub = sorted([int(i) for i in arg.split(':')]) elif opt == '--contour-step': contour_step = float(arg) elif opt == '--contour-smooth': contour_sigma = float(arg) elif opt == '--dem-nocontour': demContour = 'no' elif opt == '--dem-noshade': demShade = 'no' elif opt == '--displacement': dispDisplacement = 'yes' elif opt in ['-E', '--exclude']: datesNot2show = arg.split(',') elif opt in '--lalo': lalosub = [float(i) for i in arg.split(',')] elif opt in '--LALO': ref_lalosub = [float(i) for i in arg.split(',')] elif opt in ['--rect-color']: rectColor = arg elif opt in ['--ref-date']: ref_date = ptime.yyyymmdd(arg) elif opt in ['-u', '--unit']: unit = arg.lower() elif opt == '--save': saveFig = 'yes' elif opt == '--nodisplay': dispFig = 'no' saveFig = 'yes' elif opt == '--opposite': dispOpposite = 'yes' elif opt == '--zero-start': zero_start = arg.lower() elif opt == '--zoom-x': win_x = sorted([int(i) for i in arg.split(':')]) elif opt == '--zoom-y': win_y = sorted([int(i) for i in arg.split(':')]) elif opt == '--zoom-lon': win_lon = sorted([float(i) for i in arg.split(':')]) elif opt == '--zoom-lat': win_lat = sorted([float(i) for i in arg.split(':')]) ############################################################## ## Read time series file info if not os.path.isfile(timeSeriesFile): print '\nERROR: Input time series file does not exist: ' + timeSeriesFile + '\n' sys.exit(1) h5timeseries = h5py.File(timeSeriesFile, 'r') k = h5timeseries.keys() # read h5 file and its group type if not 'timeseries' in k: print 'ERROR: Input file is ' + k[ 0] + '.\n\tOnly timeseries is supported.\n' sys.exit(1) atr = readfile.read_attribute(timeSeriesFile) dateList1 = sorted(h5timeseries['timeseries'].keys()) dates1, datevector1 = ptime.date_list2vector(dateList1) print '\n************ Time Series Display - Point *************' ##### Select Check try: lalosub xsub = subset.coord_geo2radar([lalosub[1]], atr, 'longitude') ysub = subset.coord_geo2radar([lalosub[0]], atr, 'latitude') xsub = [xsub] ysub = [ysub] if radius == 0: radius = 3 except: pass try: ref_lalosub ref_xsub = subset.coord_geo2radar([ref_lalosub[1]], atr, 'longitude') ref_ysub = subset.coord_geo2radar([ref_lalosub[0]], atr, 'latitude') ref_xsub = [ref_xsub] ref_ysub = [ref_ysub] if radius == 0: radius = 3 except: pass ############################################################## global dates, dateList, datevector_all, dateListMinMax print '*******************' print 'All dates existed:' print dateList1 print '*******************' ## Check exclude date input try: datesNot2show if os.path.isfile(datesNot2show[0]): try: datesNot2show = ptime.read_date_list(datesNot2show[0]) except: print 'Can not read date list file: ' + datesNot2show[0] print 'dates not to show: ' + str(datesNot2show) except: datesNot2show = [] ## Check Min / Max Date dateListMinMax = [] try: minDate minDate = ptime.yyyymmdd(minDate) dateListMinMax.append(minDate) minDateyy = ptime.yyyymmdd2years(minDate) print 'minimum date: ' + minDate for date in dateList1: yy = ptime.yyyymmdd2years(date) if yy < minDateyy: datesNot2show.append(date) except: pass try: maxDate maxDate = ptime.yyyymmdd(maxDate) dateListMinMax.append(maxDate) maxDateyy = ptime.yyyymmdd2years(maxDate) print 'maximum date: ' + maxDate for date in dateList1: yy = ptime.yyyymmdd2years(date) if yy > maxDateyy: datesNot2show.append(date) except: pass dateListMinMax = sorted(dateListMinMax) if not dateListMinMax: print 'no min/max date input.' else: datesMinMax, dateVecMinMax = ptime.date_list2vector(dateListMinMax) ## Finalize Date List try: dateList = [] for date in dateList1: if date not in datesNot2show: dateList.append(date) print '--------------------------------------------' print 'dates used to show time series displacements:' print dateList print '--------------------------------------------' except: dateList = dateList1 print 'using all dates to show time series displacement' ## Read Date Info (x axis for time series display) dates, datevector = ptime.date_list2vector(dateList) datevector_all = list(datevector) ## Check reference date input try: ref_date if not ref_date in dateList: print 'Reference date - ' + ref_date + ' - is not included in date list to show.' sys.exit(1) else: print 'reference date: ' + ref_date except: if zero_start == 'yes': ref_date = dateList[0] print 'set the 1st date as reference for displacement display.' else: pass ############################################################## ##### Plot Fig 1 - Velocity / last epoch of time series / DEM fig = plt.figure(1) ax = fig.add_subplot(111) ##### Check subset range width = int(atr['WIDTH']) length = int(atr['FILE_LENGTH']) print 'file size: ' + str(length) + ', ' + str(width) try: win_y = subset.coord_geo2radar(win_lat, atr, 'latitude') except: try: win_y except: win_y = [0, length] try: win_x = subset.coord_geo2radar(win_lon, atr, 'longitude') except: try: win_x except: win_x = [0, width] win_box = (win_x[0], win_y[0], win_x[1], win_y[1]) win_box = subset.check_box_within_data_coverage(win_box, atr) try: velocityFile try: vel, vel_atr = readfile.read(velocityFile) except: vel, vel_atr = readfile.read(timeSeriesFile, velocityFile) ax.set_title(velocityFile) print 'display: ' + velocityFile except: vel, vel_atr = readfile.read(timeSeriesFile, dateList1[-1]) ax.set_title('epoch: ' + dateList1[-1]) print 'display last epoch' ##### show displacement instead of phase if vel_atr['FILE_TYPE'] in ['interferograms', '.unw' ] and dispDisplacement == 'yes': print 'show displacement' phase2range = -float(vel_atr['WAVELENGTH']) / (4 * np.pi) vel *= phase2range else: dispDisplacement = 'no' ## Reference Point if showRef == 'yes': try: ax.plot(int(atr['ref_x']), int(atr['ref_y']), 'ks', ms=6) except: pass if dispOpposite == 'yes': print 'show opposite value in figure/map 1' vel *= -1 ## Flip try: flip_lr except: try: flip_ud except: flip_lr, flip_ud = view.auto_flip_direction(atr) ## Status bar ## Geo coordinate try: ullon = float(atr['X_FIRST']) ullat = float(atr['Y_FIRST']) lon_step = float(atr['X_STEP']) lat_step = float(atr['Y_STEP']) lon_unit = atr['Y_UNIT'] lat_unit = atr['X_UNIT'] geocoord = 'yes' print 'Input file is Geocoded' except: geocoord = 'no' def format_coord(x, y): col = int(x + 0.5) row = int(y + 0.5) if col >= 0 and col <= width and row >= 0 and row <= length: z = vel[row, col] try: lon = ullon + x * lon_step lat = ullat + y * lat_step return 'x=%.1f, y=%.1f, value=%.4f, lon=%.4f, lat=%.4f' % ( x, y, z, lon, lat) except: return 'x=%.1f, y=%.1f, value=%.4f' % (x, y, z) ax.format_coord = format_coord ## DEM try: demFile dem, demRsc = readfile.read(demFile) ax = view.plot_dem_yx(ax, dem, demShade, demContour, contour_step, contour_sigma) vel_alpha = 0.8 except: print 'No DEM file' try: img = ax.imshow(vel, vmin=vmin, vmax=vmax, alpha=vel_alpha) except: img = ax.imshow(vel, alpha=vel_alpha) plt.colorbar(img) ## Zoom In (subset) if flip_lr == 'yes': ax.set_xlim(win_box[2], win_box[0]) else: ax.set_xlim(win_box[0], win_box[2]) if flip_ud == 'yes': ax.set_ylim(win_box[1], win_box[3]) else: ax.set_ylim(win_box[3], win_box[1]) ## Flip #if flip_lr == 'yes': fig.gca().invert_xaxis() #if flip_ud == 'yes': fig.gca().invert_yaxis() ########################################## ##### Plot Fig 2 - Time series plot #fig2 = plt.figure(num=2,figsize=(12,6)) fig2 = plt.figure(2, figsize=(12, 6)) ax2 = fig2.add_subplot(111) try: timeSeriesFile_2 h5timeseries_2 = h5py.File(timeSeriesFile_2) dateList_2 = sorted(h5timeseries_2['timeseries'].keys()) dates_2, datevector_2 = ptime.date_list2vector(dateList_2) datevector_all += list(set(datevector_2) - set(datevector_all)) datevector_all = sorted(datevector_all) except: pass ################################ Plot Code Package <start> ################################# def plot_ts(ax, ax2, fig2, xsub, ysub, h5timeseries): ax2.cla() print '\n-------------------------------------------------------------------------------' disp_min = 0 disp_max = 0 ############################# Plot Time Series ############################## global ref_xsub, ref_ysub ##### 1.1 Plot Reference time series try: ref_xsub ref_ysub ref_xsub, ref_ysub = check_yx(ref_xsub, ref_ysub, radius, ax, rectColor) print '----------------------------------------------------' print 'Reference Point:' print 'ref_x=' + str(ref_xsub[0]) + ':' + str(ref_xsub[1]) print 'ref_y=' + str(ref_ysub[0]) + ':' + str(ref_ysub[1]) print '-----------------------------' print 'Time series with all dates:' dis1, dis1_mean, dis1_std, dis1_vel = read_dis_xy( ref_xsub, ref_ysub, dateList1, h5timeseries, unit) (_, caps, _)=ax2.errorbar(dates1,dis1_mean,yerr=dis1_std,fmt='-ks',\ ms=markerSize2, lw=0, alpha=1,mfc=markerColor_ref,mew=edgeWidth,\ elinewidth=edgeWidth,ecolor='black',capsize=markerSize*0.5) for cap in caps: cap.set_markeredgewidth(edgeWidth) disp_min, disp_max = update_lim(disp_min, disp_max, dis1_mean, dis1_std) if not len(dateList) == len(dateList1): print '-----------------------------' print 'Time series with dates of interest:' dis12, dis12_mean, dis12_std, dis12_vel = read_dis_xy( ref_xsub, ref_ysub, dateList, h5timeseries, unit) (_, caps, _)=ax2.errorbar(dates,dis12_mean,yerr=dis12_std,fmt='-ks',\ ms=markerSize2, lw=0, alpha=1,mfc=markerColor_ref2,mew=edgeWidth,\ elinewidth=edgeWidth,ecolor='black',capsize=markerSize*0.5) for cap in caps: cap.set_markeredgewidth(edgeWidth) disp_min, disp_max = update_lim(disp_min, disp_max, dis12_mean, dis12_std) except: pass ##### 1.2.0 Read y/x print '\n----------------------------------------------------' print 'Point of Interest:' xsub, ysub = check_yx(xsub, ysub, radius, ax, rectColor) print 'x=' + str(xsub[0]) + ':' + str(xsub[1]) print 'y=' + str(ysub[0]) + ':' + str(ysub[1]) ##### 1.2.1 Plot 2nd time series try: timeSeriesFile_2 print '-----------------------------' print '2nd Time Series:' dis2, dis2_mean, dis2_std, dis2_vel = read_dis_xy( xsub, ysub, dateList_2, h5timeseries_2, unit) (_, caps, _)=ax2.errorbar(dates_2,dis2_mean,yerr=dis2_std,fmt='-ko',\ ms=markerSize2, lw=0, alpha=1, mfc=markerColor2,\ elinewidth=0,ecolor='black',capsize=0) for cap in caps: cap.set_markeredgewidth(edgeWidth) disp_min, disp_max = update_lim(disp_min, disp_max, dis2_mean, dis2_std) except: pass ##### 1.2.2 Plot 1st time series print '-----------------------------' print 'Time Series:' dis, dis_mean, dis_std, dis_vel = read_dis_xy(xsub, ysub, dateList, h5timeseries, unit) (_, caps, _)=ax2.errorbar(dates,dis_mean,yerr=dis_std,fmt='-ko',\ ms=markerSize, lw=lineWidth, alpha=1, mfc=markerColor,\ elinewidth=edgeWidth,ecolor='black',capsize=markerSize*0.5) for cap in caps: cap.set_markeredgewidth(edgeWidth) disp_min, disp_max = update_lim(disp_min, disp_max, dis_mean, dis_std) ####################### Figure Format ####################### ## x axis format try: ax2 = ptime.auto_adjust_xaxis_date(ax2, dateVecMinMax, fontSize) except: ax2 = ptime.auto_adjust_xaxis_date(ax2, datevector_all, fontSize) ## y axis format ax2.set_ylabel('Displacement [' + unit + ']', fontsize=fontSize) try: lbound hbound ax2.set_ylim(lbound, hbound) except: disp_buf = 0.2 * (disp_max - disp_min) ax2.set_ylim(disp_min - disp_buf, disp_max + disp_buf) for tick in ax2.yaxis.get_major_ticks(): tick.label.set_fontsize(fontSize) ## title figTitle = 'x=' + str(xsub[0]) + ':' + str(xsub[1]) + ', y=' + str( ysub[0]) + ':' + str(ysub[1]) try: lonc = ullon + (xsub[0] + xsub[1]) / 2.0 * lon_step latc = ullat + (ysub[0] + ysub[1]) / 2.0 * lat_step figTitle += ', lalo=' + '%.4f,%.4f' % (latc, lonc) except: pass ax2.set_title(figTitle) ################## Save and Output ##################### if saveFig == 'yes': print '-----------------------------' Delay = {} Delay['displacement'] = dis Delay['unit'] = unit Delay['time'] = datevector Delay['velocity'] = dis_vel[0] Delay['velocity_unit'] = unit + '/yr' Delay['velocity_std'] = dis_vel[4] figBase = 'x' + str(xsub[0]) + '_' + str(xsub[1] - 1) + 'y' + str( ysub[0]) + '_' + str(ysub[1] - 1) sio.savemat(figBase + '_ts.mat', {'displacement': Delay}) print 'saved ' + figBase + '_ts.mat' fig2.savefig(figBase + '_ts.pdf', bbox_inches='tight', transparent=True, dpi=fig_dpi) print 'saved ' + figBase + '_ts.pdf' if dispFig == 'no': fig.savefig(figBase + '_vel.png', bbox_inches='tight', transparent=True, dpi=fig_dpi) print 'saved ' + figBase + '_vel.png' ################################ Plot Code Package <end> ################################# ########### 1. Plot Time Series with x/y ########## try: xsub ysub plot_ts(ax, ax2, fig2, xsub, ysub, h5timeseries) except: print 'No x/y input' pass ########### 2. Plot Time Series with Click ########## ## similar to 1. Plot Time Series with x/y def onclick(event): ax2.cla() xsub = [int(event.xdata)] ysub = [int(event.ydata)] plot_ts(ax, ax2, fig2, xsub, ysub, h5timeseries) if dispFig == 'yes': plt.show() try: cid = fig.canvas.mpl_connect('button_press_event', onclick) except: pass if dispFig == 'yes': plt.show()