Added functions for converting to/from wavelength and wavenumbers.
parent
e2d0d21236
commit
c00fcc54a9
@ -0,0 +1,26 @@
|
|||||||
|
##################################################
|
||||||
|
################## CountRods #####################
|
||||||
|
##################################################
|
||||||
|
CountRods <- function() {
|
||||||
|
## Description:
|
||||||
|
##
|
||||||
|
## Usage:
|
||||||
|
##
|
||||||
|
## Arguments:
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
## Return value:
|
||||||
|
##
|
||||||
|
#
|
||||||
|
|
||||||
|
return()
|
||||||
|
}
|
@ -1,13 +1,16 @@
|
|||||||
##################################################
|
##################################################
|
||||||
#################### eV2nm #######################
|
#################### eV2nm #######################
|
||||||
##################################################
|
##################################################
|
||||||
|
source(HomeByHost("/home/taha/chepec/chetex/common/R/sunlight/solarconstants.R"))
|
||||||
|
|
||||||
eV2nm <- function(eV) {
|
eV2nm <- function(eV) {
|
||||||
# Converts energy in eV to wavelength in nm
|
# Converts energy in eV to wavelength in nm
|
||||||
#
|
#
|
||||||
# Define some constants needed for the calculations
|
sun.constants <- solar.constants()
|
||||||
Plancks.constant <- 4.135667516E-15 # \electron\volt\per\second
|
|
||||||
speed.of.light <- 299792458 # \meter\per\second
|
nm <-
|
||||||
|
sun.constants["h.eV", "value"] *
|
||||||
|
1E9 * sun.constants["c", "value"] / eV
|
||||||
|
|
||||||
nm <- Plancks.constant * 1E9 * speed.of.light / eV
|
|
||||||
return(nm)
|
return(nm)
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
##################################################
|
##################################################
|
||||||
#################### nm2eV #######################
|
#################### nm2eV #######################
|
||||||
##################################################
|
##################################################
|
||||||
|
source(HomeByHost("/home/taha/chepec/chetex/common/R/sunlight/solarconstants.R"))
|
||||||
|
|
||||||
nm2eV <- function(nm) {
|
nm2eV <- function(nm) {
|
||||||
# Converts wavelength in nm to energy in eV
|
# Converts wavelength in nm to energy in eV
|
||||||
#
|
#
|
||||||
# Define some constants needed for the calculations
|
sun.constants <- solar.constants()
|
||||||
Plancks.constant <- 4.135667516E-15 # \electron\volt\per\second
|
|
||||||
speed.of.light <- 299792458 # \meter\per\second
|
eV <-
|
||||||
|
sun.constants["h.eV", "value"] *
|
||||||
|
1E9 * sun.constants["c", "value"] / nm
|
||||||
|
|
||||||
eV <- Plancks.constant * 1E9 * speed.of.light / nm
|
|
||||||
return(eV)
|
return(eV)
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,81 @@
|
|||||||
|
# Writing number with exponent (such as scientific notation) with uncertainty using siunitx
|
||||||
|
|
||||||
|
# Origin of problem, this kind of code:
|
||||||
|
# \SI[separate-uncertainty=true]{\Sexpr{formatC(cd.flux, format = "e", digits = 2)} \pm \Sexpr{formatC(cd.flux.error, format = "e", digits = 2)}}{\milli\coulomb\per\square\cm\per\second}
|
||||||
|
# makes siunitx throw the error:
|
||||||
|
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
# !
|
||||||
|
# ! siunitx error: "misplaced-sign-token"
|
||||||
|
# !
|
||||||
|
# ! Misplaced sign token '\pm '.
|
||||||
|
# !
|
||||||
|
# ! See the siunitx documentation for further information.
|
||||||
|
# !
|
||||||
|
# ! For immediate help type H <return>.
|
||||||
|
# !...............................................
|
||||||
|
|
||||||
|
|
||||||
|
# This is status-by-design according to Joseph Wright.
|
||||||
|
# http://tex.stackexchange.com/questions/123771/exponent-notation-in-siunitx
|
||||||
|
|
||||||
|
# But if the two numbers (number and uncertainty) have the same exponent, that is ok.
|
||||||
|
# So here we try to write a function that accepts two numbers,
|
||||||
|
# and returns them written in a common exponent (as strings).
|
||||||
|
|
||||||
|
siunitx.uncertainty <- function(quantity, uncertainty, digits = 6) {
|
||||||
|
# both arguments should be numeric
|
||||||
|
|
||||||
|
# how to find common exponent for two numbers?
|
||||||
|
|
||||||
|
# find exponent of quantity (tiopotensen for kvantiteten)
|
||||||
|
quantity.exponent <- floor(log(abs(quantity), 10))
|
||||||
|
|
||||||
|
# find coefficient of quantity
|
||||||
|
# warning, numeric-to-string-to-numeric conversion ...
|
||||||
|
quantity.coefficient <-
|
||||||
|
as.numeric(strsplit(formatC(quantity, format="e", digits=digits), "[Ee]-")[[1]][1])
|
||||||
|
|
||||||
|
# construct return quantity string
|
||||||
|
rquantity.string <-
|
||||||
|
paste0(formatC(quantity.coefficient, format="f", digits=digits), "e", quantity.exponent)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# find exponent of uncertainty (tiopotensen for the uncertainty)
|
||||||
|
uncertainty.exponent <- floor(log(abs(uncertainty), 10))
|
||||||
|
|
||||||
|
# find coefficient of uncertainty
|
||||||
|
# warning, numeric-to-string-to-numeric conversion ...
|
||||||
|
uncertainty.coefficient <-
|
||||||
|
as.numeric(strsplit(formatC(uncertainty, format="e", digits=digits), "[Ee]-")[[1]][1])
|
||||||
|
|
||||||
|
# adjust uncertainty to the same exponent as the quantity
|
||||||
|
# express uncertainty with the same exponent as quantity
|
||||||
|
# (adjust number of uncertainty accordingly)
|
||||||
|
runcertainty.exponent <- quantity.exponent
|
||||||
|
runcertainty.coefficient <- uncertainty.coefficient * 10^(uncertainty.exponent - quantity.exponent)
|
||||||
|
|
||||||
|
runcertainty.string <-
|
||||||
|
paste0(formatC(runcertainty.coefficient, format="f", digits=digits), "e", runcertainty.exponent)
|
||||||
|
|
||||||
|
|
||||||
|
# create a string directly suitable for the siunitx \num{} command
|
||||||
|
siunitx.string <- paste(quantity.coefficient, "\\pm", runcertainty.string)
|
||||||
|
|
||||||
|
return(c(quantity = rquantity.string,
|
||||||
|
uncertainty = runcertainty.string,
|
||||||
|
siunitx = siunitx.string))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,13 @@
|
|||||||
|
##################################################
|
||||||
|
################ wavelength2num ##################
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
wavelength2num <- function(wavelength) {
|
||||||
|
# Converts wavelength (nm) to wavenumber (cm-1)
|
||||||
|
# Only valid for absolute wavelengths,
|
||||||
|
# NOT delta wavelengths (ranges)
|
||||||
|
# http://www.powerstream.com/inverse-cm.htm
|
||||||
|
wavenumber <-
|
||||||
|
10E6 / wavelength
|
||||||
|
return(wavenumber)
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
##################################################
|
||||||
|
################ wavenum2length ##################
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
wavenum2length <- function(wavenumber) {
|
||||||
|
# Converts wavenumber (cm-1) to wavelength (nm)
|
||||||
|
# Only valid for absolute wavenumbers,
|
||||||
|
# NOT delta wavenumbers (ranges)
|
||||||
|
# http://www.powerstream.com/inverse-cm.htm
|
||||||
|
wavelength <-
|
||||||
|
10E6 / wavenumber
|
||||||
|
return(wavelength)
|
||||||
|
}
|
Loading…
Reference in New Issue