Click on “Code” symbols to unfold code (folded by
default).
require(ggplot2)
require(grid)
require(gridExtra)
require(gganimate)
require(plotly)
require(lubridate)
require(colorRamps)
require(lmodel2)
require(broom)
require(pander)
source("selSessionRefs.R")
#Certified
load("/home/alobo/owncloudRSpect/RSpect/RefMCAA01.rda")
#load("C:/Users/Specim/ownCloud/RSpect/RefMCAA01.rda")
4. Accuracy of Reflectance readings (20230216 data) compared to
other instruments
We compare reflectance spectra of a standard reflectance target
(Labsphere WCS-MC-020) acquired with the following instruments:
- Cubert Firefleye S185 SE
- Specim IQ
- Specim FX10
- Specim FX17
- SpectroRasp (SpR), in-house integration of
- STS-VIS (350 - 800 nm)
- NIR QUEST (900-2500 nm)
- Raspberry Pi 3
Particularly at the deepest absorption features (eg. 1260 nm), there
is a significant difference between SpectroRasp NIRQUEST reflectance
measurements and the certified values. In comparison, Specim FX17
readings are more accurate.
#fdir <- "../time_measures20230102"
fdir <- "../Testdist_20230206"
lista <- data.frame(fname=list.files(fdir, patt=glob2rx("*.txt")), fdir=fdir)
listasel <- lista[c(1,7),]
selRefs <- selSessionRefs(selflist=listasel)
selRefs$sample[selRefs$sample=="Ref_1"] <- "Initial"
selRefs$sample[selRefs$sample=="Ref_2"] <- "Final"
#Specim FX17 (see SdRef_Certif_FX17_SpR-SPR0_log.R)
#dirFX17Ref <- "/media/alobo/DecepNTFS2/Decepcion/Lapilli/DI61_graineffect/DRXDI61/FX17/FX17Spectra"
dirFX17Ref <- "../../DI61_graineffect_DRDXI61_FX17Spectra"
RefFX17 <- read.csv(file.path(dirFX17Ref,"Ref_FX17refl.csv"))
#head(RefFX17)
names(RefFX17)[4:5] <- c("Reflectance", "s")
RefFX17$sample <- "RefFX17"
#selRefs[1,]
#RefFX17[1,]
RefFX17$sample <- "FX17"
RefMCAA01$sample <- "Certification"
#Specim FX10 (see HSIsystems_comp.Rmd)
dirFX10 <- "../../miRPubs"
RefFX10 <- read.csv(file.path(dirFX10, "FX10_Sant_Finx_big_2019-06-11_14-01-10.csv"))
RefFX10 <- RefFX10[RefFX10$Sample == "WCS-MC-020",]
RefFX10$sample <- "FX10"
#Specim IQ (see HSIsystems_comp.Rmd)
dirIQ <- "../../miRPubs"
RefIQ <- read.csv(file.path(dirIQ,"IQ_20220914-018_ReflRefMCA.csv" ))
RefIQ <- RefIQ[RefIQ$Sample == "WCS-MC-020",]
RefIQ$sample <- "IQ"
a <- rbind(selRefs[,1:3],RefIQ[,c(7,2,4)],RefFX10[,c(7,2,4)], RefFX17[,c(1,3,4)],RefMCAA01[,c(4,1,3)])
names(a)[1] <- "Instrument"
#a[1,]
a$Instrument[a$Instrument=="Initial"] <- "SpR_initial"
a$Instrument[a$Instrument=="Final"] <- "SpR_final"
#time dif. ~11'
#table(a$Instrument)
micol <- c("Certification"="grey", "IQ"= "darkred","FX10"="navy","FX17"="blue", "SpR_initial"="darkgreen", "SpR_final"="green")
ggRefRefl <- ggplot(data=a,aes(x=Wavelength, y=Reflectance)) +
geom_point(alpha=0.5, size=0.5,aes(group=Instrument,color=Instrument)) +
geom_line (alpha=0.5, linewidth=0.5, aes(group=Instrument, color=Instrument)) +
geom_line(data=RefMCAA01, aes(x=Wavelength, y=Reflectance),col="grey") +
geom_point(data=RefMCAA01, aes(x=Wavelength, y=Reflectance),size=0.5, col="grey") +
xlim(c(400, 2600)) +
scale_color_manual(values=micol) +
theme(legend.position="bottom") +
ggtitle("Reflectance of Standard Target with different Instruments")
#print(ggRefRefl)
ggplotly(ggRefRefl) %>%
layout(legend = list(orientation = "h", x = 0.02, y = 0.1))
LS0tCnRpdGxlOiAiQWNjdXJhY3kgb2YgU3BlY3Ryb1Jhc3Agc3BlY3RyYSAiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBmaWdfY2FwdGlvbjogVFJVRQotLS0KCi0gICBbQWd1c3Rpbi5Mb2JvXEBnZW8zYmNuLmNzaWMuZXNdKG1haWx0bzpBZ3VzdGluLkxvYm9AZ2VvM2Jjbi5jc2ljLmVzKXsuZW1haWx9Ci0gICAyMDIzMDMwNgoKKkNsaWNrIG9uICJDb2RlIiBzeW1ib2xzIHRvIHVuZm9sZCBjb2RlIChmb2xkZWQgYnkgZGVmYXVsdCkuKgoKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnJlcXVpcmUoZ2dwbG90MikKcmVxdWlyZShncmlkKQpyZXF1aXJlKGdyaWRFeHRyYSkKcmVxdWlyZShnZ2FuaW1hdGUpCnJlcXVpcmUocGxvdGx5KQpyZXF1aXJlKGx1YnJpZGF0ZSkKcmVxdWlyZShjb2xvclJhbXBzKQpyZXF1aXJlKGxtb2RlbDIpCnJlcXVpcmUoYnJvb20pCnJlcXVpcmUocGFuZGVyKQpzb3VyY2UoInNlbFNlc3Npb25SZWZzLlIiKQojQ2VydGlmaWVkCmxvYWQoIi9ob21lL2Fsb2JvL293bmNsb3VkUlNwZWN0L1JTcGVjdC9SZWZNQ0FBMDEucmRhIikKI2xvYWQoIkM6L1VzZXJzL1NwZWNpbS9vd25DbG91ZC9SU3BlY3QvUmVmTUNBQTAxLnJkYSIpCmBgYAoKCiMjIDQuIEFjY3VyYWN5IG9mIFJlZmxlY3RhbmNlIHJlYWRpbmdzICgyMDIzMDIxNiBkYXRhKSBjb21wYXJlZCB0byBvdGhlciBpbnN0cnVtZW50cwoKV2UgY29tcGFyZSByZWZsZWN0YW5jZSBzcGVjdHJhIG9mIGEgc3RhbmRhcmQgcmVmbGVjdGFuY2UgdGFyZ2V0IChMYWJzcGhlcmUgV0NTLU1DLTAyMCkgYWNxdWlyZWQgd2l0aCB0aGUgZm9sbG93aW5nIGluc3RydW1lbnRzOgogCiogQ3ViZXJ0IEZpcmVmbGV5ZSBTMTg1IFNFIAoqIFNwZWNpbSBJUSAgCiogU3BlY2ltIEZYMTAgCiogU3BlY2ltIEZYMTcKKiBTcGVjdHJvUmFzcCAoU3BSKSwgaW4taG91c2UgaW50ZWdyYXRpb24gb2YKICAqIFNUUy1WSVMgKDM1MCAtIDgwMCBubSkKICAqIE5JUiBRVUVTVCAoOTAwLTI1MDAgbm0pCiAgKiBSYXNwYmVycnkgUGkgMwoKUGFydGljdWxhcmx5IGF0IHRoZSBkZWVwZXN0IGFic29ycHRpb24gZmVhdHVyZXMgKGVnLiAxMjYwIG5tKSwgdGhlcmUgaXMgYSBzaWduaWZpY2FudCBkaWZmZXJlbmNlIGJldHdlZW4gU3BlY3Ryb1Jhc3AgTklSUVVFU1QgcmVmbGVjdGFuY2UgbWVhc3VyZW1lbnRzIGFuZCB0aGUgY2VydGlmaWVkIHZhbHVlcy4gSW4gY29tcGFyaXNvbiwgU3BlY2ltIEZYMTcgcmVhZGluZ3MgYXJlIG1vcmUgYWNjdXJhdGUuCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCAgZmlnLndpZHRoPTEyLCBmaWcuaGVpZ2h0PTh9CiNmZGlyIDwtICIuLi90aW1lX21lYXN1cmVzMjAyMzAxMDIiCmZkaXIgPC0gIi4uL1Rlc3RkaXN0XzIwMjMwMjA2IgpsaXN0YSA8LSBkYXRhLmZyYW1lKGZuYW1lPWxpc3QuZmlsZXMoZmRpciwgcGF0dD1nbG9iMnJ4KCIqLnR4dCIpKSwgZmRpcj1mZGlyKQpsaXN0YXNlbCA8LSBsaXN0YVtjKDEsNyksXQpzZWxSZWZzIDwtIHNlbFNlc3Npb25SZWZzKHNlbGZsaXN0PWxpc3Rhc2VsKQpzZWxSZWZzJHNhbXBsZVtzZWxSZWZzJHNhbXBsZT09IlJlZl8xIl0gPC0gIkluaXRpYWwiIApzZWxSZWZzJHNhbXBsZVtzZWxSZWZzJHNhbXBsZT09IlJlZl8yIl0gPC0gIkZpbmFsIiAKCiNTcGVjaW0gRlgxNyAoc2VlIFNkUmVmX0NlcnRpZl9GWDE3X1NwUi1TUFIwX2xvZy5SKQojZGlyRlgxN1JlZiA8LSAiL21lZGlhL2Fsb2JvL0RlY2VwTlRGUzIvRGVjZXBjaW9uL0xhcGlsbGkvREk2MV9ncmFpbmVmZmVjdC9EUlhESTYxL0ZYMTcvRlgxN1NwZWN0cmEiCmRpckZYMTdSZWYgPC0gIi4uLy4uL0RJNjFfZ3JhaW5lZmZlY3RfRFJEWEk2MV9GWDE3U3BlY3RyYSIKUmVmRlgxNyA8LSByZWFkLmNzdihmaWxlLnBhdGgoZGlyRlgxN1JlZiwiUmVmX0ZYMTdyZWZsLmNzdiIpKQojaGVhZChSZWZGWDE3KQpuYW1lcyhSZWZGWDE3KVs0OjVdIDwtIGMoIlJlZmxlY3RhbmNlIiwgInMiKQpSZWZGWDE3JHNhbXBsZSA8LSAiUmVmRlgxNyIKI3NlbFJlZnNbMSxdCiNSZWZGWDE3WzEsXQpSZWZGWDE3JHNhbXBsZSA8LSAiRlgxNyIKUmVmTUNBQTAxJHNhbXBsZSA8LSAiQ2VydGlmaWNhdGlvbiIKCiNTcGVjaW0gRlgxMCAoc2VlIEhTSXN5c3RlbXNfY29tcC5SbWQpCmRpckZYMTAgPC0gIi4uLy4uL21pUlB1YnMiClJlZkZYMTAgPC0gcmVhZC5jc3YoZmlsZS5wYXRoKGRpckZYMTAsICJGWDEwX1NhbnRfRmlueF9iaWdfMjAxOS0wNi0xMV8xNC0wMS0xMC5jc3YiKSkKUmVmRlgxMCA8LSBSZWZGWDEwW1JlZkZYMTAkU2FtcGxlID09ICJXQ1MtTUMtMDIwIixdClJlZkZYMTAkc2FtcGxlIDwtICJGWDEwIgoKI1NwZWNpbSBJUSAoc2VlIEhTSXN5c3RlbXNfY29tcC5SbWQpCmRpcklRIDwtICIuLi8uLi9taVJQdWJzIgpSZWZJUSA8LSByZWFkLmNzdihmaWxlLnBhdGgoZGlySVEsIklRXzIwMjIwOTE0LTAxOF9SZWZsUmVmTUNBLmNzdiIgKSkKUmVmSVEgPC0gUmVmSVFbUmVmSVEkU2FtcGxlID09ICJXQ1MtTUMtMDIwIixdClJlZklRJHNhbXBsZSA8LSAiSVEiCgphIDwtIHJiaW5kKHNlbFJlZnNbLDE6M10sUmVmSVFbLGMoNywyLDQpXSxSZWZGWDEwWyxjKDcsMiw0KV0sIFJlZkZYMTdbLGMoMSwzLDQpXSxSZWZNQ0FBMDFbLGMoNCwxLDMpXSkKbmFtZXMoYSlbMV0gPC0gIkluc3RydW1lbnQiCiNhWzEsXQphJEluc3RydW1lbnRbYSRJbnN0cnVtZW50PT0iSW5pdGlhbCJdIDwtICJTcFJfaW5pdGlhbCIKYSRJbnN0cnVtZW50W2EkSW5zdHJ1bWVudD09IkZpbmFsIl0gPC0gIlNwUl9maW5hbCIKI3RpbWUgZGlmLiB+MTEnCiN0YWJsZShhJEluc3RydW1lbnQpCm1pY29sIDwtIGMoIkNlcnRpZmljYXRpb24iPSJncmV5IiwgIklRIj0gImRhcmtyZWQiLCJGWDEwIj0ibmF2eSIsIkZYMTciPSJibHVlIiwgIlNwUl9pbml0aWFsIj0iZGFya2dyZWVuIiwgIlNwUl9maW5hbCI9ImdyZWVuIikKCgpnZ1JlZlJlZmwgPC0gZ2dwbG90KGRhdGE9YSxhZXMoeD1XYXZlbGVuZ3RoLCB5PVJlZmxlY3RhbmNlKSkgKwogIGdlb21fcG9pbnQoYWxwaGE9MC41LCBzaXplPTAuNSxhZXMoZ3JvdXA9SW5zdHJ1bWVudCxjb2xvcj1JbnN0cnVtZW50KSkgKwogIGdlb21fbGluZSAoYWxwaGE9MC41LCBsaW5ld2lkdGg9MC41LCBhZXMoZ3JvdXA9SW5zdHJ1bWVudCwgY29sb3I9SW5zdHJ1bWVudCkpICsKICBnZW9tX2xpbmUoZGF0YT1SZWZNQ0FBMDEsIGFlcyh4PVdhdmVsZW5ndGgsIHk9UmVmbGVjdGFuY2UpLGNvbD0iZ3JleSIpICsKICBnZW9tX3BvaW50KGRhdGE9UmVmTUNBQTAxLCBhZXMoeD1XYXZlbGVuZ3RoLCB5PVJlZmxlY3RhbmNlKSxzaXplPTAuNSwgY29sPSJncmV5IikgKwogIHhsaW0oYyg0MDAsIDI2MDApKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1taWNvbCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0iYm90dG9tIikgKwogIGdndGl0bGUoIlJlZmxlY3RhbmNlIG9mIFN0YW5kYXJkIFRhcmdldCB3aXRoIGRpZmZlcmVudCBJbnN0cnVtZW50cyIpCiNwcmludChnZ1JlZlJlZmwpCgpnZ3Bsb3RseShnZ1JlZlJlZmwpICAlPiUKICBsYXlvdXQobGVnZW5kID0gbGlzdChvcmllbnRhdGlvbiA9ICJoIiwgeCA9IDAuMDIsIHkgPSAwLjEpKQpgYGAKCgoK