#' @title Eagle Model GUI User Interface
#' @author Joe Statwick
#'
#' @description The UI portion of the shiny interface for EagleModelGUI
#' @import shiny
# Define UI for application
EagleModelui <- fluidPage(
# Application title
titlePanel("Eagle Fatality Estimate"),
# Sidebar with a slider input for number of bins
sidebarLayout(
sidebarPanel(
textInput("cProject", "Name of project"),
textInput("Name", "Your name"),
numericInput("nTurbine","Number of turbines", value = ""),
numericInput("DayLtHr","Annual Daylight Hours", value = ""),
helpText("You can use DayLen() to calculate this if you don't know"),
fluidRow(
column(8,numericInput("TDiam","Blade diameter of one turbine", value = "")),
column(2,radioButtons("Tunits", h5("Units"),
choices = list("Meters" = 1, "Feet" = 2),
selected = 1))),
radioButtons("opr", "Do know the facility operative rate?", c("Yes"=1,"No"=0),selected = 0, inline = TRUE),
conditionalPanel(
condition = "input.opr == 1",
numericInput("Oprate","Facility operative rate", value = 1, min = 0, max = 1)),
radioButtons("prec", "Do have pre-construction eagle use data?", c("Yes"=1,"No"=0),selected = 0, inline = TRUE),
conditionalPanel(
condition = "input.prec == 1",
radioButtons("strata", "Do you have multiple strata?", c("Yes"=1,"No"=0),selected = 0, inline = TRUE),
conditionalPanel(
condition = "input.strata == 1",
helpText(tags$span(style="color:red", "Please use EagleModel(); multiple strata not yet supported"))),
numericInput("EMin","Number of eagle-minutes", value = "", step = 1),
fluidRow(
column(6,numericInput("nCnt","Number of observation trials", value = "", step = 1)),
column(6,numericInput("CntMin","Duration of one trial (minutes)", value = "", step = 1))),
fluidRow(
column(8,numericInput("Pradius","Radius of one observation plot", value = "")),
column(2,radioButtons("Punits", h5("Units"),
choices = list("Meters" = 1, "Feet" = 2),
selected = 1)))),
radioButtons("pcmm", "Do have post-construction mortality monitoring data?", c("Yes"=1,"No"=0),selected = 0, inline = TRUE),
conditionalPanel(
condition = "input.pcmm == 1",
fluidRow(
column(6,numericInput("carcasses","Number of carcasses found", value = "", step = 1)),
column(6, numericInput("PCMMsurveys","Number of turbines surveyed", value = "", step = 1))),
fluidRow(
column(6,numericInput("FatEfficiency","Searcher efficiency", value = 1, min = 0, max = 1)),
column(6,numericInput("FatRemoval","Carcass Persistance at search interval", value = .76, min = 0, max = 1))),
numericInput("PCMMhrs","Daylight hours during PCMM surveys", value = "")
),
radioButtons("CPrPriors", "Which collision priors would you like to use?", c("USFWS"="USFWS","Bay, 2016"="Bay", "Custom" = "Custom"),selected = "USFWS"),
conditionalPanel(
condition = "input.CPrPriors == 'Custom'",
fluidRow(
column(6,numericInput("aPriCpr","Alpha parameter", value = NULL)),
column(6,numericInput("bPriCpr","Beta parameter", value = NULL)))),
sliderInput("percentile", "Estimate percentile", min = 5, max = 95, value = 80, step = 5)
),
# Show a plot of the generated distribution
mainPanel(
verbatimTextOutput("value"),
plotOutput("fatalPlot")
)
)
)
#' @title Eagle Model GUI Server Side
#' @author Joe Statwick
#'
#' @description The server portion of the shiny interface for EagleModelGUI
#' @import shiny
#' @import rv
EagleModelserver <- function(input, output) {
Fatalities <- reactive({
req(input$TDiam, input$nTurbine, input$DayLtHr, input$Oprate, (input$prec != 1 || (isTruthy(input$EMin) && isTruthy(input$nCnt) && isTruthy(input$CntMin) && isTruthy(input$Pradius))), (input$pcmm != 1 || (isTruthy(input$carcasses) && isTruthy(input$FatEfficiency) && isTruthy(input$FatRemoval))))
if (input$Tunits == "2") {HazDiam <- input$TDiam*0.3048
} else {HazDiam <- input$TDiam}
HazKM2 <- input$nTurbine*pi*(HazDiam/2/1000)^2
if (input$Punits == "2") {Pradius <- input$Pradius*0.3048
} else {Pradius <- input$Pradius}
CntKM2 <- pi*(Pradius/1000)^2
CntHr <- input$CntMin/60
if (input$prec == "1") {
EMin <- input$EMin
SmpHrKM2 <- input$nCnt*CntHr*CntKM2
} else {
EMin <- -1
SmpHrKM2 <- 1
}
if (input$pcmm == "1") {
EOutMin <- FatEst(input$carcasses,input$FatEfficiency,input$FatRemoval)
CprHrKM2 <- (input$PCMMsurveys*input$PCMMhrs)*HazKM2/input$nTurbine*input$Oprate
} else {
EOutMin <- -1
CprHrKM2 <- 1
}
ExpFac <- input$DayLtHr*HazKM2*input$Oprate
UCI <- c(0.5,0.8,0.9,0.95)
nSim <- 100000
setnsims(nSim)
Fatalities <- simFatalCPr(EMin, EOutMin, SmpHrKM2, CprHrKM2, ExpFac, CPrPriors = input$CPrPriors, aPriExp = 0.9776543, bPriExp = 2.777427, aPriCPr = input$aPriCPr, bPriCPr = input$bPriCPr)
return(Fatalities)
})
output$value <- renderText({
req(Fatalities())
estimate<-rvquantile(Fatalities(),probs=(input$percentile/100))
fiveyear<-ceiling(estimate*5)
return(paste0("Project name: ",input$cProject,"\nModeled by: ",input$Name,"\nDate: ",date(),"\nThe ",input$percentile,"th percentile estimate is ",round(estimate,3)," eagle fatalities annually.\nThe five-year fatality estimate is:",fiveyear))
})
output$fatalPlot <- renderPlot({
req(Fatalities())
plotFatal(Fatalities(), probs = input$percentile/100)
})
}
#' @title Eagle Model GUI
#' @author Joe Statwick (Arcadis)
#'
#' @description A graphical user interface for calculating the estimated number of annual eagle fatalities at a wind power facility. For more flexibility of data inputs (at the cost of user-friendliness) try EagleModel() instead.
#' @seealso EagleModel()
#' @export
#' @import shiny
#' @import rv
# Run the application via function
EagleModelGUI<-function(){
shinyApp(ui = EagleModelui, server = EagleModelserver)}
#run the application via Rstudio
shinyApp(ui = EagleModelui, server = EagleModelserver)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.