R/findPeaks.r

##' @param intensity
##' @param wavelength
##' @param slice
##' @param 1.2
##' @param length

##' @return ...

findPeaks <- function(intensity, wavelength, slice=seq(0.8, 1.2, length=10)*mean(wavelength),
                      threshold = NULL, ...){

  slices.index <- sapply(slice, function(x) which.min(abs(x - wavelength)))

  if(length(slices.index) == 1)
  avg.slice <- intensity[slices.index, ] else
  avg.slice <- colMeans(intensity[slices.index, ])
  avg.slice <- avg.slice - min(avg.slice)
  avg.slice <- avg.slice / max(avg.slice)
  pixels <- seq(1, ncol(intensity))
  if(is.null(threshold))
    threshold <- max(avg.slice)/20
  par(new = TRUE)
  plot(pixels, avg.slice, type = "n", xlab = "px", 
       ylab = "Intensity [a.u]", ylim = c(0, max(avg.slice)))
  lines(pixels, avg.slice)
  
  peaks <- isPeak(cbind(pixels, avg.slice), SoN=3, area.w = 1e-1, span = 101, sm.span = 11, 
                  add = TRUE, plot = TRUE, zerothrsh = threshold, ratio = 1e-4)
  
  peakPositions <- which(peaks$peak == "TRUE")

}


##' @param intensity
##' @param wavelength
##' @param peaks
##' @param window
##' @param ...

##' @return ...
extract.spectra <- function(intensity, wavelength, peaks, window=10, ...){

  lapply(peaks, function(peak)
         data.frame(wavelength=wavelength, intensity=rowMeans(intensity[, seq(peak-window, peak+window)]) ))

}

Try the spectro package in your browser

Any scripts or data that you put into this service are public.

spectro documentation built on May 2, 2019, 4:45 p.m.