You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

#### 100 lines 3.0 KiB Raw Permalink Blame History

 # # This is a Shiny web application. You can run the application by clicking # the 'Run App' button above. # library(shiny) library(photoec) library(common) # using: roundup() library(dplyr) library(ggplot2) TemperatureSlideLimits <- c(1000, 9000) TemperaturePreset <- 5778 wavelength <- # all values below in meters seq(from = 1E-9, # 1 nm to = 5E-6, # 5000 nm by = 1E-9) # Define UI for application that draws a histogram ui <- fluidPage( # Application title titlePanel("Black body radiation"), withMathJax(), markdown(" Spectral radiance of a black body as defined by Planck's law: $$I\\left(\\lambda, T\\right) = \\frac{2{\\pi}hc^2}{\\lambda^5}\\frac{1}{\\exp\\left(\\displaystyle\\frac{hc}{{\\lambda}kT}\\right) - 1}$$ where \$$h\$$ is the Planck constant, \$$c\$$ is the speed of light, and \$$k\$$ is the Boltzmann constant. **Explore the behaviour of the spectral radiance by manipulating the black body temperature using the slider below!** "), # Sidebar with a slider input for black body temperature sidebarLayout( sidebarPanel( sliderInput("TemperatureVar", "Black body temperature, T/K:", min = min(TemperatureSlideLimits), max = max(TemperatureSlideLimits), value = TemperaturePreset) ), # Show a plot of the spectral irradiance curve mainPanel( plotOutput("PlanckPlot") ) ), markdown(" The wavelength of the irradiance maximum is labelled inside the plot. [Source code repository and issue tracker](https://codeberg.org/solarchemist/black-body-by-temperature), please use it to report bugs or suggestions! ") ) # Define server logic required to draw the Planck distribution server <- function(input, output) { output$PlanckPlot <- renderPlot({ blackbody <- cbind( photoec::sunlight.Planck(wavelength = wavelength, temperature = input$TemperatureVar), Temperature = input$TemperatureVar) # find the wavelength of the maximum irradiance at this temperature blackbody$WavelengthOfMaxIrradiance <- blackbody$wavelength[which.max(blackbody$Sun.spectralradiance)] p <- ggplot(blackbody) + geom_path(aes(wavelength, Sun.spectralradiance)) + geom_text( vjust = 0, hjust = 0.5, aes( label = paste(1E9 * unique(WavelengthOfMaxIrradiance), "nm"), y = max(Sun.spectralradiance), x = unique(WavelengthOfMaxIrradiance))) + # scale_x_log10() + # scale_y_log10() + # scale_y_sqrt() + # coord_cartesian(ylim = c(0, 8E14), # xlim = c(0, 5E-6)) + scale_x_continuous(labels = c(0, 1000, 2000, 3000, 4000, 5000)) + labs( x = "Wavelength/nm", y = "Spectral irradiance/(W/m2/m)") print(p) }) } # Run the application shinyApp(ui = ui, server = server)