Esempio n. 1
0
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)
Esempio n. 3
0
    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)
Esempio n. 4
0
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)