def find_pairs(dem_stack, tide_list, max_dt=timedelta(450.0)): ds = dem_stack.get_ds() line_fn = '/scr/pig_dem_stack/pig_shelf_poly_shean_2011gl_line.shp' m = geolib.shp2array(line_fn, res=dem_stack.res, extent=dem_stack.extent) #This is total gl pixels #max_gl_count = (~m).nonzero()[0].size pairs = [] dt_list = dem_stack.date_list min_dz = 0.5 #This is 100 km2 min_count = 2000 min_gl_count = 40 out = [] for i, dt in enumerate(dt_list): candidate_idx = timelib.get_closest_dt_padded_idx(dt, dt_list, max_dt) tidediff = tide_list[i] - tide_list[candidate_idx] valid_candidate_idx = np.abs(tidediff) > min_dz if np.any(valid_candidate_idx): for c in candidate_idx[valid_candidate_idx]: dz = dem_stack.ma_stack[i] - dem_stack.ma_stack[c] if dz.count() > min_count and ( dz * ~m).nonzero()[0].size > min_gl_count: if not (c, i) in pairs: #if dem_stack.source[i] != 'glas' and dem_stack.source[c] != 'glas' and dem_stack.source[i] != 'spirit' and dem_stack.source[c] != 'spirit': #if 'DG_stereo' in dem_stack.source[i] and 'DG_stereo' in dem_stack.source[c]: if 'DG' in dem_stack.source[ i] and 'DG' in dem_stack.source[c]: dt_diff = (dt_list[c] - dt_list[i]).total_seconds() / 86400. tide_diff = tide_list[i] - tide_list[c] title = '%s-%s (%0.1f days) dz=%0.2f m' % ( timelib.print_dt( dt_list[i]), timelib.print_dt( dt_list[c]), dt_diff, tide_diff) print title, i, c pairs.append((i, c)) flip = 1.0 if tide_diff < 0: flip = -1.0 o = flip * (dz - np.ma.median(dz)) out.append(o) f = malib.iv(o, clim=(-1.0, 1.0), cmap='RdYlBu', title=title) pltlib.shp_overlay(f.gca(), ds, line_fn, color='green') out = np.ma.array(out) malib.iv(np.ma.median(out, axis=0), clim=(-1.0, 1.0), cmap='RdYlBu') return pairs, out
#vy_stack_fn = os.path.join(v_dir, vy_stack_fn) #vy_stack_fn = '/scr/pig_stack_20151201_tworows_highcount/vel/shelf_clip/20060921_1746_189days_20060521_0950-20061126_0822_alos_mos_Track-Pig06_vy_20150530_1556_22days_20150525_0356-20150605_0356_tsx_mos_track-MayJun15_vy_stack_19_clip.npz' #vy_stack = malib.DEMStack(stack_fn=vy_stack_fn, save=False, trend=True, med=True, stats=True) #vy_stack_fn = '/scr/pig_stack_20151201_tworows_highcount/vel_20160225_1km/shelf_clip/20060921_1746_189days_20060521_0950-20061126_0822_alos_mos_Track-Pig06_vy_20151109_1349_90days_20151014_0000-20160112_0000_ls8_mos_All_S1516_vy_stack_22_clip_LinearNDint_121_142_121day.npz' vy_stack_fn = '/scr/pig_stack_20151201_tworows_highcount/vel_20160225_512m/20060921_1746_189days_20060521_0950-20061126_0822_alos_mos_Track-Pig06_vy_20151109_1349_90days_20151014_0000-20160112_0000_ls8_mos_All_S1516_vy_stack_22_clip_LinearNDint_237_277_121day.npz' vy_stack = malib.DEMStack(stack_fn=vy_stack_fn, save=False, trend=False, med=False, stats=False, datestack=False) #vm_stack_dt_list = vx_stack.date_list vm_stack = np.ma.sqrt(vx_stack.ma_stack**2 + vy_stack.ma_stack**2) if smbcorr: smb_fn = '/scr/RACMO2.3_June2015_update/FDM_zs_ANT27_36y_1979-2014_zs_20080102_002_FDM_zs_ANT27_36y_1979-2014_zs_20141230_364_stack_1278.npz' smb_stack = malib.DEMStack(stack_fn=smb_fn, save=False) #Shelf mask m = geolib.shp2array(mask_fn, res=dem_stack.res, extent=dem_stack.extent) dem_stack.ma_stack[:,m] = np.ma.masked #Timestep #dt = timedelta(days=5) #dt_val = 20 dt_val = 10 vmax = np.percentile(np.ma.median(vm_stack, axis=0), 98) max_dt_val = int(dem_stack.res/(vmax/365.25)) if dt_val > max_dt_val: dt_val = max_dt_val #This was forced for high-res runs, otherwise interval is 2-3 days at 32 m/px #dt_val = 10 dt = timedelta(days=dt_val)
stack_fn = vx_stack_fn elif vtype == 'vy': stack_fn = vy_stack_fn elif vtype == 'dem': stack_fn = dem_stack_fn stack_fn = sys.argv[1] stack = malib.DEMStack(stack_fn=stack_fn, save=False, trend=True, med=True, stats=True) #Get times of original obs t = stack.date_list_o.data if clip_to_shelfmask: mask_fn = '/scr/pig_dem_stack/pig_shelf_poly_shean_2011gl.shp' outermask_fn = '/scr/pig_stack_20151201_tworows_highcount/pig_vel_mask.shp' m_orig = geolib.shp2array(mask_fn, res=stack.res, extent=stack.extent) outermask = ~(geolib.shp2array(outermask_fn, res=stack.res, extent=stack.extent)) m = m_orig #Expand shelf mask 3 km upstream for flux gates #Should also reduce edge artifacts import scipy.ndimage it = int(np.ceil(3000./stack.res)) m = ~(scipy.ndimage.morphology.binary_dilation(~m, iterations=it)) #Need to make sure to sample mask at appropriate res apply_mask(stack.ma_stack, m) if vtype == 'vm' or vtype == 'vy' or vtype == 'vx': apply_mask(stack.ma_stack, outermask)
elif vtype == 'dem': stack_fn = dem_stack_fn #stack_fn = sys.argv[1] stack = malib.DEMStack(stack_fn=stack_fn, save=False, trend=True, med=True, stats=True) #Get times of original obs t = stack.date_list_o.data t = t.astype(int) t[0] -= 0.1 t[-1] += 0.1 if clip_to_shelfmask: mask_fn = '/scr/pig_dem_stack/pig_shelf_poly_shean_2011gl.shp' outermask_fn = '/scr/pig_stack_20151201_tworows_highcount/pig_vel_mask.shp' m_orig = geolib.shp2array(mask_fn, res=stack.res, extent=stack.extent) outermask = ~(geolib.shp2array(outermask_fn, res=stack.res, extent=stack.extent)) m = m_orig #Expand shelf mask 3 km upstream for flux gates #Should also reduce edge artifacts import scipy.ndimage #it = int(np.ceil(4000./stack.res)) it = int(np.ceil(6000./stack.res)) m = ~(scipy.ndimage.morphology.binary_dilation(~m, iterations=it)) #Need to make sure to sample mask at appropriate res apply_mask(stack.ma_stack, m) if vtype == 'vm' or vtype == 'vy' or vtype == 'vx': apply_mask(stack.ma_stack, outermask)