def test_find_tstars(self): hef_file = get_demo_file('Hintereisferner.shp') rgidf = gpd.GeoDataFrame.from_file(hef_file) # loop because for some reason indexing wont work gdirs = [] for index, entity in rgidf.iterrows(): gdir = oggm.GlacierDirectory(entity, base_dir=self.testdir) gis.define_glacier_region(gdir, entity=entity) gis.glacier_masks(gdir) centerlines.compute_centerlines(gdir) geometry.initialize_flowlines(gdir) geometry.catchment_area(gdir) geometry.catchment_width_geom(gdir) geometry.catchment_width_correction(gdir) gdirs.append(gdir) climate.distribute_climate_data(gdirs) climate.mu_candidates(gdir, div_id=0) hef_file = get_demo_file('mbdata_RGI40-11.00897.csv') mbdf = pd.read_csv(hef_file).set_index('YEAR') t_stars, bias = climate.t_star_from_refmb(gdir, mbdf['ANNUAL_BALANCE']) y, t, p = climate.mb_yearly_climate_on_glacier(gdir, div_id=0) # which years to look at selind = np.searchsorted(y, mbdf.index) t = t[selind] p = p[selind] mu_yr_clim = gdir.read_pickle('mu_candidates', div_id=0) for t_s, rmd in zip(t_stars, bias): mb_per_mu = p - mu_yr_clim.loc[t_s] * t md = utils.md(mbdf['ANNUAL_BALANCE'], mb_per_mu) np.testing.assert_allclose(md, rmd) self.assertTrue(np.abs(md / np.mean(mbdf['ANNUAL_BALANCE'])) < 0.1) r = utils.corrcoef(mbdf['ANNUAL_BALANCE'], mb_per_mu) self.assertTrue(r > 0.8)
def test_find_tstars(self): hef_file = get_demo_file('Hintereisferner.shp') rgidf = gpd.GeoDataFrame.from_file(hef_file) # loop because for some reason indexing wont work gdirs = [] for index, entity in rgidf.iterrows(): gdir = oggm.GlacierDirectory(entity, base_dir=self.testdir) gis.define_glacier_region(gdir, entity=entity) gis.glacier_masks(gdir) centerlines.compute_centerlines(gdir) geometry.initialize_flowlines(gdir) geometry.catchment_area(gdir) geometry.catchment_width_geom(gdir) geometry.catchment_width_correction(gdir) gdirs.append(gdir) climate.distribute_climate_data(gdirs) climate.mu_candidates(gdir, div_id=0) hef_file = get_demo_file('mbdata_RGI40-11.00897.csv') mbdf = pd.read_csv(hef_file).set_index('YEAR') t_stars, bias = climate.t_star_from_refmb(gdir, mbdf['ANNUAL_BALANCE']) y, t, p = climate.mb_yearly_climate_on_glacier(gdir, div_id=0) # which years to look at selind = np.searchsorted(y, mbdf.index) t = t[selind] p = p[selind] mu_yr_clim = gdir.read_pickle('mu_candidates', div_id=0) for t_s, rmd in zip(t_stars, bias): mb_per_mu = p - mu_yr_clim.loc[t_s] * t md = utils.md(mbdf['ANNUAL_BALANCE'], mb_per_mu) np.testing.assert_allclose(md, rmd) self.assertTrue(np.abs(md/np.mean(mbdf['ANNUAL_BALANCE'])) < 0.1) r = utils.corrcoef(mbdf['ANNUAL_BALANCE'], mb_per_mu) self.assertTrue(r > 0.8)
tasks.catchment_width_geom(gdir) tasks.catchment_width_correction(gdir) cfg.PATHS['climate_file'] = get_demo_file('histalp_merged_hef.nc') tasks.process_custom_climate_data(gdir) tasks.mu_candidates(gdir) mbdf = gdir.get_ref_mb_data() res = t_star_from_refmb(gdir, mbdf.ANNUAL_BALANCE) local_mustar_apparent_mb(gdir, tstar=res['t_star'][-1], bias=res['bias'][-1], prcp_fac=res['prcp_fac']) # For plots mu_yr_clim = gdir.read_pickle('mu_candidates')[pcp_fac] years, temp_yr, prcp_yr = mb_yearly_climate_on_glacier(gdir, pcp_fac, div_id=0) # which years to look at selind = np.searchsorted(years, mbdf.index) temp_yr = np.mean(temp_yr[selind]) prcp_yr = np.mean(prcp_yr[selind]) # Average oberved mass-balance ref_mb = mbdf.ANNUAL_BALANCE.mean() mb_per_mu = prcp_yr - mu_yr_clim * temp_yr # Diff to reference diff = mb_per_mu - ref_mb pdf = pd.DataFrame() pdf[r'$\mu (t)$'] = mu_yr_clim pdf['bias'] = diff
tasks.glacier_masks(gdir) tasks.compute_centerlines(gdir) tasks.compute_centerlines(gdir) tasks.initialize_flowlines(gdir) tasks.catchment_area(gdir) tasks.catchment_width_geom(gdir) tasks.catchment_width_correction(gdir) cfg.PATHS['climate_file'] = get_demo_file('histalp_merged_hef.nc') tasks.process_custom_climate_data(gdir) tasks.mu_candidates(gdir) # For plots mu_yr_clim = gdir.read_pickle('mu_candidates')[pcp_fac] mbdf = gdir.get_ref_mb_data() years, temp_yr, prcp_yr = mb_yearly_climate_on_glacier(gdir, pcp_fac, div_id=0) # which years to look at selind = np.searchsorted(years, mbdf.index) temp_yr = np.mean(temp_yr[selind]) prcp_yr = np.mean(prcp_yr[selind]) # Average oberved mass-balance ref_mb = mbdf.ANNUAL_BALANCE.mean() mb_per_mu = prcp_yr - mu_yr_clim * temp_yr # Diff to reference diff = mb_per_mu - ref_mb pdf = pd.DataFrame() pdf[r'$\mu (t)$'] = mu_yr_clim pdf['bias'] = diff
def test_find_tstars_prcp_fac(self): hef_file = get_demo_file("Hintereisferner.shp") entity = gpd.GeoDataFrame.from_file(hef_file).iloc[0] mb_file = get_demo_file("RGI_WGMS_oetztal.csv") mb_file = os.path.join(os.path.dirname(mb_file), "mbdata", "mbdata_RGI40-11.00897.csv") cfg.PARAMS["prcp_auto_scaling_factor"] = True gdirs = [] gdir = oggm.GlacierDirectory(entity, base_dir=self.testdir) gis.define_glacier_region(gdir, entity=entity) gis.glacier_masks(gdir) centerlines.compute_centerlines(gdir) geometry.initialize_flowlines(gdir) geometry.catchment_area(gdir) geometry.catchment_width_geom(gdir) geometry.catchment_width_correction(gdir) gdirs.append(gdir) climate.process_histalp_nonparallel(gdirs) climate.mu_candidates(gdir, div_id=0) mbdf = pd.read_csv(mb_file).set_index("YEAR")["ANNUAL_BALANCE"] t_stars, bias, prcp_fac = climate.t_star_from_refmb(gdir, mbdf) y, t, p = climate.mb_yearly_climate_on_glacier(gdir, prcp_fac, div_id=0) # which years to look at selind = np.searchsorted(y, mbdf.index) t = t[selind] p = p[selind] dffac = gdir.read_pickle("prcp_fac_optim").loc[prcp_fac] np.testing.assert_allclose(dffac["avg_bias"], np.mean(bias)) mu_yr_clim = gdir.read_pickle("mu_candidates", div_id=0)[prcp_fac] std_bias = [] for t_s, rmd in zip(t_stars, bias): mb_per_mu = p - mu_yr_clim.loc[t_s] * t md = utils.md(mbdf, mb_per_mu) np.testing.assert_allclose(md, rmd, rtol=1e-4) self.assertTrue(np.abs(md / np.mean(mbdf)) < 0.1) r = utils.corrcoef(mbdf, mb_per_mu) self.assertTrue(r > 0.8) std_bias.append(np.std(mb_per_mu) - np.std(mbdf)) np.testing.assert_allclose(dffac["avg_std_bias"], np.mean(std_bias), rtol=1e-4) # test crop years cfg.PARAMS["tstar_search_window"] = [1902, 0] climate.mu_candidates(gdir, div_id=0) t_stars, bias, prcp_fac = climate.t_star_from_refmb(gdir, mbdf) mu_yr_clim = gdir.read_pickle("mu_candidates", div_id=0)[prcp_fac] y, t, p = climate.mb_yearly_climate_on_glacier(gdir, prcp_fac, div_id=0) selind = np.searchsorted(y, mbdf.index) t = t[selind] p = p[selind] for t_s, rmd in zip(t_stars, bias): mb_per_mu = p - mu_yr_clim.loc[t_s] * t md = utils.md(mbdf, mb_per_mu) np.testing.assert_allclose(md, rmd, rtol=1e-4) self.assertTrue(np.abs(md / np.mean(mbdf)) < 0.1) r = utils.corrcoef(mbdf, mb_per_mu) self.assertTrue(r > 0.8) self.assertTrue(t_s >= 1902) # test distribute cfg.PATHS["wgms_rgi_links"] = get_demo_file("RGI_WGMS_oetztal.csv") climate.compute_ref_t_stars(gdirs) climate.distribute_t_stars(gdirs) cfg.PARAMS["tstar_search_window"] = [0, 0] df = pd.read_csv(gdir.get_filepath("local_mustar")) np.testing.assert_allclose(df["t_star"], t_s) np.testing.assert_allclose(df["bias"], rmd) np.testing.assert_allclose(df["prcp_fac"], prcp_fac) cfg.PARAMS["prcp_auto_scaling_factor"] = False