# R functions (see )
# readCgats v3
readCgats <- function(file, dec=".") {
tmp <- scan(file, n=2000, what="character", comment.char="#", quiet = TRUE)
tmp2 <- charmatch(c("BEGIN_DATA_FORMAT", "NUMBER_OF_FIELDS", "NUMBER_OF_SETS","END_DATA_FORMAT"), tmp)
bdf <- tmp2[1]+1
edf <- as.integer(tmp[tmp2[2]+1])+bdf-1
if(!is.finite(edf)) {
edf <- tmp2[4]-1}
dataformat <- tmp[bdf:edf]
nos <- as.integer(tmp[tmp2[3]+1])
tmp <- scan(file,n=500, what="character", sep="\n", blank.lines.skip = FALSE, quiet = TRUE)
skiplines <- grep("BEGIN_DATA[[:space:]]*$", tmp)
cgats <- read.table(file,dec = dec, col.names=dataformat, skip=skiplines, nrows=nos, header = FALSE)
}
# writeCgats v1
writeCgats <- function(dframe, file, id=FALSE, dec=".") {
if(id==TRUE) {
na <- c("SAMPLE_ID",names(dframe))
nc <- ncol(dframe)+1
} else {
na <- names(dframe)
nc <- ncol(dframe)
}
header <- list("R",
c("CREATED", paste("\"", format(Sys.time(), usetz = TRUE), "\"", sep="")),
c("NUMBER_OF_FIELDS", nc),
"BEGIN_DATA_FORMAT",
na,
"END_DATA_FORMAT",
c("NUMBER_OF_SETS", nrow(dframe)),
"BEGIN_DATA")
write(header[[1]],file, sep="\t")
for (i in 2:length(header))
write(header[[i]],file, sep="\t", ncolumns=1000,append=TRUE)
write.table(format(dframe, digits=5), file = file, append = TRUE, quote = FALSE, sep = "\t",
eol = "\n", na = "NA", dec = dec, row.names = id,
col.names = FALSE, qmethod = "escape")
write("END_DATA", file, append=TRUE)
}
# planck v1
# spektrale spezifische Ausstrahlung M des schwarzen Strahlers in W/m2/m
# lambda in nm
# T in Kelvin
planck <- function(lambda,T) {
lambda<-lambda*1e-9
c <- 299792458 # Lichtgeschwindingkeit m/s
h <- 6.62606896e-34 # Plancksches Wirkungsquantum Js
k <- 1.38065042e-23 # Boltzmannkonstante J/K
M <- 2*pi*h*c^2/(lambda)^5*1/(exp(h*c/(lambda*k*T))-1)
M
}
# end R functions
# R console:
p <- data.frame(t(planck(38:78*10,1000)))
for(x in seq(from=1100, to=10000,by=100)) {
q <- data.frame(t(planck(38:78*10,x)))
p <- rbind(p,q)
}
names(p) <- paste("nm",38:78*10, sep="")
rownames(p) <- paste(seq(from=1000, to=10000, by=100), "K", sep="")
p<-data.frame(RGB_R=0, RGB_G=0, RGB_B=0, p)
writeCgats(p, "planck_1-10kK.txt",id=TRUE)
# bash / argyllCMS (see ):
txt2ti3 -2 -d planck_1-10kK.txt planck_1-10kK
spec2cie planck_1-10kK.ti3 planck_1-10kK_s2c.ti3
# R console:
p2<-readCgats("planck_1-10kK_s2c.ti3")
p2$x<-p2$XYZ_X/(p2$XYZ_X+p2$XYZ_Y+p2$XYZ_Z)
p2$y<-p2$XYZ_Y/(p2$XYZ_X+p2$XYZ_Y+p2$XYZ_Z)
cie2deg<-read.table("cie2deg.table.txt",header=TRUE)
# CIE 1931 Std. observer extracted from CIE Excel file "Selected Colorimetric Tables"
#
#
# <./cie2deg.table.txt>
cie2deg$x<-cie2deg$xbar/(cie2deg$xbar+cie2deg$ybar+cie2deg$zbar)
cie2deg$y<-cie2deg$ybar/(cie2deg$xbar+cie2deg$ybar+cie2deg$zbar)
plot(cie2deg$x, cie2deg$y, asp=1, xlab="x", ylab="y", pch="x", col="blue", cex=0.5)
abline(h=0:8/10, v=0:8/10, col="gray")
lines(cie2deg$x, cie2deg$y)
lines(cie2deg[c(1,81),"x"], cie2deg[c(1,81),"y"])
text(cie2deg[c(1,20:50,81),"x"], cie2deg[c(1,20:50,81),"y"], labels=cie2deg[c(1,20:50,81),"lambda"], cex=0.5, pos=2, col="blue")
lines(p2$x,p2$y,col="red")
points(p2[c(11,21,31,41,51,71,91),"x"],p2[c(11,21,31,41,51,71,91),"y"], pch="x",cex=0.5)
text(x=p2[c(11,21,31,41,51,71,91),"x"],y=p2[c(11,21,31,41,51,71,91),"y"], labels=p2[c(11,21,31,41,51,71,91),"SAMPLE_NAME"], pos=2, cex=0.5)
# plot saved as blackbody_xy.pdf