def project_year(model, model_dir, what, scenario, year): print("projecting %s for %d using %s" % (what, year, scenario)) models = select_models(model, model_dir) # Read Sam's abundance model (forested and non-forested) modf = modelr.load(models[0]) intercept_f = modf.intercept predicts.predictify(modf) modn = modelr.load(models[1]) intercept_n = modn.intercept predicts.predictify(modn) # Open forested/non-forested mask layer fstnf = rasterio.open(utils.luh2_static('fstnf')) # Import standard PREDICTS rasters rastersf = predicts.rasterset('luh2', scenario, year, 'f') rsf = RasterSet(rastersf, mask=fstnf, maskval=0.0) rastersn = predicts.rasterset('luh2', scenario, year, 'n') rsn = RasterSet(rastersn, mask=fstnf, maskval=1.0) #rsn = RasterSet(rastersn) if what == 'bii': vname = 'bii' rsf[vname] = SimpleExpr( vname, 'exp(%s) / exp(%f)' % (modf.output, intercept_f)) rsn[vname] = SimpleExpr( vname, 'exp(%s) / exp(%f)' % (modn.output, intercept_n)) rsf[modf.output] = modf rsn[modn.output] = modn else: vname = modf.output assert modf.output == modn.output rsf[vname] = modf rsn[vname] = modn if what not in rsf: print('%s not in rasterset' % what) print(', '.join(sorted(rsf.keys()))) sys.exit(1) stime = time.time() datan, meta = rsn.eval(what, quiet=False) dataf, _ = rsf.eval(what, quiet=True) data_vals = dataf.filled(0) + datan.filled(0) data = data_vals.view(ma.MaskedArray) data.mask = np.logical_and(dataf.mask, datan.mask) #data = datan etime = time.time() print("executed in %6.2fs" % (etime - stime)) oname = '%s/luh2/%s-%s-%d.tif' % (utils.outdir(), scenario, what, year) with rasterio.open(oname, 'w', **meta) as dst: dst.write(data.filled(meta['nodata']), indexes=1) if None: fig = plt.figure(figsize=(8, 6)) ax = plt.gca() show(data, cmap='viridis', ax=ax) plt.savefig('luh2-%s-%d.png' % (scenario, year)) return
def project_year(model, model_dir, what, scenario, year): print("projecting %s for %d using %s" % (what, year, scenario)) models = select_models(model, model_dir) # Read Sam's abundance model (forested and non-forested) mod = modelr.load(models[0]) predicts.predictify(mod) # Import standard PREDICTS rasters by_age = 'young_secondary' in mod.syms print('by_age: %s' % str(by_age)) rasters = predicts.rasterset('luh5', scenario, year, by_age) rs = RasterSet(rasters) if what == 'bii': vname = 'bii' rs[vname] = SimpleExpr(vname, '%s / %f' % (mod.output, intercept)) else: vname = mod.output rs[vname] = mod if what not in rs: print('%s not in rasterset' % what) print(', '.join(sorted(rs.keys()))) sys.exit(1) stime = time.time() data, meta = rs.eval(what, quiet=False) etime = time.time() print("executed in %6.2fs" % (etime - stime)) oname = os.path.join(os.environ['OUTDIR'], 'luh5/%s-%s-%d.tif' % (scenario, what, year)) #hpd, _ = rs.eval('hpd', quiet=False) #hpd_max, meta2 = rs.eval('hpd_max', quiet=False) with rasterio.open(oname, 'w', **meta) as dst: #bb = dst.bounds #ul = map(int, ~meta2['affine'] * (bb[0], bb[3])) #lr = map(int, ~meta2['affine'] * (bb[2], bb[1])) #cap = ma.where(hpd > hpd_max[ul[1]:lr[1], ul[0]:lr[0]], True, False) #show(hpd, norm=colors.PowerNorm(gamma=0.2)) #show(cap * 1) #data.mask = np.logical_or(data.mask, cap) dst.write(data.filled(meta['nodata']), indexes=1) if None: fig = plt.figure(figsize=(8, 6)) ax = plt.gca() show(data, cmap='viridis', ax=ax) plt.savefig('luh2-%s-%d.png' % (scenario, year)) return
def project_year(model, model_dir, scenario, year): """Run a projection for a single year. Can be called in parallel when projecting a range of years. """ print("projecting %s for %d using %s" % (model, year, scenario)) # Import standard PREDICTS rasters rasters = predicts.rasterset('luh2', scenario, year) rs = RasterSet(rasters) what, model = select_model(model, model_dir) # Read Sam's models if model: mod = modelr.load(model) predicts.predictify(mod) rs[mod.output] = mod if what in ('CompSimAb', 'CompSimSR', 'Abundance', 'Richness'): if what in ('CompSimAb', 'CompSimSR'): expr = '(inv_logit(%s) - 0.01) / (inv_logit(%f) - 0.01)' else: expr = '(exp(%s) / exp(%f))' rs[what] = SimpleExpr(what, expr % (mod.output, mod.intercept)) if what not in rs: print('%s not in rasterset' % what) print(', '.join(sorted(rs.keys()))) sys.exit(1) stime = time.time() data, meta = rs.eval(what, quiet=True) etime = time.time() print("executed in %6.2fs" % (etime - stime)) oname = '%s/luh2/%s-%s-%04d.tif' % (utils.outdir(), scenario, what, year) with rasterio.open(oname, 'w', **meta) as dst: dst.write(data.filled(meta['nodata']), indexes=1) if None: fig = plt.figure(figsize=(8, 6)) show(data, cmap='viridis', ax=plt.gca()) fig.savefig('luh2-%s-%d.png' % (scenario, year)) return