Greenhouse Development Rights Online Calculator
document.getElementById("throbtext").innerHTML = " Loading data... "
if (length(ls(pattern="gdrs.par.repyear")) == 0) {
# Version information
source(RpadBaseURL("VERSION.R"))
# Defaults and constants
gdrs.par.repyear.txt = "2020"
gdrs.par.repyear = as.numeric(gdrs.par.repyear.txt)
gdrs.par.emergstart.txt = "2012"
gdrs.par.emergstart = as.numeric(gdrs.par.emergstart.txt)
gdrs.par.numdec.txt = "1"
gdrs.par.prog = 1
gdrs.par.method = "sum"
gdrs.const.start = 1990
gdrs.const.repstart = 1990
gdrs.const.end = 2030
gdrs.par.emissElast = 1
gdrs.par.Cbill = 1
# Data files
gdrs.iso3 = read.csv(RpadBaseURL('gdrs.iso3.csv'))
gdrs.noregrets = read.csv(RpadBaseURL('gdrs.noregrets.csv'))
gdrs.emergpath = read.csv(RpadBaseURL('gdrs.emergpath.csv'))
gdrs.gdp = read.csv(RpadBaseURL('gdrs.gdp.csv'))
gdrs.pop = read.csv(RpadBaseURL('gdrs.pop.csv'))
gdrs.base = read.csv(RpadBaseURL('gdrs.base.csv'))
gdrs.bau = read.csv(RpadBaseURL('gdrs.bau.csv'))
# Lists
regionlist = c(
"( 1) High Income",
"( 2) Upper Middle Income",
"( 3) Lower Middle Income",
"( 4) Low Income",
"( 5) Annex I",
"( 6) Non-Annex I",
"( 7) EITs",
"( 8) LDCs",
"( 9) EU 15",
"(10) EU +12",
"(11) EU 27",
"(12) World"
)
ctrylist = c("--All--", regionlist, levels(gdrs.iso3[,2]))
ctrydefault = c(2:13, 48, 89, 199)
disp.ctry = ctrylist[1]
v.dlnorm <- Vectorize(dlnorm, c("meanlog", "sdlog"))
v.plnorm <- Vectorize(plnorm, c("meanlog", "sdlog"))
quickfmt <- function(fmt, val) {
as.numeric(sprintf(fmt, val))
}
v.quickfmt <- Vectorize(quickfmt, c("fmt", "val"))
source(RpadBaseURL("altelems.R"))
}
HTMLon()
H("table",
H("tr",
H("td",
H("ul",
H("li", HTMLlink(url="gdrs.core.xls", text="Data used to calculate the table")),
H("li", HTMLlink(url=RpadURL("gdrs.out.csv"), text="Table as a CSV file")),
H("li", HTMLlink(url=RpadURL("gdrs.rci.csv"), text="RCI over time as a CSV file")),
H("li", HTMLlink(url=RpadURL("gdrs.alloc.csv"), text="GDRs allocations over time as a CSV file"))
)
)
)
)
document.getElementById("throbtext").innerHTML = " Calculating RCI... "
gdrs.par.repyear = as.numeric(gdrs.par.repyear.txt)
gdrs.par.emergstart = as.numeric(gdrs.par.emergstart.txt)
gdrs.par.repincome = as.numeric(gdrs.par.repincome.txt)
gdrs.par.yl = as.numeric(gdrs.par.yl.txt)
gdrs.par.Rexp = as.numeric(gdrs.par.Rexp.txt)
source(RpadBaseURL("gdrsfuncs.R"))
tmp.i = 1
repeat {
tmp.fname = sprintf("cache/gdc%010d.csv", tmp.i)
if (!file.exists(RpadBaseURL(tmp.fname))) {break}
tmp.i = tmp.i + 1
}
if (!file.exists(RpadBaseURL('cache/files.csv'))) {
files.dat <- data.frame(gdrs.par.repyear, gdrs.par.repincome, gdrs.par.yl,
gdrs.par.Cbill, gdrs.par.Rexp, gdrs.par.emissElast,
gdrs.par.fname=tmp.fname, stringsAsFactors=FALSE)
write.csv(files.dat, RpadBaseURL('cache/files.csv'), row.names=FALSE)
} else {
files.dat <- read.csv(RpadBaseURL('cache/files.csv'), stringsAsFactors=FALSE)
}
gdrs.par.fname <- files.dat[files.dat$gdrs.par.repyear==gdrs.par.repyear &
files.dat$gdrs.par.repincome==gdrs.par.repincome &
files.dat$gdrs.par.yl==gdrs.par.yl &
files.dat$gdrs.par.Cbill==gdrs.par.Cbill &
files.dat$gdrs.par.Rexp==gdrs.par.Rexp &
files.dat$gdrs.par.emissElast==gdrs.par.emissElast,]$gdrs.par.fname
if (is.null(gdrs.par.fname) || length(gdrs.par.fname)==0) {
files.dat <- rbind(files.dat, data.frame(gdrs.par.repyear, gdrs.par.repincome, gdrs.par.yl,
gdrs.par.Cbill, gdrs.par.Rexp, gdrs.par.emissElast,
gdrs.par.fname=tmp.fname, stringsAsFactors=FALSE))
write.csv(files.dat, RpadBaseURL('cache/files.csv'), row.names=FALSE)
gdrs.par.fname <- tmp.fname
}
gdrs.par.rootname = substr(gdrs.par.fname, 1, nchar(gdrs.par.fname)-4)
lUseCache = file.exists(RpadBaseURL(gdrs.par.fname))
if (lUseCache) {
gdrs.dat <- read.csv(RpadBaseURL(gdrs.par.fname))
} else {
source(RpadBaseURL("bldgdrsdat.R"))
write.csv(gdrs.dat, RpadBaseURL(gdrs.par.fname), row.names=FALSE)
}
document.getElementById("throbtext").innerHTML = " Building tables... "
tmp.out.fname = RpadBaseURL(sprintf("%s.out.csv", gdrs.par.rootname))
tmp.ts.rci.fname = RpadBaseURL(sprintf("%s.ts.rci.csv", gdrs.par.rootname))
tmp.ts.alloc.fname = RpadBaseURL(sprintf("%s.ts.alloc.csv", gdrs.par.rootname))
if (lUseCache) {
gdrs.out.csv <- read.csv(tmp.out.fname)
tmp.ts.rci <- read.csv(tmp.ts.rci.fname)
tmp.ts.alloc <- read.csv(tmp.ts.alloc.fname)
} else {
source(RpadBaseURL("bldtables.R"))
write.csv(gdrs.out.csv, tmp.out.fname, row.names=FALSE)
write.csv(tmp.ts.rci, tmp.ts.rci.fname, row.names=FALSE)
write.csv(tmp.ts.alloc, tmp.ts.alloc.fname, row.names=FALSE)
}
# Version string
tmp.ver.string <- sprintf("Greenhouse Development Rights Online Calculator\nLast updated %s\nCalculator version %s\nData version %s", ver["update"], ver["calc"], ver["data"])
# Settings string
tmp.settings.string <- sprintf("Development threshold: $%.2f\nBill as %%GWP: %.2f\nResponsibility weight: %.2f", gdrs.par.yl, gdrs.par.Cbill, gdrs.par.Rexp);
# Main output file
write(tmp.ver.string, file="gdrs.out.csv")
write(tmp.settings.string, file="gdrs.out.csv", append=TRUE)
write(sprintf("Report year: %s\nReport tax at income: %.2f", gdrs.par.repyear.txt, gdrs.par.repincome), file="gdrs.out.csv", append=TRUE)
write.csv(gdrs.out.csv, "gdrs.out.csv", row.names=FALSE, append=TRUE)
# Additional tables to report
write(tmp.ver.string, file="gdrs.rci.csv")
write(tmp.settings.string, file="gdrs.rci.csv", append=TRUE)
write.csv(tmp.ts.rci, "gdrs.rci.csv", row.names=FALSE, append=TRUE)
write(tmp.ver.string, file="gdrs.alloc.csv")
write(tmp.settings.string, file="gdrs.alloc.csv", append=TRUE)
write.csv(tmp.ts.alloc, "gdrs.alloc.csv", row.names=FALSE, append=TRUE)
tmp.names.short = c("Country or Region")
gdrs.out <- data.frame(gdrs.out.csv[,1])
tmp.fmt = paste("%.", gdrs.par.numdec.txt, "f", sep="")
tmp.fmt.list = rep(tmp.fmt,length(gdrs.out.csv[,1]))
tmp.i = 1
tmp.i = tmp.i + 1
tmp.name = "Share of Global Population (%)"
tmp.names.short = c(tmp.names.short, tmp.name)
gdrs.out <- transform(gdrs.out, pop.share = v.quickfmt(tmp.fmt.list, gdrs.out.csv[,tmp.i]))
tmp.i = tmp.i + 1
tmp.name = "GDP per capita ($PPP/cap)"
tmp.names.short = c(tmp.names.short, tmp.name)
gdrs.out <- transform(gdrs.out, natl.inc.pc = v.quickfmt(tmp.fmt.list, gdrs.out.csv[,tmp.i]))
tmp.i = tmp.i + 1
tmp.name = "Population above the development threshold (% nat'l pop)"
tmp.names.short = c(tmp.names.short, tmp.name)
gdrs.out <- transform(gdrs.out, hi.popshare = v.quickfmt(tmp.fmt.list, gdrs.out.csv[,tmp.i]))
tmp.i = tmp.i + 1
tmp.name = "Share of Global RCI (%)"
tmp.names.short = c(tmp.names.short, tmp.name)
gdrs.out <- transform(gdrs.out, rci.share = v.quickfmt(tmp.fmt.list, gdrs.out.csv[,tmp.i]))
tmp.i = tmp.i + 1
tmp.name = "Obligation to pay (% GDP)"
tmp.names.short = c(tmp.names.short, tmp.name)
gdrs.out <- transform(gdrs.out, tax.perc = v.quickfmt(tmp.fmt.list, gdrs.out.csv[,tmp.i]))
tmp.i = tmp.i + 1
tmp.name = "Obligation per person above the development threshold ($PPP/cap)"
tmp.names.short = c(tmp.names.short, tmp.name)
gdrs.out <- transform(gdrs.out, tax.per.taxpayer = v.quickfmt(tmp.fmt.list, gdrs.out.csv[,tmp.i]))
tmp.i = tmp.i + 1
tmp.name = "Tax at specified income (% income)"
tmp.names.short = c(tmp.names.short, tmp.name)
gdrs.out <- transform(gdrs.out, tax.at.income = v.quickfmt(tmp.fmt.list, gdrs.out.csv[,tmp.i]))
tmp.i = tmp.i + 1
tmp.name = "Emissions allocation (MtC)"
tmp.names.short = c(tmp.names.short, tmp.name)
gdrs.out <- transform(gdrs.out, alloc = v.quickfmt(tmp.fmt.list, gdrs.out.csv[,tmp.i]))
tmp.i = tmp.i + 1
tmp.name = "Emissions alloc (% 1990)"
tmp.names.short = c(tmp.names.short, tmp.name)
gdrs.out <- transform(gdrs.out, allocperc = v.quickfmt(tmp.fmt.list, gdrs.out.csv[,tmp.i]))
tmp.i = tmp.i + 1
tmp.name = "BAU emissions (% 1990)"
tmp.names.short = c(tmp.names.short, tmp.name)
gdrs.out <- transform(gdrs.out, bauperc = v.quickfmt(tmp.fmt.list, gdrs.out.csv[,tmp.i]))
tmp.i = tmp.i + 1
tmp.name = "No-regrets emissions (% 1990)"
tmp.names.short = c(tmp.names.short, tmp.name)
gdrs.out <- transform(gdrs.out, nrperc = v.quickfmt(tmp.fmt.list, gdrs.out.csv[,tmp.i]))
names(gdrs.out) <- tmp.names.short
if (disp.ctry == ctrylist[1]) {
tmp.disp.table = gdrs.out
} else {
tmp.disp.list <- gdrs.out.csv[,1] %in% disp.ctry
tmp.disp.table = gdrs.out[tmp.disp.list,]
}
HTMLon()
Rpad:::asFilteringTable(format(tmp.disp.table, scientific=F, big.mark=","))
rm(list=ls(pattern="tmp.*"))
document.getElementById("throbtext").innerHTML = ""
HTMLon();
H("div", class="footer1", "Copyright © 2008-2009 EcoEquity and Stockholm Environment Institute - For information contact ",
H("a", href="mailto:calculator@gdrights.org", "calculator@gdrights.org"))
H("div", class="footer2", sprintf("Last updated %s - Calculator version %s - Data version %s", ver["update"], ver["calc"], ver["data"]))