def project(year): print("projecting %d" % year) # Open the mask shape file shp_file = 'c:/data/from-adriana/tropicalforests.shp' shapes = fiona.open(shp_file) # Read Adriana's abundance model (mainland) mod = modelr.load('../tropical-bii/simplifiedAbundanceModel.rds') predicts.predictify(mod) # Import standard PREDICTS rasters rasters = predicts.rasterset('1km', '', year, 'medium') rasters['primary_lightintense'] = SimpleExpr( 'primary_lightintense', 'primary_light + primary_intense') rasters['cropland_lightintense'] = SimpleExpr( 'cropland_lightintense', 'cropland_light + cropland_intense') rasters['pasture_lightintense'] = SimpleExpr( 'pasture_lightintense', 'pasture_light + pasture_intense') rasters['rd_dist'] = Raster('rd_dist', '/out/1km/roads-adrid.tif') rasters['hpd'] = Raster( 'hpd', '/vsizip//data/from-adriana/HPD01to12.zip/yr%d/hdr.adf' % year) rs = RasterSet(rasters, shapes=shapes, crop=True, all_touched=True) what = 'LogAbund' rs[what] = mod stime = time.time() rs.write(what, utils.outfn('1km', 'adrid-%d.tif' % year)) etime = time.time() print("executed in %6.2fs" % (etime - stime))
) rasters['secondary_vegetation_intense'] = SimpleExpr( 'secondary_vegetation_intense', 'young_secondary_intense + intermediate_secondary_intense + mature_secondary_intense' ) rasters['primary_vegetation_intense'] = SimpleExpr( 'primary_vegetation_intense', 'primary_intense') rasters['primary_vegetation_light'] = SimpleExpr( 'primary_vegetation_light', 'primary_light') rasters['plantation_pri'] = SimpleExpr('plantation_pri', 'perennial + timber') rasters['plantation_pri_intense'] = SimpleExpr( 'plantation_pri_intense', 'perennial_intense + timber_intense') rasters['plantation_pri_light'] = SimpleExpr( 'plantation_pri_light', 'perennial_light + timber_light') rasters['plantation_pri_minimal'] = SimpleExpr( 'plantation_pri_minimal', 'perennial_minimal + timber_minimal') rs = RasterSet(rasters) # back transform (they were transformed using log(x+1) rs[mod.output] = mod rs['output'] = SimpleExpr( 'output', 'clip((exp(%s) - 1) / (exp(%f) - 1), 0, 1e20)' % (mod.output, mod.intercept)) rs.write( 'output', 'D:/victoria_projections/projections/' + what + '-' + scenario + '-' + '%d.tif' % year)
bii_rs = RasterSet({ 'abundance': Raster( 'abundance', 'C:/ds/temporal-bii/' + version + '/bii-ab-low-bound-%d.tif' % year), 'comp_sim': Raster( 'comp_sim', 'C:/ds/temporal-bii/' + version + '/bii-cs-low-bound-%d.tif' % year), 'bii_ab': SimpleExpr('bii_ab', 'abundance * comp_sim') }) # write out bii raster bii_rs.write( 'bii_ab', utils.outfn('temporal-bii/' + version, 'bii-%d.tif' % year)) # calculate bounded bii # clip the abundance rasters inname = 'C:/ds/temporal-bii/' + version + '/bii-ab-' + str( year) + '.tif' outname = 'C:/ds/temporal-bii/' + version + '/bii-ab-bound-' + str( year) + '.tif' ru.clip(inname, outname, 0, abmax) # clip the cs rasters inname = 'C:/ds/temporal-bii/' + version + '/bii-cs-' + str( year) + '.tif' outname = 'C:/ds/temporal-bii/' + version + '/bii-cs-bound-' + str( year) + '.tif'
#!/usr/bin/env python import fiona import time from rasterio.plot import show, show_hist from projections.rasterset import RasterSet, Raster import projections.predicts as predicts import projections.modelr as modelr # Open the mask shape file shp_file = '../../data/from-adriana/tropicalforests.shp' shapes = fiona.open(shp_file) # Read Adriana's abundance model (mainland) mod = modelr.load('../models/ab-corrected.rds') predicts.predictify(mod) # Import standard PREDICTS rasters rasters = predicts.rasterset('1km', 'foo', 2005, 'historical') rs = RasterSet(rasters, shapes=shapes, all_touched=True) rs[mod.output] = mod what = mod.output stime = time.time() data = rs.write(what, 'hires.tif') etime = time.time() print("executed in %6.2fs" % (etime - stime))
###Added +100 to DistRd to deal with zero values # set up the rasterset, cropping to mainlands rs = RasterSet(rasters, mask=mask_ds, maskval=0, crop=True) # if you're projecting the whole world, use this code instead # rs = RasterSet(rasters) # evaluate the model # model is square root abundance so square it # Note that the intercept value has been calculated for the baseline # land use when all other variables are held at 0 # Therefore I calculate separatedly an intercept where DistRd is set to # the max value, i.e. logDistRd_RS = 1. intercept = mod.partial({'ISL_MAINLMAINLAND': ISLMAIN, 'logDistRd_rs': 1.0}) print("intercept: %.5f" % intercept) if args.mainland: assert math.isclose(intercept, 0.67184, rel_tol=0.001) else: ## FIXME: Replace RHS with the R calculated value assert math.isclose(intercept, 0.7270164, rel_tol=0.001) rs[mod.output] = mod rs['output'] = SimpleExpr( 'output', '(pow(%s, 2) / pow(%f, 2))' % (mod.output, intercept)) fname = 'ab-%s.tif' % ('mainland' if args.mainland else 'islands') path = ('katia', 'clip' if args.clip else 'no-clip', fname) rs.write('output', utils.outfn(*path))
'1km/mainland-from-igor-edited.tif') mask_ds = rasterio.open(mask_file) # Richness compositional similarity model with updated PriMin-Urb coefficient mod = modelr.load('/home/vagrant/katia/models/updated_compsim_rich.rds') predicts.predictify(mod) # Import standard PREDICTS rasters rasters = predicts.rasterset('1km', 'medium', year=2005) # create an ISL_MAINL raster # set it to Mainlands this time round (set Mainlands to 1 and Islands to 0) rasters['ISL_MAINMAINLAND'] = SimpleExpr('ISL_MAINMAINLAND', '2') rasters['ISL_MAINISLAND'] = SimpleExpr('ISL_MAINISLAND', '0') rasters['adjGeogDist'] = SimpleExpr('adjGeogDist', '0') rasters['cubeRtEnvDist'] = SimpleExpr('cubeRtEnvDist', '0') # set up the rasterset, cropping to mainlands rs = RasterSet(rasters, mask=mask_ds, maskval=0, crop=True) # if you're projecting the whole world, use this code instead #rs = RasterSet(rasters) # evaluate the model # model is logit transformed with an adjustment, so back-transformation rs[mod.output] = mod rs['output'] = SimpleExpr( 'output', '(inv_logit(%s) - 0.01) / (inv_logit(%f) - 0.01)' % (mod.output, mod.intercept)) rs.write('output', utils.outfn('katia', 'bii-sr-cs-mainlands.tif'))
assert np.allclose(data1, good, atol=1e-05, equal_nan=True) del out ## ## Redo the projection using iterative API ## mod = modelr.load('../models/ab-corrected.rds') predicts.predictify(mod) # Import standard PREDICTS rasters rasters2 = predicts.rasterset('rcp', 'aim', 2020, 'medium') rs2 = RasterSet(rasters2, shapes=shapes, all_touched=True) rs2[mod.output] = mod stime = time.time() rs2.write(what, 'adrid.tif') etime = time.time() print("executed in %6.2fs" % (etime - stime)) out = rasterio.open('adrid.tif') data2 = out.read(1, masked=True) diff = np.fabs(data1 - data2) print("max diff: %f" % diff.max()) plot = None if plot: fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(10, 5)) show(data1, ax=ax1, cmap='Greens', title='Non-incremental') show(data2, ax=ax2, cmap='Greens', title='Incremental') show(diff, ax=ax3, cmap='viridis', title='Difference') plt.show()
# create an ISL_MAINL raster # set it to Mainlands this time round (set Mainlands to 1 and Islands to 0) rasters['ISL_MAINMAINLAND'] = SimpleExpr('ISL_MAINMAINLAND', ISLMAIN) rasters['ISL_MAINISLAND'] = SimpleExpr('ISL_MAINISLAND', 0) rasters['adjGeogDist'] = SimpleExpr('adjGeogDist', 0) rasters['cubeRtEnvDist'] = SimpleExpr('cubeRtEnvDist', 0) # set up the rasterset, cropping to mainlands rs = RasterSet(rasters, mask=mask_ds, maskval=0, crop=True) # if you're projecting the whole world, use this code instead #rs = RasterSet(rasters) # evaluate the model # model is logit transformed with an adjustment, so back-transformation rs[mod.output] = mod intercept = mod.partial({'ISL_MAINMAINLAND': ISLMAIN}) print("intercept: %.5f" % intercept) if args.mainland: assert math.isclose(intercept, 1.939964, rel_tol=0.001) else: assert math.isclose(intercept, 1.439107176, rel_tol=0.001) rs['output'] = SimpleExpr( 'output', '(inv_logit(%s) - 0.01) / (inv_logit(%f) - 0.01)' % (mod.output, intercept)) fname = 'ab-cs-%s.tif' % ('mainland' if args.mainland else 'islands') rs.write('output', utils.outfn('katia', fname))
bii_rs = RasterSet({'abundance': Raster('abundance', utils.outfn('katia', folder, 'ab-%s.tif' % suffix)), 'comp_sim': Raster('comp_sim', utils.outfn('katia', 'ab-cs-%s.tif' % suffix)), 'clip_ab': SimpleExpr('clip_ab', 'clip(abundance, 0, %f)' % ab_max), 'bii_ab': SimpleExpr('bii_ab', 'abundance * comp_sim'), 'bii_ab2': SimpleExpr('bii_ab2', 'clip_ab * comp_sim'), }) # write out bii raster bii_rs.write('bii_ab' if args.clip else 'bii_ab2', utils.outfn('katia', folder, 'abundance-based-bii-%s.tif' % suffix)) # do the same for species richness # pull in all the rasters for computing bii bii_rs = RasterSet({'sp_rich': Raster('sp_rich', utils.outfn('katia', folder, 'sr-%s.tif' % suffix)), 'comp_sim': Raster('comp_sim', utils.outfn('katia', 'sr-cs-%s.tif' % suffix)), 'clip_sr': SimpleExpr('clip_sr', 'clip(sp_rich, 0, %f)' % sr_max), 'bii_sr': SimpleExpr('bii_sr', 'sp_rich * comp_sim'), 'bii_sr2': SimpleExpr('bii_sr2', 'clip_sr * comp_sim')})
'CRootRdDens_50km_cs', '(clip_rd - %f) / %f' % (mean_rd, sd_rd)) # set up the rasterset, cropping by tropical forests # set all_touched = False as there are some boundary issues with very small countries on the edge # like Macao rs = RasterSet(rasters, shapes=shapes, crop=True, all_touched=False) # evaluate the model # model is square root abundance so square it # note that the intercept value has been calculated for the baseline land use when all other variables are held at 0 rs[mod.output] = mod rs['output'] = SimpleExpr( 'output', '(pow(%s, 2) / pow(%f, 2))' % (mod.output, ref)) rs.write( 'output', utils.outfn('temporal-bii/' + version, 'bii-ab-%d.tif' % year)) # if you're on the final version (i.e. the last time you're going round) # write out the pressure data if version == 'v3': rs.write( 'primary', utils.outfn('temporal-bii/primary', 'primary-%d.tif' % year)) rs.write( 'secondary', utils.outfn('temporal-bii/secondary', 'secondary-%d.tif' % year)) rs.write( 'pasture', utils.outfn('temporal-bii/pasture', 'pasture-%d.tif' % year))
# pull in all the rasters for computing bii bii_rs = RasterSet({ 'abundance': Raster('abundance', utils.outfn('katia', CLIP, 'bii-ab-mainlands.tif')), 'comp_sim': Raster('comp_sim', utils.outfn('katia', 'bii-ab-cs-mainlands.tif')), 'clip_ab': SimpleExpr('clip_ab', 'clip(abundance, 0, 1.655183)'), 'bii_ab': SimpleExpr('bii_ab', 'abundance * comp_sim'), 'bii_ab2': SimpleExpr('bii_ab2', 'clip_ab * comp_sim'), }) # write out bii raster bii_rs.write('bii_ab' if CLIP == 'clip' else 'bii_ab2', utils.outfn('katia', CLIP, 'abundance-based-bii-mainlands.tif')) # do the same for species richness # pull in all the rasters for computing bii bii_rs = RasterSet({ 'sp_rich': Raster('sp_rich', utils.outfn('katia', CLIP, 'bii-sr-mainlands.tif')), 'comp_sim': Raster('comp_sim', utils.outfn('katia', 'bii-sr-cs-mainlands.tif')), 'clip_sr': SimpleExpr('clip_sr', 'clip(sp_rich, 0, 1.636021)'), 'bii_sr': SimpleExpr('bii_sr', 'sp_rich * comp_sim'), 'bii_sr2': SimpleExpr('bii_sr2', 'clip_sr * comp_sim') })
# get the differences # diff = cuberoot(s1) - cuberoot(s2) # we want cuberoot(s1+1) = 0 # so the difference is 0 - cuberoot(s2) # then center and scale (subtract mean and divide by sd) mean_rd50_diff = float( df[df['Value'] == 'CRootDens_50km_diff']['mean']) mean_rd1_diff = float(df[df['Value'] == 'CRootDens_1km_diff']['mean']) sd_rd50_diff = float(df[df['Value'] == 'CRootDens_50km_diff']['sd']) sd_rd1_diff = float(df[df['Value'] == 'CRootDens_1km_diff']['sd']) rasters['CRootDens_50km_diff_cs'] = SimpleExpr( 'CRootDens_50km_diff_cs', '((0 - clip_rd50) - %f) / %f' % (mean_rd50_diff, sd_rd50_diff)) rasters['CRootDens_1km_diff_cs'] = SimpleExpr( 'CRootDens_1km_diff_cs', '((0 - clip_rd1) - %f) / %f' % (mean_rd1_diff, sd_rd1_diff)) # set up the rasterset, cropping by tropical forests rs = RasterSet(rasters, shapes=shapes, crop=True, all_touched=False) # evaluate the model # model is logit transformed with an adjustment, so back-transformation rs[mod.output] = mod rs['output'] = SimpleExpr( 'output', '(inv_logit(%s) - 0.01) / (inv_logit(%f) - 0.01)' % (mod.output, ref)) rs.write( 'output', utils.outfn('temporal-bii/' + version, 'bii-cs-%d.tif' % year))
import sys import rasterio from projections.rasterset import RasterSet import projections.predicts as predicts import projections.utils as utils # Import standard PREDICTS rasters rasters = predicts.rasterset('1km', 'medium', year = 2005) for suffix in ('islands', 'mainland'): # Open the BII raster file mask_file = 'C:/Users/katis2/Desktop/Final_projections/Clip_variables/abundance-based-bii-%s.tif' % suffix mask_ds = rasterio.open(mask_file) # set up the rasterset, cropping to mainlands rs = RasterSet(rasters, mask=mask_ds, maskval=-9999, crop=True) # Run through each land-use for lu in ('cropland', 'pasture', 'primary', 'secondary', 'urban'): # And every use intensity for ui in ('minimal', 'light', 'intense'): name = '%s_%s' % (lu, ui) print(name) oname = utils.outfn('katia', '%s-%s.tif' % (name, suffix)) if os.path.isfile(oname) or name in ('secondary_intense', 'urnan_light'): continue rs.write(name, oname)