def main(argv): inps = cmdLineParse() if inps.template_file: inps = read_template2inps(inps.template_file) if inps.ref_date == 'no': print 'No reference date input, skip this step.' return inps.timeseries_file elif inps.ref_date.lower() in ['auto']: print '------------------------------------------------------------' print 'auto choose reference date based on minimum residual RMS' if not inps.resid_file: inps.resid_file = os.path.splitext( inps.timeseries_file)[0] + 'InvResid.h5' rms_list, date_list = ut.get_residual_rms(inps.resid_file, inps.mask_file, inps.ramp_type) ref_idx = np.argmin(rms_list) inps.ref_date = date_list[ref_idx] print 'date with minimum residual RMS: %s - %.4f' % (inps.ref_date, rms_list[ref_idx]) print '------------------------------------------------------------' elif os.path.isfile(inps.ref_date): print 'read reference date from file: ' + inps.ref_date inps.ref_date = ptime.read_date_list(inps.ref_date)[0] # Referencing input file inps.outfile = ref_date_file(inps.timeseries_file, inps.ref_date, inps.outfile) return inps.outfile
def main(argv): try: timeSeriesFile = argv[0] refDate = argv[1] except: Usage() ; sys.exit(1) if os.path.isfile(refDate): try: refDate = ptime.read_date_list(refDate)[0] except: print 'Can not read reference date file: '+refDate if len(refDate)==6: refDate=yymmdd2yyyymmdd(refDate) try: outName = argv[2] except: outName = timeSeriesFile.split('.h5')[0]+'_refDate.h5' #except: outName = timeSeriesFile.split('.h5')[0]+'_ref'+refDate+'.h5' h5t=h5py.File(timeSeriesFile) dateList = h5t['timeseries'].keys() dateList = sorted(dateList) if not refDate in dateList: print '''********************** Error: Reference date was not found. Choose a date available in the time-series. Exit without any action. ''' sys.exit(1) print '\n************* Reference Epoch ***************' refDataSet=h5t['timeseries'].get(refDate) refData=refDataSet[0:refDataSet.shape[0],0:refDataSet.shape[1]] print 'referencing all epochs to ' + refDate h5t2=h5py.File(outName,'w'); print 'writing >>> '+outName group = h5t2.create_group('timeseries') for d in dateList: print d ds=h5t['timeseries'].get(d) data=ds[0:ds.shape[0],0:ds.shape[1]] dset = group.create_dataset(d, data=data-refData, compression='gzip') ## Attributes for key,value in h5t['timeseries'].attrs.iteritems(): group.attrs[key] = value #group.attrs['DATE'] = refDate[2:8] group.attrs['ref_date']=refDate try: h5t['mask'].get('mask') dset1 = h5t['mask'].get('mask') Mask = dset1[0:dset1.shape[0],0:dset1.shape[1]] group=h5t2.create_group('mask') dset = group.create_dataset('mask', data=Mask, compression='gzip') except: print 'no mask in the file.'
def main(argv): try: timeSeriesFile = argv[0] refDate = argv[1] except: usage() ; sys.exit(1) if os.path.isfile(refDate): try: refDate = ptime.read_date_list(refDate)[0] except: print 'Can not read reference date file: '+refDate if len(refDate)==6: refDate=yymmdd2yyyymmdd(refDate) try: outName = argv[2] except: outName = timeSeriesFile.split('.h5')[0]+'_refDate.h5' #except: outName = timeSeriesFile.split('.h5')[0]+'_ref'+refDate+'.h5' h5t=h5py.File(timeSeriesFile) dateList = sorted(h5t['timeseries'].keys()) if not refDate in dateList: print '''********************** Error: Reference date was not found. Choose a date available in the time-series. Exit without any action. ''' sys.exit(1) print '\n************* Reference Epoch ***************' refDataSet=h5t['timeseries'].get(refDate) refData=refDataSet[0:refDataSet.shape[0],0:refDataSet.shape[1]] print 'referencing all epochs to ' + refDate h5t2=h5py.File(outName,'w'); print 'writing >>> '+outName group = h5t2.create_group('timeseries') for d in dateList: print d ds=h5t['timeseries'].get(d) data=ds[0:ds.shape[0],0:ds.shape[1]] dset = group.create_dataset(d, data=data-refData, compression='gzip') ## Attributes for key,value in h5t['timeseries'].attrs.iteritems(): group.attrs[key] = value #group.attrs['DATE'] = refDate[2:8] group.attrs['ref_date']=refDate try: h5t['mask'].get('mask') dset1 = h5t['mask'].get('mask') Mask = dset1[0:dset1.shape[0],0:dset1.shape[1]] group=h5t2.create_group('mask') dset = group.create_dataset('mask', data=Mask, compression='gzip') except: print 'no mask in the file.'
def get_exclude_date(inps, date_list_all): '''Get inps.ex_date full list Inputs: inps - Namespace, date_list_all - list of string for all available date in YYYYMMDD format Output: inps.ex_date - list of string for exclude date in YYYYMMDD format ''' yy_list_all = ptime.yyyymmdd2years(date_list_all) # 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.ex_date) inps.ex_date = [] 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)] inps.ex_date += list(set(ex_date) - set(inps.ex_date)) # delete dates not existed in input file inps.ex_date = list(set(inps.ex_date).intersection(date_list_all)) print 'exclude date:' + str(inps.ex_date) # 3. min_date if inps.min_date: print 'start date: ' + inps.min_date yy_min = ptime.yyyymmdd2years(ptime.yyyymmdd(inps.min_date)) for i in range(len(date_list_all)): date = date_list_all[i] if yy_list_all[i] < yy_min and date not in inps.ex_date: print ' remove date: ' + date inps.ex_date.append(date) # 4. max_date if inps.max_date: print 'end date: ' + inps.max_date yy_max = ptime.yyyymmdd2years(ptime.yyyymmdd(inps.max_date)) for i in range(len(date_list_all)): date = date_list_all[i] if yy_list_all[i] > yy_max and date not in inps.ex_date: print ' remove date: ' + date inps.ex_date.append(date) return inps.ex_date
def get_exclude_date(inps, date_list_all): input_ex_date = list(inps.ex_date) inps.ex_date = [] 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)] inps.ex_date += list(set(ex_date) - set(inps.ex_date)) # delete dates not existed in input file inps.ex_date = sorted( list(set(inps.ex_date).intersection(date_list_all))) print 'Exclude date for DEM error estimation:' print inps.ex_date return inps
def main(argv): inps = cmdLineParse() if inps.template_file: inps = read_template2inps(inps.template_file) if inps.ref_date == 'no': print 'No reference date input, skip this step.' return inps.timeseries_file elif inps.ref_date.lower() in ['auto']: print '------------------------------------------------------------' print 'auto choose reference date based on minimum Residual Standard Deviation (RSD)' if not inps.resid_file: inps.resid_file = os.path.splitext( inps.timeseries_file)[0] + 'InvResid.h5' std_list, date_list = ut.get_residual_std(inps.resid_file, inps.mask_file, inps.ramp_type) ref_idx = np.argmin(std_list) inps.ref_date = date_list[ref_idx] print 'date with minimum residual std: %s - %.4f' % (inps.ref_date, std_list[ref_idx]) #txtFile = 'reference_date.txt' #f = open(txtFile, 'w') #f.write(inps.ref_date+'\n') #f.close() #print 'save date to file: '+txtFile print '------------------------------------------------------------' elif os.path.isfile(inps.ref_date): print 'read reference date from file: ' + inps.ref_date inps.ref_date = ptime.read_date_list(inps.ref_date)[0] # Referencing input file inps.outfile = ref_date_file(inps.timeseries_file, inps.ref_date, inps.outfile) return inps.outfile
def check_exclude_date(exDateIn, dateList): '''Read exclude dates info Inputs: exDateIn - list of string, date in YYMMDD or YYYYMMDD format, or text file with date in it dateList - list of string, date in YYYYMMDD format Output: exDateOut - list of string, date in YYYYMMDD format ''' if not exDateIn: return [] exDateOut = [] for exDate in exDateIn: if os.path.isfile(exDate): exDate = ptime.read_date_list(exDate) else: exDate = [ptime.yyyymmdd(exDate)] exDateOut += exDate exDateOut = sorted(list(set(exDateOut).intersection(dateList))) print 'Exclude date for DEM error estimation:' print exDateOut return exDateOut
def main(argv): if len(sys.argv)>2: try: opts, args = getopt.getopt(argv,"f:E:m:M:h:o:t:") except getopt.GetoptError: Usage() ; sys.exit(1) for opt,arg in opts: if opt == '-f': timeSeriesFile = arg elif opt == '-E': datesNot2include = arg.replace(' ','').split(',') elif opt == '-m': minDate = arg elif opt == '-M': maxDate = arg elif opt == '-o': outName = arg elif opt == '-t': templateFile = arg elif len(sys.argv)==2: if argv[0]=='-h': Usage(); sys.exit(1) elif os.path.isfile(argv[0]): timeSeriesFile = argv[0] else: Usage(); sys.exit(1) else: Usage(); sys.exit(1) ##### Read excluded date list Input try: datesNot2include except: try: templateFile templateContents = readfile.read_template(templateFile) datesNot2include = templateContents['pysar.drop.date'].replace(' ','').split(',') except: pass ############################################################## print '\n********** Inversion: Time Series to Velocity ***********' atr = readfile.read_attributes(timeSeriesFile) k = atr['FILE_TYPE'] print 'input file: '+k if not k == 'timeseries': print 'Input file is not timeseries!'; sys.exit(1) print "Loading time series file: " + timeSeriesFile h5timeseries = h5py.File(timeSeriesFile) dateList1 = h5timeseries[k].keys() dateList1 = sorted(dateList1) ############################################################## print '--------------------------------------------' print 'Dates from input file: '+str(len(dateList1)) print dateList1 try: datesNot2include if os.path.isfile(datesNot2include[0]): try: datesNot2include = ptime.read_date_list(datesNot2include[0]) except: print 'Can not read date list file: '+datesNot2include[0] print '--------------------------------------------' print 'Date excluded: '+str(len(datesNot2include)) print datesNot2include except: datesNot2include=[] try: minDate minDateyy=yyyymmdd2years(minDate) print 'minimum date: '+minDate for date in dateList1: yy=yyyymmdd2years(date) if yy < minDateyy: print ' remove date: '+date datesNot2include.append(date) except: pass try: maxDate maxDateyy=yyyymmdd2years(maxDate) print 'maximum date: '+maxDate for date in dateList1: yy=yyyymmdd2years(date) if yy > maxDateyy: print ' remove date: '+date datesNot2include.append(date) except: pass try: dateList=[] for date in dateList1: if date not in datesNot2include: dateList.append(date) except: pass print '--------------------------------------------' if len(dateList) == len(dateList1): print 'using all dates to calculate the vlocity' else: print 'Dates used to estimate the velocity: '+str(len(dateList)) print dateList print '--------------------------------------------' ############################################################## dateIndex={} for ni in range(len(dateList)): dateIndex[dateList[ni]]=ni tbase=[] d1 = datetime.datetime(*time.strptime(dateList[0],"%Y%m%d")[0:5]) for ni in range(len(dateList)): d2 = datetime.datetime(*time.strptime(dateList[ni],"%Y%m%d")[0:5]) diff = d2-d1 tbase.append(diff.days) dates=[] for ni in range(len(dateList)): d = datetime.datetime(*time.strptime(dateList[ni],"%Y%m%d")[0:5]) dates.append(d) ########################################### print 'Calculating Velocity' datevector=[] for i in range(len(dates)): datevector.append(np.float(dates[i].year) + np.float(dates[i].month-1)/12 + np.float(dates[i].day-1)/365) B=np.ones([len(datevector),2]) B[:,0]=datevector #B1 = np.linalg.pinv(B) B1 = np.dot(np.linalg.inv(np.dot(B.T,B)),B.T) B1 = np.array(B1,np.float32) ######################################### width = int(atr['WIDTH']) length = int(atr['FILE_LENGTH']) lt = len(dateList) timeseries = np.zeros((lt,length,width),np.float32) for date in dateList: timeseries[dateIndex[date]] = h5timeseries[k].get(date) numpixels=length*width Data=np.zeros([lt,numpixels]) for i in range(lt): Data[i,:]=np.reshape(timeseries[i],[1,numpixels]) x=np.dot(B1,Data) velocity=np.reshape(x[0,:],[length,width]) ##################################################### print 'Calculating rmse' Data_linear=np.dot(B,x) rmse=np.reshape(np.sqrt((np.sum((Data_linear-Data)**2,0))/lt),[length,width]) # se=np.reshape((np.sum(np.abs(Data_linear-Data),0)/lt),[length,width]) # rmse=np.reshape((np.sum((Data_linear-Data)**2,0))/lt,[length,width]) ###################################################### print 'Calculating the standard deviation of the estimated velocities' residual=Data_linear-Data s1=np.sqrt(np.sum(residual**2,0)/(lt-2)) s2=np.sqrt(np.sum((datevector-np.mean(datevector))**2)) se=np.reshape(s1/s2,[length,width]) ###################################################### # SSt=np.sum((Data-np.mean(Data,0))**2,0) # SSres=np.sum(residual**2,0) # SS_REG=SSt-SSres # Rsquared=np.reshape(SS_REG/SSt,[length,width]) ###################################################### # covariance of the velocities ##### Output File Name try: outName except: if not datesNot2include == []: outName = 'velocity_ex.h5' else: outName = 'velocity.h5' outName_rmse='rmse_'+outName outName_se='std_'+outName outName_Rsquared='R2_'+outName ##################################### print '--------------------------------------' print 'writing to '+outName h5velocity = h5py.File(outName,'w') group=h5velocity.create_group('velocity') dset = group.create_dataset('velocity', data=velocity, compression='gzip') group.attrs['date1'] = datevector[0] group.attrs['date2'] = datevector[lt-1] for key , value in atr.iteritems(): group.attrs[key]=value h5velocity.close() ##################################### print 'writing to '+outName_rmse h5file = outName_rmse h5rmse = h5py.File(h5file,'w') group=h5rmse.create_group('rmse') dset = group.create_dataset(os.path.basename('rmse'), data=rmse, compression='gzip') group.attrs['date1'] = datevector[0] group.attrs['date2'] = datevector[lt-1] for key , value in atr.iteritems(): group.attrs[key]=value ##################################### print 'writing to '+outName_se h5se = h5py.File(outName_se,'w') group=h5se.create_group('rmse') dset = group.create_dataset('rmse', data=se, compression='gzip') group.attrs['date1'] = datevector[0] group.attrs['date2'] = datevector[lt-1] for key , value in atr.iteritems(): group.attrs[key]=value # print 'writing to '+outName_Rsquared # h5rsquared = h5py.File(outName_Rsquared,'w') # group=h5rsquared.create_group('rmse') # dset = group.create_dataset('rmse', data=Rsquared, compression='gzip') # group.attrs['date1'] = datevector[0] # group.attrs['date2'] = datevector[lt-1] # h5rsquared.close() h5se.close() h5rmse.close() h5timeseries.close() print 'Done.'
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 = [int(i) for i in arg.split(":")] xsub.sort() # dispVelFig='no' elif opt == "-y": ysub = [int(i) for i in arg.split(":")] ysub.sort() # dispVelFig='no' elif opt == "-X": ref_xsub = [int(i) for i in arg.split(":")] ref_xsub.sort() elif opt == "-Y": ref_ysub = [int(i) for i in arg.split(":")] ref_ysub.sort() # dispVelFig='no' 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 = [int(i) for i in arg.split(":")] win_x.sort() elif opt == "--zoom-y": win_y = [int(i) for i in arg.split(":")] win_y.sort() elif opt == "--zoom-lon": win_lon = [float(i) for i in arg.split(":")] win_lon.sort() elif opt == "--zoom-lat": win_lat = [float(i) for i in arg.split(":")] win_lat.sort() ############################################################## ## 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) 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_attributes(timeSeriesFile) dateList1 = h5timeseries["timeseries"].keys() dateList1 = sorted(dateList1) 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_y, win_x = subset.check_subset_range(win_y, win_x, 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_check(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_x[1], win_x[0]) else: ax.set_xlim(win_x[0], win_x[1]) if flip_ud == "yes": ax.set_ylim(win_y[0], win_y[1]) else: ax.set_ylim(win_y[1], win_y[0]) ## 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 = h5timeseries_2["timeseries"].keys() dateList_2 = sorted(dateList_2) 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(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(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(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(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.adjust_xaxis_date(ax2, dateVecMinMax, fontSize) except: ax2 = ptime.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()
def main(argv): inps = cmdLineParse() #print '\n********** Inversion: Time Series to Velocity ***********' atr = readfile.read_attribute(inps.timeseries_file) k = atr['FILE_TYPE'] print 'input '+k+' file: '+inps.timeseries_file if not k == 'timeseries': sys.exit('ERROR: input file is not timeseries!') h5file = h5py.File(inps.timeseries_file) ##################################### ## Date Info dateListAll = sorted(h5file[k].keys()) dateListAll = ptime.yyyymmdd(dateListAll) yyListAll = ptime.yyyymmdd2years(dateListAll) print '--------------------------------------------' print 'Dates from input file: '+str(len(dateListAll)) print dateListAll # Extrac exclude dates from input arguments inps.datesNot2include = [] # 1. template_file if inps.template_file: inps = update_inps_from_template(inps, inps.template_file) # 2. ex_date if inps.ex_date: for ex_date in inps.ex_date: if os.path.isfile(ex_date): ex_date = ptime.read_date_list(ex_date) else: ex_date = [ptime.yyyymmdd(ex_date)] inps.datesNot2include += list(set(ex_date) - set(inps.datesNot2include)) # delete dates not existed in input file inps.datesNot2include = list(set(inps.datesNot2include).intersection(dateListAll)) print 'date excluded:'+str(inps.datesNot2include) # 3. min_date if inps.min_date: inps.min_date = ptime.yyyymmdd(inps.min_date) print 'minimum date: '+inps.min_date yy_min = ptime.yyyymmdd2years(inps.min_date) for i in range(len(dateListAll)): date = dateListAll[i] if yyListAll[i] < yy_min and date not in inps.datesNot2include: print ' remove date: '+date inps.datesNot2include.append(date) # 4. max_date if inps.max_date: inps.max_date = ptime.yyyymmdd(inps.max_date) print 'minimum date: '+inps.max_date yy_max = ptime.yyyymmdd2years(inps.max_date) for i in range(len(dateListAll)): date = dateListAll[i] if yyListAll[i] > yy_max and date not in inps.datesNot2include: print ' remove date: '+date inps.datesNot2include.append(date) # Summary dateList = sorted(list(set(dateListAll) - set(inps.datesNot2include))) print '--------------------------------------------' if len(dateList) == len(dateListAll): print 'using all dates to calculate the velocity' else: print 'Dates used to estimate the velocity: '+str(len(dateList)) print dateList print '--------------------------------------------' # Date Aux Info dates, datevector = ptime.date_list2vector(dateList) ##################################### ## Inversion # Design matrix B=np.ones([len(datevector),2]) B[:,0]=datevector #B1 = np.linalg.pinv(B) B1 = np.dot(np.linalg.inv(np.dot(B.T,B)),B.T) B1 = np.array(B1,np.float32) # Loading timeseries print "Loading time series file: "+inps.timeseries_file+' ...' width = int(atr['WIDTH']) length = int(atr['FILE_LENGTH']) dateNum = len(dateList) timeseries = np.zeros([dateNum,length*width],np.float32) start_time = time.time() for i in range(dateNum): date = dateList[i] ut.print_progress(i+1, dateNum, prefix='loading:', suffix=date, elapsed_time=time.time()-start_time) timeseries[i,:] = h5file[k].get(date)[:].flatten() h5file.close() # Velocity Inversion print 'Calculating velocity ...' x = np.dot(B1,timeseries) velocity = np.reshape(x[0,:],[length,width]) print 'Calculating rmse ...' timeseries_linear = np.dot(B,x) rmse = np.reshape(np.sqrt((np.sum((timeseries_linear-timeseries)**2,0))/dateNum),[length,width]) print 'Calculating the standard deviation of the estimated velocity ...' residual = timeseries_linear - timeseries s1 = np.sqrt(np.sum(residual**2,0)/(dateNum-2)) s2 = np.sqrt(np.sum((datevector-np.mean(datevector))**2)) std = np.reshape(s1/s2,[length,width]) # SSt=np.sum((timeseries-np.mean(timeseries,0))**2,0) # SSres=np.sum(residual**2,0) # SS_REG=SSt-SSres # Rsquared=np.reshape(SS_REG/SSt,[length,width]) ###################################################### # covariance of the velocities ##################################### # Output file name if not inps.outfile: inps.outfile = 'velocity.h5' if inps.datesNot2include: inps.outfile = os.path.splitext(inps.outfile)[0]+'_ex'+os.path.splitext(inps.outfile)[1] inps.outfile_rmse = 'rmse_'+inps.outfile inps.outfile_std = 'std_'+inps.outfile inps.outfile_r2 = 'R2_'+inps.outfile # Attributes atr['date1'] = datevector[0] atr['date2'] = datevector[dateNum-1] # File Writing print '--------------------------------------' atr['FILE_TYPE'] = 'velocity' print 'writing >>> '+inps.outfile writefile.write(velocity, atr, inps.outfile) atr['FILE_TYPE'] = 'rmse' print 'writing >>> '+inps.outfile_rmse writefile.write(rmse, atr, inps.outfile_rmse) atr['FILE_TYPE'] = 'rmse' print 'writing >>> '+inps.outfile_std writefile.write(std, atr, inps.outfile_std) print 'Done.' return inps.outfile
if not k == 'timeseries': raise ValueError('Only timeseries file is supported!') h5 = h5py.File(inps.timeseries_file, 'r') dateList = sorted(h5[k].keys()) date_num = len(dateList) inps.dates, tims = ptime.date_list2vector(dateList) # Read exclude dates if inps.ex_date_list: input_ex_date = list(inps.ex_date_list) inps.ex_date_list = [] 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)] inps.ex_date_list += list( set(ex_date) - set(inps.ex_date_list)) # delete dates not existed in input file inps.ex_date_list = sorted( list(set(inps.ex_date_list).intersection(dateList))) inps.ex_dates = ptime.date_list2vector(inps.ex_date_list)[0] inps.ex_idx_list = sorted( [dateList.index(i) for i in inps.ex_date_list]) print 'exclude date:' + str(inps.ex_date_list) ## Zero displacement for 1st acquisition if inps.zero_first: if inps.ex_date_list:
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()