### code for Supplemental figure S2


### Plot the elevational distribution of cloudforest

library(RPostgreSQL)
library(raster)
library(maptools)
library(rgdal)

library(MASS)
library(ggplot2)
library(viridis)
library(gridExtra)
library(grid)
library(plotrix)
library(wsl.plot)

get_density <- function(x, y, ...) {
  dens <- MASS::kde2d(x, y, ...)
  ix <- findInterval(x, dens$x)
  iy <- findInterval(y, dens$y)
  ii <- cbind(ix, iy)
  return(dens$z[ii])
}

tcf   <- raster("/mnt/storage/karger/cloudforest/Hansen_treecover_2020/tcf_ensemble_mn_2001_v16.tif")
tcf2  <- raster("/mnt/storage/karger/cloudforest/Hansen_treecover_2020/tcf_ensemble_mn_2018_v16.tif")

elev  <- raster("/mnt/lud11/karger/cloudforest_loss/elev.tif")
change<- 100-100*tcf2/tcf

tcf_v<-values(tcf)
elev_v<-values(elev)
lat_v<-coordinates(elev)[,2]
change_v<-values(change)

df1 <- cbind(tcf_v,elev_v,lat_v,change_v)
df2<-df1[complete.cases(df1[,1:2]),]
df2<-df2[sample(nrow(df2), 100000,replace = T), ]
df2<-as.data.frame(df2)
df2$lat_v<-abs(df2$lat_v)
df2$lat_log<-log(df2$lat_v,base=10)
df2$tcf_v[df2$tcf_v>=10000]<-10000
df2$tcf_v<-df2$tcf_v/10000

df2$log_change<-log(df2$change_v+1)

df2$log_change[df2$log_change<=0]<-0
df2<-df2[complete.cases(df2),]
    df2$change_v_5<-df2$log_change
    df2$change_v_5[df2$change_v_5>=log(2.5)]<-log(2.5)

df2$density[df2$log_change>0] <- get_density(df2$change_v[df2$log_change>0], df2$elev_v[df2$log_change>0],n =2500)
df3<-df2
df2<-df2[df2$tcf_v>=0.528,]
# trendline for change_v
y.loess   <- loess(df2$log_change~df2$elev_v, span=0.2, data.frame(x=df2$elev_v, y=df2$tcf_v))
y.predict <- predict(y.loess, data.frame(x=df2$elev_v))

y2.loess   <- loess(df2$tcf_v~df2$elev_v, span=0.2, data.frame(x=df2$elev_v, y=df2$tcf_v))
y2.predict <- predict(y2.loess, data.frame(x=df2$elev_v))

pdf("/home/karger/Documents/bio/Bio_Backup/TIN R Skripte/GIT/cloudforests/output/tcf_scatterplots_R2.pdf",height=12,width = 6)
par(mfrow=c(2,1),mar=c(5,5,2,1))
{
        #df2$Col <- viridis(20)[as.numeric(cut(df2$density,breaks = 21))] 
    #plot(df2$elev_v,df2$tcf_v,col=df2$Col,ylim=c(0,1),xlim=c(0,4000),
    #     xlab="elevation [m a.s.l]",ylab="TCF probability of occurence",
    #     pch=19,cex=0.1,xaxs="i",yaxs="i")
    #lines(df2$elev_v[order(df2$elev_v)],y.predict[order(df2$elev_v)], col='red',lwd=3,cex=0.25)
    
    #constrained to tropics
    #df3$density<-rev(factor(df3$density))
    #df3$density<-as.numeric(df3$density)
    df2$change_5<-df2$change_v*-1
    df2$change_5[df2$change_5>=50]<-50
    df2$Col <- inferno(20,alpha=1)[as.numeric(cut(df2$change_5,breaks = 21))]  
    df2$col2<-"black"
    df2$col2[df2$tcf_v<=0.528]<-"grey50"
     plot(df2$elev_v,df2$tcf_v,col=df2$col2,ylim=c(0.5,1),xlim=c(0,5000),
        xlab="",ylab="P(TCF)",
         pch=19,cex=0.1,xaxs="i",yaxs="i",las=1)
     lines(df2$elev_v[order(df2$elev_v)],y2.predict[order(df2$elev_v)], col='red',lwd=6,cex=0.25)
     lines(df2$elev_v[order(df2$elev_v)],y2.predict[order(df2$elev_v)], col='black',lwd=2,cex=0.25)
   
    coords<-c(4150,4500,0.6,0.9)
    maxlat<-paste0( "-5%")
  #  cscl( inferno(20),coords,zrng=c(0,1),at = c(0,1),tria = "n", horiz = F,
  #       labs=c("0%",maxlat), lablag=0.15, cx=1.2,
  #       title=c("TCF loss"),titlag=0.4)
    par(xpd=TRUE)
    text(0,1.025,"(a)")
    par(xpd=FALSE)
    
    df2$Col <- inferno(20,alpha=0.75)[as.numeric(cut(df2$density,breaks = 21))]
    plot(df2$elev_v,df2$log_change,col="black",xlim=c(0,5000),
         xlab="elevation [m a.s.l]",ylab="TCF loss",
         pch=19,cex=0.1,xaxs="i",yaxs="i",las=1,yaxt="n",ylim=c(0,log(50)))
    axis(2, at=c(log(1),log(2.5),log(5),log(10),log(25),log(50)), labels=c("-1%","-2.5%","-5%","-10%","-25%","-50%"))
    lines(df2$elev_v[order(df2$elev_v)],y.predict[order(df2$elev_v)], col='red',lwd=6,cex=0.25)
    lines(df2$elev_v[order(df2$elev_v)],y.predict[order(df2$elev_v)], col='black',lwd=2,cex=0.25)
    
    coords<-c(log(45),log(13),3000,4500)
    cscl( viridis(20),coords,zrng=c(0,1),at = c(0,1),tria = "n", horiz = F,
          labs=c("0",round(max(df2$density),6)), lablag=0.15, cx=1.2,
          title=c("Density"),titlag=0.4)
    par(xpd=TRUE)
    text(0,log(55),"(b)")
    par(xpd=FALSE)
}
dev.off()

