knitr::opts_chunk$set(
  collapse = TRUE,
  warning = FALSE,
  comment = "#>"
)

Vignettes to show how to fit.

Setup

library(mlfilms)

my_layers <- list(index = 0.13 + 4i,
                  thickness =  45e-9)

my_plasmon <- angle_scan(my_layers, incident_medium.index = 1.5+0i)
my_plasmon$Reflection <- my_plasmon$Reflection + rnorm(500,,0.01)

plot(x = my_plasmon$angle, 
     y = my_plasmon$Reflection, 
     type = 'b', xlab = "angle (degrees)", ylab = "Reflection", pch = 16)

Fitting Function

my_fit_function <- function(x){

  layers <- list(index = x[1] + x[2]*1i,
                    thickness =  x[3]*1e-9)

  result <- angle_scan(layers, incident_medium.index = 1.5 + 0i)

  return(mean((my_plasmon$Reflection - result$Reflection)^2))

}

Optim

guess <- optim(par = c(runif(1,0,2), runif(1,1,7.5), runif(1,10,100)),
               fn = my_fit_function)

print(guess)

Check & Plot

guess_layers <- list(index = guess$par[1] + guess$par[2]*1i,
                     thickness =  guess$par[3]*1e-9)
guess_plasmon <- angle_scan(guess_layers,incident_medium.index = 1.5+0i)
plot(x = my_plasmon$angle, 
     y = my_plasmon$Reflection, 
     xlab = "angle (degrees)", ylab = "Reflection", pch = 16)
lines(x = my_plasmon$angle,
      y = guess_plasmon$Reflection, 
      col = 'red', lwd = 2)
legend(10,0.3, 
       legend = c("data", "fit"), 
       pch = c(16,NA), lty = c(NA,1), lwd = 2, col = 1:2)


tjconstant/mlfilms documentation built on April 25, 2020, 3:24 p.m.